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