From 25d47c41e9b9f78b4ca98fc52f38e43417e0f426 Mon Sep 17 00:00:00 2001
From: Prahlad Joshi <joshi18@bitbucket.org>
Date: Mon, 23 Jun 2014 13:36:11 -0400
Subject: [PATCH] Minor fixes.

---
 .../truffle/r/nodes/builtin/base/AnyDuplicated.java    | 10 +++++++---
 .../com/oracle/truffle/r/nodes/function/RCallNode.java |  9 ++++++++-
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/AnyDuplicated.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/AnyDuplicated.java
index 7923d72cdd..c2a8a9e011 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/AnyDuplicated.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/AnyDuplicated.java
@@ -14,17 +14,17 @@ package com.oracle.truffle.r.nodes.builtin.base;
 import java.util.*;
 
 import com.oracle.truffle.api.*;
+import com.oracle.truffle.api.CompilerDirectives.*;
 import com.oracle.truffle.api.dsl.*;
 import com.oracle.truffle.api.frame.*;
 import com.oracle.truffle.r.nodes.*;
 import com.oracle.truffle.r.nodes.binary.*;
 import com.oracle.truffle.r.nodes.builtin.*;
-import com.oracle.truffle.r.nodes.builtin.RBuiltin.*;
 import com.oracle.truffle.r.nodes.unary.*;
 import com.oracle.truffle.r.runtime.*;
 import com.oracle.truffle.r.runtime.data.model.*;
 
-@RBuiltin(name = "anyDuplicated", kind = RBuiltinKind.INTERNAL, lastParameterKind = LastParameterKind.VAR_ARGS_SPECIALIZE)
+@RBuiltin(name = "anyDuplicated", kind = RBuiltinKind.INTERNAL)
 public abstract class AnyDuplicated extends RBuiltinNode {
 
     @Child private CastTypeNode castTypeNode;
@@ -82,6 +82,7 @@ public abstract class AnyDuplicated extends RBuiltinNode {
         return getIndexFromLast(x, (RAbstractVector) (castTypeNode.execute(frame, incomparables, xType)));
     }
 
+    @SlowPath
     private static int getIndexFromStart(RAbstractVector x, RAbstractVector incomparables) {
         HashSet<Object> incompContents = new HashSet<>();
         HashSet<Object> vectorContents = new HashSet<>();
@@ -101,6 +102,7 @@ public abstract class AnyDuplicated extends RBuiltinNode {
         return 0;
     }
 
+    @SlowPath
     private static int getIndexFromStart(RAbstractVector x) {
         HashSet<Object> vectorContents = new HashSet<>();
         vectorContents.add(x.getDataAtAsObject(0));
@@ -114,6 +116,7 @@ public abstract class AnyDuplicated extends RBuiltinNode {
         return 0;
     }
 
+    @SlowPath
     public static int getIndexFromLast(RAbstractVector x, RAbstractVector incomparables) {
         HashSet<Object> incompContents = new HashSet<>();
         HashSet<Object> vectorContents = new HashSet<>();
@@ -133,6 +136,7 @@ public abstract class AnyDuplicated extends RBuiltinNode {
         return 0;
     }
 
+    @SlowPath
     private static int getIndexFromLast(RAbstractVector x) {
         HashSet<Object> vectorContents = new HashSet<>();
         vectorContents.add(x.getDataAtAsObject(x.getLength() - 1));
@@ -175,4 +179,4 @@ public abstract class AnyDuplicated extends RBuiltinNode {
             typeof = insert(TypeofFactory.create(new RNode[1], this.getBuiltin()));
         }
     }
-}
\ No newline at end of file
+}
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java
index 399901dc82..ec35f66546 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java
@@ -469,10 +469,12 @@ public abstract class RCallNode extends RNode {
                 if (hasArgNodes) {
                     argNode = (RNode) arguments[i];
                 }
-
                 int parameterPosition = findParameterPosition(parameterNames, actualNames[i], matchedArgs, i, hasVarArgs, argNode);
                 if (parameterPosition >= 0) {
                     if (parameterPosition >= varArgIndex) {
+                        /*
+                         * This argument matches to ...
+                         */
                         ++varArgMatches;
                     }
                     resultArgs[parameterPosition] = arguments[i];
@@ -482,6 +484,11 @@ public abstract class RCallNode extends RNode {
                 }
             }
         }
+        /*
+         * To find the remaining arguments that can match to ... we should subtract sum of
+         * varArgIndex and number of variable arguments already matched from total number of
+         * arguments.
+         */
         int varArgCount = arguments.length - (varArgIndex + varArgMatches);
         if (varArgIndex >= 0 && varArgCount >= 0) {
             T[] varArgsArray = (T[]) Array.newInstance(arguments.getClass().getComponentType(), varArgCount);
-- 
GitLab