diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRStackTrace.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRStackTrace.java index 8c70d8e2534bfec03b3a9d25494ef3064b3b5769..e041b2b2053b906c86c84f48513a8d7a9bedc32c 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRStackTrace.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRStackTrace.java @@ -22,14 +22,14 @@ */ package com.oracle.truffle.r.nodes.builtin.fastr; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.*; import static com.oracle.truffle.r.runtime.RVisibility.OFF; import static com.oracle.truffle.r.runtime.builtins.RBehavior.COMPLEX; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; -import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.Specialization; +import com.oracle.truffle.r.nodes.builtin.CastBuilder; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; -import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.Utils; import com.oracle.truffle.r.runtime.builtins.RBuiltin; @@ -44,16 +44,15 @@ public abstract class FastRStackTrace extends RBuiltinNode { return new Object[]{RRuntime.LOGICAL_FALSE}; } + @Override + protected void createCasts(CastBuilder casts) { + casts.arg("print.frame.contents").asLogicalVector().findFirst().map(toBoolean()); + } + @Specialization - protected RNull printStackTrace(byte printFrameContents) { - boolean printFrameSlots = printFrameContents == RRuntime.LOGICAL_TRUE; - RContext.getInstance().getConsoleHandler().print(Utils.createStackTrace(printFrameSlots)); + protected RNull printStackTrace(boolean printFrameContents) { + RContext.getInstance().getConsoleHandler().print(Utils.createStackTrace(printFrameContents)); return RNull.instance; } - @SuppressWarnings("unused") - @Fallback - protected Object fallback(Object a1) { - throw RError.error(this, RError.Message.INVALID_ARGUMENT, "print.frame.contents"); - } } diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRSyntaxTree.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRSyntaxTree.java index ed3638bc5c18fe145211ffb5c76060e24d55ba65..a56f3e5159b8a69a283ef3cf45d87cc4394b2fed 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRSyntaxTree.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRSyntaxTree.java @@ -22,6 +22,7 @@ */ package com.oracle.truffle.r.nodes.builtin.fastr; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.*; import static com.oracle.truffle.r.runtime.RVisibility.OFF; import static com.oracle.truffle.r.runtime.builtins.RBehavior.IO; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; @@ -29,11 +30,11 @@ import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; import java.io.IOException; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; -import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.NodeVisitor; import com.oracle.truffle.api.source.SourceSection; +import com.oracle.truffle.r.nodes.builtin.CastBuilder; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; import com.oracle.truffle.r.nodes.function.FunctionDefinitionNode; import com.oracle.truffle.r.nodes.instrumentation.RSyntaxTags; @@ -44,7 +45,6 @@ import com.oracle.truffle.r.runtime.conn.StdConnections; import com.oracle.truffle.r.runtime.data.RFunction; import com.oracle.truffle.r.runtime.data.RMissing; import com.oracle.truffle.r.runtime.data.RNull; -import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector; import com.oracle.truffle.r.runtime.nodes.RNode; import com.oracle.truffle.r.runtime.nodes.RSyntaxCall; import com.oracle.truffle.r.runtime.nodes.RSyntaxConstant; @@ -76,13 +76,19 @@ public abstract class FastRSyntaxTree extends RBuiltinNode { return new Object[]{RMissing.instance, "rsyntaxnode", RRuntime.LOGICAL_FALSE, RRuntime.LOGICAL_FALSE}; } + @Override + protected void createCasts(CastBuilder casts) { + casts.arg("func").mustBe(instanceOf(RFunction.class)); + casts.arg("visitMode").asStringVector().findFirst(); + casts.arg("printSource").asLogicalVector().findFirst().map(toBoolean()); + casts.arg("printTags").asLogicalVector().findFirst().map(toBoolean()); + } + @Specialization @TruffleBoundary - protected RNull printTree(RFunction function, RAbstractStringVector visitMode, byte printSourceLogical, byte printTagsLogical) { - boolean printSource = RRuntime.fromLogical(printSourceLogical); - boolean printTags = RRuntime.fromLogical(printTagsLogical); + protected RNull printTree(RFunction function, String visitMode, boolean printSource, boolean printTags) { FunctionDefinitionNode root = (FunctionDefinitionNode) function.getTarget().getRootNode(); - switch (visitMode.getDataAt(0)) { + switch (visitMode) { case "node": root.accept(new NodeVisitor() { @@ -184,12 +190,6 @@ public abstract class FastRSyntaxTree extends RBuiltinNode { return result; } - @SuppressWarnings("unused") - @Fallback - protected Object fallback(Object a1, Object a2, Object a3, Object a4) { - throw RError.error(this, RError.Message.INVALID_OR_UNIMPLEMENTED_ARGUMENTS); - } - private static void printIndent(int depth) { for (int i = 0; i < depth; i++) { writeString(" ", false); diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRThrowIt.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRThrowIt.java index 8baed140fb8b258b6cce56d78c3dffed53e90fee..c24b8abdd4cc8a7d1f4a1b953ffb178fd0a94769 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRThrowIt.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRThrowIt.java @@ -27,6 +27,7 @@ import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Specialization; +import com.oracle.truffle.r.nodes.builtin.CastBuilder; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; import com.oracle.truffle.r.runtime.JumpToTopLevelException; import com.oracle.truffle.r.runtime.RError; @@ -34,14 +35,17 @@ import com.oracle.truffle.r.runtime.RInternalError; import com.oracle.truffle.r.runtime.Utils; import com.oracle.truffle.r.runtime.builtins.RBuiltin; import com.oracle.truffle.r.runtime.data.RNull; -import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector; @RBuiltin(name = ".fastr.throw", kind = PRIMITIVE, parameterNames = {"name"}, behavior = COMPLEX) public abstract class FastRThrowIt extends RBuiltinNode { + @Override + protected void createCasts(CastBuilder casts) { + casts.arg("name").asStringVector().findFirst(); + } + @Specialization @TruffleBoundary - protected RNull throwit(RAbstractStringVector x) { - String name = x.getDataAt(0); + protected RNull throwit(String name) { switch (name) { case "AIX": throw new ArrayIndexOutOfBoundsException(); diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRTree.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRTree.java index be5c0add5012747bd87559163cab6ff6cfbdafc9..954eb39b38315693c0ebb7f76304ee34bc729a7f 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRTree.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRTree.java @@ -22,16 +22,16 @@ */ package com.oracle.truffle.r.nodes.builtin.fastr; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.*; import static com.oracle.truffle.r.runtime.RVisibility.OFF; import static com.oracle.truffle.r.runtime.builtins.RBehavior.IO; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; -import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.nodes.NodeUtil; import com.oracle.truffle.api.nodes.RootNode; +import com.oracle.truffle.r.nodes.builtin.CastBuilder; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; -import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.builtins.RBuiltin; import com.oracle.truffle.r.runtime.data.RFunction; @@ -44,17 +44,18 @@ public abstract class FastRTree extends RBuiltinNode { return new Object[]{RMissing.instance, RRuntime.LOGICAL_FALSE}; } + @Override + protected void createCasts(CastBuilder casts) { + casts.arg("func").mustBe(instanceOf(RFunction.class)); + casts.arg("verbose").asLogicalVector().findFirst().map(toBoolean()); + + } + @Specialization - protected String printTree(RFunction function, byte verbose) { + protected String printTree(RFunction function, boolean verbose) { RootNode root = function.getTarget().getRootNode(); - String printedTree = verbose == RRuntime.LOGICAL_TRUE ? NodeUtil.printTreeToString(root) : NodeUtil.printCompactTreeToString(root); + String printedTree = verbose ? NodeUtil.printTreeToString(root) : NodeUtil.printCompactTreeToString(root); System.out.println(printedTree); return printedTree; } - - @SuppressWarnings("unused") - @Fallback - protected Object fallback(Object a1, Object a2) { - throw RError.error(this, RError.Message.INVALID_OR_UNIMPLEMENTED_ARGUMENTS); - } }