File tree Expand file tree Collapse file tree 2 files changed +27
-29
lines changed Expand file tree Collapse file tree 2 files changed +27
-29
lines changed Original file line number Diff line number Diff line change @@ -1205,14 +1205,17 @@ def begin_body(self) -> None:
12051205 else :
12061206 fake_call_expr = CallExpr (
12071207 self .filter_func_def ,
1208- [
1209- # this is unused in call_refexpr_with_args which is good because
1210- # we don't have an Expression to put here. But it works just fine.
1211- ],
1208+ [self .index ],
12121209 [ARG_POS ],
12131210 [None ],
12141211 )
1215- result = builder .call_refexpr_with_args (fake_call_expr , self .filter_func_def , [item ])
1212+
1213+ builder .types [fake_call_expr ] = builder .types [self .index ]
1214+
1215+ # I put this here to prevent a circular import
1216+ from mypyc .irbuild .expression import transform_call_expr
1217+
1218+ result = transform_call_expr (builder , fake_call_expr )
12161219
12171220 # Now, filter: only enter the body if func(item) is truthy
12181221 cont_block , rest_block = BasicBlock (), BasicBlock ()
Original file line number Diff line number Diff line change @@ -3730,51 +3730,46 @@ def f(a: list[list[int]]) -> int:
37303730 return s
37313731[out]
37323732def f(a):
3733- x, r0 :: int
3734- r1 :: str
3735- L0:
3736- r0 = CPyTagged_Remainder(x, 4)
3737- r1 = CPyTagged_Str(r0)
3738- return r1
3739- def g(a):
37403733 a :: list
37413734 s :: int
3742- r0 :: dict
3735+ r0 :: object
37433736 r1 :: str
37443737 r2 :: object
37453738 r3, r4 :: native_int
37463739 r5 :: bit
37473740 r6 :: object
3748- r7, x :: int
3749- r8 :: str
3750- r9 :: bit
3751- r10 :: int
3752- r11 :: native_int
3741+ r7, x :: list
3742+ r8 :: native_int
3743+ r9 :: short_int
3744+ r10 :: bit
3745+ r11 :: int
3746+ r12 :: native_int
37533747L0:
37543748 s = 0
3755- r0 = __main__.globals :: static
3756- r1 = 'f '
3757- r2 = CPyDict_GetItem (r0, r1)
3749+ r0 = builtins :: module
3750+ r1 = 'len '
3751+ r2 = CPyObject_GetAttr (r0, r1)
37583752 r3 = 0
37593753L1:
37603754 r4 = var_object_size a
37613755 r5 = r3 < r4 :: signed
37623756 if r5 goto L2 else goto L6 :: bool
37633757L2:
37643758 r6 = list_get_item_unsafe a, r3
3765- r7 = unbox(int , r6)
3759+ r7 = cast(list , r6)
37663760 x = r7
3767- r8 = f(x)
3768- r9 = CPyStr_IsTrue(r8)
3769- if r9 goto L4 else goto L3 :: bool
3761+ r8 = var_object_size x
3762+ r9 = r8 << 1
3763+ r10 = r9 != 0
3764+ if r10 goto L4 else goto L3 :: bool
37703765L3:
37713766 goto L5
37723767L4:
3773- r10 = CPyTagged_Add(s, x )
3774- s = r10
3768+ r11 = CPyTagged_Add(s, 2 )
3769+ s = r11
37753770L5:
3776- r11 = r3 + 1
3777- r3 = r11
3771+ r12 = r3 + 1
3772+ r3 = r12
37783773 goto L1
37793774L6:
37803775L7:
You can’t perform that action at this time.
0 commit comments