Skip to content
Open
219 changes: 219 additions & 0 deletions mypyc/test-data/irbuild-lists.test
Original file line number Diff line number Diff line change
Expand Up @@ -968,3 +968,222 @@ L3:
L4:
a = r19
return 1

[case testListFromRange1]
def fn() -> list[int]:
return list(range(3))
[out]
def fn():
r0, r1 :: object
r2 :: object[1]
r3 :: object_ptr
r4 :: object
r5 :: range
r6 :: list
L0:
r0 = load_address PyRange_Type
r1 = object 3
r2 = [r1]
r3 = load_address r2
r4 = PyObject_Vectorcall(r0, r3, 1, 0)
keep_alive r1
r5 = cast(range, r4)
r6 = PySequence_List(r5)
return r6

[case testListFromRange2]
def fn() -> list[int]:
return list(range(1, 3))
[out]
def fn():
r0, r1, r2 :: object
r3 :: object[2]
r4 :: object_ptr
r5 :: object
r6 :: range
r7 :: list
L0:
r0 = load_address PyRange_Type
r1 = object 1
r2 = object 3
r3 = [r1, r2]
r4 = load_address r3
r5 = PyObject_Vectorcall(r0, r4, 2, 0)
keep_alive r1, r2
r6 = cast(range, r5)
r7 = PySequence_List(r6)
return r7

[case testListFromRange3]
def fn() -> list[int]:
return list(range(1, 3, 2))
[out]
def fn():
r0, r1, r2, r3 :: object
r4 :: object[3]
r5 :: object_ptr
r6 :: object
r7 :: range
r8 :: list
L0:
r0 = load_address PyRange_Type
r1 = object 1
r2 = object 3
r3 = object 2
r4 = [r1, r2, r3]
r5 = load_address r4
r6 = PyObject_Vectorcall(r0, r5, 3, 0)
keep_alive r1, r2, r3
r7 = cast(range, r6)
r8 = PySequence_List(r7)
return r8

[case testListFromRange4]
def fn() -> list[str]:
abc = tuple(range(3))
return list(str(i) for i in abc)
[out]
def fn():
r0, r1 :: object
r2 :: object[1]
r3 :: object_ptr
r4 :: object
r5 :: range
r6, abc :: tuple
r7 :: native_int
r8 :: list
r9 :: native_int
r10 :: bit
r11 :: object
r12, i :: int
r13 :: str
r14 :: native_int
L0:
r0 = load_address PyRange_Type
r1 = object 3
r2 = [r1]
r3 = load_address r2
r4 = PyObject_Vectorcall(r0, r3, 1, 0)
keep_alive r1
r5 = cast(range, r4)
r6 = PySequence_Tuple(r5)
abc = r6
r7 = var_object_size abc
r8 = PyList_New(r7)
r9 = 0
L1:
r10 = r9 < r7 :: signed
if r10 goto L2 else goto L4 :: bool
L2:
r11 = CPySequenceTuple_GetItemUnsafe(abc, r9)
r12 = unbox(int, r11)
i = r12
r13 = CPyTagged_Str(i)
CPyList_SetItemUnsafe(r8, r9, r13)
L3:
r14 = r9 + 1
r9 = r14
goto L1
L4:
return r8

[case testListFromRange5]
def fn() -> list[str]:
abc = tuple(range(1, 3))
return list(str(i) for i in abc)
[out]
def fn():
r0, r1, r2 :: object
r3 :: object[2]
r4 :: object_ptr
r5 :: object
r6 :: range
r7, abc :: tuple
r8 :: native_int
r9 :: list
r10 :: native_int
r11 :: bit
r12 :: object
r13, i :: int
r14 :: str
r15 :: native_int
L0:
r0 = load_address PyRange_Type
r1 = object 1
r2 = object 3
r3 = [r1, r2]
r4 = load_address r3
r5 = PyObject_Vectorcall(r0, r4, 2, 0)
keep_alive r1, r2
r6 = cast(range, r5)
r7 = PySequence_Tuple(r6)
abc = r7
r8 = var_object_size abc
r9 = PyList_New(r8)
r10 = 0
L1:
r11 = r10 < r8 :: signed
if r11 goto L2 else goto L4 :: bool
L2:
r12 = CPySequenceTuple_GetItemUnsafe(abc, r10)
r13 = unbox(int, r12)
i = r13
r14 = CPyTagged_Str(i)
CPyList_SetItemUnsafe(r9, r10, r14)
L3:
r15 = r10 + 1
r10 = r15
goto L1
L4:
return r9

[case testListFromRange6]
def fn() -> list[str]:
abc = tuple(range(1, 3, 2))
return list(str(i) for i in abc)
[out]
def fn():
r0, r1, r2, r3 :: object
r4 :: object[3]
r5 :: object_ptr
r6 :: object
r7 :: range
r8, abc :: tuple
r9 :: native_int
r10 :: list
r11 :: native_int
r12 :: bit
r13 :: object
r14, i :: int
r15 :: str
r16 :: native_int
L0:
r0 = load_address PyRange_Type
r1 = object 1
r2 = object 3
r3 = object 2
r4 = [r1, r2, r3]
r5 = load_address r4
r6 = PyObject_Vectorcall(r0, r5, 3, 0)
keep_alive r1, r2, r3
r7 = cast(range, r6)
r8 = PySequence_Tuple(r7)
abc = r8
r9 = var_object_size abc
r10 = PyList_New(r9)
r11 = 0
L1:
r12 = r11 < r9 :: signed
if r12 goto L2 else goto L4 :: bool
L2:
r13 = CPySequenceTuple_GetItemUnsafe(abc, r11)
r14 = unbox(int, r13)
i = r14
r15 = CPyTagged_Str(i)
CPyList_SetItemUnsafe(r10, r11, r15)
L3:
r16 = r11 + 1
r11 = r16
goto L1
L4:
return r10
Loading
Loading