use of com.oracle.truffle.api.interop.UnsupportedTypeException in project graal by oracle.
the class LanguageSPITest method testPolyglotBindingsPreserveLanguage.
@Test
public void testPolyglotBindingsPreserveLanguage() {
ProxyLanguage.setDelegate(new ProxyLanguage() {
@Override
protected CallTarget parse(ParsingRequest request) throws Exception {
return Truffle.getRuntime().createCallTarget(new RootNode(languageInstance) {
@Override
public Object execute(VirtualFrame frame) {
Object bindings = getCurrentContext(ProxyLanguage.class).env.getPolyglotBindings();
try {
ForeignAccess.sendWrite(Message.WRITE.createNode(), (TruffleObject) bindings, "exportedValue", "convertOnToString");
} catch (UnknownIdentifierException | UnsupportedTypeException | UnsupportedMessageException e) {
throw new AssertionError(e);
}
return bindings;
}
});
}
@Override
protected String toString(LanguageContext context, Object value) {
if (value.equals("convertOnToString")) {
return "myStringToString";
}
return super.toString(context, value);
}
});
Context c = Context.create();
c.eval(ProxyLanguage.ID, "");
assertEquals("Make sure language specific toString was invoked.", "myStringToString", c.getPolyglotBindings().getMember("exportedValue").toString());
}
use of com.oracle.truffle.api.interop.UnsupportedTypeException in project sulong by graalvm.
the class LLVMTruffleExecute method doExecute.
@ExplodeLoop
private Object doExecute(VirtualFrame frame, TruffleObject value, LLVMContext context, LLVMGetStackNode getStack) {
Object[] evaluatedArgs = new Object[args.length];
for (int i = 0; i < args.length; i++) {
evaluatedArgs[i] = prepareValuesForEscape[i].executeWithTarget(args[i].executeGeneric(frame));
}
try {
LLVMStack stack = getStack.executeWithTarget(getThreadingStack(context), Thread.currentThread());
Object rawValue;
try (StackPointer save = stack.newFrame()) {
rawValue = ForeignAccess.sendExecute(foreignExecute, value, evaluatedArgs);
}
return toLLVM.executeWithTarget(rawValue);
} catch (UnsupportedMessageException | UnsupportedTypeException | ArityException e) {
CompilerDirectives.transferToInterpreter();
throw new IllegalStateException(e);
}
}
use of com.oracle.truffle.api.interop.UnsupportedTypeException in project graal by oracle.
the class ValidTruffleObject15Test method expectUnsupportedSpecializationException.
@Test(expected = UnsupportedSpecializationException.class)
public void expectUnsupportedSpecializationException() {
ValidTruffleObject15 object = new ValidTruffleObject15();
Node read = Message.WRITE.createNode();
try {
ForeignAccess.sendWrite(read, object, "name", new UnknownObject());
} catch (UnknownIdentifierException e) {
Assert.fail();
} catch (UnsupportedMessageException e) {
Assert.fail();
} catch (UnsupportedTypeException e) {
Assert.fail();
}
}
use of com.oracle.truffle.api.interop.UnsupportedTypeException in project graal by oracle.
the class JavaInteropTest method testException2.
@Test
public void testException2() throws InteropException {
TruffleObject hashMapClass = JavaInterop.asTruffleObject(HashMap.class);
try {
ForeignAccess.sendNew(Message.createNew(0).createNode(), hashMapClass, -1);
fail("expected an exception but none was thrown");
} catch (InteropException ex) {
throw ex;
} catch (Exception ex) {
assertTrue("expected HostException but was: " + ex.getClass(), JavaInterop.isHostException(ex));
assertThat(JavaInterop.asHostException(ex), CoreMatchers.instanceOf(IllegalArgumentException.class));
}
try {
ForeignAccess.sendNew(Message.createNew(0).createNode(), hashMapClass, "");
fail("expected an exception but none was thrown");
} catch (UnsupportedTypeException ex) {
}
}
use of com.oracle.truffle.api.interop.UnsupportedTypeException in project graal by oracle.
the class TruffleExecuteNode method execute.
public Object execute(Object languageContext, TruffleObject function, Object functionArgsObject, Class<?> resultClass, Type resultType) {
Object[] argsArray;
if (functionArgsObject instanceof Object[]) {
argsArray = (Object[]) functionArgsObject;
} else {
if (functionArgsObject == null) {
argsArray = EMPTY;
} else {
argsArray = new Object[] { functionArgsObject };
}
}
Object[] functionArgs = toGuests.apply(languageContext, argsArray);
Object result;
boolean executable = condition.profile(sendIsExecutable(isExecutable, function));
try {
if (executable) {
result = sendExecute(execute, function, functionArgs);
} else if (sendIsInstantiable(isInstantiable, function)) {
result = sendNew(instantiate, function, functionArgs);
} else {
CompilerDirectives.transferToInterpreter();
throw JavaInteropErrors.executeUnsupported(languageContext, function);
}
} catch (UnsupportedTypeException e) {
CompilerDirectives.transferToInterpreter();
if (executable) {
throw JavaInteropErrors.invalidExecuteArgumentType(languageContext, function, functionArgs);
} else {
throw JavaInteropErrors.invalidInstantiateArgumentType(languageContext, function, functionArgs);
}
} catch (ArityException e) {
CompilerDirectives.transferToInterpreter();
if (executable) {
throw JavaInteropErrors.invalidExecuteArity(languageContext, function, functionArgs, e.getExpectedArity(), e.getActualArity());
} else {
throw JavaInteropErrors.invalidInstantiateArity(languageContext, function, functionArgs, e.getExpectedArity(), e.getActualArity());
}
} catch (UnsupportedMessageException e) {
CompilerDirectives.transferToInterpreter();
throw JavaInteropErrors.executeUnsupported(languageContext, function);
}
return toHost.execute(result, resultClass, resultType, languageContext);
}
Aggregations