From 19a6e3375bf92d7df6fc9f36ba093c31dff141f2 Mon Sep 17 00:00:00 2001
From: Lukas Stadler <lukas.stadler@oracle.com>
Date: Thu, 22 Mar 2018 18:09:57 +0100
Subject: [PATCH] avoid ArrayStoreException in match.call

---
 .../truffle/r/nodes/builtin/base/FrameFunctions.java      | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/FrameFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/FrameFunctions.java
index 066b33b739..9cc46a846c 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/FrameFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/FrameFunctions.java
@@ -266,7 +266,7 @@ public class FrameFunctions {
             RNode[] matchedArgNodes = ArgumentMatcher.matchArguments((RRootNode) definition.getRootNode(), callArgs, inputVarArgSignature, null, null, true).getArguments();
             ArgumentsSignature sig = ((HasSignature) definition.getRootNode()).getSignature();
             // expand any varargs
-            ArrayList<RNode> nodes = new ArrayList<>();
+            ArrayList<RSyntaxNode> nodes = new ArrayList<>();
             ArrayList<String> names = new ArrayList<>();
 
             FrameSlot varArgSlot = cframe.getFrameDescriptor().findFrameSlot(ArgumentsSignature.VARARG_NAME);
@@ -299,7 +299,7 @@ public class FrameFunctions {
 
                     if (expandDots) {
                         for (int i2 = 0; i2 < varArgNodes.length; i2++) {
-                            nodes.add(varArgNodes[i2]);
+                            nodes.add(varArgNodes[i2].asRSyntaxNode());
                             names.add(varArgSignature.getName(i2));
                         }
                     } else {
@@ -328,10 +328,10 @@ public class FrameFunctions {
                         names.add(ArgumentsSignature.VARARG_NAME);
                     }
                 } else if (arg instanceof PromiseNode) {
-                    nodes.add(((PromiseNode) arg).getPromiseExpr().asRNode());
+                    nodes.add(((PromiseNode) arg).getPromiseExpr());
                     names.add(sig.getName(i));
                 } else {
-                    nodes.add(arg);
+                    nodes.add(arg.asRSyntaxNode());
                     names.add(sig.getName(i));
                 }
             }
-- 
GitLab