aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/build/script
diff options
context:
space:
mode:
Diffstat (limited to 'libbuild2/build/script')
-rw-r--r--libbuild2/build/script/parser+diag.test.testscript36
-rw-r--r--libbuild2/build/script/parser.cxx6
-rw-r--r--libbuild2/build/script/parser.hxx9
3 files changed, 47 insertions, 4 deletions
diff --git a/libbuild2/build/script/parser+diag.test.testscript b/libbuild2/build/script/parser+diag.test.testscript
index 60683bc..5b4e64a 100644
--- a/libbuild2/build/script/parser+diag.test.testscript
+++ b/libbuild2/build/script/parser+diag.test.testscript
@@ -55,3 +55,39 @@ $* <<EOI >>~%EOO%
buildfile:12:1: info: previous call is here
EOE
}
+
+: inside-if
+:
+$* <<EOI 2>>EOE != 0
+ if true
+ diag copy >= $>
+ fi
+ EOI
+ buildfile:12:3: error: 'diag' call inside flow control construct
+ EOE
+
+: inside-if-cond
+:
+$* <<EOI 2>>EOE != 0
+ if diag copy >= $>
+ true
+ fi
+ EOI
+ buildfile:11:4: error: 'diag' call inside flow control construct
+ EOE
+
+: second-command
+:
+$* <<EOI 2>>EOE != 0
+ true && diag copy >= $>
+ EOI
+ buildfile:11:9: error: 'diag' call must be the only command
+ EOE
+
+: via-env
+:
+$* <<EOI 2>>EOE != 0
+ env -- diag copy >= $>
+ EOI
+ buildfile:11:8: error: 'diag' call via 'env' builtin
+ EOE
diff --git a/libbuild2/build/script/parser.cxx b/libbuild2/build/script/parser.cxx
index 2c41ac1..8f2c46d 100644
--- a/libbuild2/build/script/parser.cxx
+++ b/libbuild2/build/script/parser.cxx
@@ -330,6 +330,7 @@ namespace build2
optional<process_path> parser::
parse_program (token& t, build2::script::token_type& tt,
bool first,
+ bool env,
names& ns)
{
const location l (get_location (t));
@@ -369,13 +370,16 @@ namespace build2
// Verify that the special builtin is not called inside an improper
// context (flow control construct or complex expression).
//
- auto verify = [first, &v, &l, this] ()
+ auto verify = [first, env, &v, &l, this] ()
{
if (level_ != 0)
fail (l) << "'" << v << "' call inside flow control construct";
if (!first)
fail (l) << "'" << v << "' call must be the only command";
+
+ if (env)
+ fail (l) << "'" << v << "' call via 'env' builtin";
};
if (v == "diag")
diff --git a/libbuild2/build/script/parser.hxx b/libbuild2/build/script/parser.hxx
index 73bcd09..5ada8be 100644
--- a/libbuild2/build/script/parser.hxx
+++ b/libbuild2/build/script/parser.hxx
@@ -98,13 +98,16 @@ namespace build2
//
// During pre-parsing try to deduce the low-verbosity script
// diagnostics name as a program/builtin name or obtain the custom
- // low-verbosity diagnostics specified with the diag builtin. Note
- // that the diag builtin can only appear at the beginning of the
- // command line.
+ // low-verbosity diagnostics specified with the diag builtin. Also
+ // handle the depdb builtin calls.
+ //
+ // Note that the diag and depdb builtins can only appear at the
+ // beginning of the command line.
//
virtual optional<process_path>
parse_program (token&, build2::script::token_type&,
bool first,
+ bool env,
names&) override;
protected: