gtn/.venv/Lib/site-packages/mypyc/test-data/irbuild-any.test
Tipragot 628be439b8 Ajout d'un environement de développement.
Cela permet de ne pas avoir de problèmes de compatibilité
car python est dans le git.
2023-10-26 15:33:03 +02:00

239 lines
4.3 KiB
Plaintext

-- Generate ops related to Any types
[case testCoerceAnyInCallsAndReturn]
from typing import Any
def f(x: Any) -> Any:
return g(x)
def g(x: int) -> int:
return f(x)
[out]
def f(x):
x :: object
r0, r1 :: int
r2 :: object
L0:
r0 = unbox(int, x)
r1 = g(r0)
r2 = box(int, r1)
return r2
def g(x):
x :: int
r0, r1 :: object
r2 :: int
L0:
r0 = box(int, x)
r1 = f(r0)
r2 = unbox(int, r1)
return r2
[case testCoerceAnyInAssignment]
from typing import Any, Tuple
class C:
a: Any
n: int
def f(a: Any, n: int, c: C) -> None:
c.a = n
c.n = a
a = n
n = a
a.a = n
[out]
def f(a, n, c):
a :: object
n :: int
c :: __main__.C
r0 :: object
r1 :: bool
r2 :: int
r3 :: bool
r4 :: object
r5 :: int
r6 :: str
r7 :: object
r8 :: i32
r9 :: bit
L0:
r0 = box(int, n)
c.a = r0; r1 = is_error
r2 = unbox(int, a)
c.n = r2; r3 = is_error
r4 = box(int, n)
a = r4
r5 = unbox(int, a)
n = r5
r6 = 'a'
r7 = box(int, n)
r8 = PyObject_SetAttr(a, r6, r7)
r9 = r8 >= 0 :: signed
return 1
[case testCoerceAnyInOps]
from typing import Any, List
def f1(a: Any, n: int) -> None:
a + n
n + a
def f2(a: Any, n: int, l: List[int]) -> None:
a[n]
l[a]
a[n] = n
l[a] = n
l[n] = a
[a, n]
def f3(a: Any, n: int) -> None:
a += n
n += a
[out]
def f1(a, n):
a :: object
n :: int
r0, r1, r2, r3 :: object
L0:
r0 = box(int, n)
r1 = PyNumber_Add(a, r0)
r2 = box(int, n)
r3 = PyNumber_Add(r2, a)
return 1
def f2(a, n, l):
a :: object
n :: int
l :: list
r0, r1, r2, r3, r4 :: object
r5 :: i32
r6 :: bit
r7 :: object
r8 :: i32
r9, r10 :: bit
r11 :: list
r12 :: object
r13, r14, r15 :: ptr
L0:
r0 = box(int, n)
r1 = PyObject_GetItem(a, r0)
r2 = PyObject_GetItem(l, a)
r3 = box(int, n)
r4 = box(int, n)
r5 = PyObject_SetItem(a, r3, r4)
r6 = r5 >= 0 :: signed
r7 = box(int, n)
r8 = PyObject_SetItem(l, a, r7)
r9 = r8 >= 0 :: signed
r10 = CPyList_SetItem(l, n, a)
r11 = PyList_New(2)
r12 = box(int, n)
r13 = get_element_ptr r11 ob_item :: PyListObject
r14 = load_mem r13 :: ptr*
set_mem r14, a :: builtins.object*
r15 = r14 + WORD_SIZE*1
set_mem r15, r12 :: builtins.object*
keep_alive r11
return 1
def f3(a, n):
a :: object
n :: int
r0, r1, r2, r3 :: object
r4 :: int
L0:
r0 = box(int, n)
r1 = PyNumber_InPlaceAdd(a, r0)
a = r1
r2 = box(int, n)
r3 = PyNumber_InPlaceAdd(r2, a)
r4 = unbox(int, r3)
n = r4
return 1
[case testCoerceAnyInConditionalExpr]
from typing import Any
def f4(a: Any, n: int, b: bool) -> None:
a = a if b else n
n = n if b else a
[out]
def f4(a, n, b):
a :: object
n :: int
b :: bool
r0, r1, r2, r3 :: object
r4 :: int
L0:
if b goto L1 else goto L2 :: bool
L1:
r0 = a
goto L3
L2:
r1 = box(int, n)
r0 = r1
L3:
a = r0
if b goto L4 else goto L5 :: bool
L4:
r2 = box(int, n)
r3 = r2
goto L6
L5:
r3 = a
L6:
r4 = unbox(int, r3)
n = r4
return 1
[case testAbsSpecialization]
# Specialization of native classes that implement __abs__ is checked in
# irbuild-dunders.test
def f() -> None:
a = abs(1)
b = abs(1.1)
[out]
def f():
r0, r1 :: object
r2, a :: int
r3, b :: float
L0:
r0 = object 1
r1 = PyNumber_Absolute(r0)
r2 = unbox(int, r1)
a = r2
r3 = fabs(1.1)
b = r3
return 1
[case testFunctionBasedOps]
def f() -> None:
a = divmod(5, 2)
def f2() -> int:
return pow(2, 5)
def f3() -> float:
return pow(2, 5, 3)
[out]
def f():
r0, r1, r2 :: object
r3, a :: tuple[float, float]
L0:
r0 = object 5
r1 = object 2
r2 = PyNumber_Divmod(r0, r1)
r3 = unbox(tuple[float, float], r2)
a = r3
return 1
def f2():
r0, r1, r2 :: object
r3 :: int
L0:
r0 = object 2
r1 = object 5
r2 = CPyNumber_Power(r0, r1)
r3 = unbox(int, r2)
return r3
def f3():
r0, r1, r2, r3 :: object
r4 :: int
r5 :: float
L0:
r0 = object 2
r1 = object 5
r2 = object 3
r3 = PyNumber_Power(r0, r1, r2)
r4 = unbox(int, r3)
r5 = CPyFloat_FromTagged(r4)
return r5