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

Added support for including symbols in lists.

parent c45dffe4
Branches
No related tags found
No related merge requests found
......@@ -41,6 +41,7 @@ import com.oracle.truffle.r.runtime.data.RNull;
import com.oracle.truffle.r.runtime.data.RPairList;
import com.oracle.truffle.r.runtime.data.RS4Object;
import com.oracle.truffle.r.runtime.data.RStringVector;
import com.oracle.truffle.r.runtime.data.RSymbol;
import com.oracle.truffle.r.runtime.data.model.RAbstractVector;
import com.oracle.truffle.r.runtime.env.REnvironment;
......@@ -137,6 +138,11 @@ public abstract class CastListNode extends CastBaseNode {
return RDataFactory.createList(new Object[]{o});
}
@Specialization
protected RList doRSymbol(RSymbol s) {
return RDataFactory.createList(new Object[]{s});
}
public static CastListNode create() {
return CastListNodeGen.create(true, true, true);
}
......
......@@ -46,6 +46,7 @@ import com.oracle.truffle.r.runtime.data.RRaw;
import com.oracle.truffle.r.runtime.data.RRawVector;
import com.oracle.truffle.r.runtime.data.RS4Object;
import com.oracle.truffle.r.runtime.data.RStringVector;
import com.oracle.truffle.r.runtime.data.RSymbol;
import com.oracle.truffle.r.runtime.env.REnvironment;
import com.oracle.truffle.r.runtime.nodes.RBaseNode;
......@@ -202,6 +203,11 @@ public abstract class PrecedenceNode extends RBaseNode {
return LIST_PRECEDENCE;
}
@Specialization
protected int doS4Object(RSymbol o, byte recursive) {
return LIST_PRECEDENCE;
}
@Specialization(guards = {"recursive == LOGICAL_FALSE", "args.getLength() == 1"})
protected int doArgsValuesAndNames(RArgsValuesAndNames args, byte recursive, @Cached("createRecursive()") PrecedenceNode precedenceNode) {
return precedenceNode.executeInteger(args.getArgument(0), recursive);
......
......@@ -541,6 +541,8 @@ public class TestBuiltin_c extends TestBase {
assertEval("{ e1 <- new.env(), c(e1, 3) }");
assertEval("{ setClass(\"foo\", representation(d=\"numeric\")); x<-new(\"foo\", d=42); y<-c(x, 7); y[[1]] }");
assertEval("{ typeof(c(as.symbol(\"foo\"), 42)) }");
}
@Test
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment