diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java b/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java index a7547deca3..aa9b151f99 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java @@ -122,9 +122,11 @@ public class BuiltinFunction extends BaseFunction { @Override @Nullable public Object call(Object[] args, - @Nullable FuncallExpression ast, @Nullable Environment env) + FuncallExpression ast, Environment env) throws EvalException, InterruptedException { - final Location loc = (ast == null) ? location : ast.getLocation(); + Preconditions.checkNotNull(ast); + Preconditions.checkNotNull(env); + Location loc = ast.getLocation(); // Add extra arguments, if needed if (extraArgs != null) { @@ -150,6 +152,7 @@ public class BuiltinFunction extends BaseFunction { long startTime = Profiler.nanoTimeMaybe(); // Last but not least, actually make an inner call to the function with the resolved arguments. try { + env.enterScope(this, ast, env.getGlobals()); return invokeMethod.invoke(this, args); } catch (InvocationTargetException x) { Throwable e = x.getCause(); @@ -193,6 +196,7 @@ public class BuiltinFunction extends BaseFunction { startTime, ProfilerTask.SKYLARK_BUILTIN_FN, this.getClass().getName() + "#" + getName()); + env.exitScope(); } } |