From 43c42a06a5d8d1f308e33686a721f5e3b539a3bb Mon Sep 17 00:00:00 2001 From: Mick Jordan <mick.jordan@oracle.com> Date: Thu, 11 Aug 2016 15:04:19 -0700 Subject: [PATCH] cast pipelines for some .fastr functions --- .../nodes/builtin/fastr/FastRStackTrace.java | 19 +++++++-------- .../nodes/builtin/fastr/FastRSyntaxTree.java | 24 +++++++++---------- .../r/nodes/builtin/fastr/FastRThrowIt.java | 10 +++++--- .../r/nodes/builtin/fastr/FastRTree.java | 21 ++++++++-------- 4 files changed, 39 insertions(+), 35 deletions(-) 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 8c70d8e253..e041b2b205 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 ed3638bc5c..a56f3e5159 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 8baed140fb..c24b8abdd4 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 be5c0add50..954eb39b38 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); - } } -- GitLab