| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- [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
|