nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/JSObjectLinker.java
changeset 29282 a8523237b66c
parent 29133 1cd7d8af99ba
child 32889 aef39bbfac15
equal deleted inserted replaced
29281:8cc2618a07aa 29282:a8523237b66c
    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) {