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