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
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 5831a28..334a5eb 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 @@
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);
+ }
}