aboutsummaryrefslogtreecommitdiff
path: root/build2
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-08-06 15:16:04 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-08-06 15:16:04 +0200
commit97ca7117735044673da6c89ee9dff544a3526f70 (patch)
treea32cc31de9e04a258d8701b4c573051a6924596b /build2
parentc20c3ad3141d88003245c6c7608e1f75c620e866 (diff)
Resolve if-else block ambiguity
Diffstat (limited to 'build2')
-rw-r--r--build2/parser.cxx14
1 files changed, 9 insertions, 5 deletions
diff --git a/build2/parser.cxx b/build2/parser.cxx
index 0c45e17..66af0a5 100644
--- a/build2/parser.cxx
+++ b/build2/parser.cxx
@@ -1396,13 +1396,17 @@ namespace build2
fail (t) << "expected newline instead of " << t << " after " << k
<< (k != "else" ? "-expression" : "");
- // This can be a block or a single line.
+ // This can be a block or a single line. The block part is a bit
+ // tricky, consider:
//
- if (next (t, tt) == type::lcbrace)
+ // else
+ // {hxx cxx}{options}: install = false
+ //
+ // So we treat it as a block if it's followed immediately by newline.
+ //
+ if (next (t, tt) == type::lcbrace && peek () == type::newline)
{
- if (next (t, tt) != type::newline)
- fail (t) << "expected newline after {";
-
+ next (t, tt); // Get newline.
next (t, tt);
if (take)