From e35b1c0332dab32784146e040b9b5f22e14722c6 Mon Sep 17 00:00:00 2001
From: Adam Welc <adam.welc@oracle.com>
Date: Wed, 27 May 2015 02:16:47 -0700
Subject: [PATCH] Added addtional specializations for "match" function.

---
 .../oracle/truffle/r/nodes/builtin/base/Match.java   | 12 ++++++++++++
 .../r/test/library/base/TestSimpleBuiltins.java      |  3 +++
 2 files changed, 15 insertions(+)

diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Match.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Match.java
index d91a69d472..c4215fed43 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Match.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Match.java
@@ -100,6 +100,18 @@ public abstract class Match extends RBuiltinNode {
         return matchRecursive(frame, RClosures.createFactorToVector(x, true, attrProfiles), RClosures.createFactorToVector(table, true, attrProfiles), nomatchObj, incomparables);
     }
 
+    @Specialization
+    protected RIntVector match(VirtualFrame frame, RFactor x, RAbstractVector table, Object nomatchObj, Object incomparables) {
+        naCheck.enable(x.getVector());
+        return matchRecursive(frame, RClosures.createFactorToVector(x, true, attrProfiles), table, nomatchObj, incomparables);
+    }
+
+    @Specialization
+    protected RIntVector match(VirtualFrame frame, RAbstractVector x, RFactor table, Object nomatchObj, Object incomparables) {
+        naCheck.enable(table.getVector());
+        return matchRecursive(frame, x, RClosures.createFactorToVector(table, true, attrProfiles), nomatchObj, incomparables);
+    }
+
     @Specialization
     @SuppressWarnings("unused")
     protected RIntVector match(RAbstractIntVector x, RAbstractIntVector table, Object nomatchObj, Object incomparables) {
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleBuiltins.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleBuiltins.java
index 4ae5d6ff6c..ef0ff6226c 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleBuiltins.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/base/TestSimpleBuiltins.java
@@ -3176,6 +3176,9 @@ public class TestSimpleBuiltins extends TestBase {
         assertEval("{ match(c(0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,NaN,NA,1), c(1,NA,NaN,1,2,3,4,5,6,7,8,9,10,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9)) }");
 
         assertEval("{ match(factor(c(\"a\", \"b\")), factor(c(\"c\", \"b\", \"a\", \"b\", \"c\", \"a\"))) }");
+
+        assertEval("{ match(\"a\", factor(c(\"a\", \"b\", \"a\"))) }");
+        assertEval("{ match(factor(c(\"a\", \"b\", \"a\")), \"a\") }");
     }
 
     @Test
-- 
GitLab