src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/ScriptFunction.java
Print this page
@@ -141,11 +141,10 @@
constructorCount++;
}
this.data = data;
this.scope = scope;
- this.allocatorMap = data.getAllocatorMap();
}
@Override
public String getClassName() {
return "Function";
@@ -251,11 +250,11 @@
allocations++;
}
assert !isBoundFunction(); // allocate never invoked on bound functions
- final ScriptObject object = data.allocate(allocatorMap);
+ final ScriptObject object = data.allocate(getAllocatorMap());
if (object != null) {
final Object prototype = getPrototype();
if (prototype instanceof ScriptObject) {
object.setInitialProto((ScriptObject)prototype);
@@ -267,10 +266,18 @@
}
return object;
}
+ private PropertyMap getAllocatorMap() {
+ PropertyMap map = allocatorMap;
+ if (map == null) {
+ map = allocatorMap = data.getAllocatorMap();
+ }
+ return map;
+ }
+
/**
* Return Object.prototype - used by "allocate"
* @return Object.prototype
*/
protected abstract ScriptObject getObjectPrototype();