From 17984995a692bfe1db452ff56d6ebade92b5653d Mon Sep 17 00:00:00 2001
From: Adam Welc <adam.welc@oracle.com>
Date: Wed, 16 Mar 2016 17:56:14 -0700
Subject: [PATCH] Handle body of the function that is a single symbol.

---
 .../oracle/truffle/r/nodes/builtin/base/AsFunction.java  | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

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 6395f510f4..592446c235 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();
         }
-- 
GitLab