77 Documentation ,
88 EnumContext ,
99 FunctionContext ,
10+ GeneratedLambda ,
1011 PropContext ,
1112)
1213
@@ -67,6 +68,14 @@ 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 (r , fn , genlambda , call_qual , tmpl , f'.def_static("{ fn .py_name } "' , lam_params )
7079 elif trampoline_qualname :
7180 r .writeln (
7281 f".def(py::init_alias<{ ', ' .join (param .full_cpp_type for param in arg_params )} >()"
@@ -93,29 +102,14 @@ def _genmethod(
93102 if cls_qualname :
94103 lam_params = [f"{ cls_qualname } &self" ] + lam_params
95104
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 } *)&self)->"
104- elif cls_qualname :
105- call_qual = f"(({ cls_qualname } *)&self)->"
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 )
105+ if trampoline_qualname :
106+ call_qual = f"(({ trampoline_qualname } *)&self)->{ fn .cpp_name } "
107+ elif cls_qualname :
108+ call_qual = f"(({ cls_qualname } *)&self)->{ fn .cpp_name } "
109+ else :
110+ call_qual = f"{ fn .namespace } ::{ fn .cpp_name } "
117111
118- r . writeln ( "}" )
112+ _gen_method_lambda ( r , fn , genlambda , call_qual , tmpl , fn_def , lam_params )
119113
120114 else :
121115 if trampoline_qualname :
@@ -172,6 +166,33 @@ def _genmethod(
172166 r .writeln (f"#endif // { fn .ifndef } \n " )
173167
174168
169+ def _gen_method_lambda (
170+ r : RenderBuffer ,
171+ fn : FunctionContext ,
172+ genlambda : GeneratedLambda ,
173+ call_qual : str ,
174+ tmpl : str ,
175+ fn_def : str ,
176+ lam_params : T .List [str ],
177+ ):
178+ r .writeln (f"{ fn_def } , []({ ', ' .join (lam_params )} ) {{" )
179+
180+ with r .indent ():
181+ if genlambda .pre :
182+ r .writeln (genlambda .pre )
183+
184+ call_params = ", " .join (p .call_name for p in fn .all_params )
185+
186+ r .writeln (
187+ f"{ genlambda .call_start } { call_qual } { tmpl } ({ call_params } );"
188+ )
189+
190+ if genlambda .ret :
191+ r .writeln (genlambda .ret )
192+
193+ r .writeln ("}" )
194+
195+
175196def genmethod (
176197 r : RenderBuffer ,
177198 cls_qualname : T .Optional [str ],
0 commit comments