diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2015-12-14 15:16:42 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2015-12-14 15:16:42 +0200 |
commit | f81a767e262309d47d4a0d521a7a2c12f0abad99 (patch) | |
tree | c25838883e12966bb2e7c5f9cc8f7e97c69921f7 | |
parent | b46902cc090a6f43c4be7955322ade9399a9f3d3 (diff) |
Fix bugs in keyword recognition logic
-rw-r--r-- | build/lexer.cxx | 6 | ||||
-rw-r--r-- | build/parser.cxx | 7 |
2 files changed, 6 insertions, 7 deletions
diff --git a/build/lexer.cxx b/build/lexer.cxx index 0835704..f6e34cb 100644 --- a/build/lexer.cxx +++ b/build/lexer.cxx @@ -351,7 +351,8 @@ namespace build bool lexer:: skip_spaces () { - bool r (false); + bool r (sep_); + sep_ = false; xchar c (peek ()); bool start (c.column == 1); @@ -407,9 +408,6 @@ namespace build get (); } - r = r || sep_; - sep_ = false; - return r; } diff --git a/build/parser.cxx b/build/parser.cxx index 1c8f4f6..e238628 100644 --- a/build/parser.cxx +++ b/build/parser.cxx @@ -1041,7 +1041,7 @@ namespace build { const string& n (t.value); - if (!t.quoted && (n == "else" || n == "elif" || n == "elif!")) + if (n == "else" || n == "elif" || n == "elif!") continue; } @@ -1806,7 +1806,7 @@ namespace build // potential keyword if: // // - it is not quoted [so a keyword can always be escaped] and - // - next token is eos or '(' [so if(...) will work] or + // - next token is '\n' (or eos) or '(' [so if(...) will work] or // - next token is separated and is not '=', '=+', or '+=' [which // means a "directive trailer" can never start with one of them]. // @@ -1820,7 +1820,8 @@ namespace build pair<char, bool> p (lexer_->peek_char ()); char c (p.first); - return c == '\0' || c == '(' || (p.second && c != '=' && c != '+'); + return c == '\n' || c == '\0' || c == '(' || + (p.second && c != '=' && c != '+'); } return false; |