Skip to content
Snippets Groups Projects
Commit 43c42a06 authored by Mick Jordan's avatar Mick Jordan Committed by Lukas Stadler
Browse files

cast pipelines for some .fastr functions

parent 02524b84
Branches
No related tags found
No related merge requests found
...@@ -22,14 +22,14 @@ ...@@ -22,14 +22,14 @@
*/ */
package com.oracle.truffle.r.nodes.builtin.fastr; 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.RVisibility.OFF;
import static com.oracle.truffle.r.runtime.builtins.RBehavior.COMPLEX; import static com.oracle.truffle.r.runtime.builtins.RBehavior.COMPLEX;
import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; 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.dsl.Specialization;
import com.oracle.truffle.r.nodes.builtin.CastBuilder;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; 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.RRuntime;
import com.oracle.truffle.r.runtime.Utils; import com.oracle.truffle.r.runtime.Utils;
import com.oracle.truffle.r.runtime.builtins.RBuiltin; import com.oracle.truffle.r.runtime.builtins.RBuiltin;
...@@ -44,16 +44,15 @@ public abstract class FastRStackTrace extends RBuiltinNode { ...@@ -44,16 +44,15 @@ public abstract class FastRStackTrace extends RBuiltinNode {
return new Object[]{RRuntime.LOGICAL_FALSE}; return new Object[]{RRuntime.LOGICAL_FALSE};
} }
@Override
protected void createCasts(CastBuilder casts) {
casts.arg("print.frame.contents").asLogicalVector().findFirst().map(toBoolean());
}
@Specialization @Specialization
protected RNull printStackTrace(byte printFrameContents) { protected RNull printStackTrace(boolean printFrameContents) {
boolean printFrameSlots = printFrameContents == RRuntime.LOGICAL_TRUE; RContext.getInstance().getConsoleHandler().print(Utils.createStackTrace(printFrameContents));
RContext.getInstance().getConsoleHandler().print(Utils.createStackTrace(printFrameSlots));
return RNull.instance; return RNull.instance;
} }
@SuppressWarnings("unused")
@Fallback
protected Object fallback(Object a1) {
throw RError.error(this, RError.Message.INVALID_ARGUMENT, "print.frame.contents");
}
} }
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
*/ */
package com.oracle.truffle.r.nodes.builtin.fastr; 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.RVisibility.OFF;
import static com.oracle.truffle.r.runtime.builtins.RBehavior.IO; import static com.oracle.truffle.r.runtime.builtins.RBehavior.IO;
import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE;
...@@ -29,11 +30,11 @@ 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 java.io.IOException;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; 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.dsl.Specialization;
import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.api.nodes.NodeVisitor; import com.oracle.truffle.api.nodes.NodeVisitor;
import com.oracle.truffle.api.source.SourceSection; 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.builtin.RBuiltinNode;
import com.oracle.truffle.r.nodes.function.FunctionDefinitionNode; import com.oracle.truffle.r.nodes.function.FunctionDefinitionNode;
import com.oracle.truffle.r.nodes.instrumentation.RSyntaxTags; import com.oracle.truffle.r.nodes.instrumentation.RSyntaxTags;
...@@ -44,7 +45,6 @@ import com.oracle.truffle.r.runtime.conn.StdConnections; ...@@ -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.RFunction;
import com.oracle.truffle.r.runtime.data.RMissing; import com.oracle.truffle.r.runtime.data.RMissing;
import com.oracle.truffle.r.runtime.data.RNull; 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.RNode;
import com.oracle.truffle.r.runtime.nodes.RSyntaxCall; import com.oracle.truffle.r.runtime.nodes.RSyntaxCall;
import com.oracle.truffle.r.runtime.nodes.RSyntaxConstant; import com.oracle.truffle.r.runtime.nodes.RSyntaxConstant;
...@@ -76,13 +76,19 @@ public abstract class FastRSyntaxTree extends RBuiltinNode { ...@@ -76,13 +76,19 @@ public abstract class FastRSyntaxTree extends RBuiltinNode {
return new Object[]{RMissing.instance, "rsyntaxnode", RRuntime.LOGICAL_FALSE, RRuntime.LOGICAL_FALSE}; 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 @Specialization
@TruffleBoundary @TruffleBoundary
protected RNull printTree(RFunction function, RAbstractStringVector visitMode, byte printSourceLogical, byte printTagsLogical) { protected RNull printTree(RFunction function, String visitMode, boolean printSource, boolean printTags) {
boolean printSource = RRuntime.fromLogical(printSourceLogical);
boolean printTags = RRuntime.fromLogical(printTagsLogical);
FunctionDefinitionNode root = (FunctionDefinitionNode) function.getTarget().getRootNode(); FunctionDefinitionNode root = (FunctionDefinitionNode) function.getTarget().getRootNode();
switch (visitMode.getDataAt(0)) { switch (visitMode) {
case "node": case "node":
root.accept(new NodeVisitor() { root.accept(new NodeVisitor() {
...@@ -184,12 +190,6 @@ public abstract class FastRSyntaxTree extends RBuiltinNode { ...@@ -184,12 +190,6 @@ public abstract class FastRSyntaxTree extends RBuiltinNode {
return result; 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) { private static void printIndent(int depth) {
for (int i = 0; i < depth; i++) { for (int i = 0; i < depth; i++) {
writeString(" ", false); writeString(" ", false);
......
...@@ -27,6 +27,7 @@ import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; ...@@ -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.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.dsl.Specialization; 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.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.runtime.JumpToTopLevelException; import com.oracle.truffle.r.runtime.JumpToTopLevelException;
import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RError;
...@@ -34,14 +35,17 @@ import com.oracle.truffle.r.runtime.RInternalError; ...@@ -34,14 +35,17 @@ import com.oracle.truffle.r.runtime.RInternalError;
import com.oracle.truffle.r.runtime.Utils; import com.oracle.truffle.r.runtime.Utils;
import com.oracle.truffle.r.runtime.builtins.RBuiltin; import com.oracle.truffle.r.runtime.builtins.RBuiltin;
import com.oracle.truffle.r.runtime.data.RNull; 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) @RBuiltin(name = ".fastr.throw", kind = PRIMITIVE, parameterNames = {"name"}, behavior = COMPLEX)
public abstract class FastRThrowIt extends RBuiltinNode { public abstract class FastRThrowIt extends RBuiltinNode {
@Override
protected void createCasts(CastBuilder casts) {
casts.arg("name").asStringVector().findFirst();
}
@Specialization @Specialization
@TruffleBoundary @TruffleBoundary
protected RNull throwit(RAbstractStringVector x) { protected RNull throwit(String name) {
String name = x.getDataAt(0);
switch (name) { switch (name) {
case "AIX": case "AIX":
throw new ArrayIndexOutOfBoundsException(); throw new ArrayIndexOutOfBoundsException();
......
...@@ -22,16 +22,16 @@ ...@@ -22,16 +22,16 @@
*/ */
package com.oracle.truffle.r.nodes.builtin.fastr; 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.RVisibility.OFF;
import static com.oracle.truffle.r.runtime.builtins.RBehavior.IO; import static com.oracle.truffle.r.runtime.builtins.RBehavior.IO;
import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; 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.dsl.Specialization;
import com.oracle.truffle.api.nodes.NodeUtil; import com.oracle.truffle.api.nodes.NodeUtil;
import com.oracle.truffle.api.nodes.RootNode; 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.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.runtime.RError;
import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RRuntime;
import com.oracle.truffle.r.runtime.builtins.RBuiltin; import com.oracle.truffle.r.runtime.builtins.RBuiltin;
import com.oracle.truffle.r.runtime.data.RFunction; import com.oracle.truffle.r.runtime.data.RFunction;
...@@ -44,17 +44,18 @@ public abstract class FastRTree extends RBuiltinNode { ...@@ -44,17 +44,18 @@ public abstract class FastRTree extends RBuiltinNode {
return new Object[]{RMissing.instance, RRuntime.LOGICAL_FALSE}; 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 @Specialization
protected String printTree(RFunction function, byte verbose) { protected String printTree(RFunction function, boolean verbose) {
RootNode root = function.getTarget().getRootNode(); 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); System.out.println(printedTree);
return printedTree; return printedTree;
} }
@SuppressWarnings("unused")
@Fallback
protected Object fallback(Object a1, Object a2) {
throw RError.error(this, RError.Message.INVALID_OR_UNIMPLEMENTED_ARGUMENTS);
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment