@@ -1675,25 +1675,19 @@ def g():
1675
1675
r1 :: dict
1676
1676
r2 :: str
1677
1677
r3 :: object
1678
- r4 :: list
1678
+ r4 :: dict
1679
1679
r5, r6 :: object
1680
- r7 :: tuple
1681
- r8 :: dict
1682
- r9 :: object
1683
- r10 :: tuple[int, int, int]
1680
+ r7 :: tuple[int, int, int]
1684
1681
L0:
1685
1682
r0 = (2, 4, 6)
1686
1683
r1 = __main__.globals :: static
1687
1684
r2 = 'f'
1688
1685
r3 = CPyDict_GetItem(r1, r2)
1689
- r4 = PyList_New(0 )
1686
+ r4 = PyDict_New( )
1690
1687
r5 = box(tuple[int, int, int], r0)
1691
- r6 = CPyList_Extend(r4, r5)
1692
- r7 = PyList_AsTuple(r4)
1693
- r8 = PyDict_New()
1694
- r9 = PyObject_Call(r3, r7, r8)
1695
- r10 = unbox(tuple[int, int, int], r9)
1696
- return r10
1688
+ r6 = PyObject_Call(r3, r5, r4)
1689
+ r7 = unbox(tuple[int, int, int], r6)
1690
+ return r7
1697
1691
def h():
1698
1692
r0 :: tuple[int, int]
1699
1693
r1 :: dict
@@ -3546,3 +3540,266 @@ L0:
3546
3540
r2 = PyObject_Vectorcall(r1, 0, 0, 0)
3547
3541
r3 = box(None, 1)
3548
3542
return r3
3543
+
3544
+ [case testStarArgFastPathTuple]
3545
+ from typing import Any, Callable
3546
+ def deco(fn: Callable[..., Any]) -> Callable[..., Any]:
3547
+ def wrapper(*args: Any) -> Any:
3548
+ return fn(*args)
3549
+ return wrapper
3550
+
3551
+ [out]
3552
+ def wrapper_deco_obj.__get__(__mypyc_self__, instance, owner):
3553
+ __mypyc_self__, instance, owner, r0 :: object
3554
+ r1 :: bit
3555
+ r2 :: object
3556
+ L0:
3557
+ r0 = load_address _Py_NoneStruct
3558
+ r1 = instance == r0
3559
+ if r1 goto L1 else goto L2 :: bool
3560
+ L1:
3561
+ return __mypyc_self__
3562
+ L2:
3563
+ r2 = PyMethod_New(__mypyc_self__, instance)
3564
+ return r2
3565
+ def wrapper_deco_obj.__call__(__mypyc_self__, args):
3566
+ __mypyc_self__ :: __main__.wrapper_deco_obj
3567
+ args :: tuple
3568
+ r0 :: __main__.deco_env
3569
+ r1 :: object
3570
+ r2 :: dict
3571
+ r3 :: object
3572
+ L0:
3573
+ r0 = __mypyc_self__.__mypyc_env__
3574
+ r1 = r0.fn
3575
+ r2 = PyDict_New()
3576
+ r3 = PyObject_Call(r1, args, r2)
3577
+ return r3
3578
+ def deco(fn):
3579
+ fn :: object
3580
+ r0 :: __main__.deco_env
3581
+ r1 :: bool
3582
+ r2 :: __main__.wrapper_deco_obj
3583
+ r3 :: bool
3584
+ wrapper :: object
3585
+ L0:
3586
+ r0 = deco_env()
3587
+ r0.fn = fn; r1 = is_error
3588
+ r2 = wrapper_deco_obj()
3589
+ r2.__mypyc_env__ = r0; r3 = is_error
3590
+ wrapper = r2
3591
+ return wrapper
3592
+
3593
+ [case testStarArgFastPathList]
3594
+ from typing import Any, Callable
3595
+ def deco(fn: Callable[..., Any]) -> Callable[[list[Any]], Any]:
3596
+ def wrapper(args: list[Any]) -> Any:
3597
+ return fn(*args)
3598
+ return wrapper
3599
+
3600
+ [out]
3601
+ def wrapper_deco_obj.__get__(__mypyc_self__, instance, owner):
3602
+ __mypyc_self__, instance, owner, r0 :: object
3603
+ r1 :: bit
3604
+ r2 :: object
3605
+ L0:
3606
+ r0 = load_address _Py_NoneStruct
3607
+ r1 = instance == r0
3608
+ if r1 goto L1 else goto L2 :: bool
3609
+ L1:
3610
+ return __mypyc_self__
3611
+ L2:
3612
+ r2 = PyMethod_New(__mypyc_self__, instance)
3613
+ return r2
3614
+ def wrapper_deco_obj.__call__(__mypyc_self__, args):
3615
+ __mypyc_self__ :: __main__.wrapper_deco_obj
3616
+ args :: list
3617
+ r0 :: __main__.deco_env
3618
+ r1 :: object
3619
+ r2 :: tuple
3620
+ r3 :: dict
3621
+ r4 :: object
3622
+ L0:
3623
+ r0 = __mypyc_self__.__mypyc_env__
3624
+ r1 = r0.fn
3625
+ r2 = PyList_AsTuple(args)
3626
+ r3 = PyDict_New()
3627
+ r4 = PyObject_Call(r1, r2, r3)
3628
+ return r4
3629
+ def deco(fn):
3630
+ fn :: object
3631
+ r0 :: __main__.deco_env
3632
+ r1 :: bool
3633
+ r2 :: __main__.wrapper_deco_obj
3634
+ r3 :: bool
3635
+ wrapper :: object
3636
+ L0:
3637
+ r0 = deco_env()
3638
+ r0.fn = fn; r1 = is_error
3639
+ r2 = wrapper_deco_obj()
3640
+ r2.__mypyc_env__ = r0; r3 = is_error
3641
+ wrapper = r2
3642
+ return wrapper
3643
+
3644
+ [case testStarArgFastPathListWithKwargs]
3645
+ from typing import Any, Callable
3646
+ def deco(fn: Callable[..., Any]) -> Callable[..., Any]:
3647
+ def wrapper(lst: list[Any], kwargs: dict[str, Any]) -> Any:
3648
+ return fn(*lst, **kwargs)
3649
+ return wrapper
3650
+
3651
+ [out]
3652
+ def wrapper_deco_obj.__get__(__mypyc_self__, instance, owner):
3653
+ __mypyc_self__, instance, owner, r0 :: object
3654
+ r1 :: bit
3655
+ r2 :: object
3656
+ L0:
3657
+ r0 = load_address _Py_NoneStruct
3658
+ r1 = instance == r0
3659
+ if r1 goto L1 else goto L2 :: bool
3660
+ L1:
3661
+ return __mypyc_self__
3662
+ L2:
3663
+ r2 = PyMethod_New(__mypyc_self__, instance)
3664
+ return r2
3665
+ def wrapper_deco_obj.__call__(__mypyc_self__, lst, kwargs):
3666
+ __mypyc_self__ :: __main__.wrapper_deco_obj
3667
+ lst :: list
3668
+ kwargs :: dict
3669
+ r0 :: __main__.deco_env
3670
+ r1 :: object
3671
+ r2 :: tuple
3672
+ r3 :: dict
3673
+ r4 :: i32
3674
+ r5 :: bit
3675
+ r6 :: object
3676
+ L0:
3677
+ r0 = __mypyc_self__.__mypyc_env__
3678
+ r1 = r0.fn
3679
+ r2 = PyList_AsTuple(lst)
3680
+ r3 = PyDict_New()
3681
+ r4 = CPyDict_UpdateInDisplay(r3, kwargs)
3682
+ r5 = r4 >= 0 :: signed
3683
+ r6 = PyObject_Call(r1, r2, r3)
3684
+ return r6
3685
+ def deco(fn):
3686
+ fn :: object
3687
+ r0 :: __main__.deco_env
3688
+ r1 :: bool
3689
+ r2 :: __main__.wrapper_deco_obj
3690
+ r3 :: bool
3691
+ wrapper :: object
3692
+ L0:
3693
+ r0 = deco_env()
3694
+ r0.fn = fn; r1 = is_error
3695
+ r2 = wrapper_deco_obj()
3696
+ r2.__mypyc_env__ = r0; r3 = is_error
3697
+ wrapper = r2
3698
+ return wrapper
3699
+
3700
+ [case testStarArgFastPathSequence]
3701
+ from typing import Any, Callable
3702
+ def deco(fn: Callable[[Any], Any]) -> Callable[[Any], Any]:
3703
+ def wrapper(args: Any) -> Any:
3704
+ return fn(*args)
3705
+ return wrapper
3706
+
3707
+ [out]
3708
+ def wrapper_deco_obj.__get__(__mypyc_self__, instance, owner):
3709
+ __mypyc_self__, instance, owner, r0 :: object
3710
+ r1 :: bit
3711
+ r2 :: object
3712
+ L0:
3713
+ r0 = load_address _Py_NoneStruct
3714
+ r1 = instance == r0
3715
+ if r1 goto L1 else goto L2 :: bool
3716
+ L1:
3717
+ return __mypyc_self__
3718
+ L2:
3719
+ r2 = PyMethod_New(__mypyc_self__, instance)
3720
+ return r2
3721
+ def wrapper_deco_obj.__call__(__mypyc_self__, args):
3722
+ __mypyc_self__ :: __main__.wrapper_deco_obj
3723
+ args :: object
3724
+ r0 :: __main__.deco_env
3725
+ r1 :: object
3726
+ r2 :: tuple
3727
+ r3 :: dict
3728
+ r4 :: object
3729
+ L0:
3730
+ r0 = __mypyc_self__.__mypyc_env__
3731
+ r1 = r0.fn
3732
+ r2 = PySequence_Tuple(args)
3733
+ r3 = PyDict_New()
3734
+ r4 = PyObject_Call(r1, r2, r3)
3735
+ return r4
3736
+ def deco(fn):
3737
+ fn :: object
3738
+ r0 :: __main__.deco_env
3739
+ r1 :: bool
3740
+ r2 :: __main__.wrapper_deco_obj
3741
+ r3 :: bool
3742
+ wrapper :: object
3743
+ L0:
3744
+ r0 = deco_env()
3745
+ r0.fn = fn; r1 = is_error
3746
+ r2 = wrapper_deco_obj()
3747
+ r2.__mypyc_env__ = r0; r3 = is_error
3748
+ wrapper = r2
3749
+ return wrapper
3750
+
3751
+ [case testStarArgFastPathSequenceWithKwargs]
3752
+ from typing import Any, Callable
3753
+ def deco(fn: Callable[[Any], Any]) -> Callable[[Any], Any]:
3754
+ def wrapper(args: Any, **kwargs: Any) -> Any:
3755
+ return fn(*args, **kwargs)
3756
+ return wrapper
3757
+
3758
+ [out]
3759
+ def wrapper_deco_obj.__get__(__mypyc_self__, instance, owner):
3760
+ __mypyc_self__, instance, owner, r0 :: object
3761
+ r1 :: bit
3762
+ r2 :: object
3763
+ L0:
3764
+ r0 = load_address _Py_NoneStruct
3765
+ r1 = instance == r0
3766
+ if r1 goto L1 else goto L2 :: bool
3767
+ L1:
3768
+ return __mypyc_self__
3769
+ L2:
3770
+ r2 = PyMethod_New(__mypyc_self__, instance)
3771
+ return r2
3772
+ def wrapper_deco_obj.__call__(__mypyc_self__, args, kwargs):
3773
+ __mypyc_self__ :: __main__.wrapper_deco_obj
3774
+ args :: object
3775
+ kwargs :: dict
3776
+ r0 :: __main__.deco_env
3777
+ r1 :: object
3778
+ r2 :: tuple
3779
+ r3 :: dict
3780
+ r4 :: i32
3781
+ r5 :: bit
3782
+ r6 :: object
3783
+ L0:
3784
+ r0 = __mypyc_self__.__mypyc_env__
3785
+ r1 = r0.fn
3786
+ r2 = PySequence_Tuple(args)
3787
+ r3 = PyDict_New()
3788
+ r4 = CPyDict_UpdateInDisplay(r3, kwargs)
3789
+ r5 = r4 >= 0 :: signed
3790
+ r6 = PyObject_Call(r1, r2, r3)
3791
+ return r6
3792
+ def deco(fn):
3793
+ fn :: object
3794
+ r0 :: __main__.deco_env
3795
+ r1 :: bool
3796
+ r2 :: __main__.wrapper_deco_obj
3797
+ r3 :: bool
3798
+ wrapper :: object
3799
+ L0:
3800
+ r0 = deco_env()
3801
+ r0.fn = fn; r1 = is_error
3802
+ r2 = wrapper_deco_obj()
3803
+ r2.__mypyc_env__ = r0; r3 = is_error
3804
+ wrapper = r2
3805
+ return wrapper
0 commit comments