blob: 78da2e9c1e196a1ec9b8492c0fec0c91d6e6d0ff [file] [log] [blame]
[case testIsinstanceInt]
def is_int(value: object) -> bool:
return isinstance(value, int)
[out]
def is_int(value):
value, r0 :: object
r1 :: i32
r2 :: bit
r3 :: bool
L0:
r0 = load_address PyLong_Type
r1 = PyObject_IsInstance(value, r0)
r2 = r1 >= 0 :: signed
r3 = truncate r1: i32 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 :: i32
r2 :: bit
r3, r4 :: bool
L0:
r0 = load_address PyBool_Type
r1 = PyObject_IsInstance(value, r0)
r2 = r1 >= 0 :: signed
r3 = truncate r1: i32 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 :: i32
r2 :: bit
r3, r4 :: bool
r5 :: object
r6 :: i32
r7 :: bit
r8, r9 :: bool
L0:
r0 = load_address PyLong_Type
r1 = PyObject_IsInstance(value, r0)
r2 = r1 >= 0 :: signed
r3 = truncate r1: i32 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: i32 to builtins.bool
r9 = r8 ^ 1
r4 = r9
L3:
return r4
[case testBorrowSpecialCaseWithIsinstance]
class C:
s: str
def g() -> object:
pass
def f() -> None:
x = g()
if isinstance(x, C):
x.s
[out]
def g():
r0 :: object
L0:
r0 = box(None, 1)
return r0
def f():
r0, x, r1 :: object
r2 :: ptr
r3 :: object
r4 :: bit
r5 :: __main__.C
r6 :: str
L0:
r0 = g()
x = r0
r1 = __main__.C :: type
r2 = get_element_ptr x ob_type :: PyObject
r3 = load_mem r2 :: builtins.object*
keep_alive x
r4 = r3 == r1
if r4 goto L1 else goto L2 :: bool
L1:
r5 = borrow cast(__main__.C, x)
r6 = r5.s
keep_alive x
L2:
return 1