Skip to content

Commit fcb0243

Browse files
committed
avoid invoke when splatting a PList
1 parent af662b4 commit fcb0243

File tree

2 files changed

+11
-9
lines changed

2 files changed

+11
-9
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/common/SequenceStorageNodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3296,7 +3296,7 @@ public ToArrayNode(boolean exact) {
32963296
@Specialization
32973297
Object[] doObjectSequenceStorage(ObjectSequenceStorage s) {
32983298
Object[] barr = s.getInternalArray();
3299-
if (exact) {
3299+
if (exact && barr.length != s.length()) {
33003300
return exactCopy(barr, s.length());
33013301
}
33023302
return barr;

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/argument/positional/ExecutePositionalStarargsNode.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import java.util.Iterator;
4545

4646
import com.oracle.graal.python.builtins.objects.PNone;
47+
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
4748
import com.oracle.graal.python.builtins.objects.dict.PDict;
4849
import com.oracle.graal.python.builtins.objects.list.PList;
4950
import com.oracle.graal.python.builtins.objects.set.PSet;
@@ -81,13 +82,9 @@ static Object[] starargs(PTuple starargs) {
8182
}
8283

8384
@Specialization
84-
static Object[] starargs(PList starargs) {
85-
int length = starargs.getSequenceStorage().length();
86-
Object[] internalArray = starargs.getSequenceStorage().getInternalArray();
87-
if (internalArray.length != length) {
88-
return starargs.getSequenceStorage().getCopyOfInternalArray();
89-
}
90-
return internalArray;
85+
static Object[] starargs(PList starargs,
86+
@Cached SequenceStorageNodes.ToArrayNode toArray) {
87+
return toArray.execute(starargs.getSequenceStorage());
9188
}
9289

9390
@Specialization
@@ -170,7 +167,12 @@ static Object[] starargs(PTuple starargs) {
170167

171168
@Specialization
172169
static Object[] starargs(PList starargs) {
173-
return ExecutePositionalStarargsNode.starargs(starargs);
170+
int length = starargs.getSequenceStorage().length();
171+
Object[] internalArray = starargs.getSequenceStorage().getInternalArray();
172+
if (internalArray.length != length) {
173+
return starargs.getSequenceStorage().getCopyOfInternalArray();
174+
}
175+
return internalArray;
174176
}
175177

176178
@Specialization

0 commit comments

Comments
 (0)