aboutsummaryrefslogtreecommitdiffstats
path: root/eval.cc
diff options
context:
space:
mode:
Diffstat (limited to 'eval.cc')
-rw-r--r--eval.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/eval.cc b/eval.cc
index 7a08be7..ecfcd50 100644
--- a/eval.cc
+++ b/eval.cc
@@ -55,7 +55,9 @@ Var* Evaluator::EvalRHS(Symbol lhs, Value* rhs_v, StringPiece orig_rhs,
is_override ? VarOrigin::OVERRIDE : VarOrigin::FILE));
Var* rhs = NULL;
+ Var* prev = LookupVarInCurrentScope(lhs);
bool needs_assign = true;
+
switch (op) {
case AssignOp::COLON_EQ: {
SimpleVar* sv = new SimpleVar(origin);
@@ -67,7 +69,6 @@ Var* Evaluator::EvalRHS(Symbol lhs, Value* rhs_v, StringPiece orig_rhs,
rhs = new RecursiveVar(rhs_v, origin, orig_rhs);
break;
case AssignOp::PLUS_EQ: {
- Var* prev = LookupVarInCurrentScope(lhs);
if (!prev->IsDefined()) {
rhs = new RecursiveVar(rhs_v, origin, orig_rhs);
} else if (prev->ReadOnly()) {
@@ -80,7 +81,6 @@ Var* Evaluator::EvalRHS(Symbol lhs, Value* rhs_v, StringPiece orig_rhs,
break;
}
case AssignOp::QUESTION_EQ: {
- Var* prev = LookupVarInCurrentScope(lhs);
if (!prev->IsDefined()) {
rhs = new RecursiveVar(rhs_v, origin, orig_rhs);
} else {
@@ -91,6 +91,13 @@ Var* Evaluator::EvalRHS(Symbol lhs, Value* rhs_v, StringPiece orig_rhs,
}
}
+ prev->Used(this, lhs);
+ if (prev->Deprecated()) {
+ if (needs_assign) {
+ rhs->SetDeprecated(prev->DeprecatedMessage());
+ }
+ }
+
LOG("Assign: %s=%s", lhs.c_str(), rhs->DebugString().c_str());
if (needs_assign) {
return rhs;