77    Documentation ,
88    EnumContext ,
99    FunctionContext ,
10+     GeneratedLambda ,
1011    PropContext ,
1112)
1213
@@ -67,6 +68,22 @@ def _genmethod(
6768    elif  fn .is_constructor :
6869        if  fn .cpp_code :
6970            r .writeln (f".def(py::init({ fn .cpp_code }  )
71+         elif  fn .genlambda :
72+             genlambda  =  fn .genlambda 
73+             arg_params  =  genlambda .in_params 
74+             lam_params  =  [param .decl  for  param  in  arg_params ]
75+             # TODO: trampoline 
76+             assert  cls_qualname  is  not None 
77+             call_qual  =  cls_qualname 
78+             _gen_method_lambda (
79+                 r ,
80+                 fn ,
81+                 genlambda ,
82+                 call_qual ,
83+                 tmpl ,
84+                 f'.def_static("{ fn .py_name }  ,
85+                 lam_params ,
86+             )
7087        elif  trampoline_qualname :
7188            r .writeln (
7289                f".def(py::init_alias<{ ', ' .join (param .full_cpp_type  for  param  in  arg_params )}  
@@ -93,29 +110,14 @@ def _genmethod(
93110            if  cls_qualname :
94111                lam_params  =  [f"{ cls_qualname }  ] +  lam_params 
95112
96-             r .writeln (f"{ fn_def } { ', ' .join (lam_params )}  )
97- 
98-             with  r .indent ():
99-                 if  genlambda .pre :
100-                     r .writeln (genlambda .pre )
101- 
102-                 if  trampoline_qualname :
103-                     call_qual  =  f"(({ trampoline_qualname }  
104-                 elif  cls_qualname :
105-                     call_qual  =  f"(({ cls_qualname }  
106-                 else :
107-                     call_qual  =  f"{ fn .namespace }  
108- 
109-                 call_params  =  ", " .join (p .call_name  for  p  in  fn .all_params )
110- 
111-                 r .writeln (
112-                     f"{ genlambda .call_start } { call_qual } { fn .cpp_name } { tmpl } { call_params }  
113-                 )
114- 
115-                 if  genlambda .ret :
116-                     r .writeln (genlambda .ret )
113+             if  trampoline_qualname :
114+                 call_qual  =  f"(({ trampoline_qualname } { fn .cpp_name }  
115+             elif  cls_qualname :
116+                 call_qual  =  f"(({ cls_qualname } { fn .cpp_name }  
117+             else :
118+                 call_qual  =  f"{ fn .namespace } { fn .cpp_name }  
117119
118-             r . writeln ( "}" )
120+             _gen_method_lambda ( r ,  fn ,  genlambda ,  call_qual ,  tmpl ,  fn_def ,  lam_params )
119121
120122        else :
121123            if  trampoline_qualname :
@@ -172,6 +174,31 @@ def _genmethod(
172174        r .writeln (f"#endif // { fn .ifndef } \n " )
173175
174176
177+ def  _gen_method_lambda (
178+     r : RenderBuffer ,
179+     fn : FunctionContext ,
180+     genlambda : GeneratedLambda ,
181+     call_qual : str ,
182+     tmpl : str ,
183+     fn_def : str ,
184+     lam_params : T .List [str ],
185+ ):
186+     r .writeln (f"{ fn_def } { ', ' .join (lam_params )}  )
187+ 
188+     with  r .indent ():
189+         if  genlambda .pre :
190+             r .writeln (genlambda .pre )
191+ 
192+         call_params  =  ", " .join (p .call_name  for  p  in  fn .all_params )
193+ 
194+         r .writeln (f"{ genlambda .call_start } { call_qual } { tmpl } { call_params }  )
195+ 
196+         if  genlambda .ret :
197+             r .writeln (genlambda .ret )
198+ 
199+     r .writeln ("}" )
200+ 
201+ 
175202def  genmethod (
176203    r : RenderBuffer ,
177204    cls_qualname : T .Optional [str ],
0 commit comments