static ToJavaNode[] createToJava(int argsLength) { ToJavaNode[] toJava = new ToJavaNode[argsLength]; for (int i = 0; i < argsLength; i++) { toJava[i] = ToJavaNode.create(); } return toJava; }
@Override public Node createToJavaNode() { return ToJavaNode.create(); }
/** * Takes executable object from a {@link TruffleLanguage} and converts it into an instance of a * <b>Java</b> <em>functional interface</em>. If the <code>functionalType</code> method is using * {@link java.lang.reflect.Method#isVarArgs() variable arguments}, then the arguments are * unwrapped and passed into the <code>function</code> as indivual arguments. * * @param <T> requested and returned type * @param functionalType interface with a single defined method - so called <em>functional * interface</em> * @param function <em>Truffle</em> that responds to {@link Message#IS_EXECUTABLE} and can be * invoked * @return instance of interface that wraps the provided <code>function</code> * @since 0.9 */ public static <T> T asJavaFunction(Class<T> functionalType, TruffleObject function) { RootNode root = new TemporaryConvertRoot(ToJavaNode.create(), function, functionalType); return functionalType.cast(Truffle.getRuntime().createCallTarget(root).call()); }
@CompilerDirectives.TruffleBoundary @SuppressWarnings("unchecked") private static <T> T convertToJavaObject(Class<T> type, TruffleObject foreignObject) { RootNode root = new TemporaryConvertRoot(ToJavaNode.create(), foreignObject, type); Object convertedValue = Truffle.getRuntime().createCallTarget(root).call(); return (T) convertedValue; }
private Object newArray(JavaObject receiver, Object[] args) { if (args.length != 1) { throw ArityException.raise(1, args.length); } if (toJava == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); toJava = insert(ToJavaNode.create()); } int length; try { length = (int) toJava.execute(args[0], int.class, null, receiver.languageContext); } catch (ClassCastException | NullPointerException e) { // conversion failed by ToJavaNode throw UnsupportedTypeException.raise(e, args); } Object array = Array.newInstance(receiver.asClass().getComponentType(), length); return JavaObject.forObject(array, receiver.languageContext); }
assert checkArgTypes(args, cachedArgTypes, ToJavaNode.create(), false) : Arrays.toString(cachedArgTypes);