src/jdk/nashorn/internal/objects/NativeNumber.java
Print this page
*** 32,41 ****
--- 32,42 ----
import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED;
import static jdk.nashorn.internal.lookup.Lookup.MH;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
+ import java.lang.invoke.MethodType;
import java.text.NumberFormat;
import java.util.Locale;
import jdk.internal.dynalink.linker.GuardedInvocation;
import jdk.internal.dynalink.linker.LinkRequest;
import jdk.nashorn.internal.objects.annotations.Attribute;
*** 55,65 ****
*
*/
@ScriptClass("Number")
public final class NativeNumber extends ScriptObject {
! static final MethodHandle WRAPFILTER = findWrapFilter();
/** ECMA 15.7.3.2 largest positive finite value */
@Property(attributes = Attribute.NON_ENUMERABLE_CONSTANT, where = Where.CONSTRUCTOR)
public static final double MAX_VALUE = Double.MAX_VALUE;
--- 56,67 ----
*
*/
@ScriptClass("Number")
public final class NativeNumber extends ScriptObject {
! static final MethodHandle WRAPFILTER = findOwnMH("wrapFilter", MH.type(NativeNumber.class, Object.class));
! static final MethodHandle PROTOFILTER = findOwnMH("protoFilter", MH.type(Object.class, Object.class));
/** ECMA 15.7.3.2 largest positive finite value */
@Property(attributes = Attribute.NON_ENUMERABLE_CONSTANT, where = Where.CONSTRUCTOR)
public static final double MAX_VALUE = Double.MAX_VALUE;
*** 320,337 ****
* @param request The link request
* @param receiver receiver of call
* @return Link to be invoked at call site.
*/
public static GuardedInvocation lookupPrimitive(final LinkRequest request, final Object receiver) {
! return PrimitiveLookup.lookupPrimitive(request, Number.class, new NativeNumber(((Number)receiver).doubleValue()), WRAPFILTER);
}
@SuppressWarnings("unused")
private static NativeNumber wrapFilter(final Object receiver) {
return new NativeNumber(((Number)receiver).doubleValue());
}
private static double getNumberValue(final Object self) {
if (self instanceof Number) {
return ((Number)self).doubleValue();
} else if (self instanceof NativeNumber) {
return ((NativeNumber)self).getValue();
--- 322,344 ----
* @param request The link request
* @param receiver receiver of call
* @return Link to be invoked at call site.
*/
public static GuardedInvocation lookupPrimitive(final LinkRequest request, final Object receiver) {
! return PrimitiveLookup.lookupPrimitive(request, Number.class, new NativeNumber(((Number)receiver).doubleValue()), WRAPFILTER, PROTOFILTER);
}
@SuppressWarnings("unused")
private static NativeNumber wrapFilter(final Object receiver) {
return new NativeNumber(((Number)receiver).doubleValue());
}
+ @SuppressWarnings("unused")
+ private static Object protoFilter(final Object object) {
+ return Global.instance().getNumberPrototype();
+ }
+
private static double getNumberValue(final Object self) {
if (self instanceof Number) {
return ((Number)self).doubleValue();
} else if (self instanceof NativeNumber) {
return ((NativeNumber)self).getValue();
*** 376,384 ****
+ str.substring(index + expPadding);
}
return str;
}
! private static MethodHandle findWrapFilter() {
! return MH.findStatic(MethodHandles.lookup(), NativeNumber.class, "wrapFilter", MH.type(NativeNumber.class, Object.class));
}
}
--- 383,391 ----
+ str.substring(index + expPadding);
}
return str;
}
! private static MethodHandle findOwnMH(final String name, final MethodType type) {
! return MH.findStatic(MethodHandles.lookup(), NativeNumber.class, name, type);
}
}