blob: b340ea302623c4edf7624957631caa307a89c296 [file] [log] [blame] [edit]
[case testIsinstanceInt]
def is_int(value: object) -> bool:
return isinstance(value, int)
[out]
def is_int(value):
value, r0 :: object
r1 :: int32
r2 :: bit
r3 :: bool
L0:
r0 = load_address PyLong_Type
r1 = PyObject_IsInstance(value, r0)
r2 = r1 >= 0 :: signed
r3 = truncate r1: int32 to builtins.bool
return r3
[case testIsinstanceNotBool1]
def is_not_bool(value: object) -> bool:
return not isinstance(value, bool)
[out]
def is_not_bool(value):
value, r0 :: object
r1 :: int32
r2 :: bit
r3, r4 :: bool
L0:
r0 = load_address PyBool_Type
r1 = PyObject_IsInstance(value, r0)
r2 = r1 >= 0 :: signed
r3 = truncate r1: int32 to builtins.bool
r4 = r3 ^ 1
return r4
[case testIsinstanceIntAndNotBool]
# This test is to ensure that 'value' doesn't get coerced to int when we are
# checking if it's a bool, since an int can never be an instance of a bool
def is_not_bool_and_is_int(value: object) -> bool:
return isinstance(value, int) and not isinstance(value, bool)
[out]
def is_not_bool_and_is_int(value):
value, r0 :: object
r1 :: int32
r2 :: bit
r3, r4 :: bool
r5 :: object
r6 :: int32
r7 :: bit
r8, r9 :: bool
L0:
r0 = load_address PyLong_Type
r1 = PyObject_IsInstance(value, r0)
r2 = r1 >= 0 :: signed
r3 = truncate r1: int32 to builtins.bool
if r3 goto L2 else goto L1 :: bool
L1:
r4 = r3
goto L3
L2:
r5 = load_address PyBool_Type
r6 = PyObject_IsInstance(value, r5)
r7 = r6 >= 0 :: signed
r8 = truncate r6: int32 to builtins.bool
r9 = r8 ^ 1
r4 = r9
L3:
return r4