aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2017-12-28 14:02:46 +0900
committerGitHub <noreply@github.com>2017-12-28 14:02:46 +0900
commit8aba2458a403479f0743fbc6d35392ae8e598fd1 (patch)
tree3d36cbcf4dd9525b604fa92c77b2ca181a893d6d
parent2f55dd9244f4ea7ca613bbd41a7324e955d74f50 (diff)
parent741974195712be8c53529cffc0b8222c970f685c (diff)
downloadkati-8aba2458a403479f0743fbc6d35392ae8e598fd1.tar.gz
Merge pull request #130 from danw/obsolete_env
Expand PeekVar to KATI_(deprecated|obsolete)_var
-rw-r--r--eval.cc9
-rw-r--r--eval.h3
-rw-r--r--func.cc4
-rwxr-xr-xtestcase/ninja_regen.sh20
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<Value*>& 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<Value*>& 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 <<EOF > 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