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();
         }