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();