Skip to content

Commit d00439b

Browse files
committed
Fix tuple concatenation for different sequence types
1 parent a1a705b commit d00439b

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/tuple/TupleBuiltins.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2019, Oracle and/or its affiliates.
2+
* Copyright (c) 2017, 2020, Oracle and/or its affiliates.
33
* Copyright (c) 2014, Regents of the University of California
44
*
55
* All rights reserved.
@@ -507,11 +507,15 @@ PNotImplemented contains(@SuppressWarnings("unused") Object self, @SuppressWarni
507507
abstract static class AddNode extends PythonBuiltinNode {
508508
@Specialization
509509
PTuple doPTuple(PTuple left, PTuple right,
510-
@Cached("create()") SequenceStorageNodes.ConcatNode concatNode) {
510+
@Cached("createConcat()") SequenceStorageNodes.ConcatNode concatNode) {
511511
SequenceStorage concatenated = concatNode.execute(left.getSequenceStorage(), right.getSequenceStorage());
512512
return factory().createTuple(concatenated);
513513
}
514514

515+
protected static SequenceStorageNodes.ConcatNode createConcat() {
516+
return SequenceStorageNodes.ConcatNode.create(() -> SequenceStorageNodes.ListGeneralizationNode.create());
517+
}
518+
515519
@Fallback
516520
Object doGeneric(@SuppressWarnings("unused") Object left, Object right) {
517521
throw raise(TypeError, "can only concatenate tuple (not \"%p\") to tuple", right);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/literal/TupleLiteralNode.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
package com.oracle.graal.python.nodes.literal;
2727

2828
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
29+
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.ListGeneralizationNode;
2930
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.NoGeneralizationNode;
3031
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
3132
import com.oracle.graal.python.nodes.PNode;
@@ -94,7 +95,7 @@ private PTuple directTuple(VirtualFrame frame) {
9495
private SequenceStorageNodes.ConcatNode ensureConcatStoragesNode() {
9596
if (concatStoragesNode == null) {
9697
CompilerDirectives.transferToInterpreterAndInvalidate();
97-
concatStoragesNode = insert(SequenceStorageNodes.ConcatNode.create());
98+
concatStoragesNode = insert(SequenceStorageNodes.ConcatNode.create(ListGeneralizationNode::create));
9899
}
99100
return concatStoragesNode;
100101
}

0 commit comments

Comments
 (0)