aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax/BuiltinFunction.java
diff options
context:
space:
mode:
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.java8
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();
}
}