diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsFunction.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsFunction.java index 6395f510f44b72af9723d2eb6a2a183025cc8604..592446c2355f3380eb738d6b7ae850b99e1ba3a8 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsFunction.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsFunction.java @@ -118,10 +118,15 @@ public abstract class AsFunction extends RBuiltinNode { } } - if (!(x.getDataAt(x.getLength() - 1) instanceof RLanguage)) { + RBaseNode body; + Object bodyObject = x.getDataAt(x.getLength() - 1); + if (bodyObject instanceof RLanguage) { + body = ((RLanguage) x.getDataAt(x.getLength() - 1)).getRep(); + } else if (bodyObject instanceof RSymbol) { + body = ReadVariableNode.create(((RSymbol) bodyObject).getName()); + } else { throw RInternalError.unimplemented(); } - RBaseNode body = ((RLanguage) x.getDataAt(x.getLength() - 1)).getRep(); if (!RBaseNode.isRSyntaxNode(body)) { throw RInternalError.unimplemented(); }