aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-10-21 13:36:50 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-10-21 13:36:50 +0900
commit4421dda489d793ea1a59b1acf460b540b3b4174b (patch)
tree2b2bc9a8cc66b65a08e5128f4097cda2f5888f34
parent407d8d46b5ad545b7a6ef8ba930c6e08880e4b47 (diff)
downloadplatform_build_kati-4421dda489d793ea1a59b1acf460b540b3b4174b.tar.gz
platform_build_kati-4421dda489d793ea1a59b1acf460b540b3b4174b.tar.bz2
platform_build_kati-4421dda489d793ea1a59b1acf460b540b3b4174b.zip
[C++] ifdef should fail when there are multiple variables
-rw-r--r--eval.cc6
-rw-r--r--testcase/err_ifdef_two_args.mk4
-rw-r--r--testcase/err_ifdef_two_args2.mk5
-rw-r--r--testcase/ifdef_ret_in_arg.mk8
4 files changed, 22 insertions, 1 deletions
diff --git a/eval.cc b/eval.cc
index 72661e3..25b9c52 100644
--- a/eval.cc
+++ b/eval.cc
@@ -187,7 +187,11 @@ void Evaluator::EvalIf(const IfStmt* stmt) {
switch (stmt->op) {
case CondOp::IFDEF:
case CondOp::IFNDEF: {
- Symbol lhs = Intern(stmt->lhs->Eval(this));
+ string var_name;
+ stmt->lhs->Eval(this, &var_name);
+ if (var_name.find_first_of(" \t") != string::npos)
+ Error("*** invalid syntax in conditional.");
+ Symbol lhs = Intern(var_name);
Var* v = LookupVarInCurrentScope(lhs);
const string&& s = v->Eval(this);
is_true = (s.empty() == (stmt->op == CondOp::IFNDEF));
diff --git a/testcase/err_ifdef_two_args.mk b/testcase/err_ifdef_two_args.mk
new file mode 100644
index 0000000..4c9eb74
--- /dev/null
+++ b/testcase/err_ifdef_two_args.mk
@@ -0,0 +1,4 @@
+# TODO(go): Fix
+
+ifdef a b
+endif
diff --git a/testcase/err_ifdef_two_args2.mk b/testcase/err_ifdef_two_args2.mk
new file mode 100644
index 0000000..43231f7
--- /dev/null
+++ b/testcase/err_ifdef_two_args2.mk
@@ -0,0 +1,5 @@
+# TODO(go): Fix
+
+x := a b
+ifdef $(x)
+endif
diff --git a/testcase/ifdef_ret_in_arg.mk b/testcase/ifdef_ret_in_arg.mk
new file mode 100644
index 0000000..91d5fca
--- /dev/null
+++ b/testcase/ifdef_ret_in_arg.mk
@@ -0,0 +1,8 @@
+define x
+a
+b
+endef
+$(x):=PASS
+ifdef $(x)
+$(info $($(x)))
+endif