aboutsummaryrefslogtreecommitdiff
path: root/build2/test/script/lexer.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-10-13 13:08:31 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-11-04 08:29:23 +0200
commit5381b25c51475c0c7a2f39e9f6efa623f621ef3e (patch)
tree634110f6d81fea2d67f13564a26030f088c154bc /build2/test/script/lexer.cxx
parent18ce15f3aee71debe3f35356c6a739943815da8a (diff)
Continue work on testscript parser
Diffstat (limited to 'build2/test/script/lexer.cxx')
-rw-r--r--build2/test/script/lexer.cxx28
1 files changed, 19 insertions, 9 deletions
diff --git a/build2/test/script/lexer.cxx b/build2/test/script/lexer.cxx
index 84be7c1..e0a3272 100644
--- a/build2/test/script/lexer.cxx
+++ b/build2/test/script/lexer.cxx
@@ -25,24 +25,24 @@ namespace build2
{
case lexer_mode::script_line:
{
- s1 = "=+!|&<> $()#\t\n";
- s2 = " == ";
+ s1 = "=+!|&<> $(#\t\n";
+ s2 = " == ";
break;
}
case lexer_mode::variable_line:
{
// Like value except we don't recognize {.
//
- s1 = " $()[]#\t\n";
- s2 = " ";
+ s1 = " $([]#\t\n";
+ s2 = " ";
break;
}
case lexer_mode::test_line:
{
// As script_line but without variable assignments.
//
- s1 = "=!|&<> $()#\t\n";
- s2 = "== ";
+ s1 = "=!|&<> $(#\t\n";
+ s2 = "== ";
break;
}
case lexer_mode::command_line:
@@ -54,6 +54,16 @@ namespace build2
s = false;
break;
}
+ case lexer_mode::here_line:
+ {
+ // This one is like a double-quoted string except it treats
+ // newlines as a separator.
+ //
+ s1 = "$(\n";
+ s2 = " ";
+ s = false;
+ break;
+ }
case lexer_mode::single_quoted:
case lexer_mode::double_quoted:
quoted_ = true;
@@ -77,8 +87,9 @@ namespace build2
case lexer_mode::script_line:
case lexer_mode::variable_line:
case lexer_mode::test_line:
- case lexer_mode::command_line: return next_line ();
- default: return base_lexer::next_impl ();
+ case lexer_mode::command_line:
+ case lexer_mode::here_line: return next_line ();
+ default: return base_lexer::next_impl ();
}
}
@@ -110,7 +121,6 @@ namespace build2
//
case '$': return token (type::dollar, sep, ln, cn);
case '(': return token (type::lparen, sep, ln, cn);
- case ')': return token (type::rparen, sep, ln, cn);
}
}