Skip to content
Snippets Groups Projects
Commit 0d0f3b99 authored by Adam Welc's avatar Adam Welc
Browse files

Rewritten parameter casts for the unlist builtin.

parent cab08b52
No related branches found
No related tags found
No related merge requests found
......@@ -11,11 +11,13 @@
*/
package com.oracle.truffle.r.nodes.builtin.base;
import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.*;
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.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.dsl.Fallback;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.dsl.TypeSystemReference;
import com.oracle.truffle.api.frame.VirtualFrame;
......@@ -47,8 +49,8 @@ public abstract class Unlist extends RBuiltinNode {
@Override
protected void createCasts(CastBuilder casts) {
casts.firstBoolean(1);
casts.firstBoolean(2);
casts.arg("recursive").asLogicalVector().findFirst(RRuntime.LOGICAL_TRUE).map(toBoolean());
casts.arg("use.names").asLogicalVector().findFirst(RRuntime.LOGICAL_TRUE).map(toBoolean());
}
@Child private PrecedenceNode precedenceNode = PrecedenceNodeGen.create();
......@@ -143,21 +145,9 @@ public abstract class Unlist extends RBuiltinNode {
return RNull.instance;
}
@SuppressWarnings("unused")
@Specialization(guards = "!isVectorList(vector)")
protected RAbstractVector unlistVector(RAbstractVector vector, boolean recursive, boolean useNames) {
return vector;
}
@SuppressWarnings("unused")
@Specialization(guards = "isEmpty(list)")
protected RNull unlistEmptyList(VirtualFrame frame, RList list, boolean recursive, boolean useNames) {
return RNull.instance;
}
@SuppressWarnings("unused")
@Specialization(guards = "isOneNull(list)")
protected RNull unlistOneNullList(VirtualFrame frame, RList list, boolean recursive, boolean useNames) {
protected RNull unlistEmptyList(RList list, boolean recursive, boolean useNames) {
return RNull.instance;
}
......@@ -184,6 +174,12 @@ public abstract class Unlist extends RBuiltinNode {
}
}
@SuppressWarnings("unused")
@Fallback
protected Object unlist(Object o, boolean recursive, boolean useNames) {
return o;
}
@TruffleBoundary
private RAbstractVector unlistHelper(RList list, boolean recursive, boolean useNames, int precedence, int totalSize) {
String[] namesData = useNames ? new String[totalSize] : null;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment