| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463 |
- [case testBoolToAndFromInt]
- from mypy_extensions import i64
- def bool_to_int(b: bool) -> int:
- return b
- def int_to_bool(n: int) -> bool:
- return bool(n)
- def bool_to_i64(b: bool) -> i64:
- return b
- def i64_to_bool(n: i64) -> bool:
- return bool(n)
- def bit_to_int(n1: i64, n2: i64) -> int:
- return bool(n1 == n2)
- def bit_to_i64(n1: i64, n2: i64) -> i64:
- return bool(n1 == n2)
- [out]
- def bool_to_int(b):
- b, r0 :: bool
- r1 :: int
- L0:
- r0 = b << 1
- r1 = extend r0: builtins.bool to builtins.int
- return r1
- def int_to_bool(n):
- n :: int
- r0 :: bit
- L0:
- r0 = n != 0
- return r0
- def bool_to_i64(b):
- b :: bool
- r0 :: i64
- L0:
- r0 = extend b: builtins.bool to i64
- return r0
- def i64_to_bool(n):
- n :: i64
- r0 :: bit
- L0:
- r0 = n != 0
- return r0
- def bit_to_int(n1, n2):
- n1, n2 :: i64
- r0 :: bit
- r1 :: bool
- r2 :: int
- L0:
- r0 = n1 == n2
- r1 = r0 << 1
- r2 = extend r1: builtins.bool to builtins.int
- return r2
- def bit_to_i64(n1, n2):
- n1, n2 :: i64
- r0 :: bit
- r1 :: i64
- L0:
- r0 = n1 == n2
- r1 = extend r0: bit to i64
- return r1
- [case testConversionToBool]
- from typing import List, Optional
- class C: pass
- class D:
- def __bool__(self) -> bool:
- return True
- def list_to_bool(l: List[str]) -> bool:
- return bool(l)
- def always_truthy_instance_to_bool(o: C) -> bool:
- return bool(o)
- def instance_to_bool(o: D) -> bool:
- return bool(o)
- def optional_truthy_to_bool(o: Optional[C]) -> bool:
- return bool(o)
- def optional_maybe_falsey_to_bool(o: Optional[D]) -> bool:
- return bool(o)
- [out]
- def D.__bool__(self):
- self :: __main__.D
- L0:
- return 1
- def list_to_bool(l):
- l :: list
- r0 :: ptr
- r1 :: native_int
- r2 :: short_int
- r3 :: bit
- L0:
- r0 = get_element_ptr l ob_size :: PyVarObject
- r1 = load_mem r0 :: native_int*
- keep_alive l
- r2 = r1 << 1
- r3 = r2 != 0
- return r3
- def always_truthy_instance_to_bool(o):
- o :: __main__.C
- r0 :: i32
- r1 :: bit
- r2 :: bool
- L0:
- r0 = PyObject_IsTrue(o)
- r1 = r0 >= 0 :: signed
- r2 = truncate r0: i32 to builtins.bool
- return r2
- def instance_to_bool(o):
- o :: __main__.D
- r0 :: bool
- L0:
- r0 = o.__bool__()
- return r0
- def optional_truthy_to_bool(o):
- o :: union[__main__.C, None]
- r0 :: object
- r1 :: bit
- L0:
- r0 = load_address _Py_NoneStruct
- r1 = o != r0
- return r1
- def optional_maybe_falsey_to_bool(o):
- o :: union[__main__.D, None]
- r0 :: object
- r1 :: bit
- r2 :: __main__.D
- r3 :: bool
- r4 :: bit
- L0:
- r0 = load_address _Py_NoneStruct
- r1 = o != r0
- if r1 goto L1 else goto L2 :: bool
- L1:
- r2 = cast(__main__.D, o)
- r3 = r2.__bool__()
- r4 = r3
- goto L3
- L2:
- r4 = 0
- L3:
- return r4
- [case testBoolComparisons]
- def eq(x: bool, y: bool) -> bool:
- return x == y
- def neq(x: bool, y: bool) -> bool:
- return x != y
- def lt(x: bool, y: bool) -> bool:
- return x < y
- def le(x: bool, y: bool) -> bool:
- return x <= y
- def gt(x: bool, y: bool) -> bool:
- return x > y
- def ge(x: bool, y: bool) -> bool:
- return x >= y
- [out]
- def eq(x, y):
- x, y :: bool
- r0 :: bit
- L0:
- r0 = x == y
- return r0
- def neq(x, y):
- x, y :: bool
- r0 :: bit
- L0:
- r0 = x != y
- return r0
- def lt(x, y):
- x, y :: bool
- r0 :: bit
- L0:
- r0 = x < y :: signed
- return r0
- def le(x, y):
- x, y :: bool
- r0 :: bit
- L0:
- r0 = x <= y :: signed
- return r0
- def gt(x, y):
- x, y :: bool
- r0 :: bit
- L0:
- r0 = x > y :: signed
- return r0
- def ge(x, y):
- x, y :: bool
- r0 :: bit
- L0:
- r0 = x >= y :: signed
- return r0
- [case testBoolMixedComparisons1]
- from mypy_extensions import i64
- def eq1(x: int, y: bool) -> bool:
- return x == y
- def eq2(x: bool, y: int) -> bool:
- return x == y
- def neq1(x: i64, y: bool) -> bool:
- return x != y
- def neq2(x: bool, y: i64) -> bool:
- return x != y
- [out]
- def eq1(x, y):
- x :: int
- y, r0 :: bool
- r1 :: int
- r2 :: bit
- L0:
- r0 = y << 1
- r1 = extend r0: builtins.bool to builtins.int
- r2 = x == r1
- return r2
- def eq2(x, y):
- x :: bool
- y :: int
- r0 :: bool
- r1 :: int
- r2 :: bit
- L0:
- r0 = x << 1
- r1 = extend r0: builtins.bool to builtins.int
- r2 = r1 == y
- return r2
- def neq1(x, y):
- x :: i64
- y :: bool
- r0 :: i64
- r1 :: bit
- L0:
- r0 = extend y: builtins.bool to i64
- r1 = x != r0
- return r1
- def neq2(x, y):
- x :: bool
- y, r0 :: i64
- r1 :: bit
- L0:
- r0 = extend x: builtins.bool to i64
- r1 = r0 != y
- return r1
- [case testBoolMixedComparisons2]
- from mypy_extensions import i64
- def lt1(x: bool, y: int) -> bool:
- return x < y
- def lt2(x: int, y: bool) -> bool:
- return x < y
- def gt1(x: bool, y: i64) -> bool:
- return x < y
- def gt2(x: i64, y: bool) -> bool:
- return x < y
- [out]
- def lt1(x, y):
- x :: bool
- y :: int
- r0 :: bool
- r1 :: short_int
- r2 :: native_int
- r3 :: bit
- r4 :: native_int
- r5, r6, r7 :: bit
- r8 :: bool
- r9 :: bit
- L0:
- r0 = x << 1
- r1 = extend r0: builtins.bool to short_int
- r2 = r1 & 1
- r3 = r2 == 0
- r4 = y & 1
- r5 = r4 == 0
- r6 = r3 & r5
- if r6 goto L1 else goto L2 :: bool
- L1:
- r7 = r1 < y :: signed
- r8 = r7
- goto L3
- L2:
- r9 = CPyTagged_IsLt_(r1, y)
- r8 = r9
- L3:
- return r8
- def lt2(x, y):
- x :: int
- y, r0 :: bool
- r1 :: short_int
- r2 :: native_int
- r3 :: bit
- r4 :: native_int
- r5, r6, r7 :: bit
- r8 :: bool
- r9 :: bit
- L0:
- r0 = y << 1
- r1 = extend r0: builtins.bool to short_int
- r2 = x & 1
- r3 = r2 == 0
- r4 = r1 & 1
- r5 = r4 == 0
- r6 = r3 & r5
- if r6 goto L1 else goto L2 :: bool
- L1:
- r7 = x < r1 :: signed
- r8 = r7
- goto L3
- L2:
- r9 = CPyTagged_IsLt_(x, r1)
- r8 = r9
- L3:
- return r8
- def gt1(x, y):
- x :: bool
- y, r0 :: i64
- r1 :: bit
- L0:
- r0 = extend x: builtins.bool to i64
- r1 = r0 < y :: signed
- return r1
- def gt2(x, y):
- x :: i64
- y :: bool
- r0 :: i64
- r1 :: bit
- L0:
- r0 = extend y: builtins.bool to i64
- r1 = x < r0 :: signed
- return r1
- [case testBoolBitwise]
- from mypy_extensions import i64
- def bitand(x: bool, y: bool) -> bool:
- b = x & y
- return b
- def bitor(x: bool, y: bool) -> bool:
- b = x | y
- return b
- def bitxor(x: bool, y: bool) -> bool:
- b = x ^ y
- return b
- def invert(x: bool) -> int:
- return ~x
- def mixed_bitand(x: i64, y: bool) -> i64:
- return x & y
- [out]
- def bitand(x, y):
- x, y, r0, b :: bool
- L0:
- r0 = x & y
- b = r0
- return b
- def bitor(x, y):
- x, y, r0, b :: bool
- L0:
- r0 = x | y
- b = r0
- return b
- def bitxor(x, y):
- x, y, r0, b :: bool
- L0:
- r0 = x ^ y
- b = r0
- return b
- def invert(x):
- x, r0 :: bool
- r1, r2 :: int
- L0:
- r0 = x << 1
- r1 = extend r0: builtins.bool to builtins.int
- r2 = CPyTagged_Invert(r1)
- return r2
- def mixed_bitand(x, y):
- x :: i64
- y :: bool
- r0, r1 :: i64
- L0:
- r0 = extend y: builtins.bool to i64
- r1 = x & r0
- return r1
- [case testBoolArithmetic]
- def add(x: bool, y: bool) -> int:
- z = x + y
- return z
- def mixed(b: bool, n: int) -> int:
- z = b + n
- z -= b
- z = z * b
- return z
- def negate(b: bool) -> int:
- return -b
- def unary_plus(b: bool) -> int:
- x = +b
- return x
- [out]
- def add(x, y):
- x, y, r0 :: bool
- r1 :: int
- r2 :: bool
- r3, r4, z :: int
- L0:
- r0 = x << 1
- r1 = extend r0: builtins.bool to builtins.int
- r2 = y << 1
- r3 = extend r2: builtins.bool to builtins.int
- r4 = CPyTagged_Add(r1, r3)
- z = r4
- return z
- def mixed(b, n):
- b :: bool
- n :: int
- r0 :: bool
- r1, r2, z :: int
- r3 :: bool
- r4, r5 :: int
- r6 :: bool
- r7, r8 :: int
- L0:
- r0 = b << 1
- r1 = extend r0: builtins.bool to builtins.int
- r2 = CPyTagged_Add(r1, n)
- z = r2
- r3 = b << 1
- r4 = extend r3: builtins.bool to builtins.int
- r5 = CPyTagged_Subtract(z, r4)
- z = r5
- r6 = b << 1
- r7 = extend r6: builtins.bool to builtins.int
- r8 = CPyTagged_Multiply(z, r7)
- z = r8
- return z
- def negate(b):
- b, r0 :: bool
- r1, r2 :: int
- L0:
- r0 = b << 1
- r1 = extend r0: builtins.bool to builtins.int
- r2 = CPyTagged_Negate(r1)
- return r2
- def unary_plus(b):
- b, r0 :: bool
- r1, x :: int
- L0:
- r0 = b << 1
- r1 = extend r0: builtins.bool to builtins.int
- x = r1
- return x
|