From 76874f745742803b9955cfe4e377b0850d69224c Mon Sep 17 00:00:00 2001 From: BobTheBuidler Date: Mon, 4 Aug 2025 02:18:05 +0000 Subject: [PATCH 1/5] feat(test): add mypyc tests for container creation from `range` --- mypyc/test-data/irbuild-frozenset.test | 178 +++++++++++++++++++++++++ mypyc/test-data/irbuild-lists.test | 178 +++++++++++++++++++++++++ mypyc/test-data/irbuild-set.test | 166 +++++++++++++++++++++++ mypyc/test-data/irbuild-tuple.test | 173 ++++++++++++++++++++++++ 4 files changed, 695 insertions(+) diff --git a/mypyc/test-data/irbuild-frozenset.test b/mypyc/test-data/irbuild-frozenset.test index 2fa84a2ed055..3870c48c0f27 100644 --- a/mypyc/test-data/irbuild-frozenset.test +++ b/mypyc/test-data/irbuild-frozenset.test @@ -113,3 +113,181 @@ L0: r5 = r4 >= 0 :: signed r6 = truncate r4: i32 to builtins.bool return r6 + +[case testFrozenSetFromRange1] +from typing import FrozenSet +def fn() -> FrozenSet[int]: + return frozenset(range(3)) +[out] +def fn(): + r0, r1 :: object + r2 :: object[1] + r3 :: object_ptr + r4 :: object + r5 :: range + r6 :: frozenset +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 = PyFrozenSet_New(r5) + return r6 + +[case testFrozenSetFromRange2] +from typing import FrozenSet +def fn() -> FrozenSet[int]: + return frozenset(range(1, 3)) +[out] +def fn(): + r0, r1, r2 :: object + r3 :: object[2] + r4 :: object_ptr + r5 :: object + r6 :: range + r7 :: frozenset +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 = PyFrozenSet_New(r6) + return r7 + +[case testFrozenSetFromRange3] +from typing import FrozenSet +def fn() -> FrozenSet[int]: + return frozenset(range(1, 3, 2)) +[out] +def fn(): + r0, r1, r2, r3 :: object + r4 :: object[3] + r5 :: object_ptr + r6 :: object + r7 :: range + r8 :: frozenset +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 = PyFrozenSet_New(r7) + return r8 + +[case testFrozenSetFromRange4] +from typing import FrozenSet +def fn() -> FrozenSet[str]: + return frozenset(str(i) for i in range(3)) +[out] +def fn(): + r0 :: list + r1 :: short_int + i :: int + r2 :: bit + r3 :: str + r4 :: i32 + r5 :: bit + r6 :: short_int + r7 :: frozenset +L0: + r0 = PyList_New(0) + r1 = 0 + i = r1 +L1: + r2 = int_lt r1, 6 + if r2 goto L2 else goto L4 :: bool +L2: + r3 = CPyTagged_Str(i) + r4 = PyList_Append(r0, r3) + r5 = r4 >= 0 :: signed +L3: + r6 = r1 + 2 + r1 = r6 + i = r6 + goto L1 +L4: + r7 = PyFrozenSet_New(r0) + return r7 + +[case testFrozenSetFromRange5] +from typing import FrozenSet +def fn() -> FrozenSet[str]: + return frozenset(str(i) for i in range(1, 3)) +[out] +def fn(): + r0 :: list + r1 :: short_int + i :: int + r2 :: bit + r3 :: str + r4 :: i32 + r5 :: bit + r6 :: short_int + r7 :: frozenset +L0: + r0 = PyList_New(0) + r1 = 2 + i = r1 +L1: + r2 = int_lt r1, 6 + if r2 goto L2 else goto L4 :: bool +L2: + r3 = CPyTagged_Str(i) + r4 = PyList_Append(r0, r3) + r5 = r4 >= 0 :: signed +L3: + r6 = r1 + 2 + r1 = r6 + i = r6 + goto L1 +L4: + r7 = PyFrozenSet_New(r0) + return r7 + +[case testFrozenSetFromRange6] +from typing import FrozenSet +def fn() -> FrozenSet[str]: + return frozenset(str(i) for i in range(1, 3, 2)) +[out] +def fn(): + r0 :: list + r1 :: short_int + i :: int + r2 :: bit + r3 :: str + r4 :: i32 + r5 :: bit + r6 :: short_int + r7 :: frozenset +L0: + r0 = PyList_New(0) + r1 = 2 + i = r1 +L1: + r2 = int_lt r1, 6 + if r2 goto L2 else goto L4 :: bool +L2: + r3 = CPyTagged_Str(i) + r4 = PyList_Append(r0, r3) + r5 = r4 >= 0 :: signed +L3: + r6 = r1 + 4 + r1 = r6 + i = r6 + goto L1 +L4: + r7 = PyFrozenSet_New(r0) + return r7 + diff --git a/mypyc/test-data/irbuild-lists.test b/mypyc/test-data/irbuild-lists.test index 06120e077af9..a1d7575c8087 100644 --- a/mypyc/test-data/irbuild-lists.test +++ b/mypyc/test-data/irbuild-lists.test @@ -572,3 +572,181 @@ def sort_iterable(a): L0: r0 = CPySequence_Sort(a) 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]: + return list(str(i) for i in range(3)) +[out] +def fn(): + r0 :: list + r1 :: short_int + i :: int + r2 :: bit + r3 :: str + r4 :: i32 + r5 :: bit + r6 :: short_int + r7 :: object + r8 :: list +L0: + r0 = PyList_New(0) + r1 = 0 + i = r1 +L1: + r2 = int_lt r1, 6 + if r2 goto L2 else goto L4 :: bool +L2: + r3 = CPyTagged_Str(i) + r4 = PyList_Append(r0, r3) + r5 = r4 >= 0 :: signed +L3: + r6 = r1 + 2 + r1 = r6 + i = r6 + goto L1 +L4: + r7 = PyObject_GetIter(r0) + r8 = PySequence_List(r7) + return r8 + +[case testListFromRange5] +def fn() -> list[str]: + return list(str(i) for i in range(1, 3)) +[out] +def fn(): + r0 :: list + r1 :: short_int + i :: int + r2 :: bit + r3 :: str + r4 :: i32 + r5 :: bit + r6 :: short_int + r7 :: object + r8 :: list +L0: + r0 = PyList_New(0) + r1 = 2 + i = r1 +L1: + r2 = int_lt r1, 6 + if r2 goto L2 else goto L4 :: bool +L2: + r3 = CPyTagged_Str(i) + r4 = PyList_Append(r0, r3) + r5 = r4 >= 0 :: signed +L3: + r6 = r1 + 2 + r1 = r6 + i = r6 + goto L1 +L4: + r7 = PyObject_GetIter(r0) + r8 = PySequence_List(r7) + return r8 + +[case testListFromRange6] +def fn() -> list[str]: + return list(str(i) for i in range(1, 3, 2)) +[out] +def fn(): + r0 :: list + r1 :: short_int + i :: int + r2 :: bit + r3 :: str + r4 :: i32 + r5 :: bit + r6 :: short_int + r7 :: object + r8 :: list +L0: + r0 = PyList_New(0) + r1 = 2 + i = r1 +L1: + r2 = int_lt r1, 6 + if r2 goto L2 else goto L4 :: bool +L2: + r3 = CPyTagged_Str(i) + r4 = PyList_Append(r0, r3) + r5 = r4 >= 0 :: signed +L3: + r6 = r1 + 4 + r1 = r6 + i = r6 + goto L1 +L4: + r7 = PyObject_GetIter(r0) + r8 = PySequence_List(r7) + return r8 + diff --git a/mypyc/test-data/irbuild-set.test b/mypyc/test-data/irbuild-set.test index 5586a2bf4cfb..ec4c06b5c9d1 100644 --- a/mypyc/test-data/irbuild-set.test +++ b/mypyc/test-data/irbuild-set.test @@ -799,3 +799,169 @@ L4: r11 = CPy_NoErrOccurred() L5: return 1 + +[case testSetFromRange1] +def fn() -> set[int]: + return set(range(3)) +[out] +def fn(): + r0, r1 :: object + r2 :: object[1] + r3 :: object_ptr + r4 :: object + r5 :: range + r6 :: set +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 = PySet_New(r5) + return r6 + +[case testSetFromRange2] +def fn() -> set[int]: + return set(range(1, 3)) +[out] +def fn(): + r0, r1, r2 :: object + r3 :: object[2] + r4 :: object_ptr + r5 :: object + r6 :: range + r7 :: set +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 = PySet_New(r6) + return r7 + +[case testSetFromRange3] +def fn() -> set[int]: + return set(range(1, 3, 2)) +[out] +def fn(): + r0, r1, r2, r3 :: object + r4 :: object[3] + r5 :: object_ptr + r6 :: object + r7 :: range + r8 :: set +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 = PySet_New(r7) + return r8 + +[case testSetFromRange4] +def fn() -> set[str]: + return set(str(i) for i in range(3)) +[out] +def fn(): + r0 :: set + r1 :: short_int + i :: int + r2 :: bit + r3 :: str + r4 :: i32 + r5 :: bit + r6 :: short_int +L0: + r0 = PySet_New(0) + r1 = 0 + i = r1 +L1: + r2 = int_lt r1, 6 + if r2 goto L2 else goto L4 :: bool +L2: + r3 = CPyTagged_Str(i) + r4 = PySet_Add(r0, r3) + r5 = r4 >= 0 :: signed +L3: + r6 = r1 + 2 + r1 = r6 + i = r6 + goto L1 +L4: + return r0 + +[case testSetFromRange5] +def fn() -> set[str]: + return set(str(i) for i in range(1, 3)) +[out] +def fn(): + r0 :: set + r1 :: short_int + i :: int + r2 :: bit + r3 :: str + r4 :: i32 + r5 :: bit + r6 :: short_int +L0: + r0 = PySet_New(0) + r1 = 2 + i = r1 +L1: + r2 = int_lt r1, 6 + if r2 goto L2 else goto L4 :: bool +L2: + r3 = CPyTagged_Str(i) + r4 = PySet_Add(r0, r3) + r5 = r4 >= 0 :: signed +L3: + r6 = r1 + 2 + r1 = r6 + i = r6 + goto L1 +L4: + return r0 + +[case testSetFromRange6] +def fn() -> set[str]: + return set(str(i) for i in range(1, 3, 2)) +[out] +def fn(): + r0 :: set + r1 :: short_int + i :: int + r2 :: bit + r3 :: str + r4 :: i32 + r5 :: bit + r6 :: short_int +L0: + r0 = PySet_New(0) + r1 = 2 + i = r1 +L1: + r2 = int_lt r1, 6 + if r2 goto L2 else goto L4 :: bool +L2: + r3 = CPyTagged_Str(i) + r4 = PySet_Add(r0, r3) + r5 = r4 >= 0 :: signed +L3: + r6 = r1 + 4 + r1 = r6 + i = r6 + goto L1 +L4: + return r0 + diff --git a/mypyc/test-data/irbuild-tuple.test b/mypyc/test-data/irbuild-tuple.test index 5c5ec27b1882..72588cc1deb9 100644 --- a/mypyc/test-data/irbuild-tuple.test +++ b/mypyc/test-data/irbuild-tuple.test @@ -460,3 +460,176 @@ L2: r3 = 1 L3: return r3 + +[case testTupleFromRange1] +def fn() -> tuple[int, ...]: + return tuple(range(3)) +[out] +def fn(): + r0, r1 :: object + r2 :: object[1] + r3 :: object_ptr + r4 :: object + r5 :: range + r6 :: tuple +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) + return r6 + +[case testTupleFromRange2] +def fn() -> tuple[int, ...]: + return tuple(range(1, 3)) +[out] +def fn(): + r0, r1, r2 :: object + r3 :: object[2] + r4 :: object_ptr + r5 :: object + r6 :: range + r7 :: tuple +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) + return r7 + +[case testTupleFromRange3] +def fn() -> tuple[int, ...]: + return tuple(range(1, 3, 2)) +[out] +def fn(): + r0, r1, r2, r3 :: object + r4 :: object[3] + r5 :: object_ptr + r6 :: object + r7 :: range + r8 :: tuple +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) + return r8 + + +[case testTupleFromRange4] +def fn() -> tuple[str, ...]: + return tuple(str(i) for i in range(3)) +[out] +def fn(): + r0 :: list + r1 :: short_int + i :: int + r2 :: bit + r3 :: str + r4 :: i32 + r5 :: bit + r6 :: short_int + r7 :: tuple +L0: + r0 = PyList_New(0) + r1 = 0 + i = r1 +L1: + r2 = int_lt r1, 6 + if r2 goto L2 else goto L4 :: bool +L2: + r3 = CPyTagged_Str(i) + r4 = PyList_Append(r0, r3) + r5 = r4 >= 0 :: signed +L3: + r6 = r1 + 2 + r1 = r6 + i = r6 + goto L1 +L4: + r7 = PyList_AsTuple(r0) + return r7 + +[case testTupleFromRange5] +def fn() -> tuple[str, ...]: + return tuple(str(i) for i in range(1, 3)) +[out] +def fn(): + r0 :: list + r1 :: short_int + i :: int + r2 :: bit + r3 :: str + r4 :: i32 + r5 :: bit + r6 :: short_int + r7 :: tuple +L0: + r0 = PyList_New(0) + r1 = 2 + i = r1 +L1: + r2 = int_lt r1, 6 + if r2 goto L2 else goto L4 :: bool +L2: + r3 = CPyTagged_Str(i) + r4 = PyList_Append(r0, r3) + r5 = r4 >= 0 :: signed +L3: + r6 = r1 + 2 + r1 = r6 + i = r6 + goto L1 +L4: + r7 = PyList_AsTuple(r0) + return r7 + +[case testTupleFromRange6] +def fn() -> tuple[str, ...]: + return tuple(str(i) for i in range(1, 3, 2)) +[out] +def fn(): + r0 :: list + r1 :: short_int + i :: int + r2 :: bit + r3 :: str + r4 :: i32 + r5 :: bit + r6 :: short_int + r7 :: tuple +L0: + r0 = PyList_New(0) + r1 = 2 + i = r1 +L1: + r2 = int_lt r1, 6 + if r2 goto L2 else goto L4 :: bool +L2: + r3 = CPyTagged_Str(i) + r4 = PyList_Append(r0, r3) + r5 = r4 >= 0 :: signed +L3: + r6 = r1 + 4 + r1 = r6 + i = r6 + goto L1 +L4: + r7 = PyList_AsTuple(r0) + return r7 + From c02c12e2bb6b38427c46fe829e4d2e7dfc2eaf42 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 4 Aug 2025 02:18:05 +0000 Subject: [PATCH 2/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- mypyc/test-data/irbuild-frozenset.test | 1 - mypyc/test-data/irbuild-lists.test | 1 - mypyc/test-data/irbuild-set.test | 1 - mypyc/test-data/irbuild-tuple.test | 1 - 4 files changed, 4 deletions(-) diff --git a/mypyc/test-data/irbuild-frozenset.test b/mypyc/test-data/irbuild-frozenset.test index 3870c48c0f27..715e10b0fa2c 100644 --- a/mypyc/test-data/irbuild-frozenset.test +++ b/mypyc/test-data/irbuild-frozenset.test @@ -290,4 +290,3 @@ L3: L4: r7 = PyFrozenSet_New(r0) return r7 - diff --git a/mypyc/test-data/irbuild-lists.test b/mypyc/test-data/irbuild-lists.test index a1d7575c8087..504b130c37db 100644 --- a/mypyc/test-data/irbuild-lists.test +++ b/mypyc/test-data/irbuild-lists.test @@ -749,4 +749,3 @@ L4: r7 = PyObject_GetIter(r0) r8 = PySequence_List(r7) return r8 - diff --git a/mypyc/test-data/irbuild-set.test b/mypyc/test-data/irbuild-set.test index ec4c06b5c9d1..ccc6a8a20594 100644 --- a/mypyc/test-data/irbuild-set.test +++ b/mypyc/test-data/irbuild-set.test @@ -964,4 +964,3 @@ L3: goto L1 L4: return r0 - diff --git a/mypyc/test-data/irbuild-tuple.test b/mypyc/test-data/irbuild-tuple.test index 72588cc1deb9..12c071553afd 100644 --- a/mypyc/test-data/irbuild-tuple.test +++ b/mypyc/test-data/irbuild-tuple.test @@ -632,4 +632,3 @@ L3: L4: r7 = PyList_AsTuple(r0) return r7 - From 5d91bc83dc5cac396603d1da6009e229684d5dfe Mon Sep 17 00:00:00 2001 From: BobTheBuidler Date: Mon, 4 Aug 2025 02:18:05 +0000 Subject: [PATCH 3/5] fix tests --- mypyc/test-data/irbuild-frozenset.test | 193 ++++++++++++++++--------- mypyc/test-data/irbuild-lists.test | 189 ++++++++++++++---------- mypyc/test-data/irbuild-set.test | 187 ++++++++++++++++-------- mypyc/test-data/irbuild-tuple.test | 187 +++++++++++++++--------- 4 files changed, 482 insertions(+), 274 deletions(-) diff --git a/mypyc/test-data/irbuild-frozenset.test b/mypyc/test-data/irbuild-frozenset.test index 715e10b0fa2c..b25ed67de24c 100644 --- a/mypyc/test-data/irbuild-frozenset.test +++ b/mypyc/test-data/irbuild-frozenset.test @@ -189,104 +189,159 @@ L0: [case testFrozenSetFromRange4] from typing import FrozenSet def fn() -> FrozenSet[str]: - return frozenset(str(i) for i in range(3)) + abc = tuple(range(3)) + return frozenset(str(i) for i in abc) [out] def fn(): - r0 :: list - r1 :: short_int - i :: int - r2 :: bit - r3 :: str - r4 :: i32 - r5 :: bit - r6 :: short_int - r7 :: frozenset + 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 + r15 :: frozenset L0: - r0 = PyList_New(0) - r1 = 0 - i = r1 + 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: - r2 = int_lt r1, 6 - if r2 goto L2 else goto L4 :: bool + r10 = r9 < r7 :: signed + if r10 goto L2 else goto L4 :: bool L2: - r3 = CPyTagged_Str(i) - r4 = PyList_Append(r0, r3) - r5 = r4 >= 0 :: signed + r11 = CPySequenceTuple_GetItemUnsafe(abc, r9) + r12 = unbox(int, r11) + i = r12 + r13 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r8, r9, r13) L3: - r6 = r1 + 2 - r1 = r6 - i = r6 + r14 = r9 + 1 + r9 = r14 goto L1 L4: - r7 = PyFrozenSet_New(r0) - return r7 + r15 = PyFrozenSet_New(r8) + return r15 [case testFrozenSetFromRange5] from typing import FrozenSet def fn() -> FrozenSet[str]: - return frozenset(str(i) for i in range(1, 3)) + abc = tuple(range(1, 3)) + return frozenset(str(i) for i in abc) [out] def fn(): - r0 :: list - r1 :: short_int - i :: int - r2 :: bit - r3 :: str - r4 :: i32 - r5 :: bit - r6 :: short_int - r7 :: frozenset + 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 + r16 :: frozenset L0: - r0 = PyList_New(0) - r1 = 2 - i = r1 + 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: - r2 = int_lt r1, 6 - if r2 goto L2 else goto L4 :: bool + r11 = r10 < r8 :: signed + if r11 goto L2 else goto L4 :: bool L2: - r3 = CPyTagged_Str(i) - r4 = PyList_Append(r0, r3) - r5 = r4 >= 0 :: signed + r12 = CPySequenceTuple_GetItemUnsafe(abc, r10) + r13 = unbox(int, r12) + i = r13 + r14 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r9, r10, r14) L3: - r6 = r1 + 2 - r1 = r6 - i = r6 + r15 = r10 + 1 + r10 = r15 goto L1 L4: - r7 = PyFrozenSet_New(r0) - return r7 + r16 = PyFrozenSet_New(r9) + return r16 [case testFrozenSetFromRange6] from typing import FrozenSet def fn() -> FrozenSet[str]: - return frozenset(str(i) for i in range(1, 3, 2)) + abc = tuple(range(1, 3, 2)) + return frozenset(str(i) for i in abc) [out] def fn(): - r0 :: list - r1 :: short_int - i :: int - r2 :: bit - r3 :: str - r4 :: i32 - r5 :: bit - r6 :: short_int - r7 :: frozenset + 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 + r17 :: frozenset L0: - r0 = PyList_New(0) - r1 = 2 - i = r1 + 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: - r2 = int_lt r1, 6 - if r2 goto L2 else goto L4 :: bool + r12 = r11 < r9 :: signed + if r12 goto L2 else goto L4 :: bool L2: - r3 = CPyTagged_Str(i) - r4 = PyList_Append(r0, r3) - r5 = r4 >= 0 :: signed + r13 = CPySequenceTuple_GetItemUnsafe(abc, r11) + r14 = unbox(int, r13) + i = r14 + r15 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r10, r11, r15) L3: - r6 = r1 + 4 - r1 = r6 - i = r6 + r16 = r11 + 1 + r11 = r16 goto L1 L4: - r7 = PyFrozenSet_New(r0) - return r7 + r17 = PyFrozenSet_New(r10) + return r17 + diff --git a/mypyc/test-data/irbuild-lists.test b/mypyc/test-data/irbuild-lists.test index 504b130c37db..83383e22ff80 100644 --- a/mypyc/test-data/irbuild-lists.test +++ b/mypyc/test-data/irbuild-lists.test @@ -644,108 +644,151 @@ L0: [case testListFromRange4] def fn() -> list[str]: - return list(str(i) for i in range(3)) + abc = tuple(range(3)) + return list(str(i) for i in abc) [out] def fn(): - r0 :: list - r1 :: short_int - i :: int - r2 :: bit - r3 :: str - r4 :: i32 - r5 :: bit - r6 :: short_int - r7 :: object + 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 = PyList_New(0) - r1 = 0 - i = r1 + 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: - r2 = int_lt r1, 6 - if r2 goto L2 else goto L4 :: bool + r10 = r9 < r7 :: signed + if r10 goto L2 else goto L4 :: bool L2: - r3 = CPyTagged_Str(i) - r4 = PyList_Append(r0, r3) - r5 = r4 >= 0 :: signed + r11 = CPySequenceTuple_GetItemUnsafe(abc, r9) + r12 = unbox(int, r11) + i = r12 + r13 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r8, r9, r13) L3: - r6 = r1 + 2 - r1 = r6 - i = r6 + r14 = r9 + 1 + r9 = r14 goto L1 L4: - r7 = PyObject_GetIter(r0) - r8 = PySequence_List(r7) return r8 [case testListFromRange5] def fn() -> list[str]: - return list(str(i) for i in range(1, 3)) + abc = tuple(range(1, 3)) + return list(str(i) for i in abc) [out] def fn(): - r0 :: list - r1 :: short_int - i :: int - r2 :: bit - r3 :: str - r4 :: i32 - r5 :: bit - r6 :: short_int - r7 :: object - r8 :: list + 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 = PyList_New(0) - r1 = 2 - i = r1 + 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: - r2 = int_lt r1, 6 - if r2 goto L2 else goto L4 :: bool + r11 = r10 < r8 :: signed + if r11 goto L2 else goto L4 :: bool L2: - r3 = CPyTagged_Str(i) - r4 = PyList_Append(r0, r3) - r5 = r4 >= 0 :: signed + r12 = CPySequenceTuple_GetItemUnsafe(abc, r10) + r13 = unbox(int, r12) + i = r13 + r14 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r9, r10, r14) L3: - r6 = r1 + 2 - r1 = r6 - i = r6 + r15 = r10 + 1 + r10 = r15 goto L1 L4: - r7 = PyObject_GetIter(r0) - r8 = PySequence_List(r7) - return r8 + return r9 [case testListFromRange6] def fn() -> list[str]: - return list(str(i) for i in range(1, 3, 2)) + abc = tuple(range(1, 3, 2)) + return list(str(i) for i in abc) [out] def fn(): - r0 :: list - r1 :: short_int - i :: int - r2 :: bit - r3 :: str - r4 :: i32 - r5 :: bit - r6 :: short_int - r7 :: object - r8 :: list + 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 = PyList_New(0) - r1 = 2 - i = r1 + 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: - r2 = int_lt r1, 6 - if r2 goto L2 else goto L4 :: bool + r12 = r11 < r9 :: signed + if r12 goto L2 else goto L4 :: bool L2: - r3 = CPyTagged_Str(i) - r4 = PyList_Append(r0, r3) - r5 = r4 >= 0 :: signed + r13 = CPySequenceTuple_GetItemUnsafe(abc, r11) + r14 = unbox(int, r13) + i = r14 + r15 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r10, r11, r15) L3: - r6 = r1 + 4 - r1 = r6 - i = r6 + r16 = r11 + 1 + r11 = r16 goto L1 L4: - r7 = PyObject_GetIter(r0) - r8 = PySequence_List(r7) - return r8 + return r10 + diff --git a/mypyc/test-data/irbuild-set.test b/mypyc/test-data/irbuild-set.test index ccc6a8a20594..8431f50b114c 100644 --- a/mypyc/test-data/irbuild-set.test +++ b/mypyc/test-data/irbuild-set.test @@ -871,96 +871,157 @@ L0: [case testSetFromRange4] def fn() -> set[str]: - return set(str(i) for i in range(3)) + abc = tuple(range(3)) + return set(str(i) for i in abc) [out] def fn(): - r0 :: set - r1 :: short_int - i :: int - r2 :: bit - r3 :: str - r4 :: i32 - r5 :: bit - r6 :: short_int + r0, r1 :: object + r2 :: object[1] + r3 :: object_ptr + r4 :: object + r5 :: range + r6, abc :: tuple + r7 :: set + r8, r9 :: native_int + r10 :: bit + r11 :: object + r12, i :: int + r13 :: str + r14 :: i32 + r15 :: bit + r16 :: native_int L0: - r0 = PySet_New(0) - r1 = 0 - i = r1 + 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 = PySet_New(0) + r8 = var_object_size abc + r9 = 0 L1: - r2 = int_lt r1, 6 - if r2 goto L2 else goto L4 :: bool + r10 = r9 < r8 :: signed + if r10 goto L2 else goto L4 :: bool L2: - r3 = CPyTagged_Str(i) - r4 = PySet_Add(r0, r3) - r5 = r4 >= 0 :: signed + r11 = CPySequenceTuple_GetItemUnsafe(abc, r9) + r12 = unbox(int, r11) + i = r12 + r13 = CPyTagged_Str(i) + r14 = PySet_Add(r7, r13) + r15 = r14 >= 0 :: signed L3: - r6 = r1 + 2 - r1 = r6 - i = r6 + r16 = r9 + 1 + r9 = r16 goto L1 L4: - return r0 + return r7 [case testSetFromRange5] def fn() -> set[str]: - return set(str(i) for i in range(1, 3)) + abc = tuple(range(1, 3)) + return set(str(i) for i in abc) [out] def fn(): - r0 :: set - r1 :: short_int - i :: int - r2 :: bit - r3 :: str - r4 :: i32 - r5 :: bit - r6 :: short_int + r0, r1, r2 :: object + r3 :: object[2] + r4 :: object_ptr + r5 :: object + r6 :: range + r7, abc :: tuple + r8 :: set + r9, r10 :: native_int + r11 :: bit + r12 :: object + r13, i :: int + r14 :: str + r15 :: i32 + r16 :: bit + r17 :: native_int L0: - r0 = PySet_New(0) - r1 = 2 - i = r1 + 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 = PySet_New(0) + r9 = var_object_size abc + r10 = 0 L1: - r2 = int_lt r1, 6 - if r2 goto L2 else goto L4 :: bool + r11 = r10 < r9 :: signed + if r11 goto L2 else goto L4 :: bool L2: - r3 = CPyTagged_Str(i) - r4 = PySet_Add(r0, r3) - r5 = r4 >= 0 :: signed + r12 = CPySequenceTuple_GetItemUnsafe(abc, r10) + r13 = unbox(int, r12) + i = r13 + r14 = CPyTagged_Str(i) + r15 = PySet_Add(r8, r14) + r16 = r15 >= 0 :: signed L3: - r6 = r1 + 2 - r1 = r6 - i = r6 + r17 = r10 + 1 + r10 = r17 goto L1 L4: - return r0 + return r8 [case testSetFromRange6] def fn() -> set[str]: - return set(str(i) for i in range(1, 3, 2)) + abc = tuple(range(1, 3, 2)) + return set(str(i) for i in abc) [out] def fn(): - r0 :: set - r1 :: short_int - i :: int - r2 :: bit - r3 :: str - r4 :: i32 - r5 :: bit - r6 :: short_int + r0, r1, r2, r3 :: object + r4 :: object[3] + r5 :: object_ptr + r6 :: object + r7 :: range + r8, abc :: tuple + r9 :: set + r10, r11 :: native_int + r12 :: bit + r13 :: object + r14, i :: int + r15 :: str + r16 :: i32 + r17 :: bit + r18 :: native_int L0: - r0 = PySet_New(0) - r1 = 2 - i = r1 + 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 = PySet_New(0) + r10 = var_object_size abc + r11 = 0 L1: - r2 = int_lt r1, 6 - if r2 goto L2 else goto L4 :: bool + r12 = r11 < r10 :: signed + if r12 goto L2 else goto L4 :: bool L2: - r3 = CPyTagged_Str(i) - r4 = PySet_Add(r0, r3) - r5 = r4 >= 0 :: signed + r13 = CPySequenceTuple_GetItemUnsafe(abc, r11) + r14 = unbox(int, r13) + i = r14 + r15 = CPyTagged_Str(i) + r16 = PySet_Add(r9, r15) + r17 = r16 >= 0 :: signed L3: - r6 = r1 + 4 - r1 = r6 - i = r6 + r18 = r11 + 1 + r11 = r18 goto L1 L4: - return r0 + return r9 + diff --git a/mypyc/test-data/irbuild-tuple.test b/mypyc/test-data/irbuild-tuple.test index 12c071553afd..46d9b16bf922 100644 --- a/mypyc/test-data/irbuild-tuple.test +++ b/mypyc/test-data/irbuild-tuple.test @@ -533,102 +533,151 @@ L0: [case testTupleFromRange4] def fn() -> tuple[str, ...]: - return tuple(str(i) for i in range(3)) + abc = tuple(range(3)) + return tuple(str(i) for i in abc) [out] def fn(): - r0 :: list - r1 :: short_int - i :: int - r2 :: bit - r3 :: str - r4 :: i32 - r5 :: bit - r6 :: short_int - r7 :: tuple + r0, r1 :: object + r2 :: object[1] + r3 :: object_ptr + r4 :: object + r5 :: range + r6, abc :: tuple + r7 :: native_int + r8 :: tuple + r9 :: native_int + r10 :: bit + r11 :: object + r12, i :: int + r13 :: str + r14 :: native_int L0: - r0 = PyList_New(0) - r1 = 0 - i = r1 + 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 = PyTuple_New(r7) + r9 = 0 L1: - r2 = int_lt r1, 6 - if r2 goto L2 else goto L4 :: bool + r10 = r9 < r7 :: signed + if r10 goto L2 else goto L4 :: bool L2: - r3 = CPyTagged_Str(i) - r4 = PyList_Append(r0, r3) - r5 = r4 >= 0 :: signed + r11 = CPySequenceTuple_GetItemUnsafe(abc, r9) + r12 = unbox(int, r11) + i = r12 + r13 = CPyTagged_Str(i) + CPySequenceTuple_SetItemUnsafe(r8, r9, r13) L3: - r6 = r1 + 2 - r1 = r6 - i = r6 + r14 = r9 + 1 + r9 = r14 goto L1 L4: - r7 = PyList_AsTuple(r0) - return r7 + return r8 [case testTupleFromRange5] def fn() -> tuple[str, ...]: - return tuple(str(i) for i in range(1, 3)) + abc = tuple(range(1, 3)) + return tuple(str(i) for i in abc) [out] def fn(): - r0 :: list - r1 :: short_int - i :: int - r2 :: bit - r3 :: str - r4 :: i32 - r5 :: bit - r6 :: short_int - r7 :: tuple + r0, r1, r2 :: object + r3 :: object[2] + r4 :: object_ptr + r5 :: object + r6 :: range + r7, abc :: tuple + r8 :: native_int + r9 :: tuple + r10 :: native_int + r11 :: bit + r12 :: object + r13, i :: int + r14 :: str + r15 :: native_int L0: - r0 = PyList_New(0) - r1 = 2 - i = r1 + 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 = PyTuple_New(r8) + r10 = 0 L1: - r2 = int_lt r1, 6 - if r2 goto L2 else goto L4 :: bool + r11 = r10 < r8 :: signed + if r11 goto L2 else goto L4 :: bool L2: - r3 = CPyTagged_Str(i) - r4 = PyList_Append(r0, r3) - r5 = r4 >= 0 :: signed + r12 = CPySequenceTuple_GetItemUnsafe(abc, r10) + r13 = unbox(int, r12) + i = r13 + r14 = CPyTagged_Str(i) + CPySequenceTuple_SetItemUnsafe(r9, r10, r14) L3: - r6 = r1 + 2 - r1 = r6 - i = r6 + r15 = r10 + 1 + r10 = r15 goto L1 L4: - r7 = PyList_AsTuple(r0) - return r7 + return r9 [case testTupleFromRange6] def fn() -> tuple[str, ...]: - return tuple(str(i) for i in range(1, 3, 2)) + abc = tuple(range(1, 3, 2)) + return tuple(str(i) for i in abc) [out] def fn(): - r0 :: list - r1 :: short_int - i :: int - r2 :: bit - r3 :: str - r4 :: i32 - r5 :: bit - r6 :: short_int - r7 :: tuple + r0, r1, r2, r3 :: object + r4 :: object[3] + r5 :: object_ptr + r6 :: object + r7 :: range + r8, abc :: tuple + r9 :: native_int + r10 :: tuple + r11 :: native_int + r12 :: bit + r13 :: object + r14, i :: int + r15 :: str + r16 :: native_int L0: - r0 = PyList_New(0) - r1 = 2 - i = r1 + 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 = PyTuple_New(r9) + r11 = 0 L1: - r2 = int_lt r1, 6 - if r2 goto L2 else goto L4 :: bool + r12 = r11 < r9 :: signed + if r12 goto L2 else goto L4 :: bool L2: - r3 = CPyTagged_Str(i) - r4 = PyList_Append(r0, r3) - r5 = r4 >= 0 :: signed + r13 = CPySequenceTuple_GetItemUnsafe(abc, r11) + r14 = unbox(int, r13) + i = r14 + r15 = CPyTagged_Str(i) + CPySequenceTuple_SetItemUnsafe(r10, r11, r15) L3: - r6 = r1 + 4 - r1 = r6 - i = r6 + r16 = r11 + 1 + r11 = r16 goto L1 L4: - r7 = PyList_AsTuple(r0) - return r7 + return r10 + From 635174423827c6b238c3f786d4a44f623c7f3774 Mon Sep 17 00:00:00 2001 From: BobTheBuidler Date: Mon, 4 Aug 2025 02:18:05 +0000 Subject: [PATCH 4/5] chore: adjust ir to master --- mypyc/test-data/irbuild-frozenset.test | 111 +++++++++++++------------ mypyc/test-data/irbuild-lists.test | 93 +++++++++++---------- mypyc/test-data/irbuild-set.test | 36 ++++---- mypyc/test-data/irbuild-tuple.test | 93 +++++++++++---------- 4 files changed, 171 insertions(+), 162 deletions(-) diff --git a/mypyc/test-data/irbuild-frozenset.test b/mypyc/test-data/irbuild-frozenset.test index b25ed67de24c..844e724d10a5 100644 --- a/mypyc/test-data/irbuild-frozenset.test +++ b/mypyc/test-data/irbuild-frozenset.test @@ -201,13 +201,13 @@ def fn(): r6, abc :: tuple r7 :: native_int r8 :: list - r9 :: native_int - r10 :: bit - r11 :: object - r12, i :: int - r13 :: str - r14 :: native_int - r15 :: frozenset + r9, r10 :: native_int + r11 :: bit + r12 :: object + r13, i :: int + r14 :: str + r15 :: native_int + r16 :: frozenset L0: r0 = load_address PyRange_Type r1 = object 3 @@ -222,21 +222,22 @@ L0: r8 = PyList_New(r7) r9 = 0 L1: - r10 = r9 < r7 :: signed - if r10 goto L2 else goto L4 :: bool + r10 = var_object_size abc + r11 = r9 < r10 :: signed + if r11 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) + r12 = CPySequenceTuple_GetItemUnsafe(abc, r9) + r13 = unbox(int, r12) + i = r13 + r14 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r8, r9, r14) L3: - r14 = r9 + 1 - r9 = r14 + r15 = r9 + 1 + r9 = r15 goto L1 L4: - r15 = PyFrozenSet_New(r8) - return r15 + r16 = PyFrozenSet_New(r8) + return r16 [case testFrozenSetFromRange5] from typing import FrozenSet @@ -253,13 +254,13 @@ def fn(): r7, abc :: tuple r8 :: native_int r9 :: list - r10 :: native_int - r11 :: bit - r12 :: object - r13, i :: int - r14 :: str - r15 :: native_int - r16 :: frozenset + r10, r11 :: native_int + r12 :: bit + r13 :: object + r14, i :: int + r15 :: str + r16 :: native_int + r17 :: frozenset L0: r0 = load_address PyRange_Type r1 = object 1 @@ -275,21 +276,22 @@ L0: r9 = PyList_New(r8) r10 = 0 L1: - r11 = r10 < r8 :: signed - if r11 goto L2 else goto L4 :: bool + r11 = var_object_size abc + r12 = r10 < r11 :: signed + if r12 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) + r13 = CPySequenceTuple_GetItemUnsafe(abc, r10) + r14 = unbox(int, r13) + i = r14 + r15 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r9, r10, r15) L3: - r15 = r10 + 1 - r10 = r15 + r16 = r10 + 1 + r10 = r16 goto L1 L4: - r16 = PyFrozenSet_New(r9) - return r16 + r17 = PyFrozenSet_New(r9) + return r17 [case testFrozenSetFromRange6] from typing import FrozenSet @@ -306,13 +308,13 @@ def fn(): r8, abc :: tuple r9 :: native_int r10 :: list - r11 :: native_int - r12 :: bit - r13 :: object - r14, i :: int - r15 :: str - r16 :: native_int - r17 :: frozenset + r11, r12 :: native_int + r13 :: bit + r14 :: object + r15, i :: int + r16 :: str + r17 :: native_int + r18 :: frozenset L0: r0 = load_address PyRange_Type r1 = object 1 @@ -329,19 +331,20 @@ L0: r10 = PyList_New(r9) r11 = 0 L1: - r12 = r11 < r9 :: signed - if r12 goto L2 else goto L4 :: bool + r12 = var_object_size abc + r13 = r11 < r12 :: signed + if r13 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) + r14 = CPySequenceTuple_GetItemUnsafe(abc, r11) + r15 = unbox(int, r14) + i = r15 + r16 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r10, r11, r16) L3: - r16 = r11 + 1 - r11 = r16 + r17 = r11 + 1 + r11 = r17 goto L1 L4: - r17 = PyFrozenSet_New(r10) - return r17 + r18 = PyFrozenSet_New(r10) + return r18 diff --git a/mypyc/test-data/irbuild-lists.test b/mypyc/test-data/irbuild-lists.test index 83383e22ff80..1a2498d8018e 100644 --- a/mypyc/test-data/irbuild-lists.test +++ b/mypyc/test-data/irbuild-lists.test @@ -656,12 +656,12 @@ def fn(): r6, abc :: tuple r7 :: native_int r8 :: list - r9 :: native_int - r10 :: bit - r11 :: object - r12, i :: int - r13 :: str - r14 :: native_int + r9, r10 :: native_int + r11 :: bit + r12 :: object + r13, i :: int + r14 :: str + r15 :: native_int L0: r0 = load_address PyRange_Type r1 = object 3 @@ -676,17 +676,18 @@ L0: r8 = PyList_New(r7) r9 = 0 L1: - r10 = r9 < r7 :: signed - if r10 goto L2 else goto L4 :: bool + r10 = var_object_size abc + r11 = r9 < r10 :: signed + if r11 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) + r12 = CPySequenceTuple_GetItemUnsafe(abc, r9) + r13 = unbox(int, r12) + i = r13 + r14 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r8, r9, r14) L3: - r14 = r9 + 1 - r9 = r14 + r15 = r9 + 1 + r9 = r15 goto L1 L4: return r8 @@ -705,12 +706,12 @@ def fn(): r7, abc :: tuple r8 :: native_int r9 :: list - r10 :: native_int - r11 :: bit - r12 :: object - r13, i :: int - r14 :: str - r15 :: native_int + r10, r11 :: native_int + r12 :: bit + r13 :: object + r14, i :: int + r15 :: str + r16 :: native_int L0: r0 = load_address PyRange_Type r1 = object 1 @@ -726,17 +727,18 @@ L0: r9 = PyList_New(r8) r10 = 0 L1: - r11 = r10 < r8 :: signed - if r11 goto L2 else goto L4 :: bool + r11 = var_object_size abc + r12 = r10 < r11 :: signed + if r12 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) + r13 = CPySequenceTuple_GetItemUnsafe(abc, r10) + r14 = unbox(int, r13) + i = r14 + r15 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r9, r10, r15) L3: - r15 = r10 + 1 - r10 = r15 + r16 = r10 + 1 + r10 = r16 goto L1 L4: return r9 @@ -755,12 +757,12 @@ def fn(): r8, abc :: tuple r9 :: native_int r10 :: list - r11 :: native_int - r12 :: bit - r13 :: object - r14, i :: int - r15 :: str - r16 :: native_int + r11, r12 :: native_int + r13 :: bit + r14 :: object + r15, i :: int + r16 :: str + r17 :: native_int L0: r0 = load_address PyRange_Type r1 = object 1 @@ -777,17 +779,18 @@ L0: r10 = PyList_New(r9) r11 = 0 L1: - r12 = r11 < r9 :: signed - if r12 goto L2 else goto L4 :: bool + r12 = var_object_size abc + r13 = r11 < r12 :: signed + if r13 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) + r14 = CPySequenceTuple_GetItemUnsafe(abc, r11) + r15 = unbox(int, r14) + i = r15 + r16 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r10, r11, r16) L3: - r16 = r11 + 1 - r11 = r16 + r17 = r11 + 1 + r11 = r17 goto L1 L4: return r10 diff --git a/mypyc/test-data/irbuild-set.test b/mypyc/test-data/irbuild-set.test index 8431f50b114c..5c905f74b781 100644 --- a/mypyc/test-data/irbuild-set.test +++ b/mypyc/test-data/irbuild-set.test @@ -901,21 +901,21 @@ L0: r6 = PySequence_Tuple(r5) abc = r6 r7 = PySet_New(0) - r8 = var_object_size abc - r9 = 0 + r8 = 0 L1: - r10 = r9 < r8 :: signed + r9 = var_object_size abc + r10 = r8 < r9 :: signed if r10 goto L2 else goto L4 :: bool L2: - r11 = CPySequenceTuple_GetItemUnsafe(abc, r9) + r11 = CPySequenceTuple_GetItemUnsafe(abc, r8) r12 = unbox(int, r11) i = r12 r13 = CPyTagged_Str(i) r14 = PySet_Add(r7, r13) r15 = r14 >= 0 :: signed L3: - r16 = r9 + 1 - r9 = r16 + r16 = r8 + 1 + r8 = r16 goto L1 L4: return r7 @@ -953,21 +953,21 @@ L0: r7 = PySequence_Tuple(r6) abc = r7 r8 = PySet_New(0) - r9 = var_object_size abc - r10 = 0 + r9 = 0 L1: - r11 = r10 < r9 :: signed + r10 = var_object_size abc + r11 = r9 < r10 :: signed if r11 goto L2 else goto L4 :: bool L2: - r12 = CPySequenceTuple_GetItemUnsafe(abc, r10) + r12 = CPySequenceTuple_GetItemUnsafe(abc, r9) r13 = unbox(int, r12) i = r13 r14 = CPyTagged_Str(i) r15 = PySet_Add(r8, r14) r16 = r15 >= 0 :: signed L3: - r17 = r10 + 1 - r10 = r17 + r17 = r9 + 1 + r9 = r17 goto L1 L4: return r8 @@ -1006,21 +1006,21 @@ L0: r8 = PySequence_Tuple(r7) abc = r8 r9 = PySet_New(0) - r10 = var_object_size abc - r11 = 0 + r10 = 0 L1: - r12 = r11 < r10 :: signed + r11 = var_object_size abc + r12 = r10 < r11 :: signed if r12 goto L2 else goto L4 :: bool L2: - r13 = CPySequenceTuple_GetItemUnsafe(abc, r11) + r13 = CPySequenceTuple_GetItemUnsafe(abc, r10) r14 = unbox(int, r13) i = r14 r15 = CPyTagged_Str(i) r16 = PySet_Add(r9, r15) r17 = r16 >= 0 :: signed L3: - r18 = r11 + 1 - r11 = r18 + r18 = r10 + 1 + r10 = r18 goto L1 L4: return r9 diff --git a/mypyc/test-data/irbuild-tuple.test b/mypyc/test-data/irbuild-tuple.test index 46d9b16bf922..0aed4ad07b16 100644 --- a/mypyc/test-data/irbuild-tuple.test +++ b/mypyc/test-data/irbuild-tuple.test @@ -545,12 +545,12 @@ def fn(): r6, abc :: tuple r7 :: native_int r8 :: tuple - r9 :: native_int - r10 :: bit - r11 :: object - r12, i :: int - r13 :: str - r14 :: native_int + r9, r10 :: native_int + r11 :: bit + r12 :: object + r13, i :: int + r14 :: str + r15 :: native_int L0: r0 = load_address PyRange_Type r1 = object 3 @@ -565,17 +565,18 @@ L0: r8 = PyTuple_New(r7) r9 = 0 L1: - r10 = r9 < r7 :: signed - if r10 goto L2 else goto L4 :: bool + r10 = var_object_size abc + r11 = r9 < r10 :: signed + if r11 goto L2 else goto L4 :: bool L2: - r11 = CPySequenceTuple_GetItemUnsafe(abc, r9) - r12 = unbox(int, r11) - i = r12 - r13 = CPyTagged_Str(i) - CPySequenceTuple_SetItemUnsafe(r8, r9, r13) + r12 = CPySequenceTuple_GetItemUnsafe(abc, r9) + r13 = unbox(int, r12) + i = r13 + r14 = CPyTagged_Str(i) + CPySequenceTuple_SetItemUnsafe(r8, r9, r14) L3: - r14 = r9 + 1 - r9 = r14 + r15 = r9 + 1 + r9 = r15 goto L1 L4: return r8 @@ -594,12 +595,12 @@ def fn(): r7, abc :: tuple r8 :: native_int r9 :: tuple - r10 :: native_int - r11 :: bit - r12 :: object - r13, i :: int - r14 :: str - r15 :: native_int + r10, r11 :: native_int + r12 :: bit + r13 :: object + r14, i :: int + r15 :: str + r16 :: native_int L0: r0 = load_address PyRange_Type r1 = object 1 @@ -615,17 +616,18 @@ L0: r9 = PyTuple_New(r8) r10 = 0 L1: - r11 = r10 < r8 :: signed - if r11 goto L2 else goto L4 :: bool + r11 = var_object_size abc + r12 = r10 < r11 :: signed + if r12 goto L2 else goto L4 :: bool L2: - r12 = CPySequenceTuple_GetItemUnsafe(abc, r10) - r13 = unbox(int, r12) - i = r13 - r14 = CPyTagged_Str(i) - CPySequenceTuple_SetItemUnsafe(r9, r10, r14) + r13 = CPySequenceTuple_GetItemUnsafe(abc, r10) + r14 = unbox(int, r13) + i = r14 + r15 = CPyTagged_Str(i) + CPySequenceTuple_SetItemUnsafe(r9, r10, r15) L3: - r15 = r10 + 1 - r10 = r15 + r16 = r10 + 1 + r10 = r16 goto L1 L4: return r9 @@ -644,12 +646,12 @@ def fn(): r8, abc :: tuple r9 :: native_int r10 :: tuple - r11 :: native_int - r12 :: bit - r13 :: object - r14, i :: int - r15 :: str - r16 :: native_int + r11, r12 :: native_int + r13 :: bit + r14 :: object + r15, i :: int + r16 :: str + r17 :: native_int L0: r0 = load_address PyRange_Type r1 = object 1 @@ -666,17 +668,18 @@ L0: r10 = PyTuple_New(r9) r11 = 0 L1: - r12 = r11 < r9 :: signed - if r12 goto L2 else goto L4 :: bool + r12 = var_object_size abc + r13 = r11 < r12 :: signed + if r13 goto L2 else goto L4 :: bool L2: - r13 = CPySequenceTuple_GetItemUnsafe(abc, r11) - r14 = unbox(int, r13) - i = r14 - r15 = CPyTagged_Str(i) - CPySequenceTuple_SetItemUnsafe(r10, r11, r15) + r14 = CPySequenceTuple_GetItemUnsafe(abc, r11) + r15 = unbox(int, r14) + i = r15 + r16 = CPyTagged_Str(i) + CPySequenceTuple_SetItemUnsafe(r10, r11, r16) L3: - r16 = r11 + 1 - r11 = r16 + r17 = r11 + 1 + r11 = r17 goto L1 L4: return r10 From 76c46c8179c53a0e5f6132f2340b8d2ce385fe86 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 4 Aug 2025 02:18:05 +0000 Subject: [PATCH 5/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- mypyc/test-data/irbuild-frozenset.test | 1 - mypyc/test-data/irbuild-lists.test | 1 - mypyc/test-data/irbuild-set.test | 1 - mypyc/test-data/irbuild-tuple.test | 1 - 4 files changed, 4 deletions(-) diff --git a/mypyc/test-data/irbuild-frozenset.test b/mypyc/test-data/irbuild-frozenset.test index 844e724d10a5..473a6d79ac5a 100644 --- a/mypyc/test-data/irbuild-frozenset.test +++ b/mypyc/test-data/irbuild-frozenset.test @@ -347,4 +347,3 @@ L3: L4: r18 = PyFrozenSet_New(r10) return r18 - diff --git a/mypyc/test-data/irbuild-lists.test b/mypyc/test-data/irbuild-lists.test index 1a2498d8018e..4a55f2f8827c 100644 --- a/mypyc/test-data/irbuild-lists.test +++ b/mypyc/test-data/irbuild-lists.test @@ -794,4 +794,3 @@ L3: goto L1 L4: return r10 - diff --git a/mypyc/test-data/irbuild-set.test b/mypyc/test-data/irbuild-set.test index 5c905f74b781..1c2ae23feba0 100644 --- a/mypyc/test-data/irbuild-set.test +++ b/mypyc/test-data/irbuild-set.test @@ -1024,4 +1024,3 @@ L3: goto L1 L4: return r9 - diff --git a/mypyc/test-data/irbuild-tuple.test b/mypyc/test-data/irbuild-tuple.test index 0aed4ad07b16..b8102c47170f 100644 --- a/mypyc/test-data/irbuild-tuple.test +++ b/mypyc/test-data/irbuild-tuple.test @@ -683,4 +683,3 @@ L3: goto L1 L4: return r10 -