| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547 |
- [case testListGet]
- from typing import List
- def f(x: List[int]) -> int:
- return x[0]
- [out]
- def f(x):
- x :: list
- r0 :: object
- r1 :: int
- L0:
- r0 = CPyList_GetItemShort(x, 0)
- r1 = unbox(int, r0)
- return r1
- [case testListOfListGet]
- from typing import List
- def f(x: List[List[int]]) -> List[int]:
- return x[0]
- [out]
- def f(x):
- x :: list
- r0 :: object
- r1 :: list
- L0:
- r0 = CPyList_GetItemShort(x, 0)
- r1 = cast(list, r0)
- return r1
- [case testListOfListGet2]
- from typing import List
- def f(x: List[List[int]]) -> int:
- return x[0][1]
- [out]
- def f(x):
- x :: list
- r0 :: object
- r1 :: list
- r2 :: object
- r3 :: int
- L0:
- r0 = CPyList_GetItemShortBorrow(x, 0)
- r1 = borrow cast(list, r0)
- r2 = CPyList_GetItemShort(r1, 2)
- r3 = unbox(int, r2)
- keep_alive x, r0
- return r3
- [case testListSet]
- from typing import List
- def f(x: List[int]) -> None:
- x[0] = 1
- [out]
- def f(x):
- x :: list
- r0 :: object
- r1 :: bit
- L0:
- r0 = object 1
- r1 = CPyList_SetItem(x, 0, r0)
- return 1
- [case testNewListEmpty]
- from typing import List
- def f() -> None:
- x = [] # type: List[int]
- [out]
- def f():
- r0, x :: list
- L0:
- r0 = PyList_New(0)
- x = r0
- return 1
- [case testNewListEmptyViaFunc]
- from typing import List
- def f() -> None:
- x: List[int] = list()
- [out]
- def f():
- r0, x :: list
- L0:
- r0 = PyList_New(0)
- x = r0
- return 1
- [case testNewListEmptyViaAlias]
- from typing import List
- ListAlias = list
- def f() -> None:
- x: List[int] = ListAlias()
- [out]
- def f():
- r0, x :: list
- L0:
- r0 = PyList_New(0)
- x = r0
- return 1
- [case testNewListTwoItems]
- from typing import List
- def f() -> None:
- x: List[int] = [1, 2]
- [out]
- def f():
- r0 :: list
- r1, r2 :: object
- r3, r4, r5 :: ptr
- x :: list
- L0:
- r0 = PyList_New(2)
- r1 = object 1
- r2 = object 2
- r3 = get_element_ptr r0 ob_item :: PyListObject
- r4 = load_mem r3 :: ptr*
- set_mem r4, r1 :: builtins.object*
- r5 = r4 + WORD_SIZE*1
- set_mem r5, r2 :: builtins.object*
- keep_alive r0
- x = r0
- return 1
- [case testNewListTenItems]
- from typing import List
- def f() -> None:
- x: List[str] = ['a', 'b', 'c', 'd', 'e',
- 'f', 'g', 'h', 'i', 'j']
- [out]
- def f():
- r0, r1, r2, r3, r4, r5, r6, r7, r8, r9 :: str
- r10, x :: list
- L0:
- r0 = 'a'
- r1 = 'b'
- r2 = 'c'
- r3 = 'd'
- r4 = 'e'
- r5 = 'f'
- r6 = 'g'
- r7 = 'h'
- r8 = 'i'
- r9 = 'j'
- r10 = CPyList_Build(10, r0, r1, r2, r3, r4, r5, r6, r7, r8, r9)
- x = r10
- return 1
- [case testListMultiply]
- from typing import List
- def f(a: List[int]) -> None:
- b = a * 2
- b = 3 * [4]
- [out]
- def f(a):
- a, r0, b, r1 :: list
- r2 :: object
- r3, r4 :: ptr
- r5 :: list
- L0:
- r0 = CPySequence_Multiply(a, 4)
- b = r0
- r1 = PyList_New(1)
- r2 = object 4
- r3 = get_element_ptr r1 ob_item :: PyListObject
- r4 = load_mem r3 :: ptr*
- set_mem r4, r2 :: builtins.object*
- keep_alive r1
- r5 = CPySequence_RMultiply(6, r1)
- b = r5
- return 1
- [case testListLen]
- from typing import List
- def f(a: List[int]) -> int:
- return len(a)
- [out]
- def f(a):
- a :: list
- r0 :: ptr
- r1 :: native_int
- r2 :: short_int
- L0:
- r0 = get_element_ptr a ob_size :: PyVarObject
- r1 = load_mem r0 :: native_int*
- keep_alive a
- r2 = r1 << 1
- return r2
- [case testListAppend]
- from typing import List
- def f(a: List[int], x: int) -> None:
- a.append(x)
- [out]
- def f(a, x):
- a :: list
- x :: int
- r0 :: object
- r1 :: i32
- r2 :: bit
- L0:
- r0 = box(int, x)
- r1 = PyList_Append(a, r0)
- r2 = r1 >= 0 :: signed
- return 1
- [case testIndexLvalue]
- from typing import List
- def increment(l: List[int]) -> List[int]:
- for i in range(len(l)):
- l[i] += 1
- return l
- [out]
- def increment(l):
- l :: list
- r0 :: ptr
- r1 :: native_int
- r2, r3 :: short_int
- i :: int
- r4 :: bit
- r5, r6, r7 :: object
- r8 :: bit
- r9 :: short_int
- L0:
- r0 = get_element_ptr l ob_size :: PyVarObject
- r1 = load_mem r0 :: native_int*
- keep_alive l
- r2 = r1 << 1
- r3 = 0
- i = r3
- L1:
- r4 = r3 < r2 :: signed
- if r4 goto L2 else goto L4 :: bool
- L2:
- r5 = CPyList_GetItem(l, i)
- r6 = object 1
- r7 = PyNumber_InPlaceAdd(r5, r6)
- r8 = CPyList_SetItem(l, i, r7)
- L3:
- r9 = r3 + 2
- r3 = r9
- i = r9
- goto L1
- L4:
- return l
- [case testListDisplay]
- from typing import List
- def f(x: List[int], y: List[int]) -> List[int]:
- return [1, 2, *x, *y, 3]
- [out]
- def f(x, y):
- x, y, r0 :: list
- r1, r2 :: object
- r3, r4, r5 :: ptr
- r6, r7, r8 :: object
- r9 :: i32
- r10 :: bit
- L0:
- r0 = PyList_New(2)
- r1 = object 1
- r2 = object 2
- r3 = get_element_ptr r0 ob_item :: PyListObject
- r4 = load_mem r3 :: ptr*
- set_mem r4, r1 :: builtins.object*
- r5 = r4 + WORD_SIZE*1
- set_mem r5, r2 :: builtins.object*
- keep_alive r0
- r6 = CPyList_Extend(r0, x)
- r7 = CPyList_Extend(r0, y)
- r8 = object 3
- r9 = PyList_Append(r0, r8)
- r10 = r9 >= 0 :: signed
- return r0
- [case testListIn]
- from typing import List
- def f(x: List[int], y: int) -> bool:
- return y in x
- [out]
- def f(x, y):
- x :: list
- y :: int
- r0 :: object
- r1 :: i32
- r2 :: bit
- r3 :: bool
- L0:
- r0 = box(int, y)
- r1 = PySequence_Contains(x, r0)
- r2 = r1 >= 0 :: signed
- r3 = truncate r1: i32 to builtins.bool
- return r3
- [case testListInsert]
- from typing import List
- def f(x: List[int], y: int) -> None:
- x.insert(0, y)
- [out]
- def f(x, y):
- x :: list
- y :: int
- r0 :: object
- r1 :: i32
- r2 :: bit
- L0:
- r0 = box(int, y)
- r1 = CPyList_Insert(x, 0, r0)
- r2 = r1 >= 0 :: signed
- return 1
- [case testListBuiltFromGenerator]
- from typing import List
- def f(source: List[int]) -> None:
- a = list(x + 1 for x in source)
- b = [x + 1 for x in source]
- [out]
- def f(source):
- source :: list
- r0 :: ptr
- r1 :: native_int
- r2 :: list
- r3 :: short_int
- r4 :: ptr
- r5 :: native_int
- r6 :: short_int
- r7 :: bit
- r8 :: object
- r9, x, r10 :: int
- r11 :: object
- r12 :: bit
- r13 :: short_int
- a :: list
- r14 :: ptr
- r15 :: native_int
- r16 :: list
- r17 :: short_int
- r18 :: ptr
- r19 :: native_int
- r20 :: short_int
- r21 :: bit
- r22 :: object
- r23, x_2, r24 :: int
- r25 :: object
- r26 :: bit
- r27 :: short_int
- b :: list
- L0:
- r0 = get_element_ptr source ob_size :: PyVarObject
- r1 = load_mem r0 :: native_int*
- keep_alive source
- r2 = PyList_New(r1)
- r3 = 0
- L1:
- r4 = get_element_ptr source ob_size :: PyVarObject
- r5 = load_mem r4 :: native_int*
- keep_alive source
- r6 = r5 << 1
- r7 = r3 < r6 :: signed
- if r7 goto L2 else goto L4 :: bool
- L2:
- r8 = CPyList_GetItemUnsafe(source, r3)
- r9 = unbox(int, r8)
- x = r9
- r10 = CPyTagged_Add(x, 2)
- r11 = box(int, r10)
- r12 = CPyList_SetItemUnsafe(r2, r3, r11)
- L3:
- r13 = r3 + 2
- r3 = r13
- goto L1
- L4:
- a = r2
- r14 = get_element_ptr source ob_size :: PyVarObject
- r15 = load_mem r14 :: native_int*
- keep_alive source
- r16 = PyList_New(r15)
- r17 = 0
- L5:
- r18 = get_element_ptr source ob_size :: PyVarObject
- r19 = load_mem r18 :: native_int*
- keep_alive source
- r20 = r19 << 1
- r21 = r17 < r20 :: signed
- if r21 goto L6 else goto L8 :: bool
- L6:
- r22 = CPyList_GetItemUnsafe(source, r17)
- r23 = unbox(int, r22)
- x_2 = r23
- r24 = CPyTagged_Add(x_2, 2)
- r25 = box(int, r24)
- r26 = CPyList_SetItemUnsafe(r16, r17, r25)
- L7:
- r27 = r17 + 2
- r17 = r27
- goto L5
- L8:
- b = r16
- return 1
- [case testGeneratorNext]
- from typing import List, Optional
- def test(x: List[int]) -> None:
- res = next((i for i in x), None)
- [out]
- def test(x):
- x :: list
- r0 :: short_int
- r1 :: ptr
- r2 :: native_int
- r3 :: short_int
- r4 :: bit
- r5 :: object
- r6, i :: int
- r7 :: object
- r8 :: union[int, None]
- r9 :: short_int
- r10 :: object
- res :: union[int, None]
- L0:
- r0 = 0
- L1:
- r1 = get_element_ptr x ob_size :: PyVarObject
- r2 = load_mem r1 :: native_int*
- keep_alive x
- r3 = r2 << 1
- r4 = r0 < r3 :: signed
- if r4 goto L2 else goto L4 :: bool
- L2:
- r5 = CPyList_GetItemUnsafe(x, r0)
- r6 = unbox(int, r5)
- i = r6
- r7 = box(int, i)
- r8 = r7
- goto L5
- L3:
- r9 = r0 + 2
- r0 = r9
- goto L1
- L4:
- r10 = box(None, 1)
- r8 = r10
- L5:
- res = r8
- return 1
- [case testSimplifyListUnion]
- from typing import List, Union, Optional
- def narrow(a: Union[List[str], List[bytes], int]) -> int:
- if isinstance(a, list):
- return len(a)
- return a
- def loop(a: Union[List[str], List[bytes]]) -> None:
- for x in a:
- pass
- def nested_union(a: Union[List[str], List[Optional[str]]]) -> None:
- for x in a:
- pass
- [out]
- def narrow(a):
- a :: union[list, int]
- r0 :: object
- r1 :: i32
- r2 :: bit
- r3 :: bool
- r4 :: list
- r5 :: ptr
- r6 :: native_int
- r7 :: short_int
- r8 :: int
- L0:
- r0 = load_address PyList_Type
- r1 = PyObject_IsInstance(a, r0)
- r2 = r1 >= 0 :: signed
- r3 = truncate r1: i32 to builtins.bool
- if r3 goto L1 else goto L2 :: bool
- L1:
- r4 = borrow cast(list, a)
- r5 = get_element_ptr r4 ob_size :: PyVarObject
- r6 = load_mem r5 :: native_int*
- keep_alive r4
- r7 = r6 << 1
- keep_alive a
- return r7
- L2:
- r8 = unbox(int, a)
- return r8
- def loop(a):
- a :: list
- r0 :: short_int
- r1 :: ptr
- r2 :: native_int
- r3 :: short_int
- r4 :: bit
- r5 :: object
- r6, x :: union[str, bytes]
- r7 :: short_int
- L0:
- r0 = 0
- L1:
- r1 = get_element_ptr a ob_size :: PyVarObject
- r2 = load_mem r1 :: native_int*
- keep_alive a
- r3 = r2 << 1
- r4 = r0 < r3 :: signed
- if r4 goto L2 else goto L4 :: bool
- L2:
- r5 = CPyList_GetItemUnsafe(a, r0)
- r6 = cast(union[str, bytes], r5)
- x = r6
- L3:
- r7 = r0 + 2
- r0 = r7
- goto L1
- L4:
- return 1
- def nested_union(a):
- a :: list
- r0 :: short_int
- r1 :: ptr
- r2 :: native_int
- r3 :: short_int
- r4 :: bit
- r5 :: object
- r6, x :: union[str, None]
- r7 :: short_int
- L0:
- r0 = 0
- L1:
- r1 = get_element_ptr a ob_size :: PyVarObject
- r2 = load_mem r1 :: native_int*
- keep_alive a
- r3 = r2 << 1
- r4 = r0 < r3 :: signed
- if r4 goto L2 else goto L4 :: bool
- L2:
- r5 = CPyList_GetItemUnsafe(a, r0)
- r6 = cast(union[str, None], r5)
- x = r6
- L3:
- r7 = r0 + 2
- r0 = r7
- goto L1
- L4:
- return 1
|