diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax/SkylarkCallbackFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/SkylarkCallbackFunction.java | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkCallbackFunction.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkCallbackFunction.java index 94b1917ab6..6140acb0b0 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkCallbackFunction.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkCallbackFunction.java @@ -22,21 +22,25 @@ public class SkylarkCallbackFunction { private final BaseFunction callback; private final FuncallExpression ast; - private final SkylarkEnvironment funcallEnv; + private final Environment funcallEnv; - public SkylarkCallbackFunction(BaseFunction callback, FuncallExpression ast, - SkylarkEnvironment funcallEnv) { + public SkylarkCallbackFunction( + BaseFunction callback, FuncallExpression ast, Environment funcallEnv) { this.callback = callback; this.ast = ast; this.funcallEnv = funcallEnv; } public Object call(ClassObject ctx, Object... arguments) throws EvalException { - try { + try (Mutability mutability = Mutability.create("callback %s", callback)) { + Environment env = Environment.builder(mutability) + .setSkylark() + .setEventHandler(funcallEnv.getEventHandler()) + .setGlobals(funcallEnv.getGlobals()) + .build(); return callback.call( - ImmutableList.<Object>builder().add(ctx).add(arguments).build(), null, ast, funcallEnv); - } catch (InterruptedException | ClassCastException - | IllegalArgumentException e) { + ImmutableList.<Object>builder().add(ctx).add(arguments).build(), null, ast, env); + } catch (InterruptedException | ClassCastException | IllegalArgumentException e) { throw new EvalException(ast.getLocation(), e.getMessage()); } } |