aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java
diff options
context:
space:
mode:
authorGravatar Florian Weikert <fwe@google.com>2015-08-18 14:37:46 +0000
committerGravatar Lukacs Berki <lberki@google.com>2015-08-20 14:43:54 +0000
commit3f610e837d08eaa72d5ead62a7215365e14a24cb (patch)
treed7dc43e62a5e916101045ab376e82ba21bc163ec /src/main/java/com/google/devtools/build/lib/syntax/UserDefinedFunction.java
parentb537f8250ae1d3d39336c9cf90fc1bba831c6a0f (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.java24
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);
+ }
}