From 4b4339f2ee60ceefee568c3aa0317571806f09a8 Mon Sep 17 00:00:00 2001
From: stepan <stepan.sindelar@oracle.com>
Date: Thu, 19 Apr 2018 14:50:59 +0200
Subject: [PATCH] Fix arguments names in RPariList to AST conversion

---
 .../com/oracle/truffle/r/runtime/ArgumentsSignature.java    | 4 +++-
 .../src/com/oracle/truffle/r/runtime/data/RPairList.java    | 6 +++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java
index 4fdacb4c39..4294722145 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java
@@ -42,8 +42,10 @@ public final class ArgumentsSignature implements Iterable<String> {
      * argument can be provided with a name or without a name, or it may have default value, but
      * without any actual value provided by the caller. This is the case for {@code UNMATCHED}. Use
      * {@link #isUnmatched(int)} for checking if argument is unmatched.
+     *
+     * Note we intentionally use invalid argument name.
      */
-    public static final String UNMATCHED = new String();
+    public static final String UNMATCHED = "^";
     public static final String VARARG_NAME = "...";
     public static final int[] EMPTY_VARARGS_INDEXES = new int[0];
     public static final int NO_VARARG = -1;
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPairList.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPairList.java
index b681e69d54..6f8d2fad0e 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPairList.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RPairList.java
@@ -718,7 +718,11 @@ public final class RPairList extends RSharingAttributeStorage implements RAbstra
                         } else {
                             String[] signature = new String[length - 1];
                             for (int i = 0; i < names.getLength() && i < (length - 1); i++) {
-                                signature[i] = names.getDataAt(i + 1);
+                                String name = names.getDataAt(i + 1);
+                                if (name != null && !name.isEmpty()) {
+                                    // in signatures, null is designated for unnamed arguments
+                                    signature[i] = name;
+                                }
                             }
                             return ArgumentsSignature.get(signature);
                         }
-- 
GitLab