Skip to content

Commit e48aa64

Browse files
committed
StringBuiltins.RichCompareNode should accept non-strings as well
1 parent 5bba310 commit e48aa64

File tree

1 file changed

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

1 file changed

+11
-0
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/str/StringBuiltins.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@
135135
import com.oracle.graal.python.lib.PyNumberAsSizeNode;
136136
import com.oracle.graal.python.lib.PyObjectGetItem;
137137
import com.oracle.graal.python.lib.PyObjectHashNode;
138+
import com.oracle.graal.python.lib.PyUnicodeCheckNode;
138139
import com.oracle.graal.python.nodes.ErrorMessages;
139140
import com.oracle.graal.python.nodes.PGuards;
140141
import com.oracle.graal.python.nodes.PRaiseNode;
@@ -515,15 +516,25 @@ abstract static class RichCompareNode extends PythonTernaryBuiltinNode {
515516
@Specialization(guards = "isEqualityOpCode(opCode)")
516517
static Object doEqNeOp(Object left, Object right, int opCode,
517518
@Bind("this") Node inliningTarget,
519+
@Exclusive @Cached PyUnicodeCheckNode checkLeft,
520+
@Exclusive @Cached PyUnicodeCheckNode checkRight,
518521
@Cached StringEqOpHelperNode stringEqOpHelperNode) {
522+
if (!checkLeft.execute(inliningTarget, left) || !checkRight.execute(inliningTarget, right)) {
523+
return PNotImplemented.NOT_IMPLEMENTED;
524+
}
519525
return stringEqOpHelperNode.execute(inliningTarget, left, right, opCode == ComparisonOp.NE.opCode);
520526
}
521527

522528
@Specialization(guards = {"opCode == cachedOp.opCode", "!isEqualityOpCode(opCode)"}, limit = "4")
523529
static Object doRelOp(Object left, Object right, @SuppressWarnings("unused") int opCode,
524530
@Bind("this") Node inliningTarget,
531+
@Exclusive @Cached PyUnicodeCheckNode checkLeft,
532+
@Exclusive @Cached PyUnicodeCheckNode checkRight,
525533
@Cached("fromOpCode(opCode)") ComparisonOp cachedOp,
526534
@Cached StringCmpOpHelperNode stringCmpOpHelperNode) {
535+
if (!checkLeft.execute(inliningTarget, left) || !checkRight.execute(inliningTarget, right)) {
536+
return PNotImplemented.NOT_IMPLEMENTED;
537+
}
527538
return stringCmpOpHelperNode.execute(inliningTarget, left, right, cachedOp.intPredicate);
528539
}
529540
}

0 commit comments

Comments
 (0)