Skip to content

Commit 2cebdf9

Browse files
committed
TupleBuiltins.RichCompareNode should accept non-tuples as well
1 parent c211c49 commit 2cebdf9

File tree

1 file changed

+11
-5
lines changed
  • graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/tuple

1 file changed

+11
-5
lines changed

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

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@
107107
import com.oracle.truffle.api.HostCompilerDirectives.InliningCutoff;
108108
import com.oracle.truffle.api.dsl.Bind;
109109
import com.oracle.truffle.api.dsl.Cached;
110+
import com.oracle.truffle.api.dsl.Cached.Exclusive;
110111
import com.oracle.truffle.api.dsl.Cached.Shared;
111112
import com.oracle.truffle.api.dsl.Fallback;
112113
import com.oracle.truffle.api.dsl.GenerateCached;
@@ -419,21 +420,26 @@ abstract static class RichCompareNode extends PythonTernaryBuiltinNode {
419420
@Specialization(guards = {"opCode == cachedOp.opCode"}, limit = "6")
420421
static Object doPTuple(VirtualFrame frame, PTuple left, PTuple right, @SuppressWarnings("unused") int opCode,
421422
@SuppressWarnings("unused") @Cached("fromOpCode(opCode)") ComparisonOp cachedOp,
422-
@Cached("createCmpNode(cachedOp)") SequenceStorageNodes.CmpNode cmpNode) {
423+
@Exclusive @Cached("createCmpNode(cachedOp)") SequenceStorageNodes.CmpNode cmpNode) {
423424
return cmpNode.execute(frame, left.getSequenceStorage(), right.getSequenceStorage());
424425
}
425426

426-
@Specialization(guards = {"opCode == cachedOp.opCode", "checkRight.execute(inliningTarget, right)"}, limit = "6", replaces = "doPTuple")
427-
static Object doRelOp(VirtualFrame frame, Object left, Object right, @SuppressWarnings("unused") int opCode,
427+
@Specialization(guards = {"opCode == cachedOp.opCode"}, limit = "6", replaces = "doPTuple")
428+
static Object doGeneric(VirtualFrame frame, Object left, Object right, @SuppressWarnings("unused") int opCode,
428429
@Bind("this") Node inliningTarget,
429430
@SuppressWarnings("unused") @Cached("fromOpCode(opCode)") ComparisonOp cachedOp,
430-
@SuppressWarnings("unused") @Cached PyTupleCheckNode checkRight,
431+
@Cached PyTupleCheckNode checkLeft,
432+
@Cached PyTupleCheckNode checkRight,
431433
@Cached GetTupleStorage getLeft,
432434
@Cached GetTupleStorage getRight,
433-
@Cached("createCmpNode(cachedOp)") SequenceStorageNodes.CmpNode cmpNode) {
435+
@Exclusive @Cached("createCmpNode(cachedOp)") SequenceStorageNodes.CmpNode cmpNode) {
436+
if (!checkLeft.execute(inliningTarget, left) || !checkRight.execute(inliningTarget, right)) {
437+
return PNotImplemented.NOT_IMPLEMENTED;
438+
}
434439
return cmpNode.execute(frame, getLeft.execute(inliningTarget, left), getRight.execute(inliningTarget, right));
435440
}
436441

442+
@NeverDefault
437443
static SequenceStorageNodes.CmpNode createCmpNode(ComparisonOp op) {
438444
switch (op) {
439445
case LE:

0 commit comments

Comments
 (0)