aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/function.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2019-08-22 14:38:57 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2019-08-23 18:14:07 +0200
commit5035f4ef68922ac758b1e4734e67d73c9228010b (patch)
tree271fdd5b1d6e995a058d97aacb3ac90a538d9ff1 /libbuild2/function.hxx
parent8793941652d6aa1c3d02b2f87f691e6d06254b7d (diff)
Introduce notion of build context
All non-const global state is now in class context and we can now have multiple independent builds going on at the same time.
Diffstat (limited to 'libbuild2/function.hxx')
-rw-r--r--libbuild2/function.hxx18
1 files changed, 11 insertions, 7 deletions
diff --git a/libbuild2/function.hxx b/libbuild2/function.hxx
index 51c17c0..bb3fe3a 100644
--- a/libbuild2/function.hxx
+++ b/libbuild2/function.hxx
@@ -216,7 +216,8 @@ namespace build2
map_type map_;
};
- LIBBUILD2_SYMEXPORT extern function_map functions;
+ LIBBUILD2_SYMEXPORT void
+ register_builtin_functions (function_map&);
class LIBBUILD2_SYMEXPORT function_family
{
@@ -237,9 +238,10 @@ namespace build2
// containing a leading dot is a shortcut notation for a qualified-only
// name.
//
- explicit
- function_family (string qual, function_impl* thunk = &default_thunk)
- : qual_ (qual), thunk_ (thunk) {}
+ function_family (function_map& map,
+ string qual,
+ function_impl* thunk = &default_thunk)
+ : map_ (map), qual_ (move (qual)), thunk_ (thunk) {}
struct entry;
@@ -247,13 +249,14 @@ namespace build2
operator[] (string name) const;
static bool
- defined (string qual)
+ defined (function_map& map, string qual)
{
qual += '.';
- return functions.defined (qual);
+ return map.defined (qual);
}
private:
+ function_map& map_;
const string qual_;
function_impl* thunk_;
};
@@ -744,6 +747,7 @@ namespace build2
struct LIBBUILD2_SYMEXPORT function_family::entry
{
+ function_map& map_;
string name;
const string& qual;
function_impl* thunk;
@@ -898,7 +902,7 @@ namespace build2
inline auto function_family::
operator[] (string name) const -> entry
{
- return entry {move (name), qual_, thunk_};
+ return entry {map_, move (name), qual_, thunk_};
}
}