| [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_GetItemShort(x, 0) |
| r1 = cast(list, r0) |
| r2 = CPyList_GetItemShort(r1, 2) |
| r3 = unbox(int, r2) |
| 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 = box(short_int, 2) |
| 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 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 = box(short_int, 2) |
| r2 = box(short_int, 4) |
| r3 = get_element_ptr r0 ob_item :: PyListObject |
| r4 = load_mem r3, r0 :: ptr* |
| set_mem r4, r1, r0 :: builtins.object* |
| r5 = r4 + WORD_SIZE*1 |
| set_mem r5, r2, r0 :: builtins.object* |
| x = r0 |
| 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 = box(short_int, 8) |
| r3 = get_element_ptr r1 ob_item :: PyListObject |
| r4 = load_mem r3, r1 :: ptr* |
| set_mem r4, r2, r1 :: builtins.object* |
| 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, a :: native_int* |
| 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 :: int32 |
| 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, l :: native_int* |
| 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 = box(short_int, 2) |
| 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 :: int32 |
| r10 :: bit |
| L0: |
| r0 = PyList_New(2) |
| r1 = box(short_int, 2) |
| r2 = box(short_int, 4) |
| r3 = get_element_ptr r0 ob_item :: PyListObject |
| r4 = load_mem r3, r0 :: ptr* |
| set_mem r4, r1, r0 :: builtins.object* |
| r5 = r4 + WORD_SIZE*1 |
| set_mem r5, r2, r0 :: builtins.object* |
| r6 = CPyList_Extend(r0, x) |
| r7 = CPyList_Extend(r0, y) |
| r8 = box(short_int, 6) |
| 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 :: int32 |
| r2 :: bit |
| r3 :: bool |
| L0: |
| r0 = box(int, y) |
| r1 = PySequence_Contains(x, r0) |
| r2 = r1 >= 0 :: signed |
| r3 = truncate r1: int32 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 :: int32 |
| r2 :: bit |
| L0: |
| r0 = box(int, y) |
| r1 = CPyList_Insert(x, 0, r0) |
| r2 = r1 >= 0 :: signed |
| return 1 |