src/jdk/nashorn/internal/objects/ScriptFunctionImpl.java

Print this page

        

*** 73,83 **** // Marker object for lazily initialized prototype object private static final Object LAZY_PROTOTYPE = new Object(); private ScriptFunctionImpl(final String name, final MethodHandle invokeHandle, final MethodHandle[] specs, final Global global) { ! super(name, invokeHandle, getInitialMap(), null, specs, false, true, true); init(global); } /** * Constructor called by Nasgen generated code, no membercount, use the default map. --- 73,83 ---- // Marker object for lazily initialized prototype object private static final Object LAZY_PROTOTYPE = new Object(); private ScriptFunctionImpl(final String name, final MethodHandle invokeHandle, final MethodHandle[] specs, final Global global) { ! super(name, invokeHandle, getInitialMap(), null, specs, ScriptFunctionData.IS_BUILTIN_CONSTRUCTOR); init(global); } /** * Constructor called by Nasgen generated code, no membercount, use the default map.
*** 90,100 **** ScriptFunctionImpl(final String name, final MethodHandle invokeHandle, final MethodHandle[] specs) { this(name, invokeHandle, specs, Global.instance()); } private ScriptFunctionImpl(final String name, final MethodHandle invokeHandle, final PropertyMap map, final MethodHandle[] specs, final Global global) { ! super(name, invokeHandle, map.addAll(getInitialMap()), null, specs, false, true, true); init(global); } /** * Constructor called by Nasgen generated code, no membercount, use the map passed as argument. --- 90,100 ---- ScriptFunctionImpl(final String name, final MethodHandle invokeHandle, final MethodHandle[] specs) { this(name, invokeHandle, specs, Global.instance()); } private ScriptFunctionImpl(final String name, final MethodHandle invokeHandle, final PropertyMap map, final MethodHandle[] specs, final Global global) { ! super(name, invokeHandle, map.addAll(getInitialMap()), null, specs, ScriptFunctionData.IS_BUILTIN_CONSTRUCTOR); init(global); } /** * Constructor called by Nasgen generated code, no membercount, use the map passed as argument.
*** 107,134 **** */ ScriptFunctionImpl(final String name, final MethodHandle invokeHandle, final PropertyMap map, final MethodHandle[] specs) { this(name, invokeHandle, map, specs, Global.instance()); } ! private ScriptFunctionImpl(final String name, final MethodHandle methodHandle, final ScriptObject scope, final MethodHandle[] specs, final boolean isStrict, final boolean isBuiltin, final boolean isConstructor, final Global global) { ! super(name, methodHandle, getMap(global, isStrict), scope, specs, isStrict, isBuiltin, isConstructor); init(global); } /** * Constructor called by Global.newScriptFunction (runtime). * * @param name name of function * @param methodHandle handle for invocation * @param scope scope object * @param specs specialized versions of this method, if available, null otherwise ! * @param isStrict are we in strict mode ! * @param isBuiltin is this a built-in function ! * @param isConstructor can the function be used as a constructor (most can; some built-ins are restricted). */ ! ScriptFunctionImpl(final String name, final MethodHandle methodHandle, final ScriptObject scope, final MethodHandle[] specs, final boolean isStrict, final boolean isBuiltin, final boolean isConstructor) { ! this(name, methodHandle, scope, specs, isStrict, isBuiltin, isConstructor, Global.instance()); } private ScriptFunctionImpl(final RecompilableScriptFunctionData data, final ScriptObject scope, final Global global) { super(data, getMap(global, data.isStrict()), scope); init(global); --- 107,132 ---- */ ScriptFunctionImpl(final String name, final MethodHandle invokeHandle, final PropertyMap map, final MethodHandle[] specs) { this(name, invokeHandle, map, specs, Global.instance()); } ! private ScriptFunctionImpl(final String name, final MethodHandle methodHandle, final ScriptObject scope, final MethodHandle[] specs, final int flags, final Global global) { ! super(name, methodHandle, getMap(global, isStrict(flags)), scope, specs, flags); init(global); } /** * Constructor called by Global.newScriptFunction (runtime). * * @param name name of function * @param methodHandle handle for invocation * @param scope scope object * @param specs specialized versions of this method, if available, null otherwise ! * @param flags {@link ScriptFunctionData} flags */ ! ScriptFunctionImpl(final String name, final MethodHandle methodHandle, final ScriptObject scope, final MethodHandle[] specs, final int flags) { ! this(name, methodHandle, scope, specs, flags, Global.instance()); } private ScriptFunctionImpl(final RecompilableScriptFunctionData data, final ScriptObject scope, final Global global) { super(data, getMap(global, data.isStrict()), scope); init(global);
*** 171,180 **** --- 169,182 ---- newMap = newMap.addPropertyNoHistory(map.newUserAccessors("arguments", flags)); newMap = newMap.addPropertyNoHistory(map.newUserAccessors("caller", flags)); return newMap; } + private static boolean isStrict(final int flags) { + return (flags & ScriptFunctionData.IS_STRICT) != 0; + } + // Choose the map based on strict mode! private static PropertyMap getMap(final Global global, final boolean strict) { return strict ? getInitialStrictMap() : getInitialMap(); }
*** 209,219 **** * @param methodHandle handle for invocation * @param specs specialized versions of function if available, null otherwise * @return new ScriptFunction */ static ScriptFunction makeFunction(final String name, final MethodHandle methodHandle, final MethodHandle[] specs) { ! final ScriptFunctionImpl func = new ScriptFunctionImpl(name, methodHandle, null, specs, false, true, false); func.setPrototype(UNDEFINED); // Non-constructor built-in functions do not have "prototype" property func.deleteOwnProperty(func.getMap().findProperty("prototype")); return func; --- 211,221 ---- * @param methodHandle handle for invocation * @param specs specialized versions of function if available, null otherwise * @return new ScriptFunction */ static ScriptFunction makeFunction(final String name, final MethodHandle methodHandle, final MethodHandle[] specs) { ! final ScriptFunctionImpl func = new ScriptFunctionImpl(name, methodHandle, null, specs, ScriptFunctionData.IS_BUILTIN); func.setPrototype(UNDEFINED); // Non-constructor built-in functions do not have "prototype" property func.deleteOwnProperty(func.getMap().findProperty("prototype")); return func;