diff options
| author | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-10-21 13:36:50 +0900 |
|---|---|---|
| committer | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-10-21 13:36:50 +0900 |
| commit | 4421dda489d793ea1a59b1acf460b540b3b4174b (patch) | |
| tree | 2b2bc9a8cc66b65a08e5128f4097cda2f5888f34 | |
| parent | 407d8d46b5ad545b7a6ef8ba930c6e08880e4b47 (diff) | |
| download | platform_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.cc | 6 | ||||
| -rw-r--r-- | testcase/err_ifdef_two_args.mk | 4 | ||||
| -rw-r--r-- | testcase/err_ifdef_two_args2.mk | 5 | ||||
| -rw-r--r-- | testcase/ifdef_ret_in_arg.mk | 8 |
4 files changed, 22 insertions, 1 deletions
@@ -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 |
