From 0d0f3b99d2b61073c8e3a9410750f2cc877a453c Mon Sep 17 00:00:00 2001 From: Adam Welc <adam.welc@oracle.com> Date: Sun, 28 Aug 2016 14:07:48 -0700 Subject: [PATCH] Rewritten parameter casts for the unlist builtin. --- .../truffle/r/nodes/builtin/base/Unlist.java | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Unlist.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Unlist.java index d440e5ec64..26f0329783 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Unlist.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Unlist.java @@ -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; -- GitLab