-- 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 :: int32 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 :: int32 r6 :: bit r7 :: object r8 :: int32 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