diff options
author | Dan Willemsen <dwillemsen@google.com> | 2017-10-03 14:24:48 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@google.com> | 2017-10-03 17:00:58 -0700 |
commit | 276e96ac9502bc5a399d6cad9e818faac4372ae4 (patch) | |
tree | 56d3e0b5aaf59a06acf34aa8e14ccd98351ec9c4 /eval.cc | |
parent | a71d591065bb4e0b058c7f9efa4e708dbc6c13c9 (diff) | |
download | android_build_kati-276e96ac9502bc5a399d6cad9e818faac4372ae4.tar.gz android_build_kati-276e96ac9502bc5a399d6cad9e818faac4372ae4.tar.bz2 android_build_kati-276e96ac9502bc5a399d6cad9e818faac4372ae4.zip |
Add deprecated / obsolete variable support
By calling the custom KATI_deprecated_var / KATI_obsolete_var functions,
variables may be marked as deprecated or obsolete.
When accessed or assigned, deprecated variables will print a warning.
When accessed or assigned, obsolete variables will print an error and
stop.
Variables do not need to be set before calling the functions, and will
persist the deprecation warning through a reassignment. This way we can
easily mark variables that are sometimes passed via the environment as
deprecated.
Change-Id: Id04c974c446f471a18cc173f817760f4a02b9239
Diffstat (limited to 'eval.cc')
-rw-r--r-- | eval.cc | 11 |
1 files changed, 9 insertions, 2 deletions
@@ -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; |