From b06133d2df6c7af23be01fab28f2b17a0aebd5d1 Mon Sep 17 00:00:00 2001 From: BobTheBuidler Date: Tue, 26 Aug 2025 19:38:38 +0000 Subject: [PATCH 01/10] 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 2fa84a2ed055d..3870c48c0f275 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 2f5b3b39319e7..d3e9f358f7572 100644 --- a/mypyc/test-data/irbuild-lists.test +++ b/mypyc/test-data/irbuild-lists.test @@ -968,3 +968,181 @@ 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]: + 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 5586a2bf4cfb4..ec4c06b5c9d1d 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 081cc1b174c9b..508f85807aea5 100644 --- a/mypyc/test-data/irbuild-tuple.test +++ b/mypyc/test-data/irbuild-tuple.test @@ -987,3 +987,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 87d36f789448c72d4a1acef39d9aff646ff04a4e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 26 Aug 2025 19:38:38 +0000 Subject: [PATCH 02/10] [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 3870c48c0f275..715e10b0fa2c8 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 d3e9f358f7572..3209d95ae18c1 100644 --- a/mypyc/test-data/irbuild-lists.test +++ b/mypyc/test-data/irbuild-lists.test @@ -1145,4 +1145,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 ec4c06b5c9d1d..ccc6a8a20594c 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 508f85807aea5..59d1dc12e4682 100644 --- a/mypyc/test-data/irbuild-tuple.test +++ b/mypyc/test-data/irbuild-tuple.test @@ -1159,4 +1159,3 @@ L3: L4: r7 = PyList_AsTuple(r0) return r7 - From 9524297a1e42f7f8d18a33f2e8a7875dfb5daa04 Mon Sep 17 00:00:00 2001 From: BobTheBuidler Date: Tue, 26 Aug 2025 19:38:38 +0000 Subject: [PATCH 03/10] 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 715e10b0fa2c8..b25ed67de24cb 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 3209d95ae18c1..8fd51efbe434c 100644 --- a/mypyc/test-data/irbuild-lists.test +++ b/mypyc/test-data/irbuild-lists.test @@ -1040,108 +1040,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 ccc6a8a20594c..8431f50b114c0 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 59d1dc12e4682..bbddc53ac807d 100644 --- a/mypyc/test-data/irbuild-tuple.test +++ b/mypyc/test-data/irbuild-tuple.test @@ -1060,102 +1060,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 09bab2511968dd0724b23a14617738f49381d219 Mon Sep 17 00:00:00 2001 From: BobTheBuidler Date: Tue, 26 Aug 2025 19:38:38 +0000 Subject: [PATCH 04/10] 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 b25ed67de24cb..844e724d10a51 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 8fd51efbe434c..0d585c9fd5bfd 100644 --- a/mypyc/test-data/irbuild-lists.test +++ b/mypyc/test-data/irbuild-lists.test @@ -1052,12 +1052,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 @@ -1072,17 +1072,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 @@ -1101,12 +1102,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 @@ -1122,17 +1123,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 @@ -1151,12 +1153,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 @@ -1173,17 +1175,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 8431f50b114c0..5c905f74b7810 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 bbddc53ac807d..b4869c1c14d55 100644 --- a/mypyc/test-data/irbuild-tuple.test +++ b/mypyc/test-data/irbuild-tuple.test @@ -1072,12 +1072,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 @@ -1092,17 +1092,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 @@ -1121,12 +1122,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 @@ -1142,17 +1143,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 @@ -1171,12 +1173,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 @@ -1193,17 +1195,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 385f80188b38e49ee4cfcb238afadc5bbbbbd066 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 26 Aug 2025 19:38:38 +0000 Subject: [PATCH 05/10] [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 844e724d10a51..473a6d79ac5a7 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 0d585c9fd5bfd..e6c7d6c0cbd62 100644 --- a/mypyc/test-data/irbuild-lists.test +++ b/mypyc/test-data/irbuild-lists.test @@ -1190,4 +1190,3 @@ L3: goto L1 L4: return r10 - diff --git a/mypyc/test-data/irbuild-set.test b/mypyc/test-data/irbuild-set.test index 5c905f74b7810..1c2ae23feba05 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 b4869c1c14d55..12f0be2d963ed 100644 --- a/mypyc/test-data/irbuild-tuple.test +++ b/mypyc/test-data/irbuild-tuple.test @@ -1210,4 +1210,3 @@ L3: goto L1 L4: return r10 - From 37fc82a2e290dbb170e742b4c38c210ecfb0dc05 Mon Sep 17 00:00:00 2001 From: BobTheBuidler Date: Tue, 26 Aug 2025 19:38:38 +0000 Subject: [PATCH 06/10] update IR for master --- mypyc/test-data/irbuild-frozenset.test | 43 +++++++++++++------------- mypyc/test-data/irbuild-lists.test | 42 ++++++++++++------------- mypyc/test-data/irbuild-set.test | 37 +++++++++++----------- mypyc/test-data/irbuild-tuple.test | 43 +++++++++++++------------- 4 files changed, 84 insertions(+), 81 deletions(-) diff --git a/mypyc/test-data/irbuild-frozenset.test b/mypyc/test-data/irbuild-frozenset.test index 473a6d79ac5a7..5378e379de1e7 100644 --- a/mypyc/test-data/irbuild-frozenset.test +++ b/mypyc/test-data/irbuild-frozenset.test @@ -220,20 +220,20 @@ L0: abc = r6 r7 = var_object_size abc r8 = PyList_New(r7) - r9 = 0 + r9 = var_object_size abc + r10 = 0 L1: - r10 = var_object_size abc - r11 = r9 < r10 :: signed + r11 = r10 < r9 :: signed if r11 goto L2 else goto L4 :: bool L2: - r12 = CPySequenceTuple_GetItemUnsafe(abc, r9) + r12 = CPySequenceTuple_GetItemUnsafe(abc, r10) r13 = unbox(int, r12) i = r13 r14 = CPyTagged_Str(i) - CPyList_SetItemUnsafe(r8, r9, r14) + CPyList_SetItemUnsafe(r8, r10, r14) L3: - r15 = r9 + 1 - r9 = r15 + r15 = r10 + 1 + r10 = r15 goto L1 L4: r16 = PyFrozenSet_New(r8) @@ -274,20 +274,20 @@ L0: abc = r7 r8 = var_object_size abc r9 = PyList_New(r8) - r10 = 0 + r10 = var_object_size abc + r11 = 0 L1: - r11 = var_object_size abc - r12 = r10 < r11 :: signed + r12 = r11 < r10 :: signed if r12 goto L2 else goto L4 :: bool L2: - r13 = CPySequenceTuple_GetItemUnsafe(abc, r10) + r13 = CPySequenceTuple_GetItemUnsafe(abc, r11) r14 = unbox(int, r13) i = r14 r15 = CPyTagged_Str(i) - CPyList_SetItemUnsafe(r9, r10, r15) + CPyList_SetItemUnsafe(r9, r11, r15) L3: - r16 = r10 + 1 - r10 = r16 + r16 = r11 + 1 + r11 = r16 goto L1 L4: r17 = PyFrozenSet_New(r9) @@ -329,21 +329,22 @@ L0: abc = r8 r9 = var_object_size abc r10 = PyList_New(r9) - r11 = 0 + r11 = var_object_size abc + r12 = 0 L1: - r12 = var_object_size abc - r13 = r11 < r12 :: signed + r13 = r12 < r11 :: signed if r13 goto L2 else goto L4 :: bool L2: - r14 = CPySequenceTuple_GetItemUnsafe(abc, r11) + r14 = CPySequenceTuple_GetItemUnsafe(abc, r12) r15 = unbox(int, r14) i = r15 r16 = CPyTagged_Str(i) - CPyList_SetItemUnsafe(r10, r11, r16) + CPyList_SetItemUnsafe(r10, r12, r16) L3: - r17 = r11 + 1 - r11 = r17 + r17 = r12 + 1 + r12 = r17 goto L1 L4: r18 = PyFrozenSet_New(r10) return r18 + diff --git a/mypyc/test-data/irbuild-lists.test b/mypyc/test-data/irbuild-lists.test index e6c7d6c0cbd62..9f0d994b15f33 100644 --- a/mypyc/test-data/irbuild-lists.test +++ b/mypyc/test-data/irbuild-lists.test @@ -1070,20 +1070,20 @@ L0: abc = r6 r7 = var_object_size abc r8 = PyList_New(r7) - r9 = 0 + r9 = var_object_size abc + r10 = 0 L1: - r10 = var_object_size abc - r11 = r9 < r10 :: signed + r11 = r10 < r9 :: signed if r11 goto L2 else goto L4 :: bool L2: - r12 = CPySequenceTuple_GetItemUnsafe(abc, r9) + r12 = CPySequenceTuple_GetItemUnsafe(abc, r10) r13 = unbox(int, r12) i = r13 r14 = CPyTagged_Str(i) - CPyList_SetItemUnsafe(r8, r9, r14) + CPyList_SetItemUnsafe(r8, r10, r14) L3: - r15 = r9 + 1 - r9 = r15 + r15 = r10 + 1 + r10 = r15 goto L1 L4: return r8 @@ -1121,20 +1121,20 @@ L0: abc = r7 r8 = var_object_size abc r9 = PyList_New(r8) - r10 = 0 + r10 = var_object_size abc + r11 = 0 L1: - r11 = var_object_size abc - r12 = r10 < r11 :: signed + r12 = r11 < r10 :: signed if r12 goto L2 else goto L4 :: bool L2: - r13 = CPySequenceTuple_GetItemUnsafe(abc, r10) + r13 = CPySequenceTuple_GetItemUnsafe(abc, r11) r14 = unbox(int, r13) i = r14 r15 = CPyTagged_Str(i) - CPyList_SetItemUnsafe(r9, r10, r15) + CPyList_SetItemUnsafe(r9, r11, r15) L3: - r16 = r10 + 1 - r10 = r16 + r16 = r11 + 1 + r11 = r16 goto L1 L4: return r9 @@ -1173,20 +1173,20 @@ L0: abc = r8 r9 = var_object_size abc r10 = PyList_New(r9) - r11 = 0 + r11 = var_object_size abc + r12 = 0 L1: - r12 = var_object_size abc - r13 = r11 < r12 :: signed + r13 = r12 < r11 :: signed if r13 goto L2 else goto L4 :: bool L2: - r14 = CPySequenceTuple_GetItemUnsafe(abc, r11) + r14 = CPySequenceTuple_GetItemUnsafe(abc, r12) r15 = unbox(int, r14) i = r15 r16 = CPyTagged_Str(i) - CPyList_SetItemUnsafe(r10, r11, r16) + CPyList_SetItemUnsafe(r10, r12, r16) L3: - r17 = r11 + 1 - r11 = r17 + r17 = r12 + 1 + r12 = r17 goto L1 L4: return r10 diff --git a/mypyc/test-data/irbuild-set.test b/mypyc/test-data/irbuild-set.test index 1c2ae23feba05..8431f50b114c0 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 = 0 + r8 = var_object_size abc + r9 = 0 L1: - r9 = var_object_size abc - r10 = r8 < r9 :: signed + r10 = r9 < r8 :: signed if r10 goto L2 else goto L4 :: bool L2: - r11 = CPySequenceTuple_GetItemUnsafe(abc, r8) + 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: - r16 = r8 + 1 - r8 = r16 + r16 = r9 + 1 + r9 = r16 goto L1 L4: return r7 @@ -953,21 +953,21 @@ L0: r7 = PySequence_Tuple(r6) abc = r7 r8 = PySet_New(0) - r9 = 0 + r9 = var_object_size abc + r10 = 0 L1: - r10 = var_object_size abc - r11 = r9 < r10 :: signed + r11 = r10 < r9 :: signed if r11 goto L2 else goto L4 :: bool L2: - r12 = CPySequenceTuple_GetItemUnsafe(abc, r9) + 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: - r17 = r9 + 1 - r9 = r17 + r17 = r10 + 1 + r10 = r17 goto L1 L4: return r8 @@ -1006,21 +1006,22 @@ L0: r8 = PySequence_Tuple(r7) abc = r8 r9 = PySet_New(0) - r10 = 0 + r10 = var_object_size abc + r11 = 0 L1: - r11 = var_object_size abc - r12 = r10 < r11 :: signed + r12 = r11 < r10 :: signed if r12 goto L2 else goto L4 :: bool L2: - r13 = CPySequenceTuple_GetItemUnsafe(abc, r10) + 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: - r18 = r10 + 1 - r10 = r18 + r18 = r11 + 1 + r11 = r18 goto L1 L4: return r9 + diff --git a/mypyc/test-data/irbuild-tuple.test b/mypyc/test-data/irbuild-tuple.test index 12f0be2d963ed..0c4fcb2d74860 100644 --- a/mypyc/test-data/irbuild-tuple.test +++ b/mypyc/test-data/irbuild-tuple.test @@ -1090,20 +1090,20 @@ L0: abc = r6 r7 = var_object_size abc r8 = PyTuple_New(r7) - r9 = 0 + r9 = var_object_size abc + r10 = 0 L1: - r10 = var_object_size abc - r11 = r9 < r10 :: signed + r11 = r10 < r9 :: signed if r11 goto L2 else goto L4 :: bool L2: - r12 = CPySequenceTuple_GetItemUnsafe(abc, r9) + r12 = CPySequenceTuple_GetItemUnsafe(abc, r10) r13 = unbox(int, r12) i = r13 r14 = CPyTagged_Str(i) - CPySequenceTuple_SetItemUnsafe(r8, r9, r14) + CPySequenceTuple_SetItemUnsafe(r8, r10, r14) L3: - r15 = r9 + 1 - r9 = r15 + r15 = r10 + 1 + r10 = r15 goto L1 L4: return r8 @@ -1141,20 +1141,20 @@ L0: abc = r7 r8 = var_object_size abc r9 = PyTuple_New(r8) - r10 = 0 + r10 = var_object_size abc + r11 = 0 L1: - r11 = var_object_size abc - r12 = r10 < r11 :: signed + r12 = r11 < r10 :: signed if r12 goto L2 else goto L4 :: bool L2: - r13 = CPySequenceTuple_GetItemUnsafe(abc, r10) + r13 = CPySequenceTuple_GetItemUnsafe(abc, r11) r14 = unbox(int, r13) i = r14 r15 = CPyTagged_Str(i) - CPySequenceTuple_SetItemUnsafe(r9, r10, r15) + CPySequenceTuple_SetItemUnsafe(r9, r11, r15) L3: - r16 = r10 + 1 - r10 = r16 + r16 = r11 + 1 + r11 = r16 goto L1 L4: return r9 @@ -1193,20 +1193,21 @@ L0: abc = r8 r9 = var_object_size abc r10 = PyTuple_New(r9) - r11 = 0 + r11 = var_object_size abc + r12 = 0 L1: - r12 = var_object_size abc - r13 = r11 < r12 :: signed + r13 = r12 < r11 :: signed if r13 goto L2 else goto L4 :: bool L2: - r14 = CPySequenceTuple_GetItemUnsafe(abc, r11) + r14 = CPySequenceTuple_GetItemUnsafe(abc, r12) r15 = unbox(int, r14) i = r15 r16 = CPyTagged_Str(i) - CPySequenceTuple_SetItemUnsafe(r10, r11, r16) + CPySequenceTuple_SetItemUnsafe(r10, r12, r16) L3: - r17 = r11 + 1 - r11 = r17 + r17 = r12 + 1 + r12 = r17 goto L1 L4: return r10 + From 7aca7ced95253abb06b983a9af2399d4b12754ff Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 26 Aug 2025 19:38:38 +0000 Subject: [PATCH 07/10] [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-set.test | 1 - mypyc/test-data/irbuild-tuple.test | 1 - 3 files changed, 3 deletions(-) diff --git a/mypyc/test-data/irbuild-frozenset.test b/mypyc/test-data/irbuild-frozenset.test index 5378e379de1e7..801ac4785b643 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-set.test b/mypyc/test-data/irbuild-set.test index 8431f50b114c0..208fcba10e000 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 0c4fcb2d74860..2326fdb341ff1 100644 --- a/mypyc/test-data/irbuild-tuple.test +++ b/mypyc/test-data/irbuild-tuple.test @@ -1210,4 +1210,3 @@ L3: goto L1 L4: return r10 - From c7a6346e3f5e21a2c0bdbed874c3b98675518301 Mon Sep 17 00:00:00 2001 From: BobTheBuidler Date: Fri, 26 Sep 2025 03:10:30 +0000 Subject: [PATCH 08/10] adapt ir to master --- mypyc/test-data/irbuild-frozenset.test | 118 ++++++++++++------------- mypyc/test-data/irbuild-lists.test | 100 ++++++++++----------- mypyc/test-data/irbuild-tuple.test | 99 ++++++++++----------- 3 files changed, 155 insertions(+), 162 deletions(-) diff --git a/mypyc/test-data/irbuild-frozenset.test b/mypyc/test-data/irbuild-frozenset.test index 801ac4785b643..b25ed67de24cb 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, r10 :: native_int - r11 :: bit - r12 :: object - r13, i :: int - r14 :: str - r15 :: native_int - r16 :: frozenset + r9 :: native_int + r10 :: bit + r11 :: object + r12, i :: int + r13 :: str + r14 :: native_int + r15 :: frozenset L0: r0 = load_address PyRange_Type r1 = object 3 @@ -220,24 +220,23 @@ L0: abc = r6 r7 = var_object_size abc r8 = PyList_New(r7) - r9 = var_object_size abc - r10 = 0 + r9 = 0 L1: - r11 = r10 < r9 :: signed - if r11 goto L2 else goto L4 :: bool + r10 = r9 < r7 :: signed + if r10 goto L2 else goto L4 :: bool L2: - r12 = CPySequenceTuple_GetItemUnsafe(abc, r10) - r13 = unbox(int, r12) - i = r13 - r14 = CPyTagged_Str(i) - CPyList_SetItemUnsafe(r8, r10, r14) + r11 = CPySequenceTuple_GetItemUnsafe(abc, r9) + r12 = unbox(int, r11) + i = r12 + r13 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r8, r9, r13) L3: - r15 = r10 + 1 - r10 = r15 + r14 = r9 + 1 + r9 = r14 goto L1 L4: - r16 = PyFrozenSet_New(r8) - return r16 + r15 = PyFrozenSet_New(r8) + return r15 [case testFrozenSetFromRange5] from typing import FrozenSet @@ -254,13 +253,13 @@ def fn(): r7, abc :: tuple r8 :: native_int r9 :: list - r10, r11 :: native_int - r12 :: bit - r13 :: object - r14, i :: int - r15 :: str - r16 :: native_int - r17 :: frozenset + 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 1 @@ -274,24 +273,23 @@ L0: abc = r7 r8 = var_object_size abc r9 = PyList_New(r8) - r10 = var_object_size abc - r11 = 0 + r10 = 0 L1: - r12 = r11 < r10 :: signed - if r12 goto L2 else goto L4 :: bool + r11 = r10 < r8 :: signed + if r11 goto L2 else goto L4 :: bool L2: - r13 = CPySequenceTuple_GetItemUnsafe(abc, r11) - r14 = unbox(int, r13) - i = r14 - r15 = CPyTagged_Str(i) - CPyList_SetItemUnsafe(r9, r11, r15) + r12 = CPySequenceTuple_GetItemUnsafe(abc, r10) + r13 = unbox(int, r12) + i = r13 + r14 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r9, r10, r14) L3: - r16 = r11 + 1 - r11 = r16 + r15 = r10 + 1 + r10 = r15 goto L1 L4: - r17 = PyFrozenSet_New(r9) - return r17 + r16 = PyFrozenSet_New(r9) + return r16 [case testFrozenSetFromRange6] from typing import FrozenSet @@ -308,13 +306,13 @@ def fn(): r8, abc :: tuple r9 :: native_int r10 :: list - r11, r12 :: native_int - r13 :: bit - r14 :: object - r15, i :: int - r16 :: str - r17 :: native_int - r18 :: frozenset + 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 @@ -329,21 +327,21 @@ L0: abc = r8 r9 = var_object_size abc r10 = PyList_New(r9) - r11 = var_object_size abc - r12 = 0 + r11 = 0 L1: - r13 = r12 < r11 :: signed - if r13 goto L2 else goto L4 :: bool + r12 = r11 < r9 :: signed + if r12 goto L2 else goto L4 :: bool L2: - r14 = CPySequenceTuple_GetItemUnsafe(abc, r12) - r15 = unbox(int, r14) - i = r15 - r16 = CPyTagged_Str(i) - CPyList_SetItemUnsafe(r10, r12, r16) + r13 = CPySequenceTuple_GetItemUnsafe(abc, r11) + r14 = unbox(int, r13) + i = r14 + r15 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r10, r11, r15) L3: - r17 = r12 + 1 - r12 = r17 + r16 = r11 + 1 + r11 = r16 goto L1 L4: - r18 = PyFrozenSet_New(r10) - return r18 + r17 = PyFrozenSet_New(r10) + return r17 + diff --git a/mypyc/test-data/irbuild-lists.test b/mypyc/test-data/irbuild-lists.test index 9f0d994b15f33..8fd51efbe434c 100644 --- a/mypyc/test-data/irbuild-lists.test +++ b/mypyc/test-data/irbuild-lists.test @@ -1052,12 +1052,12 @@ def fn(): r6, abc :: tuple r7 :: native_int r8 :: list - r9, r10 :: native_int - r11 :: bit - r12 :: object - r13, i :: int - r14 :: str - r15 :: native_int + r9 :: native_int + r10 :: bit + r11 :: object + r12, i :: int + r13 :: str + r14 :: native_int L0: r0 = load_address PyRange_Type r1 = object 3 @@ -1070,20 +1070,19 @@ L0: abc = r6 r7 = var_object_size abc r8 = PyList_New(r7) - r9 = var_object_size abc - r10 = 0 + r9 = 0 L1: - r11 = r10 < r9 :: signed - if r11 goto L2 else goto L4 :: bool + r10 = r9 < r7 :: signed + if r10 goto L2 else goto L4 :: bool L2: - r12 = CPySequenceTuple_GetItemUnsafe(abc, r10) - r13 = unbox(int, r12) - i = r13 - r14 = CPyTagged_Str(i) - CPyList_SetItemUnsafe(r8, r10, r14) + r11 = CPySequenceTuple_GetItemUnsafe(abc, r9) + r12 = unbox(int, r11) + i = r12 + r13 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r8, r9, r13) L3: - r15 = r10 + 1 - r10 = r15 + r14 = r9 + 1 + r9 = r14 goto L1 L4: return r8 @@ -1102,12 +1101,12 @@ def fn(): r7, abc :: tuple r8 :: native_int r9 :: list - r10, r11 :: native_int - r12 :: bit - r13 :: object - r14, i :: int - r15 :: str - r16 :: native_int + r10 :: native_int + r11 :: bit + r12 :: object + r13, i :: int + r14 :: str + r15 :: native_int L0: r0 = load_address PyRange_Type r1 = object 1 @@ -1121,20 +1120,19 @@ L0: abc = r7 r8 = var_object_size abc r9 = PyList_New(r8) - r10 = var_object_size abc - r11 = 0 + r10 = 0 L1: - r12 = r11 < r10 :: signed - if r12 goto L2 else goto L4 :: bool + r11 = r10 < r8 :: signed + if r11 goto L2 else goto L4 :: bool L2: - r13 = CPySequenceTuple_GetItemUnsafe(abc, r11) - r14 = unbox(int, r13) - i = r14 - r15 = CPyTagged_Str(i) - CPyList_SetItemUnsafe(r9, r11, r15) + r12 = CPySequenceTuple_GetItemUnsafe(abc, r10) + r13 = unbox(int, r12) + i = r13 + r14 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r9, r10, r14) L3: - r16 = r11 + 1 - r11 = r16 + r15 = r10 + 1 + r10 = r15 goto L1 L4: return r9 @@ -1153,12 +1151,12 @@ def fn(): r8, abc :: tuple r9 :: native_int r10 :: list - r11, r12 :: native_int - r13 :: bit - r14 :: object - r15, i :: int - r16 :: str - r17 :: native_int + r11 :: native_int + r12 :: bit + r13 :: object + r14, i :: int + r15 :: str + r16 :: native_int L0: r0 = load_address PyRange_Type r1 = object 1 @@ -1173,20 +1171,20 @@ L0: abc = r8 r9 = var_object_size abc r10 = PyList_New(r9) - r11 = var_object_size abc - r12 = 0 + r11 = 0 L1: - r13 = r12 < r11 :: signed - if r13 goto L2 else goto L4 :: bool + r12 = r11 < r9 :: signed + if r12 goto L2 else goto L4 :: bool L2: - r14 = CPySequenceTuple_GetItemUnsafe(abc, r12) - r15 = unbox(int, r14) - i = r15 - r16 = CPyTagged_Str(i) - CPyList_SetItemUnsafe(r10, r12, r16) + r13 = CPySequenceTuple_GetItemUnsafe(abc, r11) + r14 = unbox(int, r13) + i = r14 + r15 = CPyTagged_Str(i) + CPyList_SetItemUnsafe(r10, r11, r15) L3: - r17 = r12 + 1 - r12 = r17 + r16 = r11 + 1 + r11 = r16 goto L1 L4: return r10 + diff --git a/mypyc/test-data/irbuild-tuple.test b/mypyc/test-data/irbuild-tuple.test index 2326fdb341ff1..b3d41cf135833 100644 --- a/mypyc/test-data/irbuild-tuple.test +++ b/mypyc/test-data/irbuild-tuple.test @@ -1072,12 +1072,12 @@ def fn(): r6, abc :: tuple r7 :: native_int r8 :: tuple - r9, r10 :: native_int - r11 :: bit - r12 :: object - r13, i :: int - r14 :: str - r15 :: native_int + r9 :: native_int + r10 :: bit + r11 :: object + r12, i :: int + r13 :: str + r14 :: native_int L0: r0 = load_address PyRange_Type r1 = object 3 @@ -1090,20 +1090,19 @@ L0: abc = r6 r7 = var_object_size abc r8 = PyTuple_New(r7) - r9 = var_object_size abc - r10 = 0 + r9 = 0 L1: - r11 = r10 < r9 :: signed - if r11 goto L2 else goto L4 :: bool + r10 = r9 < r7 :: signed + if r10 goto L2 else goto L4 :: bool L2: - r12 = CPySequenceTuple_GetItemUnsafe(abc, r10) - r13 = unbox(int, r12) - i = r13 - r14 = CPyTagged_Str(i) - CPySequenceTuple_SetItemUnsafe(r8, r10, r14) + r11 = CPySequenceTuple_GetItemUnsafe(abc, r9) + r12 = unbox(int, r11) + i = r12 + r13 = CPyTagged_Str(i) + CPySequenceTuple_SetItemUnsafe(r8, r9, r13) L3: - r15 = r10 + 1 - r10 = r15 + r14 = r9 + 1 + r9 = r14 goto L1 L4: return r8 @@ -1122,12 +1121,12 @@ def fn(): r7, abc :: tuple r8 :: native_int r9 :: tuple - r10, r11 :: native_int - r12 :: bit - r13 :: object - r14, i :: int - r15 :: str - r16 :: native_int + r10 :: native_int + r11 :: bit + r12 :: object + r13, i :: int + r14 :: str + r15 :: native_int L0: r0 = load_address PyRange_Type r1 = object 1 @@ -1141,20 +1140,19 @@ L0: abc = r7 r8 = var_object_size abc r9 = PyTuple_New(r8) - r10 = var_object_size abc - r11 = 0 + r10 = 0 L1: - r12 = r11 < r10 :: signed - if r12 goto L2 else goto L4 :: bool + r11 = r10 < r8 :: signed + if r11 goto L2 else goto L4 :: bool L2: - r13 = CPySequenceTuple_GetItemUnsafe(abc, r11) - r14 = unbox(int, r13) - i = r14 - r15 = CPyTagged_Str(i) - CPySequenceTuple_SetItemUnsafe(r9, r11, r15) + r12 = CPySequenceTuple_GetItemUnsafe(abc, r10) + r13 = unbox(int, r12) + i = r13 + r14 = CPyTagged_Str(i) + CPySequenceTuple_SetItemUnsafe(r9, r10, r14) L3: - r16 = r11 + 1 - r11 = r16 + r15 = r10 + 1 + r10 = r15 goto L1 L4: return r9 @@ -1173,12 +1171,12 @@ def fn(): r8, abc :: tuple r9 :: native_int r10 :: tuple - r11, r12 :: native_int - r13 :: bit - r14 :: object - r15, i :: int - r16 :: str - r17 :: native_int + r11 :: native_int + r12 :: bit + r13 :: object + r14, i :: int + r15 :: str + r16 :: native_int L0: r0 = load_address PyRange_Type r1 = object 1 @@ -1193,20 +1191,19 @@ L0: abc = r8 r9 = var_object_size abc r10 = PyTuple_New(r9) - r11 = var_object_size abc - r12 = 0 + r11 = 0 L1: - r13 = r12 < r11 :: signed - if r13 goto L2 else goto L4 :: bool + r12 = r11 < r9 :: signed + if r12 goto L2 else goto L4 :: bool L2: - r14 = CPySequenceTuple_GetItemUnsafe(abc, r12) - r15 = unbox(int, r14) - i = r15 - r16 = CPyTagged_Str(i) - CPySequenceTuple_SetItemUnsafe(r10, r12, r16) + r13 = CPySequenceTuple_GetItemUnsafe(abc, r11) + r14 = unbox(int, r13) + i = r14 + r15 = CPyTagged_Str(i) + CPySequenceTuple_SetItemUnsafe(r10, r11, r15) L3: - r17 = r12 + 1 - r12 = r17 + r16 = r11 + 1 + r11 = r16 goto L1 L4: return r10 From 0841d437d02c5490bc4b9e75773f42168606dc4c Mon Sep 17 00:00:00 2001 From: BobTheBuidler <70677534+BobTheBuidler@users.noreply.github.com> Date: Thu, 25 Sep 2025 23:12:36 -0400 Subject: [PATCH 09/10] Update irbuild-frozenset.test --- mypyc/test-data/irbuild-frozenset.test | 232 ------------------------- 1 file changed, 232 deletions(-) diff --git a/mypyc/test-data/irbuild-frozenset.test b/mypyc/test-data/irbuild-frozenset.test index b25ed67de24cb..2fa84a2ed055d 100644 --- a/mypyc/test-data/irbuild-frozenset.test +++ b/mypyc/test-data/irbuild-frozenset.test @@ -113,235 +113,3 @@ 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]: - abc = tuple(range(3)) - return frozenset(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 - r15 :: 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 = 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: - r15 = PyFrozenSet_New(r8) - return r15 - -[case testFrozenSetFromRange5] -from typing import FrozenSet -def fn() -> FrozenSet[str]: - abc = tuple(range(1, 3)) - return frozenset(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 - r16 :: 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 = 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: - r16 = PyFrozenSet_New(r9) - return r16 - -[case testFrozenSetFromRange6] -from typing import FrozenSet -def fn() -> FrozenSet[str]: - abc = tuple(range(1, 3, 2)) - return frozenset(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 - r17 :: 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 = 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: - r17 = PyFrozenSet_New(r10) - return r17 - From ff91738cc6a1770b1308ec775c23d14b9c806cb3 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 03:15:51 +0000 Subject: [PATCH 10/10] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- mypyc/test-data/irbuild-lists.test | 1 - 1 file changed, 1 deletion(-) diff --git a/mypyc/test-data/irbuild-lists.test b/mypyc/test-data/irbuild-lists.test index 8fd51efbe434c..66acc4b6e21d3 100644 --- a/mypyc/test-data/irbuild-lists.test +++ b/mypyc/test-data/irbuild-lists.test @@ -1187,4 +1187,3 @@ L3: goto L1 L4: return r10 -