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

Print this page

        

*** 30,39 **** --- 30,40 ---- import static jdk.nashorn.internal.runtime.JSType.isRepresentableAsInt; import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; + import java.lang.invoke.MethodType; import java.text.Collator; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List;
*** 67,77 **** @ScriptClass("String") public final class NativeString extends ScriptObject { private final CharSequence value; ! static final MethodHandle WRAPFILTER = findWrapFilter(); // initialized by nasgen private static PropertyMap $nasgenmap$; static PropertyMap getInitialMap() { --- 68,79 ---- @ScriptClass("String") public final class NativeString extends ScriptObject { private final CharSequence value; ! static final MethodHandle WRAPFILTER = findOwnMH("wrapFilter", MH.type(NativeString.class, Object.class)); ! static final MethodHandle PROTOFILTER = findOwnMH("protoFilter", MH.type(Object.class, Object.class)); // initialized by nasgen private static PropertyMap $nasgenmap$; static PropertyMap getInitialMap() {
*** 1197,1214 **** * @param receiver receiver of call * @return Link to be invoked at call site. */ public static GuardedInvocation lookupPrimitive(final LinkRequest request, final Object receiver) { final MethodHandle guard = NashornGuards.getInstanceOf2Guard(String.class, ConsString.class); ! return PrimitiveLookup.lookupPrimitive(request, guard, new NativeString((CharSequence)receiver), WRAPFILTER); } @SuppressWarnings("unused") private static NativeString wrapFilter(final Object receiver) { return new NativeString((CharSequence)receiver); } private static CharSequence getCharSequence(final Object self) { if (self instanceof String || self instanceof ConsString) { return (CharSequence)self; } else if (self instanceof NativeString) { return ((NativeString)self).getValue(); --- 1199,1221 ---- * @param receiver receiver of call * @return Link to be invoked at call site. */ public static GuardedInvocation lookupPrimitive(final LinkRequest request, final Object receiver) { final MethodHandle guard = NashornGuards.getInstanceOf2Guard(String.class, ConsString.class); ! return PrimitiveLookup.lookupPrimitive(request, guard, new NativeString((CharSequence)receiver), WRAPFILTER, PROTOFILTER); } @SuppressWarnings("unused") private static NativeString wrapFilter(final Object receiver) { return new NativeString((CharSequence)receiver); } + @SuppressWarnings("unused") + private static Object protoFilter(final Object object) { + return Global.instance().getStringPrototype(); + } + private static CharSequence getCharSequence(final Object self) { if (self instanceof String || self instanceof ConsString) { return (CharSequence)self; } else if (self instanceof NativeString) { return ((NativeString)self).getValue();
*** 1252,1260 **** private boolean isValid(final int key) { return key >= 0 && key < value.length(); } ! private static MethodHandle findWrapFilter() { ! return MH.findStatic(MethodHandles.lookup(), NativeString.class, "wrapFilter", MH.type(NativeString.class, Object.class)); } } --- 1259,1267 ---- private boolean isValid(final int key) { return key >= 0 && key < value.length(); } ! private static MethodHandle findOwnMH(final String name, final MethodType type) { ! return MH.findStatic(MethodHandles.lookup(), NativeString.class, name, type); } }