From 76ee7f0ed74c537045f793636fa3e2c033b01425 Mon Sep 17 00:00:00 2001
From: stepan <stepan.sindelar@oracle.com>
Date: Fri, 3 Feb 2017 14:33:08 +0100
Subject: [PATCH] Deparse in BinaryBooleanNode removes backticks, e.g. around
 `+`

---
 .../oracle/truffle/r/nodes/binary/BinaryBooleanNode.java  | 8 ++++++--
 .../src/com/oracle/truffle/r/test/ExpectedTestOutput.test | 8 ++++++++
 .../truffle/r/test/builtins/TestBuiltin_operators.java    | 7 +++++++
 3 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java
index 1ce1356f4f..2dd52bd2e5 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java
@@ -134,15 +134,19 @@ public abstract class BinaryBooleanNode extends RBuiltinNode {
                     @Cached("createRecursive()") BinaryBooleanNode recursive) {
         Object recursiveLeft = left;
         if (isSymbolOrLang(left)) {
-            recursiveLeft = RString.valueOf(RDeparse.deparse(left));
+            recursiveLeft = deparseSymbolOrLang(left);
         }
         Object recursiveRight = right;
         if (isSymbolOrLang(right)) {
-            recursiveRight = RString.valueOf(RDeparse.deparse(right));
+            recursiveRight = deparseSymbolOrLang(right);
         }
         return recursive.execute(frame, recursiveLeft, recursiveRight);
     }
 
+    private static RString deparseSymbolOrLang(Object val) {
+        return RString.valueOf(RDeparse.deparse(val, RDeparse.MAX_Cutoff, false, RDeparse.KEEPINTEGER, -1));
+    }
+
     protected BinaryBooleanNode createRecursive() {
         return BinaryBooleanNode.create(factory);
     }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
index 7b9a8c46ef..55dbd9665d 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
@@ -34312,6 +34312,14 @@ NULL
 [1] "some"
 [1] "test"
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_operators.testBinaryOperators#
+#as.symbol('*') == '*'
+[1] TRUE
+
+##com.oracle.truffle.r.test.builtins.TestBuiltin_operators.testBinaryOperators#
+#as.symbol('<-') == '<-'
+[1] TRUE
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_operators.testColon#
 #8.2:NULL
 Error in 8.2:NULL : argument of length 0
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_operators.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_operators.java
index 8acdd22dea..d62360ad3a 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_operators.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_operators.java
@@ -1926,6 +1926,13 @@ public class TestBuiltin_operators extends TestBase {
                         "data[c('a','b')] + 1; 1 + data[c('a','b')]; data[c('a','b')] + c(1,2); c(1,2) + data[c('a','b')]");
     }
 
+    @Test
+    public void testBooleanOperators() {
+        // tests that deparse in as.symbol removes backticks
+        assertEval("as.symbol('*') == '*'");
+        assertEval("as.symbol('<-') == '<-'");
+    }
+
     @Test
     public void testOperators() {
         assertEval("{ `+`(1,2) }");
-- 
GitLab