From dfb1415d5eaf006ee45235f275d17f52d3db38e5 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Mon, 18 May 2020 12:06:16 +0300 Subject: Add dump(ostream,script::lines) (partial implementation) --- libbuild2/build/script/lexer.test.cxx | 2 +- libbuild2/build/script/parser+line.test.testscript | 39 ++++++++++++++++++++++ libbuild2/build/script/parser.test.cxx | 21 +++++++++--- libbuild2/build/script/token.cxx | 4 +-- libbuild2/build/script/token.hxx | 2 +- 5 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 libbuild2/build/script/parser+line.test.testscript (limited to 'libbuild2/build/script') diff --git a/libbuild2/build/script/lexer.test.cxx b/libbuild2/build/script/lexer.test.cxx index 15c0954..1c47442 100644 --- a/libbuild2/build/script/lexer.test.cxx +++ b/libbuild2/build/script/lexer.test.cxx @@ -55,7 +55,7 @@ namespace build2 { // Print each token on a separate line without quoting operators. // - t.printer (cout, t, false); + t.printer (cout, t, print_mode::normal); cout << endl; } } diff --git a/libbuild2/build/script/parser+line.test.testscript b/libbuild2/build/script/parser+line.test.testscript new file mode 100644 index 0000000..df4e77b --- /dev/null +++ b/libbuild2/build/script/parser+line.test.testscript @@ -0,0 +1,39 @@ +# file : libbuild2/build/script/parser+line.test.testscript +# license : MIT; see accompanying LICENSE file + +test.options += -d + +#\ +: if-else +: +$* <| + if foo + bar + elif fox + baz + end + if! foo + bar + elif! fox + baz + end + EOI + +: command +: +$* <| + foo >| 2>- &a &?b + foo >=c 2>~/error:.*/ &!c + foo >>:/~%EOF% + %.* + abc + %xyz.*% + EOF + EOI + +: quoting +: +$* <| + foo 'bar' "baz" '' "" + EOI +#\ diff --git a/libbuild2/build/script/parser.test.cxx b/libbuild2/build/script/parser.test.cxx index 2763464..77f6596 100644 --- a/libbuild2/build/script/parser.test.cxx +++ b/libbuild2/build/script/parser.test.cxx @@ -67,7 +67,10 @@ namespace build2 bool line_; }; - // Usage: argv[0] [-l] + // Usages: + // + // argv[0] [-l] + // argv[0] -d // int main (int argc, char* argv[]) @@ -86,6 +89,7 @@ namespace build2 context ctx (sched, mutexes); bool line (false); + bool dump (false); for (int i (1); i != argc; ++i) { @@ -93,10 +97,14 @@ namespace build2 if (a == "-l") line = true; + else if (a == "-d") + dump = true; else assert (false); } + assert (!dump || !line); + try { cin.exceptions (istream::failbit | istream::badbit); @@ -123,9 +131,14 @@ namespace build2 parser p (ctx); p.pre_parse (cin, nm, 11 /* line */, s); - environment e (s, tt); - print_runner r (line); - p.execute (e, r); + if (!dump) + { + environment e (s, tt); + print_runner r (line); + p.execute (e, r); + } + else + build2::script::dump (cout, "", s.lines); } catch (const failed&) { diff --git a/libbuild2/build/script/token.cxx b/libbuild2/build/script/token.cxx index 289dfd2..7c15dff 100644 --- a/libbuild2/build/script/token.cxx +++ b/libbuild2/build/script/token.cxx @@ -12,11 +12,11 @@ namespace build2 namespace script { void - token_printer (ostream& os, const token& t, bool d) + token_printer (ostream& os, const token& t, print_mode m) { // No build script-specific tokens so far. // - build2::script::token_printer (os, t, d); + build2::script::token_printer (os, t, m); } } } diff --git a/libbuild2/build/script/token.hxx b/libbuild2/build/script/token.hxx index 4cd90d7..90c1379 100644 --- a/libbuild2/build/script/token.hxx +++ b/libbuild2/build/script/token.hxx @@ -28,7 +28,7 @@ namespace build2 }; void - token_printer (ostream&, const token&, bool); + token_printer (ostream&, const token&, print_mode); } } } -- cgit v1.1