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

changeset 418
36d6b6a3fbe0
parent 415
edca88d3a03e
child 690
752554d45a07
equal deleted inserted replaced
417:20b2c2dc20e8 418:36d6b6a3fbe0
28 import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED; 28 import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED;
29 import static jdk.nashorn.internal.lookup.Lookup.MH; 29 import static jdk.nashorn.internal.lookup.Lookup.MH;
30 30
31 import java.lang.invoke.MethodHandle; 31 import java.lang.invoke.MethodHandle;
32 import java.lang.invoke.MethodHandles; 32 import java.lang.invoke.MethodHandles;
33 import java.util.ArrayList;
33 import java.util.Arrays; 34 import java.util.Arrays;
35 import jdk.nashorn.internal.runtime.AccessorProperty;
34 import jdk.nashorn.internal.runtime.Property; 36 import jdk.nashorn.internal.runtime.Property;
35 import jdk.nashorn.internal.runtime.PropertyMap; 37 import jdk.nashorn.internal.runtime.PropertyMap;
36 import jdk.nashorn.internal.runtime.ScriptFunction; 38 import jdk.nashorn.internal.runtime.ScriptFunction;
37 import jdk.nashorn.internal.runtime.ScriptObject; 39 import jdk.nashorn.internal.runtime.ScriptObject;
38 import jdk.nashorn.internal.runtime.arrays.ArrayData; 40 import jdk.nashorn.internal.runtime.arrays.ArrayData;
39 import jdk.nashorn.internal.lookup.Lookup;
40 import jdk.nashorn.internal.lookup.MethodHandleFactory;
41 41
42 /** 42 /**
43 * ECMA 10.6 Arguments Object. 43 * ECMA 10.6 Arguments Object.
44 * 44 *
45 * Arguments object for strict mode functions. 45 * Arguments object for strict mode functions.
52 52
53 // property map for strict mode arguments object 53 // property map for strict mode arguments object
54 private static final PropertyMap map$; 54 private static final PropertyMap map$;
55 55
56 static { 56 static {
57 PropertyMap map = PropertyMap.newMap(); 57 final ArrayList<Property> properties = new ArrayList<>(1);
58 map = Lookup.newProperty(map, "length", Property.NOT_ENUMERABLE, G$LENGTH, S$LENGTH); 58 properties.add(AccessorProperty.create("length", Property.NOT_ENUMERABLE, G$LENGTH, S$LENGTH));
59 PropertyMap map = PropertyMap.newMap(properties);
59 // In strict mode, the caller and callee properties should throw TypeError 60 // In strict mode, the caller and callee properties should throw TypeError
60 // Need to add properties directly to map since slots are assigned speculatively by newUserAccessors. 61 // Need to add properties directly to map since slots are assigned speculatively by newUserAccessors.
61 final int flags = Property.NOT_ENUMERABLE | Property.NOT_CONFIGURABLE; 62 final int flags = Property.NOT_ENUMERABLE | Property.NOT_CONFIGURABLE;
62 map = map.addProperty(map.newUserAccessors("caller", flags)); 63 map = map.addProperty(map.newUserAccessors("caller", flags));
63 map = map.addProperty(map.newUserAccessors("callee", flags)); 64 map = map.addProperty(map.newUserAccessors("callee", flags));
64 map$ = map; 65 map$ = map.setIsShared();
65 } 66 }
66 67
67 static PropertyMap getInitialMap() { 68 static PropertyMap getInitialMap() {
68 return map$; 69 return map$;
69 } 70 }

mercurial