diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/APerm.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/APerm.java index c8bdd10f11b20611384f9ebe538b69db8e76fa49..ce7773cd0e722bf1364625862abc50595b80845f 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/APerm.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/APerm.java @@ -162,7 +162,11 @@ public abstract class APerm extends RBuiltinNode.Arg3 { RList dimNames = getDimNamesNode.getDimNames(vector); if (setDimNamesProfile.profile(dimNames != null)) { if (setDimNames == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); setDimNames = insert(SetDimNamesAttributeNode.create()); + } + if (extractListElement == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); extractListElement = insert(ExtractListElement.create()); } Object[] permData = new Object[dimNames.getLength()]; diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Eval.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Eval.java index 906f67906eb3c1dad6bc7903825c1530c41e04e9..12c2f8e4103696ec9f8fdae8fc157655946cae49 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Eval.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Eval.java @@ -33,6 +33,7 @@ import static com.oracle.truffle.r.runtime.RVisibility.CUSTOM; import static com.oracle.truffle.r.runtime.builtins.RBehavior.COMPLEX; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.INTERNAL; +import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.Specialization; @@ -142,6 +143,7 @@ public abstract class Eval extends RBuiltinNode.Arg3 { private void lazyCreateRList2EnvNode() { if (rList2EnvNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); rList2EnvNode = insert(RList2EnvNode.create()); } } diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateComment.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateComment.java index 1b796cf7b55f7c28d236089a3212dd6e2520b748..96098abefc211bb351b1eee2b3e7003c64030fde 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateComment.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateComment.java @@ -26,6 +26,7 @@ import static com.oracle.truffle.r.runtime.RDispatch.INTERNAL_GENERIC; import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.INTERNAL; +import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.r.nodes.attributes.RemoveFixedAttributeNode; @@ -60,6 +61,7 @@ public abstract class UpdateComment extends RBuiltinNode.Arg2 { @Specialization protected Object dim(RAbstractContainer container, RAbstractStringVector value) { if (setCommentAttrNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); setCommentAttrNode = insert(createGetCommentAttrNode()); } setCommentAttrNode.execute(container, value); diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/infix/Tilde.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/infix/Tilde.java index e9df0bec503f95337e99373fc28bbea6d17039bf..e5366c429bcfca8aaab5c7cfd18b306064f37039 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/infix/Tilde.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/infix/Tilde.java @@ -26,6 +26,7 @@ import static com.oracle.truffle.r.runtime.builtins.RBehavior.READS_FRAME; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; import com.oracle.truffle.api.CompilerAsserts; +import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.frame.VirtualFrame; @@ -77,6 +78,7 @@ public abstract class Tilde extends RBuiltinNode.Arg2 { protected RLanguage tilde(VirtualFrame frame, Object x, Object y) { if (setEnvAttrNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); setEnvAttrNode = insert(createSetEnvAttrNode()); } diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java index d7273682607ed2bd9e1daa9848bd489095bbed36..8148f31c79e9e386b732c148a50504d1332c1f8a 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java @@ -923,6 +923,7 @@ public class FastRInterop { @Cached("createInvoke(args.getLength())") Node invokeNode) { if (getDataNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); getDataNode = insert(GetReadonlyData.ListData.create()); } diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/BrowserInteractNode.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/BrowserInteractNode.java index c5507805b9b2e72728bcb283e51625a1aae0a0d3..78e1c31a97edf0892f3a4415b17439f28a1e4cd7 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/BrowserInteractNode.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/BrowserInteractNode.java @@ -131,6 +131,9 @@ public abstract class BrowserInteractNode extends Node { break LW; case "Q": throw new JumpToTopLevelException(); + case "help": + printHelp(ch); + break; case "where": { if (currentCaller.getDepth() > 1) { Object stack = Utils.createTraceback(0); @@ -205,4 +208,15 @@ public abstract class BrowserInteractNode extends Node { private static String browserPrompt(int depth) { return "Browse[" + depth + "]> "; } + + private static void printHelp(ConsoleIO out) { + out.println("n next"); + out.println("s step into"); + out.println("f finish"); + out.println("c or cont continue"); + out.println("Q quit"); + out.println("where show stack"); + out.println("help show help"); + out.println("<expr> evaluate expression"); + } } diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/DebugHandling.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/DebugHandling.java index be71516f860f6787c10996a09aee8ef3cf117999..dee1f1b1ac133e00e3c25bba623712bdaedae82d 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/DebugHandling.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/DebugHandling.java @@ -46,6 +46,7 @@ import com.oracle.truffle.r.nodes.control.AbstractLoopNode; import com.oracle.truffle.r.nodes.function.FunctionDefinitionNode; import com.oracle.truffle.r.nodes.instrumentation.RInstrumentation; import com.oracle.truffle.r.nodes.instrumentation.RSyntaxTags; +import com.oracle.truffle.r.nodes.instrumentation.RSyntaxTags.LoopTag; import com.oracle.truffle.r.runtime.JumpToTopLevelException; import com.oracle.truffle.r.runtime.RArguments; import com.oracle.truffle.r.runtime.RDeparse; @@ -515,7 +516,7 @@ public class DebugHandling { void setFinishing(AbstractLoopNode loopNode) { // Disable every statement listener except that for loopNode for (LoopStatementEventListener lser : loopStatementListeners) { - if (lser.getLoopNode() == loopNode) { + if (lser.handlesLoop(loopNode)) { lser.setFinishing(); } else { lser.disable(); @@ -708,24 +709,24 @@ public class DebugHandling { * The wrapper for the loop node is stable whereas the loop node itself will be replaced * with a specialized node. */ - private final RSyntaxNode loopNode; + private final SourceSection loopSourceSection; private final FunctionStatementsEventListener fser; LoopStatementEventListener(FunctionDefinitionNode functionDefinitionNode, Object text, Object condition, RSyntaxNode loopNode, FunctionStatementsEventListener fser) { super(functionDefinitionNode, text, condition); - this.loopNode = loopNode; + this.loopSourceSection = loopNode.getSourceSection(); this.fser = fser; } @Override public void onEnter(EventContext context, VirtualFrame frame) { - if (!disabled() && context.getInstrumentedNode() == loopNode) { + if (isEnabled(context)) { super.onEnter(context, frame); } } - RSyntaxNode getLoopNode() { - return loopNode; + boolean handlesLoop(RSyntaxNode loop) { + return loopSourceSection != null && loopSourceSection.equals(loop.getSourceSection()); } void setFinishing() { @@ -734,7 +735,7 @@ public class DebugHandling { @Override public void onReturnExceptional(EventContext context, VirtualFrame frame, Throwable exception) { - if (!disabled() && context.getInstrumentedNode() == loopNode) { + if (isEnabled(context)) { CompilerDirectives.transferToInterpreter(); returnCleanup(); } @@ -742,12 +743,16 @@ public class DebugHandling { @Override public void onReturnValue(EventContext context, VirtualFrame frame, Object result) { - if (!disabled() && context.getInstrumentedNode() == loopNode) { + if (isEnabled(context)) { CompilerDirectives.transferToInterpreter(); returnCleanup(); } } + private boolean isEnabled(EventContext ctx) { + return !disabled() && loopSourceSection != null && loopSourceSection.equals(ctx.getInstrumentedNode().getSourceSection()); + } + private void returnCleanup() { if (finishing) { finishing = false; diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/attributes/SpecialAttributesFunctions.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/attributes/SpecialAttributesFunctions.java index bec22d65269c1232586d6a49194c628a18d0ba53..9065b89e74f397e6f32b6da70e6924e22a20495a 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/attributes/SpecialAttributesFunctions.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/attributes/SpecialAttributesFunctions.java @@ -664,7 +664,7 @@ public final class SpecialAttributesFunctions { public final boolean isSquareMatrix(RAbstractVector vector) { RIntVector dims = (RIntVector) execute(vector); - if (nullDimsProfile.profile(dims == null) || dims.getLength() < 2) { + if (nullDimsProfile.profile(dims == null) || dims.getLength() != 2) { return false; } return dims.getDataAt(0) == dims.getDataAt(1); @@ -926,8 +926,15 @@ public final class SpecialAttributesFunctions { public void initAttributes(RAbstractContainer x, RAbstractContainer source) { if (getDimNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); getDimNode = insert(GetDimAttributeNode.create()); + } + if (getNamesNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); getNamesNode = insert(GetNamesAttributeNode.create()); + } + if (getDimNamesNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); getDimNamesNode = insert(GetDimNamesAttributeNode.create()); } this.initAttributes(x, getDimNode.getDimensions(source), getNamesNode.getNames(source), getDimNamesNode.getDimNames(source)); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java index 19b503bd6b756266d92e884834bccd76bbdbe6fb..523058ffd6b058f24a4720446968dcfb7b271776 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java @@ -31,6 +31,7 @@ import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.RootCallTarget; +import com.oracle.truffle.api.Truffle; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.NodeChild; @@ -62,6 +63,8 @@ import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; import com.oracle.truffle.r.nodes.builtin.RBuiltinRootNode; import com.oracle.truffle.r.nodes.function.PromiseHelperNode.PromiseCheckHelperNode; import com.oracle.truffle.r.nodes.function.RCallNodeGen.FunctionDispatchNodeGen; +import com.oracle.truffle.r.nodes.function.RCallNodeGen.SendForeignExecuteMessageNodeGen; +import com.oracle.truffle.r.nodes.function.RCallNodeGen.SendForeignInvokeMessageNodeGen; import com.oracle.truffle.r.nodes.function.S3FunctionLookupNode.Result; import com.oracle.truffle.r.nodes.function.call.CallRFunctionNode; import com.oracle.truffle.r.nodes.function.call.PrepareArguments; @@ -555,12 +558,8 @@ public abstract class RCallNode extends RCallBaseNode implements RSyntaxNode, RS } protected abstract static class ForeignCall extends LeafCallNode { - - @Child protected CallArgumentsNode arguments; - @Child protected Node messageNode; - @Child protected Foreign2R foreign2RNode; - @Child protected R2Foreign r2ForeignNode; - @CompilationFinal protected int foreignCallArgCount; + @Child private CallArgumentsNode arguments; + @Child private Foreign2R foreign2RNode; protected ForeignCall(RCallNode originalCall, CallArgumentsNode arguments) { super(originalCall); @@ -568,75 +567,121 @@ public abstract class RCallNode extends RCallBaseNode implements RSyntaxNode, RS } protected Object[] evaluateArgs(VirtualFrame frame) { - Object[] argumentsArray = originalCall.explicitArgs != null ? ((RArgsValuesAndNames) originalCall.explicitArgs.execute(frame)).getArguments() + return originalCall.explicitArgs != null ? ((RArgsValuesAndNames) originalCall.explicitArgs.execute(frame)).getArguments() : arguments.evaluateFlattenObjects(frame, originalCall.lookupVarArgs(frame)); - if (r2ForeignNode == null) { - r2ForeignNode = insert(R2Foreign.create()); - } - for (int i = 0; i < argumentsArray.length; i++) { - argumentsArray[i] = r2ForeignNode.execute(argumentsArray[i]); + } + + protected Foreign2R getForeign2RNode() { + if (foreign2RNode == null) { + CompilerDirectives.transferToInterpreterAndInvalidate(); + foreign2RNode = insert(Foreign2R.create()); } - return argumentsArray; + return foreign2RNode; } } - /** - * Calls a foreign function using message EXECUTE. - */ protected static final class ForeignExecute extends ForeignCall { + @Child private SendForeignExecuteMessage sendExecuteMessage = SendForeignExecuteMessageNodeGen.create(); protected ForeignExecute(RCallNode originalCall, CallArgumentsNode arguments) { super(originalCall, arguments); } - protected Object execute(VirtualFrame frame, TruffleObject function) { - Object[] argumentsArray = evaluateArgs(frame); - if (messageNode == null || foreignCallArgCount != argumentsArray.length) { + public Object execute(VirtualFrame frame, TruffleObject function) { + return getForeign2RNode().execute(sendExecuteMessage.execute(function, evaluateArgs(frame))); + } + } + + protected static final class ForeignInvoke extends ForeignCall { + @Child private SendForeignInvokeMessage sendInvokeMessage = SendForeignInvokeMessageNodeGen.create(); + + protected ForeignInvoke(RCallNode originalCall, CallArgumentsNode arguments) { + super(originalCall, arguments); + } + + public Object execute(VirtualFrame frame, DeferredFunctionValue function) { + return getForeign2RNode().execute(sendInvokeMessage.execute(function, evaluateArgs(frame))); + } + } + + protected abstract static class SendForeignMessageBase extends Node { + @Child private R2Foreign r2ForeignNode; + + @ExplodeLoop + protected Object[] args2Foreign(Object[] args) { + if (r2ForeignNode == null) { CompilerDirectives.transferToInterpreterAndInvalidate(); - messageNode = insert(Message.createExecute(argumentsArray.length).createNode()); - foreignCallArgCount = argumentsArray.length; - foreign2RNode = insert(Foreign2R.create()); + r2ForeignNode = insert(R2Foreign.create()); } + for (int i = 0; i < args.length; i++) { + args[i] = r2ForeignNode.execute(args[i]); + } + return args; + } + } + /** + * Calls a foreign function using message EXECUTE. + */ + protected abstract static class SendForeignExecuteMessage extends SendForeignMessageBase { + + public abstract Object execute(TruffleObject function, Object[] args); + + protected static Node createMessageNode(int argsLen) { + return Message.createExecute(argsLen).createNode(); + } + + @Specialization(guards = "argumentsArray.length == foreignCallArgCount", limit = "8") + protected Object doCached(TruffleObject function, Object[] argumentsArray, + @Cached("createMessageNode(argumentsArray.length)") Node messageNode, + @Cached("argumentsArray.length") @SuppressWarnings("unused") int foreignCallArgCount) { try { - Object result = ForeignAccess.sendExecute(messageNode, function, argumentsArray); - return foreign2RNode.execute(result); + return ForeignAccess.sendExecute(messageNode, function, args2Foreign(argumentsArray)); } catch (ArityException | UnsupportedMessageException | UnsupportedTypeException e) { CompilerDirectives.transferToInterpreter(); RInternalError.reportError(e); throw RError.interopError(RError.findParentRBase(this), e, function); } } + + @Specialization(replaces = "doCached") + @TruffleBoundary + protected Object doGeneric(TruffleObject function, Object[] argumentsArray) { + return doCached(function, argumentsArray, createMessageNode(argumentsArray.length), argumentsArray.length); + } } /** * Calls a foreign function using message INVOKE. */ - protected static final class ForeignInvoke extends ForeignCall { + protected abstract static class SendForeignInvokeMessage extends SendForeignMessageBase { - protected ForeignInvoke(RCallNode originalCall, CallArgumentsNode arguments) { - super(originalCall, arguments); + public abstract Object execute(DeferredFunctionValue function, Object[] args); + + protected static Node createMessageNode(int argsLen) { + return Message.createInvoke(argsLen).createNode(); } - protected Object execute(VirtualFrame frame, DeferredFunctionValue lhs) { + @Specialization(guards = "argumentsArray.length == foreignCallArgCount", limit = "8") + protected Object doCached(DeferredFunctionValue lhs, Object[] argumentsArray, + @Cached("createMessageNode(argumentsArray.length)") Node messageNode, + @Cached("argumentsArray.length") @SuppressWarnings("unused") int foreignCallArgCount) { TruffleObject receiver = lhs.getLHSReceiver(); String member = lhs.getLHSMember(); - Object[] argumentsArray = evaluateArgs(frame); - if (messageNode == null || foreignCallArgCount != argumentsArray.length) { - messageNode = insert(Message.createInvoke(argumentsArray.length).createNode()); - foreignCallArgCount = argumentsArray.length; - foreign2RNode = insert(Foreign2R.create()); - } - try { - Object result = ForeignAccess.sendInvoke(messageNode, receiver, member, argumentsArray); - return foreign2RNode.execute(result); + return ForeignAccess.sendInvoke(messageNode, receiver, member, args2Foreign(argumentsArray)); } catch (ArityException | UnsupportedMessageException | UnsupportedTypeException | UnknownIdentifierException e) { CompilerDirectives.transferToInterpreter(); RInternalError.reportError(e); throw RError.interopError(RError.findParentRBase(this), e, receiver); } } + + @Specialization(replaces = "doCached") + @TruffleBoundary + protected Object doGeneric(DeferredFunctionValue lhs, Object[] argumentsArray) { + return doCached(lhs, argumentsArray, createMessageNode(argumentsArray.length), argumentsArray.length); + } } protected ForeignExecute createForeignCall() { diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallSpecialNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallSpecialNode.java index 98a793a0147a1f032e48fafd264fc5299d5874e0..1fb0b4db04f3c0d4883439cf8239325a0f7f1a43 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallSpecialNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallSpecialNode.java @@ -22,6 +22,7 @@ */ package com.oracle.truffle.r.nodes.function; +import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; @@ -319,6 +320,7 @@ public final class RCallSpecialNode extends RCallBaseNode implements RSyntaxNode @Override public Node deepCopy() { assert !inReplace && callSpecialParent == null && ignoredArguments.length == 0; + CompilerAsserts.neverPartOfCompilation(); RCallSpecialNode node = (RCallSpecialNode) RContext.getASTBuilder().process(this).asRNode(); node.functionNode = node.insert(node.functionNode); node.special = node.insert(node.special); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/MissingNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/MissingNode.java index 98aff46476a515d2deaa16bbf3bb93892e17639f..d3dca941dc26c6011f9429e249080cb95be636b5 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/MissingNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/signature/MissingNode.java @@ -212,8 +212,10 @@ public final class MissingNode extends OperatorNode { throw error(Message.INVALID_USE, "missing"); } if (ArgumentsSignature.VARARG_NAME.equals(identifier)) { + CompilerDirectives.transferToInterpreterAndInvalidate(); readVarArgs = insert(LocalReadVariableNode.create(ArgumentsSignature.VARARG_NAME, false)); } else { + CompilerDirectives.transferToInterpreterAndInvalidate(); level = insert(new MissingCheckLevel(identifier, 0)); } } diff --git a/mx.fastr/suite.py b/mx.fastr/suite.py index 75301404a2b7ecf7fa910c6160472f49a0425b15..1300d03106e023e3d43c21d76a5e32a5b1000631 100644 --- a/mx.fastr/suite.py +++ b/mx.fastr/suite.py @@ -7,7 +7,7 @@ suite = { { "name" : "truffle", "subdir" : True, - "version" : "e140680ae7ebc4329e5cd96889258a75b6987dfe", + "version" : "b1c4af13e75d2dc839b5050ba020356ec1602788", "urls" : [ {"url" : "https://github.com/graalvm/graal", "kind" : "git"}, {"url" : "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind" : "binary"},