aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/script
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2022-10-14 16:06:35 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2022-10-14 17:30:12 +0300
commit63b5b6416c6bde16560eb9b83a9e3122599369d5 (patch)
tree82c0f624aedebf6917aeb4c9b6648f8cdb9d3fc1 /libbuild2/script
parentfbe94f38ee51e705202a2d5cf1f45b5e8a08d8c7 (diff)
Fix 'for [<attrs>] x: ...' to treat <attrs> as value attributes
Diffstat (limited to 'libbuild2/script')
-rw-r--r--libbuild2/script/parser.cxx9
-rw-r--r--libbuild2/script/parser.hxx1
2 files changed, 7 insertions, 3 deletions
diff --git a/libbuild2/script/parser.cxx b/libbuild2/script/parser.cxx
index a2e0819..87a51d8 100644
--- a/libbuild2/script/parser.cxx
+++ b/libbuild2/script/parser.cxx
@@ -2587,6 +2587,11 @@ namespace build2
next_with_attributes (t, tt);
attributes_push (t, tt);
+ // @@ TMP Currently we assume that these are the value (rather
+ // than the variable) attributes.
+ //
+ attributes val_attrs (attributes_pop ());
+
assert (tt == type::word && t.qtype == quote_type::unquoted);
string vn (move (t.value));
@@ -2604,8 +2609,6 @@ namespace build2
var = &var_pool->insert (move (vn));
}
- apply_variable_attributes (*var);
-
next (t, tt); // Skip the colon.
assert (tt == type::colon);
@@ -2664,7 +2667,7 @@ namespace build2
if (etype != nullptr)
typify (v, *etype, var);
- exec_for (*var, move (v), ll);
+ exec_for (*var, move (v), val_attrs, ll);
// Find the construct end, if it is not found yet.
//
diff --git a/libbuild2/script/parser.hxx b/libbuild2/script/parser.hxx
index c402d3e..91f50bf 100644
--- a/libbuild2/script/parser.hxx
+++ b/libbuild2/script/parser.hxx
@@ -202,6 +202,7 @@ namespace build2
using exec_for_function = void (const variable&,
value&&,
+ const attributes& value_attrs,
const location&);
// If a parser implementation doesn't pre-enter variables into a pool