From 741974195712be8c53529cffc0b8222c970f685c Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Wed, 27 Dec 2017 16:50:09 -0800 Subject: Expand PeekVar to KATI_(deprecated|obsolete)_var So that marking a variable as deprecated or obsolete does not cause the variable to be inserted into the used environment table. --- eval.cc | 9 +++++++++ eval.h | 3 +++ func.cc | 4 ++-- testcase/ninja_regen.sh | 20 ++++++++++++++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/eval.cc b/eval.cc index 8cd7afd..cf3f859 100644 --- a/eval.cc +++ b/eval.cc @@ -391,6 +391,15 @@ Var* Evaluator::LookupVar(Symbol name) { return LookupVarGlobal(name); } +Var* Evaluator::PeekVar(Symbol name) { + if (current_scope_) { + Var* v = current_scope_->Peek(name); + if (v->IsDefined()) + return v; + } + return name.PeekGlobalVar(); +} + Var* Evaluator::LookupVarInCurrentScope(Symbol name) { if (current_scope_) { return current_scope_->Lookup(name); diff --git a/eval.h b/eval.h index 1dff4b7..e588f7e 100644 --- a/eval.h +++ b/eval.h @@ -47,6 +47,9 @@ class Evaluator { // For target specific variables. Var* LookupVarInCurrentScope(Symbol name); + // Equivalent to LookupVar, but doesn't mark as used. + Var* PeekVar(Symbol name); + string EvalVar(Symbol name); const Loc& loc() const { return loc_; } diff --git a/func.cc b/func.cc index 220aee0..1dea7bb 100644 --- a/func.cc +++ b/func.cc @@ -835,7 +835,7 @@ void DeprecatedVarFunc(const vector& args, Evaluator* ev, string*) { for (StringPiece var : WordScanner(vars_str)) { Symbol sym = Intern(var); - Var* v = ev->LookupVar(sym); + Var* v = ev->PeekVar(sym); if (!v->IsDefined()) { v = new SimpleVar(VarOrigin::FILE); sym.SetGlobalVar(v, false, nullptr); @@ -871,7 +871,7 @@ void ObsoleteVarFunc(const vector& args, Evaluator* ev, string*) { for (StringPiece var : WordScanner(vars_str)) { Symbol sym = Intern(var); - Var* v = ev->LookupVar(sym); + Var* v = ev->PeekVar(sym); if (!v->IsDefined()) { v = new SimpleVar(VarOrigin::FILE); sym.SetGlobalVar(v, false, nullptr); diff --git a/testcase/ninja_regen.sh b/testcase/ninja_regen.sh index 5a1c0ff..b63bb9b 100755 --- a/testcase/ninja_regen.sh +++ b/testcase/ninja_regen.sh @@ -39,6 +39,8 @@ fi sleep_if_necessary 1 cat < Makefile +\$(KATI_deprecated_var VAR4) +\$(KATI_obsolete_var VAR5) VAR3 := unused all: echo bar @@ -94,6 +96,24 @@ if [ -e ninja.sh ]; then ./ninja.sh fi +export VAR4=foo +${mk} 2> ${log} +if [ -e ninja.sh ]; then + if grep regenerating ${log} >/dev/null; then + echo 'Should not regenerate (deprecated env added)' + fi + ./ninja.sh +fi + +export VAR5=foo +${mk} 2> ${log} +if [ -e ninja.sh ]; then + if grep regenerating ${log} >/dev/null; then + echo 'Should not regenerate (obsolete env added)' + fi + ./ninja.sh +fi + export PATH=/random_path:$PATH ${mk} 2> ${log} if [ -e ninja.sh ]; then -- cgit v1.2.3