aboutsummaryrefslogtreecommitdiff
path: root/src/jdk/nashorn/internal/objects/NativeJSAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jdk/nashorn/internal/objects/NativeJSAdapter.java')
-rw-r--r--src/jdk/nashorn/internal/objects/NativeJSAdapter.java173
1 files changed, 87 insertions, 86 deletions
diff --git a/src/jdk/nashorn/internal/objects/NativeJSAdapter.java b/src/jdk/nashorn/internal/objects/NativeJSAdapter.java
index 84036a32..c5ca9101 100644
--- a/src/jdk/nashorn/internal/objects/NativeJSAdapter.java
+++ b/src/jdk/nashorn/internal/objects/NativeJSAdapter.java
@@ -25,9 +25,10 @@
package jdk.nashorn.internal.objects;
+import static jdk.nashorn.internal.lookup.Lookup.MH;
import static jdk.nashorn.internal.runtime.ECMAErrors.typeError;
import static jdk.nashorn.internal.runtime.ScriptRuntime.UNDEFINED;
-import static jdk.nashorn.internal.lookup.Lookup.MH;
+import static jdk.nashorn.internal.runtime.UnwarrantedOptimismException.INVALID_PROGRAM_POINT;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
@@ -38,6 +39,7 @@ import java.util.List;
import jdk.internal.dynalink.CallSiteDescriptor;
import jdk.internal.dynalink.linker.GuardedInvocation;
import jdk.internal.dynalink.linker.LinkRequest;
+import jdk.nashorn.internal.lookup.Lookup;
import jdk.nashorn.internal.objects.annotations.Constructor;
import jdk.nashorn.internal.objects.annotations.ScriptClass;
import jdk.nashorn.internal.runtime.FindProperty;
@@ -47,7 +49,6 @@ import jdk.nashorn.internal.runtime.ScriptFunction;
import jdk.nashorn.internal.runtime.ScriptObject;
import jdk.nashorn.internal.runtime.ScriptRuntime;
import jdk.nashorn.internal.runtime.arrays.ArrayLikeIterator;
-import jdk.nashorn.internal.lookup.Lookup;
import jdk.nashorn.internal.scripts.JO;
/**
@@ -168,63 +169,63 @@ public final class NativeJSAdapter extends ScriptObject {
}
@Override
- public int getInt(final Object key) {
- return (overrides && super.hasOwnProperty(key)) ? super.getInt(key) : callAdapteeInt(__get__, key);
+ public int getInt(final Object key, final int programPoint) {
+ return (overrides && super.hasOwnProperty(key)) ? super.getInt(key, programPoint) : callAdapteeInt(programPoint, __get__, key);
}
@Override
- public int getInt(final double key) {
- return (overrides && super.hasOwnProperty(key)) ? super.getInt(key) : callAdapteeInt(__get__, key);
+ public int getInt(final double key, final int programPoint) {
+ return (overrides && super.hasOwnProperty(key)) ? super.getInt(key, programPoint) : callAdapteeInt(programPoint, __get__, key);
}
@Override
- public int getInt(final long key) {
- return (overrides && super.hasOwnProperty(key)) ? super.getInt(key) : callAdapteeInt(__get__, key);
+ public int getInt(final long key, final int programPoint) {
+ return (overrides && super.hasOwnProperty(key)) ? super.getInt(key, programPoint) : callAdapteeInt(programPoint, __get__, key);
}
@Override
- public int getInt(final int key) {
- return (overrides && super.hasOwnProperty(key)) ? super.getInt(key) : callAdapteeInt(__get__, key);
+ public int getInt(final int key, final int programPoint) {
+ return (overrides && super.hasOwnProperty(key)) ? super.getInt(key, programPoint) : callAdapteeInt(programPoint, __get__, key);
}
@Override
- public long getLong(final Object key) {
- return (overrides && super.hasOwnProperty(key)) ? super.getLong(key) : callAdapteeLong(__get__, key);
+ public long getLong(final Object key, final int programPoint) {
+ return (overrides && super.hasOwnProperty(key)) ? super.getLong(key, programPoint) : callAdapteeLong(programPoint, __get__, key);
}
@Override
- public long getLong(final double key) {
- return (overrides && super.hasOwnProperty(key)) ? super.getLong(key) : callAdapteeLong(__get__, key);
+ public long getLong(final double key, final int programPoint) {
+ return (overrides && super.hasOwnProperty(key)) ? super.getLong(key, programPoint) : callAdapteeLong(programPoint, __get__, key);
}
@Override
- public long getLong(final long key) {
- return (overrides && super.hasOwnProperty(key)) ? super.getLong(key) : callAdapteeLong(__get__, key);
+ public long getLong(final long key, final int programPoint) {
+ return (overrides && super.hasOwnProperty(key)) ? super.getLong(key, programPoint) : callAdapteeLong(programPoint, __get__, key);
}
@Override
- public long getLong(final int key) {
- return (overrides && super.hasOwnProperty(key)) ? super.getLong(key) : callAdapteeLong(__get__, key);
+ public long getLong(final int key, final int programPoint) {
+ return (overrides && super.hasOwnProperty(key)) ? super.getLong(key, programPoint) : callAdapteeLong(programPoint, __get__, key);
}
@Override
- public double getDouble(final Object key) {
- return (overrides && super.hasOwnProperty(key)) ? super.getDouble(key) : callAdapteeDouble(__get__, key);
+ public double getDouble(final Object key, final int programPoint) {
+ return (overrides && super.hasOwnProperty(key)) ? super.getDouble(key, programPoint) : callAdapteeDouble(programPoint, __get__, key);
}
@Override
- public double getDouble(final double key) {
- return (overrides && super.hasOwnProperty(key)) ? super.getDouble(key) : callAdapteeDouble(__get__, key);
+ public double getDouble(final double key, final int programPoint) {
+ return (overrides && super.hasOwnProperty(key)) ? super.getDouble(key, programPoint) : callAdapteeDouble(programPoint, __get__, key);
}
@Override
- public double getDouble(final long key) {
- return (overrides && super.hasOwnProperty(key)) ? super.getDouble(key) : callAdapteeDouble(__get__, key);
+ public double getDouble(final long key, final int programPoint) {
+ return (overrides && super.hasOwnProperty(key)) ? super.getDouble(key, programPoint) : callAdapteeDouble(programPoint, __get__, key);
}
@Override
- public double getDouble(final int key) {
- return (overrides && super.hasOwnProperty(key)) ? super.getDouble(key) : callAdapteeDouble(__get__, key);
+ public double getDouble(final int key, final int programPoint) {
+ return (overrides && super.hasOwnProperty(key)) ? super.getDouble(key, programPoint) : callAdapteeDouble(programPoint, __get__, key);
}
@Override
@@ -248,146 +249,146 @@ public final class NativeJSAdapter extends ScriptObject {
}
@Override
- public void set(final Object key, final int value, final boolean strict) {
+ public void set(final Object key, final int value, final int flags) {
if (overrides && super.hasOwnProperty(key)) {
- super.set(key, value, strict);
+ super.set(key, value, flags);
} else {
- callAdaptee(__put__, key, value, strict);
+ callAdaptee(__put__, key, value, flags);
}
}
@Override
- public void set(final Object key, final long value, final boolean strict) {
+ public void set(final Object key, final long value, final int flags) {
if (overrides && super.hasOwnProperty(key)) {
- super.set(key, value, strict);
+ super.set(key, value, flags);
} else {
- callAdaptee(__put__, key, value, strict);
+ callAdaptee(__put__, key, value, flags);
}
}
@Override
- public void set(final Object key, final double value, final boolean strict) {
+ public void set(final Object key, final double value, final int flags) {
if (overrides && super.hasOwnProperty(key)) {
- super.set(key, value, strict);
+ super.set(key, value, flags);
} else {
- callAdaptee(__put__, key, value, strict);
+ callAdaptee(__put__, key, value, flags);
}
}
@Override
- public void set(final Object key, final Object value, final boolean strict) {
+ public void set(final Object key, final Object value, final int flags) {
if (overrides && super.hasOwnProperty(key)) {
- super.set(key, value, strict);
+ super.set(key, value, flags);
} else {
- callAdaptee(__put__, key, value, strict);
+ callAdaptee(__put__, key, value, flags);
}
}
@Override
- public void set(final double key, final int value, final boolean strict) {
+ public void set(final double key, final int value, final int flags) {
if (overrides && super.hasOwnProperty(key)) {
- super.set(key, value, strict);
+ super.set(key, value, flags);
} else {
- callAdaptee(__put__, key, value, strict);
+ callAdaptee(__put__, key, value, flags);
}
}
@Override
- public void set(final double key, final long value, final boolean strict) {
+ public void set(final double key, final long value, final int flags) {
if (overrides && super.hasOwnProperty(key)) {
- super.set(key, value, strict);
+ super.set(key, value, flags);
} else {
- callAdaptee(__put__, key, value, strict);
+ callAdaptee(__put__, key, value, flags);
}
}
@Override
- public void set(final double key, final double value, final boolean strict) {
+ public void set(final double key, final double value, final int flags) {
if (overrides && super.hasOwnProperty(key)) {
- super.set(key, value, strict);
+ super.set(key, value, flags);
} else {
- callAdaptee(__put__, key, value, strict);
+ callAdaptee(__put__, key, value, flags);
}
}
@Override
- public void set(final double key, final Object value, final boolean strict) {
+ public void set(final double key, final Object value, final int flags) {
if (overrides && super.hasOwnProperty(key)) {
- super.set(key, value, strict);
+ super.set(key, value, flags);
} else {
- callAdaptee(__put__, key, value, strict);
+ callAdaptee(__put__, key, value, flags);
}
}
@Override
- public void set(final long key, final int value, final boolean strict) {
+ public void set(final long key, final int value, final int flags) {
if (overrides && super.hasOwnProperty(key)) {
- super.set(key, value, strict);
+ super.set(key, value, flags);
} else {
- callAdaptee(__put__, key, value, strict);
+ callAdaptee(__put__, key, value, flags);
}
}
@Override
- public void set(final long key, final long value, final boolean strict) {
+ public void set(final long key, final long value, final int flags) {
if (overrides && super.hasOwnProperty(key)) {
- super.set(key, value, strict);
+ super.set(key, value, flags);
} else {
- callAdaptee(__put__, key, value, strict);
+ callAdaptee(__put__, key, value, flags);
}
}
@Override
- public void set(final long key, final double value, final boolean strict) {
+ public void set(final long key, final double value, final int flags) {
if (overrides && super.hasOwnProperty(key)) {
- super.set(key, value, strict);
+ super.set(key, value, flags);
} else {
- callAdaptee(__put__, key, value, strict);
+ callAdaptee(__put__, key, value, flags);
}
}
@Override
- public void set(final long key, final Object value, final boolean strict) {
+ public void set(final long key, final Object value, final int flags) {
if (overrides && super.hasOwnProperty(key)) {
- super.set(key, value, strict);
+ super.set(key, value, flags);
} else {
- callAdaptee(__put__, key, value, strict);
+ callAdaptee(__put__, key, value, flags);
}
}
@Override
- public void set(final int key, final int value, final boolean strict) {
+ public void set(final int key, final int value, final int flags) {
if (overrides && super.hasOwnProperty(key)) {
- super.set(key, value, strict);
+ super.set(key, value, flags);
} else {
- callAdaptee(__put__, key, value, strict);
+ callAdaptee(__put__, key, value, flags);
}
}
@Override
- public void set(final int key, final long value, final boolean strict) {
+ public void set(final int key, final long value, final int flags) {
if (overrides && super.hasOwnProperty(key)) {
- super.set(key, value, strict);
+ super.set(key, value, flags);
} else {
- callAdaptee(__put__, key, value, strict);
+ callAdaptee(__put__, key, value, flags);
}
}
@Override
- public void set(final int key, final double value, final boolean strict) {
+ public void set(final int key, final double value, final int flags) {
if (overrides && super.hasOwnProperty(key)) {
- super.set(key, value, strict);
+ super.set(key, value, flags);
} else {
- callAdaptee(__put__, key, value, strict);
+ callAdaptee(__put__, key, value, flags);
}
}
@Override
- public void set(final int key, final Object value, final boolean strict) {
+ public void set(final int key, final Object value, final int flags) {
if (overrides && super.hasOwnProperty(key)) {
- super.set(key, value, strict);
+ super.set(key, value, flags);
} else {
- callAdaptee(__put__, key, value, strict);
+ callAdaptee(__put__, key, value, flags);
}
}
@@ -577,7 +578,7 @@ public final class NativeJSAdapter extends ScriptObject {
}
@Override
- protected GuardedInvocation findNewMethod(final CallSiteDescriptor desc) {
+ protected GuardedInvocation findNewMethod(final CallSiteDescriptor desc, final LinkRequest request) {
return findHook(desc, __new__, false);
}
@@ -625,8 +626,8 @@ public final class NativeJSAdapter extends ScriptObject {
// to name. Probably not a big deal, but if we can ever make it leaner, it'd be nice.
return new GuardedInvocation(MH.dropArguments(MH.constant(Object.class,
func.makeBoundFunction(this, new Object[] { name })), 0, Object.class),
- adaptee.getProtoSwitchPoint(__call__, find.getOwner()),
- testJSAdaptor(adaptee, null, null, null));
+ testJSAdaptor(adaptee, null, null, null),
+ adaptee.getProtoSwitchPoint(__call__, find.getOwner()));
}
}
throw typeError("no.such.function", desc.getNameToken(2), ScriptRuntime.safeToString(this));
@@ -658,16 +659,16 @@ public final class NativeJSAdapter extends ScriptObject {
return callAdaptee(UNDEFINED, name, args);
}
- private double callAdapteeDouble(final String name, final Object... args) {
- return JSType.toNumber(callAdaptee(name, args));
+ private double callAdapteeDouble(final int programPoint, final String name, final Object... args) {
+ return JSType.toNumberMaybeOptimistic(callAdaptee(name, args), programPoint);
}
- private long callAdapteeLong(final String name, final Object... args) {
- return JSType.toLong(callAdaptee(name, args));
+ private long callAdapteeLong(final int programPoint, final String name, final Object... args) {
+ return JSType.toLongMaybeOptimistic(callAdaptee(name, args), programPoint);
}
- private int callAdapteeInt(final String name, final Object... args) {
- return JSType.toInt32(callAdaptee(name, args));
+ private int callAdapteeInt(final int programPoint, final String name, final Object... args) {
+ return JSType.toInt32MaybeOptimistic(callAdaptee(name, args), programPoint);
}
private Object callAdaptee(final Object retValue, final String name, final Object... args) {
@@ -696,8 +697,8 @@ public final class NativeJSAdapter extends ScriptObject {
if (methodHandle != null) {
return new GuardedInvocation(
methodHandle,
- adaptee.getProtoSwitchPoint(hook, findData.getOwner()),
- testJSAdaptor(adaptee, findData.getGetter(Object.class), findData.getOwner(), func));
+ testJSAdaptor(adaptee, findData.getGetter(Object.class, INVALID_PROGRAM_POINT, null), findData.getOwner(), func),
+ adaptee.getProtoSwitchPoint(hook, findData.getOwner()));
}
}
}
@@ -709,7 +710,7 @@ public final class NativeJSAdapter extends ScriptObject {
final MethodHandle methodHandle = hook.equals(__put__) ?
MH.asType(Lookup.EMPTY_SETTER, type) :
Lookup.emptyGetter(type.returnType());
- return new GuardedInvocation(methodHandle, adaptee.getProtoSwitchPoint(hook, null), testJSAdaptor(adaptee, null, null, null));
+ return new GuardedInvocation(methodHandle, testJSAdaptor(adaptee, null, null, null), adaptee.getProtoSwitchPoint(hook, null));
}
}