diff options
author | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-06-15 19:53:36 +0900 |
---|---|---|
committer | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-06-18 11:25:42 +0900 |
commit | 4c469b36fb8cf2240f8b9f41448dc6f9e1d3df55 (patch) | |
tree | 7544348c6b8fa20b8c0600bae28225f18b14b629 /eval.cc | |
parent | 776ca3085c44e6570813270df75278849c37d400 (diff) | |
download | android_build_kati-4c469b36fb8cf2240f8b9f41448dc6f9e1d3df55.tar.gz android_build_kati-4c469b36fb8cf2240f8b9f41448dc6f9e1d3df55.tar.bz2 android_build_kati-4c469b36fb8cf2240f8b9f41448dc6f9e1d3df55.zip |
[C++] Implementing +=
Diffstat (limited to 'eval.cc')
-rw-r--r-- | eval.cc | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -39,6 +39,7 @@ void Evaluator::EvalAssign(const AssignAST* ast) { StringPiece lhs = Intern(*ast->lhs->Eval(this)); Var* rhs = NULL; + bool needs_assign = true; switch (ast->op) { case AssignOp::COLON_EQ: rhs = new SimpleVar(ast->rhs->Eval(this), origin); @@ -51,8 +52,9 @@ void Evaluator::EvalAssign(const AssignAST* ast) { if (!prev->IsDefined()) { rhs = new RecursiveVar(ast->rhs, origin); } else { - // TODO - abort(); + prev->AppendVar(this, ast->rhs); + rhs = prev; + needs_assign = false; } break; } @@ -69,7 +71,8 @@ void Evaluator::EvalAssign(const AssignAST* ast) { } LOG("Assign: %.*s=%s", SPF(lhs), rhs->DebugString().c_str()); - vars_->Assign(lhs, rhs); + if (needs_assign) + vars_->Assign(lhs, rhs); } void Evaluator::EvalRule(const RuleAST* ast) { |