Skylark: Allow builtin functions to be shadowed.
This change makes them consistent with global variables.
e.g.
def foo(len): return len + 1 # now allowed
Redefinition is still forbidden.
--
MOS_MIGRATED_REVID=89383535
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java b/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java
index cc69867..a3c1991 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java
@@ -89,15 +89,10 @@
* Creates a local ValidationEnvironment to validate user defined function bodies.
*/
public ValidationEnvironment(ValidationEnvironment parent, SkylarkFunctionType currentFunction) {
+ // Don't copy readOnlyVariables: Variables may shadow global values.
this.parent = parent;
this.variableTypes.put(SkylarkType.GLOBAL, new HashMap<String, SkylarkType>());
this.currentFunction = currentFunction;
- for (String var : parent.readOnlyVariables) {
- if (!parent.variableLocations.containsKey(var)) {
- // Mark built in global vars readonly. Variables defined in Skylark may be shadowed locally.
- readOnlyVariables.add(var);
- }
- }
this.clonable = false;
}