private static boolean assertHandlesItself(TruffleObject receiver) { if (receiver.getForeignAccess() != null) { // to exercise the assertion in createCanHandleInlinedCallNode: createCanHandleInlinedCallNode(receiver.getForeignAccess(), receiver); } return true; }
@Override public Object executeWith(VirtualFrame frame, TruffleObject truffleObject, Object[] arguments) { return indirectCallNode.call(frame, truffleObject.getForeignAccessFactory().getAccess(access), ForeignAccessArguments.create(truffleObject, arguments)); } }
private static CachedObjectAccessNode createCachedAccess(TruffleObject receiver, Message accessTree, ObjectAccessNode next) { ForeignAccessFactory accessFactory = receiver.getForeignAccessFactory(); return new CachedObjectAccessNode(Truffle.getRuntime().createDirectCallNode(accessFactory.getAccess(accessTree)), next, accessFactory.getLanguageCheck()); }
@TruffleBoundary protected CallTarget createGenericMessageTarget(TruffleObject receiver) { return createMessageTarget(receiver.getForeignAccess()); }
@TruffleBoundary protected CallTarget createGenericMessageTarget(TruffleObject receiver) { assert assertHandlesItself(receiver); return createMessageTarget(receiver.getForeignAccess()); }