aboutsummaryrefslogtreecommitdiffstats
path: root/eval.cc
diff options
context:
space:
mode:
authorDan Willemsen <dwillemsen@google.com>2017-10-03 14:24:48 -0700
committerDan Willemsen <dwillemsen@google.com>2017-10-03 17:00:58 -0700
commit276e96ac9502bc5a399d6cad9e818faac4372ae4 (patch)
tree56d3e0b5aaf59a06acf34aa8e14ccd98351ec9c4 /eval.cc
parenta71d591065bb4e0b058c7f9efa4e708dbc6c13c9 (diff)
downloadandroid_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.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;