aboutsummaryrefslogtreecommitdiff
path: root/build2/parser.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-01-25 15:41:44 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-02-13 12:39:24 +0200
commit88f0780e34116c0441a8d8c58b8a8fd9fde4b1f5 (patch)
tree1240b36211772479dc1220712e0daed4e35ecd85 /build2/parser.cxx
parent61aa8e2b4bd7849838c04dc1f421c4760d88319f (diff)
Add model mutex, make var_pool const by default
Diffstat (limited to 'build2/parser.cxx')
-rw-r--r--build2/parser.cxx25
1 files changed, 16 insertions, 9 deletions
diff --git a/build2/parser.cxx b/build2/parser.cxx
index ec9d9e4..fe12b98 100644
--- a/build2/parser.cxx
+++ b/build2/parser.cxx
@@ -457,7 +457,8 @@ namespace build2
type att (tt);
const variable& var (
- var_pool.insert (parse_variable_name (move (pns), ploc)));
+ var_pool.rw (*scope_).insert (
+ parse_variable_name (move (pns), ploc)));
// Apply variable attributes.
//
@@ -725,7 +726,8 @@ namespace build2
if (tt == type::assign || tt == type::prepend || tt == type::append)
{
const variable& var (
- var_pool.insert (parse_variable_name (move (ns), nloc)));
+ var_pool.rw (*scope_).insert (
+ parse_variable_name (move (ns), nloc)));
// Apply variable attributes.
//
@@ -1049,9 +1051,10 @@ namespace build2
// Is this the 'foo=...' case?
//
size_t p (t.value.find ('='));
+ auto& vp (var_pool.rw (*scope_));
if (p != string::npos)
- var = &var_pool.insert (split (p));
+ var = &vp.insert (split (p));
//
// This could still be the 'foo =...' case.
//
@@ -1066,7 +1069,7 @@ namespace build2
(v[p = 0] == '=' ||
(n > 1 && v[0] == '+' && v[p = 1] == '=')))
{
- var = &var_pool[t.value];
+ var = &vp.insert (move (t.value));
next (t, tt); // Get the peeked token.
split (p); // Returned name should be empty.
}
@@ -1235,9 +1238,9 @@ namespace build2
assert (v.empty ()); // Module versioning not yet implemented.
if (boot_)
- boot_module (n, *root_, l);
+ boot_module (*root_, n, l);
else
- load_module (n, *root_, *scope_, l, optional);
+ load_module (*root_, *scope_, n, l, optional);
}
}
@@ -1503,8 +1506,12 @@ namespace build2
value& lhs (
kind == type::assign
- ? target_ != nullptr ? target_->assign (var) : scope_->assign (var)
- : target_ != nullptr ? target_->append (var) : scope_->append (var));
+ ? (target_ != nullptr
+ ? target_->assign (var)
+ : scope_->assign (var))
+ : (target_ != nullptr
+ ? target_->append (var)
+ : scope_->append (var)));
apply_value_attributes (&var, lhs, move (rhs), kind);
}
@@ -3491,7 +3498,7 @@ namespace build2
// Lookup.
//
- const auto& var (var_pool.insert (move (name)));
+ const auto& var (var_pool.rw (*scope_).insert (move (name)));
return target_ != nullptr ? (*target_)[var] : (*scope_)[var];
// Undefined/NULL namespace variables are not allowed.