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 } &self" ] + 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 } *)&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 )
113+ if trampoline_qualname :
114+ call_qual = f"(({ trampoline_qualname } *)&self)->{ fn .cpp_name } "
115+ elif cls_qualname :
116+ call_qual = f"(({ cls_qualname } *)&self)->{ 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