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 } |