Skip to content

Commit 76c7a0e

Browse files
committed
Fix: foreign.__index__ did not handle boolean.
1 parent 58227be commit 76c7a0e

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/foreign/ForeignObjectBuiltins.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
import com.oracle.graal.python.builtins.objects.PNone;
7373
import com.oracle.graal.python.builtins.objects.PNotImplemented;
7474
import com.oracle.graal.python.builtins.objects.function.PKeyword;
75+
import com.oracle.graal.python.builtins.objects.ints.PInt;
7576
import com.oracle.graal.python.builtins.objects.iterator.PForeignArrayIterator;
7677
import com.oracle.graal.python.builtins.objects.object.ObjectBuiltinsFactory;
7778
import com.oracle.graal.python.nodes.PRaiseNode;
@@ -735,9 +736,16 @@ protected Object doIt(Object object,
735736
@Builtin(name = __INDEX__, minNumOfPositionalArgs = 1)
736737
@GenerateNodeFactory
737738
abstract static class IndexNode extends PythonUnaryBuiltinNode {
738-
@Specialization
739+
@Specialization(limit = "3")
739740
protected Object doIt(Object object,
740-
@CachedLibrary(limit = "3") InteropLibrary lib) {
741+
@CachedLibrary("object") InteropLibrary lib) {
742+
if (lib.isBoolean(object)) {
743+
try {
744+
return PInt.intValue(lib.asBoolean(object));
745+
} catch (UnsupportedMessageException e) {
746+
throw new IllegalStateException("foreign value claims to be a boolean but isn't");
747+
}
748+
}
741749
if (lib.fitsInInt(object)) {
742750
try {
743751
return lib.asInt(object);

0 commit comments

Comments
 (0)