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