From 45a0995457ceaf806970cf2a8e9f7001e3236ed4 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 20 Oct 2016 15:54:09 +0200 Subject: Fix pre-parsing corner cases --- build2/test/script/lexer.cxx | 6 +++--- unit-tests/test/script/parser/pre-parse.test | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 unit-tests/test/script/parser/pre-parse.test diff --git a/build2/test/script/lexer.cxx b/build2/test/script/lexer.cxx index d2657c6..01c93a4 100644 --- a/build2/test/script/lexer.cxx +++ b/build2/test/script/lexer.cxx @@ -15,7 +15,7 @@ namespace build2 using type = token_type; void lexer:: - mode (base_mode m, char) + mode (base_mode m, char ps) { const char* s1 (nullptr); const char* s2 (nullptr); @@ -69,9 +69,9 @@ namespace build2 } default: { - // Disable pair separator. + // Disable pair separator except for attributes. // - base_lexer::mode (m, '\0'); + base_lexer::mode (m, m != lexer_mode::attribute ? '\0' : ps); return; } } diff --git a/unit-tests/test/script/parser/pre-parse.test b/unit-tests/test/script/parser/pre-parse.test new file mode 100644 index 0000000..4057f9a --- /dev/null +++ b/unit-tests/test/script/parser/pre-parse.test @@ -0,0 +1,15 @@ +# attribute-pair +# +$* <>EOE != 0 +x = [foo=bar] +EOI +testscript:1:5: error: unknown value attribute foo=bar +EOE + +# attribute-pair-empty +# +$* <>EOE != 0 +x = [foo=] +EOI +testscript:1:5: error: unknown value attribute foo +EOE -- cgit v1.1