diff options
author | Florian Weikert <fwe@google.com> | 2015-08-18 14:37:46 +0000 |
---|---|---|
committer | Lukacs Berki <lberki@google.com> | 2015-08-20 14:43:54 +0000 |
commit | 3f610e837d08eaa72d5ead62a7215365e14a24cb (patch) | |
tree | d7dc43e62a5e916101045ab376e82ba21bc163ec /src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java | |
parent | b537f8250ae1d3d39336c9cf90fc1bba831c6a0f (diff) |
Skylark error messages now include a stack trace.
This means that some tests had to be changed from using exact equality of error messages to working with contains() / startsWith().
--
MOS_MIGRATED_REVID=100923593
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java b/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java index 5831a28602..334a5eb8c0 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java @@ -46,35 +46,33 @@ public class UserDefinedFunction extends BaseFunction { return location; } - /** - * Since the types of parameters of user defined functions are unknown, we just return - * "name(parameterCount)" - */ - @Override - public String getShortSignature() { - return String.format("%s(%d)", getName(), getArgArraySize()); - } - @Override public Object call(Object[] arguments, FuncallExpression ast, Environment env) throws EvalException, InterruptedException { - SkylarkEnvironment functionEnv = SkylarkEnvironment.createEnvironmentForFunctionCalling( - env, definitionEnv, this); ImmutableList<String> names = signature.getSignature().getNames(); // Registering the functions's arguments as variables in the local Environment int i = 0; for (String name : names) { - functionEnv.update(name, arguments[i++]); + env.update(name, arguments[i++]); } try { for (Statement stmt : statements) { - stmt.exec(functionEnv); + stmt.exec(env); } } catch (ReturnStatement.ReturnException e) { return e.getValue(); } return Environment.NONE; } + + /** + * Creates a new environment for the execution of this function. + */ + @Override + protected Environment getOrCreateChildEnvironment(Environment parent) throws EvalException { + return SkylarkEnvironment.createEnvironmentForFunctionCalling( + parent, definitionEnv, this); + } } |