nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/JSObjectLinker.java
equal
deleted
inserted
replaced
22 * or visit www.oracle.com if you need additional information or have any |
22 * or visit www.oracle.com if you need additional information or have any |
23 * questions. |
23 * questions. |
24 */ |
24 */ |
25 |
25 |
26 package jdk.nashorn.internal.runtime.linker; |
26 package jdk.nashorn.internal.runtime.linker; |
|
27 |
|
28 import static jdk.nashorn.internal.runtime.JSType.isString; |
27 |
29 |
28 import java.lang.invoke.MethodHandle; |
30 import java.lang.invoke.MethodHandle; |
29 import java.lang.invoke.MethodHandles; |
31 import java.lang.invoke.MethodHandles; |
30 import java.util.Map; |
32 import java.util.Map; |
31 import javax.script.Bindings; |
33 import javax.script.Bindings; |
36 import jdk.internal.dynalink.linker.TypeBasedGuardingDynamicLinker; |
38 import jdk.internal.dynalink.linker.TypeBasedGuardingDynamicLinker; |
37 import jdk.internal.dynalink.support.CallSiteDescriptorFactory; |
39 import jdk.internal.dynalink.support.CallSiteDescriptorFactory; |
38 import jdk.nashorn.api.scripting.JSObject; |
40 import jdk.nashorn.api.scripting.JSObject; |
39 import jdk.nashorn.internal.lookup.MethodHandleFactory; |
41 import jdk.nashorn.internal.lookup.MethodHandleFactory; |
40 import jdk.nashorn.internal.lookup.MethodHandleFunctionality; |
42 import jdk.nashorn.internal.lookup.MethodHandleFunctionality; |
41 import jdk.nashorn.internal.runtime.ConsString; |
|
42 import jdk.nashorn.internal.runtime.JSType; |
43 import jdk.nashorn.internal.runtime.JSType; |
43 |
44 |
44 /** |
45 /** |
45 * A Dynalink linker to handle web browser built-in JS (DOM etc.) objects as well |
46 * A Dynalink linker to handle web browser built-in JS (DOM etc.) objects as well |
46 * as ScriptObjects from other Nashorn contexts. |
47 * as ScriptObjects from other Nashorn contexts. |
164 } else if (key instanceof Number) { |
165 } else if (key instanceof Number) { |
165 final int index = getIndex((Number)key); |
166 final int index = getIndex((Number)key); |
166 if (index > -1) { |
167 if (index > -1) { |
167 return ((JSObject)jsobj).getSlot(index); |
168 return ((JSObject)jsobj).getSlot(index); |
168 } |
169 } |
169 } else if (key instanceof String || key instanceof ConsString) { |
170 } else if (isString(key)) { |
170 final String name = key.toString(); |
171 final String name = key.toString(); |
171 // get with method name and signature. delegate it to beans linker! |
172 // get with method name and signature. delegate it to beans linker! |
172 if (name.indexOf('(') != -1) { |
173 if (name.indexOf('(') != -1) { |
173 return fallback.invokeExact(jsobj, (Object) name); |
174 return fallback.invokeExact(jsobj, (Object) name); |
174 } |
175 } |
181 private static void put(final Object jsobj, final Object key, final Object value) { |
182 private static void put(final Object jsobj, final Object key, final Object value) { |
182 if (key instanceof Integer) { |
183 if (key instanceof Integer) { |
183 ((JSObject)jsobj).setSlot((Integer)key, value); |
184 ((JSObject)jsobj).setSlot((Integer)key, value); |
184 } else if (key instanceof Number) { |
185 } else if (key instanceof Number) { |
185 ((JSObject)jsobj).setSlot(getIndex((Number)key), value); |
186 ((JSObject)jsobj).setSlot(getIndex((Number)key), value); |
186 } else if (key instanceof String || key instanceof ConsString) { |
187 } else if (isString(key)) { |
187 ((JSObject)jsobj).setMember(key.toString(), value); |
188 ((JSObject)jsobj).setMember(key.toString(), value); |
188 } |
189 } |
189 } |
190 } |
190 |
191 |
191 private static int getIndex(final Number n) { |
192 private static int getIndex(final Number n) { |