@@ -12,6 +12,12 @@ NAN_METHOD({{ cppClassName }}::{{ cppFunctionName }}) {
1212 baton->error_code = GIT_OK ;
1313 baton->error = NULL ;
1414
15+ {%each args|argsInfo as arg %}
16+ {%if arg.globalPayload %}
17+ {{ cppFunctionName }}_globalPayload* globalPayload = new {{ cppFunctionName }}_globalPayload;
18+ {%endif%}
19+ {%endeach%}
20+
1521 {%each args|argsInfo as arg %}
1622 {%if not arg.isReturn %}
1723 {%if arg.isSelf %}
@@ -23,10 +29,16 @@ NAN_METHOD({{ cppClassName }}::{{ cppFunctionName }}) {
2329 }
2430 else {
2531 baton->{{ arg.name }} = {{ cppFunctionName }}_{{ arg.name }}_cppCallback;
32+ {%if arg.payload .globalPayload %}
33+ globalPayload->{{ arg.name }} = new NanCallback (args[{{ arg.jsArg }}].As <Function>());
34+ {%else %}
2635 baton->{{ arg.payload .name }} = new NanCallback (args[{{ arg.jsArg }}].As <Function>());
36+ {%endif%}
2737 }
2838 {%elsif arg.payloadFor %}
29- {%-- payloads are ignored --%}
39+ {%if arg.globalPayload %}
40+ baton->{{ arg.name }} = globalPayload;
41+ {%endif%}
3042 {%elsif arg.name %}
3143 {%partial convertFromV8 arg%}
3244 {%if not arg.payloadFor %}
@@ -134,7 +146,16 @@ void {{ cppClassName }}::{{ cppFunctionName }}Worker::HandleOKCallback() {
134146 free ((void *)baton->{{ arg.name }});
135147 }
136148 {%elsif arg.isCallbackFunction %}
149+ {%if not arg.payload .globalPayload %}
137150 delete baton->{{ arg.payload .name }};
151+ {%endif%}
152+ {%elsif arg.globalPayload %}
153+ {%each args|argsInfo as cbArg %}
154+ {%if cbArg.isCallbackFunction %}
155+ delete (({{ cppFunctionName}}_globalPayload*)baton->{{ arg.name }})->{{ cbArg.name }};
156+ {%endif%}
157+ {%endeach%}
158+ free ((void *)baton->{{ arg.name }});
138159 {%else %}
139160 free ((void *)baton->{{ arg.name }});
140161 {%endif%}
@@ -159,7 +180,16 @@ void {{ cppClassName }}::{{ cppFunctionName }}Worker::HandleOKCallback() {
159180 free ((void *)baton->{{ arg.name }});
160181 }
161182 {%elsif arg.isCallbackFunction %}
183+ {%if not arg.payload .globalPayload %}
162184 delete (NanCallback *)baton->{{ arg.payload .name }};
185+ {%endif%}
186+ {%elsif arg.globalPayload %}
187+ {%each args|argsInfo as cbArg %}
188+ {%if cbArg.isCallbackFunction %}
189+ delete (({{ cppFunctionName}}_globalPayload*)baton->{{ arg.name }})->{{ cbArg.name }};
190+ {%endif%}
191+ {%endeach%}
192+ free ((void *)baton->{{ arg.name }});
163193 {%endif%}
164194 {%endeach%}
165195
0 commit comments