Java Code Examples for jdk.nashorn.internal.runtime.Undefined

The following are top voted examples for showing how to use jdk.nashorn.internal.runtime.Undefined. These examples are extracted from open source projects. You can vote up the examples you like and your votes will be used in our system to generate more good examples.
Example 1
Project: Nasapi   File: Mapping.java   Source Code and License 6 votes vote down vote up
public Object doMethod(String httpMethod,
					   String path,
					   EndpointRequest request,
					   EndpointResponse response) throws NasapiException {
	if (methods.containsKey(httpMethod)) {
		Object result = methods.get(httpMethod).call(this, request, response);
		if (result != null && result instanceof Undefined) {
			return null;
		}
		return result;
	} else if (METHOD_OPTIONS.equals(httpMethod)) {
		// build default options into response...
		response.setStatus(200);
		response.setHeader(HttpHeaders.ALLOW, allowedMethods);
		response.setBody(null);
	} else {
		throw new MethodNotAllowedException("URI '" + path + "' does not support method '" + httpMethod + "'", allowedMethods);
	}
	return null;
}
 
Example 2
Project: OpenJSharp   File: JavaAdapterServices.java   Source Code and License 6 votes vote down vote up
/**
 * Given a JS script object, retrieves a function from it by name, binds it to the script object as its "this", and
 * adapts its parameter types, return types, and arity to the specified type and arity. This method is public mainly
 * for implementation reasons, so the adapter classes can invoke it from their constructors that take a Object
 * in its first argument to obtain the method handles for their method implementations.
 * @param obj the script obj
 * @param name the name of the property that contains the function
 * @param type the method type it has to conform to
 * @return the appropriately adapted method handle for invoking the script function, or null if the value of the
 * property is either null or undefined, or "toString" was requested as the name, but the object doesn't directly
 * define it but just inherits it through prototype.
 */
public static MethodHandle getHandle(final Object obj, final String name, final MethodType type) {
    if (! (obj instanceof ScriptObject)) {
        throw typeError("not.an.object", ScriptRuntime.safeToString(obj));
    }

    final ScriptObject sobj = (ScriptObject)obj;
    // Since every JS Object has a toString, we only override "String toString()" it if it's explicitly specified
    if ("toString".equals(name) && !sobj.hasOwnProperty("toString")) {
        return null;
    }

    final Object fnObj = sobj.get(name);
    if (fnObj instanceof ScriptFunction) {
        return bindAndAdaptHandle((ScriptFunction)fnObj, sobj, type);
    } else if(fnObj == null || fnObj instanceof Undefined) {
        return null;
    } else {
        throw typeError("not.a.function", name);
    }
}
 
Example 3
Project: OpenJSharp   File: ObjectType.java   Source Code and License 6 votes vote down vote up
@Override
public Type ldc(final MethodVisitor method, final Object c) {
    if (c == null) {
        method.visitInsn(ACONST_NULL);
    } else if (c instanceof Undefined) {
        return loadUndefined(method);
    } else if (c instanceof String) {
        method.visitLdcInsn(c);
        return STRING;
    } else if (c instanceof Handle) {
        method.visitLdcInsn(c);
        return Type.typeFor(MethodHandle.class);
    } else {
        throw new UnsupportedOperationException("implementation missing for class " + c.getClass() + " value=" + c);
    }

    return Type.OBJECT;
}
 
Example 4
Project: openjdk-jdk10   File: MapIterator.java   Source Code and License 6 votes vote down vote up
@Override
protected  IteratorResult next(final Object arg) {
    if (iterator == null) {
        return makeResult(Undefined.getUndefined(), Boolean.TRUE, global);
    }

    final LinkedMap.Node node = iterator.next();

    if (node == null) {
        iterator = null;
        return makeResult(Undefined.getUndefined(), Boolean.TRUE, global);
    }

    if (iterationKind == IterationKind.KEY_VALUE) {
        final NativeArray array = new NativeArray(new Object[] {node.getKey(), node.getValue()});
        return makeResult(array, Boolean.FALSE, global);
    }

    return makeResult(iterationKind == IterationKind.KEY ? node.getKey() : node.getValue(), Boolean.FALSE, global);
}
 
Example 5
Project: openjdk-jdk10   File: SetIterator.java   Source Code and License 6 votes vote down vote up
@Override
protected  IteratorResult next(final Object arg) {
    if (iterator == null) {
        return makeResult(Undefined.getUndefined(), Boolean.TRUE, global);
    }

    final LinkedMap.Node node = iterator.next();

    if (node == null) {
        iterator = null;
        return makeResult(Undefined.getUndefined(), Boolean.TRUE, global);
    }

    if (iterationKind == IterationKind.KEY_VALUE) {
        final NativeArray array = new NativeArray(new Object[] {node.getKey(), node.getKey()});
        return makeResult(array, Boolean.FALSE, global);
    }

    return makeResult(node.getKey(), Boolean.FALSE, global);
}
 
Example 6
Project: openjdk-jdk10   File: StringIterator.java   Source Code and License 6 votes vote down vote up
@Override
protected IteratorResult next(final Object arg) {
    final int index = nextIndex;
    final String string = iteratedString;

    if (string == null || index >= string.length()) {
        // ES6 21.1.5.2.1 step 8
        iteratedString = null;
        return makeResult(Undefined.getUndefined(), Boolean.TRUE, global);
    }

    final char first = string.charAt(index);
    if (first >= 0xd800 && first <= 0xdbff && index < string.length() - 1) {
        final char second = string.charAt(index + 1);
        if (second >= 0xdc00 && second <= 0xdfff) {
            nextIndex += 2;
            return makeResult(String.valueOf(new char[] {first, second}), Boolean.FALSE, global);
        }
    }

    nextIndex++;
    return makeResult(String.valueOf(first), Boolean.FALSE, global);
}
 
Example 7
Project: openjdk-jdk10   File: ObjectType.java   Source Code and License 6 votes vote down vote up
@Override
public Type ldc(final MethodVisitor method, final Object c) {
    if (c == null) {
        method.visitInsn(ACONST_NULL);
    } else if (c instanceof Undefined) {
        return loadUndefined(method);
    } else if (c instanceof String) {
        method.visitLdcInsn(c);
        return STRING;
    } else if (c instanceof Handle) {
        method.visitLdcInsn(c);
        return Type.typeFor(MethodHandle.class);
    } else {
        throw new UnsupportedOperationException("implementation missing for class " + c.getClass() + " value=" + c);
    }

    return Type.OBJECT;
}
 
Example 8
Project: openjdk9   File: MapIterator.java   Source Code and License 6 votes vote down vote up
@Override
protected  IteratorResult next(final Object arg) {
    if (iterator == null) {
        return makeResult(Undefined.getUndefined(), Boolean.TRUE, global);
    }

    final LinkedMap.Node node = iterator.next();

    if (node == null) {
        iterator = null;
        return makeResult(Undefined.getUndefined(), Boolean.TRUE, global);
    }

    if (iterationKind == IterationKind.KEY_VALUE) {
        final NativeArray array = new NativeArray(new Object[] {node.getKey(), node.getValue()});
        return makeResult(array, Boolean.FALSE, global);
    }

    return makeResult(iterationKind == IterationKind.KEY ? node.getKey() : node.getValue(), Boolean.FALSE, global);
}
 
Example 9
Project: openjdk9   File: SetIterator.java   Source Code and License 6 votes vote down vote up
@Override
protected  IteratorResult next(final Object arg) {
    if (iterator == null) {
        return makeResult(Undefined.getUndefined(), Boolean.TRUE, global);
    }

    final LinkedMap.Node node = iterator.next();

    if (node == null) {
        iterator = null;
        return makeResult(Undefined.getUndefined(), Boolean.TRUE, global);
    }

    if (iterationKind == IterationKind.KEY_VALUE) {
        final NativeArray array = new NativeArray(new Object[] {node.getKey(), node.getKey()});
        return makeResult(array, Boolean.FALSE, global);
    }

    return makeResult(node.getKey(), Boolean.FALSE, global);
}
 
Example 10
Project: openjdk9   File: StringIterator.java   Source Code and License 6 votes vote down vote up
@Override
protected IteratorResult next(final Object arg) {
    final int index = nextIndex;
    final String string = iteratedString;

    if (string == null || index >= string.length()) {
        // ES6 21.1.5.2.1 step 8
        iteratedString = null;
        return makeResult(Undefined.getUndefined(), Boolean.TRUE, global);
    }

    final char first = string.charAt(index);
    if (first >= 0xd800 && first <= 0xdbff && index < string.length() - 1) {
        final char second = string.charAt(index + 1);
        if (second >= 0xdc00 && second <= 0xdfff) {
            nextIndex += 2;
            return makeResult(String.valueOf(new char[] {first, second}), Boolean.FALSE, global);
        }
    }

    nextIndex++;
    return makeResult(String.valueOf(first), Boolean.FALSE, global);
}
 
Example 11
Project: openjdk9   File: ObjectType.java   Source Code and License 6 votes vote down vote up
@Override
public Type ldc(final MethodVisitor method, final Object c) {
    if (c == null) {
        method.visitInsn(ACONST_NULL);
    } else if (c instanceof Undefined) {
        return loadUndefined(method);
    } else if (c instanceof String) {
        method.visitLdcInsn(c);
        return STRING;
    } else if (c instanceof Handle) {
        method.visitLdcInsn(c);
        return Type.typeFor(MethodHandle.class);
    } else {
        throw new UnsupportedOperationException("implementation missing for class " + c.getClass() + " value=" + c);
    }

    return Type.OBJECT;
}
 
Example 12
Project: kaziranga   File: JavaAdapterServices.java   Source Code and License 6 votes vote down vote up
/**
 * Given a JS script object, retrieves a function from it by name, binds it to the script object as its "this", and
 * adapts its parameter types, return types, and arity to the specified type and arity. This method is public mainly
 * for implementation reasons, so the adapter classes can invoke it from their constructors that take a Object
 * in its first argument to obtain the method handles for their method implementations.
 * @param obj the script obj
 * @param name the name of the property that contains the function
 * @param type the method type it has to conform to
 * @return the appropriately adapted method handle for invoking the script function, or null if the value of the
 * property is either null or undefined, or "toString" was requested as the name, but the object doesn't directly
 * define it but just inherits it through prototype.
 */
public static MethodHandle getHandle(final Object obj, final String name, final MethodType type) {
    if (! (obj instanceof ScriptObject)) {
        throw typeError("not.an.object", ScriptRuntime.safeToString(obj));
    }

    final ScriptObject sobj = (ScriptObject)obj;
    // Since every JS Object has a toString, we only override "String toString()" it if it's explicitly specified
    if ("toString".equals(name) && !sobj.hasOwnProperty("toString")) {
        return null;
    }

    final Object fnObj = sobj.get(name);
    if (fnObj instanceof ScriptFunction) {
        return bindAndAdaptHandle((ScriptFunction)fnObj, sobj, type);
    } else if(fnObj == null || fnObj instanceof Undefined) {
        return null;
    } else {
        throw typeError("not.a.function", name);
    }
}
 
Example 13
Project: kaziranga   File: ObjectType.java   Source Code and License 6 votes vote down vote up
@Override
public Type ldc(final MethodVisitor method, final Object c) {
    if (c == null) {
        method.visitInsn(ACONST_NULL);
    } else if (c instanceof Undefined) {
        return loadUndefined(method);
    } else if (c instanceof String) {
        method.visitLdcInsn(c);
        return STRING;
    } else if (c instanceof Handle) {
        method.visitLdcInsn(c);
        return Type.typeFor(MethodHandle.class);
    } else {
        throw new UnsupportedOperationException("implementation missing for class " + c.getClass() + " value=" + c);
    }

    return Type.OBJECT;
}
 
Example 14
Project: MultiScripts   File: Util.java   Source Code and License 6 votes vote down vote up
public static Object toJSValue(Value value){
    if(value == null)
        return Undefined.getUndefined();

    if(value == Value.VOID)
        return Undefined.getUndefined();

    if(value.isString())
        return new JSStringValue(value);

    if(value.isBoolean()|| value.isNumber())
        return value.get();

    if(value.isFunction())
        return new JSFunction(value);

    if(value.isArray())
        return new JSArray(value);

    if(value.isMap())
        return new JSMap(value);

    return Undefined.getUndefined();
}
 
Example 15
Project: lookaside_java-1.8.0-openjdk   File: JavaAdapterServices.java   Source Code and License 6 votes vote down vote up
/**
 * Given a JS script object, retrieves a function from it by name, binds it to the script object as its "this", and
 * adapts its parameter types, return types, and arity to the specified type and arity. This method is public mainly
 * for implementation reasons, so the adapter classes can invoke it from their constructors that take a Object
 * in its first argument to obtain the method handles for their method implementations.
 * @param obj the script obj
 * @param name the name of the property that contains the function
 * @param type the method type it has to conform to
 * @return the appropriately adapted method handle for invoking the script function, or null if the value of the
 * property is either null or undefined, or "toString" was requested as the name, but the object doesn't directly
 * define it but just inherits it through prototype.
 */
public static MethodHandle getHandle(final Object obj, final String name, final MethodType type) {
    if (! (obj instanceof ScriptObject)) {
        throw typeError("not.an.object", ScriptRuntime.safeToString(obj));
    }

    final ScriptObject sobj = (ScriptObject)obj;
    // Since every JS Object has a toString, we only override "String toString()" it if it's explicitly specified
    if ("toString".equals(name) && !sobj.hasOwnProperty("toString")) {
        return null;
    }

    final Object fnObj = sobj.get(name);
    if (fnObj instanceof ScriptFunction) {
        return bindAndAdaptHandle((ScriptFunction)fnObj, sobj, type);
    } else if(fnObj == null || fnObj instanceof Undefined) {
        return null;
    } else {
        throw typeError("not.a.function", name);
    }
}
 
Example 16
Project: lookaside_java-1.8.0-openjdk   File: ObjectType.java   Source Code and License 6 votes vote down vote up
@Override
public Type ldc(final MethodVisitor method, final Object c) {
    if (c == null) {
        method.visitInsn(ACONST_NULL);
    } else if (c instanceof Undefined) {
        return loadUndefined(method);
    } else if (c instanceof String) {
        method.visitLdcInsn(c);
        return STRING;
    } else if (c instanceof Handle) {
        method.visitLdcInsn(c);
        return Type.typeFor(MethodHandle.class);
    } else {
        throw new UnsupportedOperationException("implementation missing for class " + c.getClass() + " value=" + c);
    }

    return Type.OBJECT;
}
 
Example 17
Project: jdk8u_nashorn   File: JavaAdapterServices.java   Source Code and License 6 votes vote down vote up
/**
 * Given a JS script object, retrieves a function from it by name, binds it to the script object as its "this", and
 * adapts its parameter types, return types, and arity to the specified type and arity. This method is public mainly
 * for implementation reasons, so the adapter classes can invoke it from their constructors that take a Object
 * in its first argument to obtain the method handles for their method implementations.
 * @param obj the script obj
 * @param name the name of the property that contains the function
 * @param type the method type it has to conform to
 * @return the appropriately adapted method handle for invoking the script function, or null if the value of the
 * property is either null or undefined, or "toString" was requested as the name, but the object doesn't directly
 * define it but just inherits it through prototype.
 */
public static MethodHandle getHandle(final Object obj, final String name, final MethodType type) {
    if (! (obj instanceof ScriptObject)) {
        throw typeError("not.an.object", ScriptRuntime.safeToString(obj));
    }

    final ScriptObject sobj = (ScriptObject)obj;
    // Since every JS Object has a toString, we only override "String toString()" it if it's explicitly specified
    if ("toString".equals(name) && !sobj.hasOwnProperty("toString")) {
        return null;
    }

    final Object fnObj = sobj.get(name);
    if (fnObj instanceof ScriptFunction) {
        return bindAndAdaptHandle((ScriptFunction)fnObj, sobj, type);
    } else if(fnObj == null || fnObj instanceof Undefined) {
        return null;
    } else {
        throw typeError("not.a.function", name);
    }
}
 
Example 18
Project: jdk8u_nashorn   File: ObjectType.java   Source Code and License 6 votes vote down vote up
@Override
public Type ldc(final MethodVisitor method, final Object c) {
    if (c == null) {
        method.visitInsn(ACONST_NULL);
    } else if (c instanceof Undefined) {
        return loadUndefined(method);
    } else if (c instanceof String) {
        method.visitLdcInsn(c);
        return STRING;
    } else if (c instanceof Handle) {
        method.visitLdcInsn(c);
        return Type.typeFor(MethodHandle.class);
    } else {
        throw new UnsupportedOperationException("implementation missing for class " + c.getClass() + " value=" + c);
    }

    return Type.OBJECT;
}
 
Example 19
Project: infobip-open-jdk-8   File: JavaAdapterServices.java   Source Code and License 6 votes vote down vote up
/**
 * Given a JS script object, retrieves a function from it by name, binds it to the script object as its "this", and
 * adapts its parameter types, return types, and arity to the specified type and arity. This method is public mainly
 * for implementation reasons, so the adapter classes can invoke it from their constructors that take a Object
 * in its first argument to obtain the method handles for their method implementations.
 * @param obj the script obj
 * @param name the name of the property that contains the function
 * @param type the method type it has to conform to
 * @return the appropriately adapted method handle for invoking the script function, or null if the value of the
 * property is either null or undefined, or "toString" was requested as the name, but the object doesn't directly
 * define it but just inherits it through prototype.
 */
public static MethodHandle getHandle(final Object obj, final String name, final MethodType type) {
    if (! (obj instanceof ScriptObject)) {
        throw typeError("not.an.object", ScriptRuntime.safeToString(obj));
    }

    final ScriptObject sobj = (ScriptObject)obj;
    // Since every JS Object has a toString, we only override "String toString()" it if it's explicitly specified
    if ("toString".equals(name) && !sobj.hasOwnProperty("toString")) {
        return null;
    }

    final Object fnObj = sobj.get(name);
    if (fnObj instanceof ScriptFunction) {
        return bindAndAdaptHandle((ScriptFunction)fnObj, sobj, type);
    } else if(fnObj == null || fnObj instanceof Undefined) {
        return null;
    } else {
        throw typeError("not.a.function", name);
    }
}
 
Example 20
Project: infobip-open-jdk-8   File: ObjectType.java   Source Code and License 6 votes vote down vote up
@Override
public Type ldc(final MethodVisitor method, final Object c) {
    if (c == null) {
        method.visitInsn(ACONST_NULL);
    } else if (c instanceof Undefined) {
        return loadUndefined(method);
    } else if (c instanceof String) {
        method.visitLdcInsn(c);
        return STRING;
    } else if (c instanceof Handle) {
        method.visitLdcInsn(c);
        return Type.typeFor(MethodHandle.class);
    } else {
        throw new UnsupportedOperationException("implementation missing for class " + c.getClass() + " value=" + c);
    }

    return Type.OBJECT;
}
 
Example 21
Project: OLD-OpenJDK8   File: NashornLinker.java   Source Code and License 6 votes vote down vote up
@Override
public GuardedInvocation getGuardedInvocation(final LinkRequest request, final LinkerServices linkerServices) throws Exception {
    final LinkRequest requestWithoutContext = request.withoutRuntimeContext(); // Nashorn has no runtime context
    final Object self = requestWithoutContext.getReceiver();
    final CallSiteDescriptor desc = requestWithoutContext.getCallSiteDescriptor();

    if (desc.getNameTokenCount() < 2 || !"dyn".equals(desc.getNameToken(CallSiteDescriptor.SCHEME))) {
        // We only support standard "dyn:*[:*]" operations
        return null;
    }

    final GuardedInvocation inv;
    if (self instanceof ScriptObject) {
        inv = ((ScriptObject)self).lookup(desc, request);
    } else if (self instanceof Undefined) {
        inv = Undefined.lookup(desc);
    } else {
        throw new AssertionError(); // Should never reach here.
    }

    return Bootstrap.asType(inv, linkerServices, desc);
}
 
Example 22
Project: OLD-OpenJDK8   File: JavaAdapterServices.java   Source Code and License 6 votes vote down vote up
/**
 * Given a JS script object, retrieves a function from it by name, binds it to the script object as its "this", and
 * adapts its parameter types, return types, and arity to the specified type and arity. This method is public mainly
 * for implementation reasons, so the adapter classes can invoke it from their constructors that take a Object
 * in its first argument to obtain the method handles for their method implementations.
 * @param obj the script obj
 * @param name the name of the property that contains the function
 * @param type the method type it has to conform to
 * @return the appropriately adapted method handle for invoking the script function, or null if the value of the
 * property is either null or undefined, or "toString" was requested as the name, but the object doesn't directly
 * define it but just inherits it through prototype.
 */
public static MethodHandle getHandle(final Object obj, final String name, final MethodType type) {
    if (! (obj instanceof ScriptObject)) {
        throw typeError("not.an.object", ScriptRuntime.safeToString(obj));
    }

    final ScriptObject sobj = (ScriptObject)obj;
    // Since every JS Object has a toString, we only override "String toString()" it if it's explicitly specified
    if ("toString".equals(name) && !sobj.hasOwnProperty("toString")) {
        return null;
    }

    final Object fnObj = sobj.get(name);
    if (fnObj instanceof ScriptFunction) {
        return bindAndAdaptHandle((ScriptFunction)fnObj, sobj, type);
    } else if(fnObj == null || fnObj instanceof Undefined) {
        return null;
    } else {
        throw typeError("not.a.function", name);
    }
}
 
Example 23
Project: nashorn-backport   File: NashornLinker.java   Source Code and License 6 votes vote down vote up
@Override
public GuardedInvocation getGuardedInvocation(final LinkRequest request, final LinkerServices linkerServices) throws Exception {
    final LinkRequest requestWithoutContext = request.withoutRuntimeContext(); // Nashorn has no runtime context
    final Object self = requestWithoutContext.getReceiver();
    final CallSiteDescriptor desc = requestWithoutContext.getCallSiteDescriptor();

    if (desc.getNameTokenCount() < 2 || !"dyn".equals(desc.getNameToken(CallSiteDescriptor.SCHEME))) {
        // We only support standard "dyn:*[:*]" operations
        return null;
    }

    final GuardedInvocation inv;
    if (self instanceof ScriptObject) {
        inv = ((ScriptObject)self).lookup(desc, request);
    } else if (self instanceof Undefined) {
        inv = Undefined.lookup(desc);
    } else {
        throw new AssertionError(); // Should never reach here.
    }

    return Bootstrap.asType(inv, linkerServices, desc);
}
 
Example 24
Project: nashorn-backport   File: JavaAdapterServices.java   Source Code and License 6 votes vote down vote up
/**
 * Given a JS script object, retrieves a function from it by name, binds it to the script object as its "this", and
 * adapts its parameter types, return types, and arity to the specified type and arity. This method is public mainly
 * for implementation reasons, so the adapter classes can invoke it from their constructors that take a Object
 * in its first argument to obtain the method handles for their method implementations.
 * @param obj the script obj
 * @param name the name of the property that contains the function
 * @param type the method type it has to conform to
 * @return the appropriately adapted method handle for invoking the script function, or null if the value of the
 * property is either null or undefined, or "toString" was requested as the name, but the object doesn't directly
 * define it but just inherits it through prototype.
 */
public static MethodHandle getHandle(final Object obj, final String name, final MethodType type) {
    if (! (obj instanceof ScriptObject)) {
        throw typeError("not.an.object", ScriptRuntime.safeToString(obj));
    }

    final ScriptObject sobj = (ScriptObject)obj;
    // Since every JS Object has a toString, we only override "String toString()" it if it's explicitly specified
    if ("toString".equals(name) && !sobj.hasOwnProperty("toString")) {
        return null;
    }

    final Object fnObj = sobj.get(name);
    if (fnObj instanceof ScriptFunction) {
        return adaptHandle(((ScriptFunction)fnObj).getBoundInvokeHandle(sobj), type);
    } else if(fnObj == null || fnObj instanceof Undefined) {
        return null;
    } else {
        throw typeError("not.a.function", name);
    }
}
 
Example 25
Project: nashorn   File: NashornLinker.java   Source Code and License 6 votes vote down vote up
@Override
public GuardedInvocation getGuardedInvocation(final LinkRequest request, final LinkerServices linkerServices) throws Exception {
    final LinkRequest requestWithoutContext = request.withoutRuntimeContext(); // Nashorn has no runtime context
    final Object self = requestWithoutContext.getReceiver();
    final CallSiteDescriptor desc = requestWithoutContext.getCallSiteDescriptor();

    if (desc.getNameTokenCount() < 2 || !"dyn".equals(desc.getNameToken(CallSiteDescriptor.SCHEME))) {
        // We only support standard "dyn:*[:*]" operations
        return null;
    }

    final GuardedInvocation inv;
    if (self instanceof ScriptObject) {
        inv = ((ScriptObject)self).lookup(desc, request);
    } else if (self instanceof Undefined) {
        inv = Undefined.lookup(desc);
    } else {
        throw new AssertionError(); // Should never reach here.
    }

    return Bootstrap.asType(inv, linkerServices, desc);
}
 
Example 26
Project: nashorn   File: JavaAdapterServices.java   Source Code and License 6 votes vote down vote up
/**
 * Given a JS script object, retrieves a function from it by name, binds it to the script object as its "this", and
 * adapts its parameter types, return types, and arity to the specified type and arity. This method is public mainly
 * for implementation reasons, so the adapter classes can invoke it from their constructors that take a Object
 * in its first argument to obtain the method handles for their method implementations.
 * @param obj the script obj
 * @param name the name of the property that contains the function
 * @param type the method type it has to conform to
 * @return the appropriately adapted method handle for invoking the script function, or null if the value of the
 * property is either null or undefined, or "toString" was requested as the name, but the object doesn't directly
 * define it but just inherits it through prototype.
 */
public static MethodHandle getHandle(final Object obj, final String name, final MethodType type) {
    if (! (obj instanceof ScriptObject)) {
        throw typeError("not.an.object", ScriptRuntime.safeToString(obj));
    }

    final ScriptObject sobj = (ScriptObject)obj;
    // Since every JS Object has a toString, we only override "String toString()" it if it's explicitly specified
    if ("toString".equals(name) && !sobj.hasOwnProperty("toString")) {
        return null;
    }

    final Object fnObj = sobj.get(name);
    if (fnObj instanceof ScriptFunction) {
        return adaptHandle(((ScriptFunction)fnObj).getBoundInvokeHandle(sobj), type);
    } else if(fnObj == null || fnObj instanceof Undefined) {
        return null;
    } else {
        throw typeError("not.a.function", name);
    }
}
 
Example 27
Project: OpenJSharp   File: NativeArray.java   Source Code and License 5 votes vote down vote up
private static MethodHandle getREDUCE_CALLBACK_INVOKER() {
    return Global.instance().getDynamicInvoker(REDUCE_CALLBACK_INVOKER,
            new Callable<MethodHandle>() {
                @Override
                public MethodHandle call() {
                    return Bootstrap.createDynamicInvoker("dyn:call", Object.class, Object.class,
                         Undefined.class, Object.class, Object.class, long.class, Object.class);
                }
            });
}
 
Example 28
Project: OpenJSharp   File: NashornLinker.java   Source Code and License 5 votes vote down vote up
private static GuardedInvocation getGuardedInvocation(final Object self, final LinkRequest request, final CallSiteDescriptor desc) {
    final GuardedInvocation inv;
    if (self instanceof ScriptObject) {
        inv = ((ScriptObject)self).lookup(desc, request);
    } else if (self instanceof Undefined) {
        inv = Undefined.lookup(desc);
    } else {
        throw new AssertionError(self.getClass().getName()); // Should never reach here.
    }

    return inv;
}
 
Example 29
Project: openjdk-jdk10   File: NativeSymbol.java   Source Code and License 5 votes vote down vote up
/**
 * ECMA 6 19.4.1.1 Symbol ( [ description ] )
 *
 * @param newObj is this function invoked with the new operator
 * @param self   self reference
 * @param args   arguments
 * @return new symbol value
 */
@Constructor(arity = 1)
public static Object constructor(final boolean newObj, final Object self, final Object... args) {
    if (newObj) {
        throw typeError("symbol.as.constructor");
    }
    final String description = args.length > 0 && args[0] != Undefined.getUndefined() ?
            JSType.toString(args[0]) : "";
    return new Symbol(description);
}
 
Example 30
Project: openjdk-jdk10   File: NativeSymbol.java   Source Code and License 5 votes vote down vote up
/**
 * ES6 19.4.2.5 Symbol.keyFor ( sym )
 *
 * @param self self reference
 * @param arg the argument
 * @return the symbol name
 */
@Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR)
public synchronized static Object keyFor(final Object self, final Object arg) {
    if (!(arg instanceof Symbol)) {
        throw typeError("not.a.symbol", ScriptRuntime.safeToString(arg));
    }
    final String name = ((Symbol) arg).getName();
    return globalSymbolRegistry.get(name) == arg ? name : Undefined.getUndefined();
}
 
Example 31
Project: openjdk-jdk10   File: NativeWeakSet.java   Source Code and License 5 votes vote down vote up
static void populateWeakSet(final Map<Object, Boolean> set, final Object arg, final Global global) {
    if (arg != null && arg != Undefined.getUndefined()) {
        AbstractIterator.iterate(arg, global, value -> {
                set.put(checkKey(value), Boolean.TRUE);
        });
    }
}
 
Example 32
Project: openjdk-jdk10   File: NativeArray.java   Source Code and License 5 votes vote down vote up
private static MethodHandle getREDUCE_CALLBACK_INVOKER() {
    return Global.instance().getDynamicInvoker(REDUCE_CALLBACK_INVOKER,
            new Callable<MethodHandle>() {
                @Override
                public MethodHandle call() {
                    return Bootstrap.createDynamicCallInvoker(Object.class, Object.class,
                         Undefined.class, Object.class, Object.class, double.class, Object.class);
                }
            });
}
 
Example 33
Project: openjdk-jdk10   File: NativeMap.java   Source Code and License 5 votes vote down vote up
static void populateMap(final LinkedMap map, final Object arg, final Global global) {
    if (arg != null && arg != Undefined.getUndefined()) {
        AbstractIterator.iterate(arg, global, value -> {
            if (JSType.isPrimitive(value)) {
                throw typeError(global, "not.an.object", ScriptRuntime.safeToString(value));
            }
            if (value instanceof ScriptObject) {
                final ScriptObject sobj = (ScriptObject) value;
                map.set(convertKey(sobj.get(0)), sobj.get(1));
            }
        });
    }
}
 
Example 34
Project: openjdk-jdk10   File: NativeWeakMap.java   Source Code and License 5 votes vote down vote up
/**
 * ECMA6 23.3.3.3 WeakMap.prototype.get ( key )
 *
 * @param self the self reference
 * @param key the key
 * @return the associated value or undefined
 */
@Function(attributes = Attribute.NOT_ENUMERABLE)
public static Object get(final Object self, final Object key) {
    final NativeWeakMap map = getMap(self);
    if (isPrimitive(key)) {
        return Undefined.getUndefined();
    }
    return map.jmap.get(key);
}
 
Example 35
Project: openjdk-jdk10   File: NativeWeakMap.java   Source Code and License 5 votes vote down vote up
static void populateMap(final Map<Object, Object> map, final Object arg, final Global global) {
    // This method is similar to NativeMap.populateMap, but it uses a different
    // map implementation and the checking/conversion of keys differs as well.
    if (arg != null && arg != Undefined.getUndefined()) {
        AbstractIterator.iterate(arg, global, value -> {
            if (isPrimitive(value)) {
                throw typeError(global, "not.an.object", ScriptRuntime.safeToString(value));
            }
            if (value instanceof ScriptObject) {
                final ScriptObject sobj = (ScriptObject) value;
                map.put(checkKey(sobj.get(0)), sobj.get(1));
            }
        });
    }
}
 
Example 36
Project: openjdk-jdk10   File: NashornLinker.java   Source Code and License 5 votes vote down vote up
private static GuardedInvocation getGuardedInvocation(final LinkRequest request, final CallSiteDescriptor desc) {
    final Object self = request.getReceiver();

    final GuardedInvocation inv;
    if (self instanceof ScriptObject) {
        inv = ((ScriptObject)self).lookup(desc, request);
    } else if (self instanceof Undefined) {
        inv = Undefined.lookup(desc);
    } else {
        throw new AssertionError(self.getClass().getName()); // Should never reach here.
    }

    return inv;
}
 
Example 37
Project: openjdk9   File: NativeSymbol.java   Source Code and License 5 votes vote down vote up
/**
 * ECMA 6 19.4.1.1 Symbol ( [ description ] )
 *
 * @param newObj is this function invoked with the new operator
 * @param self   self reference
 * @param args   arguments
 * @return new symbol value
 */
@Constructor(arity = 1)
public static Object constructor(final boolean newObj, final Object self, final Object... args) {
    if (newObj) {
        throw typeError("symbol.as.constructor");
    }
    final String description = args.length > 0 && args[0] != Undefined.getUndefined() ?
            JSType.toString(args[0]) : "";
    return new Symbol(description);
}
 
Example 38
Project: openjdk9   File: NativeSymbol.java   Source Code and License 5 votes vote down vote up
/**
 * ES6 19.4.2.5 Symbol.keyFor ( sym )
 *
 * @param self self reference
 * @param arg the argument
 * @return the symbol name
 */
@Function(attributes = Attribute.NOT_ENUMERABLE, where = Where.CONSTRUCTOR)
public synchronized static Object keyFor(final Object self, final Object arg) {
    if (!(arg instanceof Symbol)) {
        throw typeError("not.a.symbol", ScriptRuntime.safeToString(arg));
    }
    final String name = ((Symbol) arg).getName();
    return globalSymbolRegistry.get(name) == arg ? name : Undefined.getUndefined();
}
 
Example 39
Project: openjdk9   File: NativeWeakSet.java   Source Code and License 5 votes vote down vote up
static void populateWeakSet(final Map<Object, Boolean> set, final Object arg, final Global global) {
    if (arg != null && arg != Undefined.getUndefined()) {
        AbstractIterator.iterate(arg, global, value -> {
                set.put(checkKey(value), Boolean.TRUE);
        });
    }
}
 
Example 40
Project: openjdk9   File: NativeArray.java   Source Code and License 5 votes vote down vote up
private static MethodHandle getREDUCE_CALLBACK_INVOKER() {
    return Global.instance().getDynamicInvoker(REDUCE_CALLBACK_INVOKER,
            new Callable<MethodHandle>() {
                @Override
                public MethodHandle call() {
                    return Bootstrap.createDynamicCallInvoker(Object.class, Object.class,
                         Undefined.class, Object.class, Object.class, double.class, Object.class);
                }
            });
}