|
179 | 179 | return; |
180 | 180 | } |
181 | 181 |
|
182 | | - {% each field.args|argsInfo as arg %} |
183 | | - {% if arg.name == "payload" %} |
184 | | - {%-- Do nothing --%} |
185 | | - {% elsif arg.isJsArg %} |
186 | | - {% if arg.cType == "const char *" %} |
187 | | - if (baton->{{ arg.name }} == NULL) { |
188 | | - baton->{{ arg.name }} = ""; |
189 | | - } |
190 | | - {% elsif arg.cppClassName == "String" %} |
191 | | - v8::Local<v8::Value> src; |
192 | | - if (baton->{{ arg.name }} == NULL) { |
193 | | - src = Nan::Null(); |
194 | | - } |
195 | | - else { |
196 | | - src = Nan::New<String>(*baton->{{ arg.name }}).ToLocalChecked(); |
197 | | - } |
198 | | - {% endif %} |
199 | | - {% endif %} |
200 | | - {% endeach %} |
201 | | - |
202 | | - {% if field.isSelfReferential %} |
203 | | - {% if field.args|jsArgsCount|subtract 2| setUnsigned == 0 %} |
204 | | - v8::Local<Value> *argv = NULL; |
205 | | - {% else %} |
206 | | - v8::Local<Value> argv[{{ field.args|jsArgsCount|subtract 2| setUnsigned }}] = { |
207 | | - {% endif %} |
| 182 | + {% if field.args|callbackArgsCount == 0 %} |
| 183 | + v8::Local<Value> *argv = NULL; |
208 | 184 | {% else %} |
209 | | - v8::Local<Value> argv[{{ field.args|jsArgsCount }}] = { |
210 | | - {% endif %} |
211 | | - {% each field.args|argsInfo as arg %} |
212 | | - {% if field.isSelfReferential %} |
213 | | - {% if not arg.firstArg %} |
214 | | - {% if field.args|jsArgsCount|subtract 1|or 0 %} |
215 | | - {% if arg.cppClassName == "String" %} |
216 | | - {%-- src is always the last arg --%} |
217 | | - src |
218 | | - {% elsif arg.isJsArg %} |
219 | | - {% if arg.isEnum %} |
220 | | - Nan::New((int)baton->{{ arg.name }}), |
221 | | - {% elsif arg.isLibgitType %} |
222 | | - {{ arg.cppClassName }}::New(baton->{{ arg.name }}, false), |
223 | | - {% elsif arg.cType == "size_t" %} |
224 | | - Nan::New((unsigned int)baton->{{ arg.name }}), |
225 | | - {% elsif arg.name == "payload" %} |
226 | | - {%-- skip, filters should not have a payload --%} |
227 | | - {% else %} |
228 | | - Nan::New(baton->{{ arg.name }}), |
229 | | - {% endif %} |
230 | | - {% endif %} |
231 | | - {% endif %} |
232 | | - {% endif %} |
233 | | - {% else %} |
234 | | - {% if arg.name == "payload" %} |
235 | | - {%-- payload is always the last arg --%} |
236 | | - Nan::New(instance->{{ fields|payloadFor field.name }}) |
237 | | - {% elsif arg.isJsArg %} |
238 | | - {% if arg.isEnum %} |
239 | | - Nan::New((int)baton->{{ arg.name }}), |
240 | | - {% elsif arg.isLibgitType %} |
241 | | - {{ arg.cppClassName }}::New(baton->{{ arg.name }}, false), |
242 | | - {% elsif arg.cType == "size_t" %} |
243 | | - // HACK: NAN should really have an overload for Nan::New to support size_t |
244 | | - Nan::New((unsigned int)baton->{{ arg.name }}), |
245 | | - {% elsif arg.cppClassName == "String" %} |
246 | | - Nan::New(baton->{{ arg.name }}).ToLocalChecked(), |
247 | | - {% else %} |
248 | | - Nan::New(baton->{{ arg.name }}), |
249 | | - {% endif %} |
| 185 | + v8::Local<Value> argv[{{ field.args|callbackArgsCount }}] = { |
| 186 | + {% each field.args|callbackArgsInfo as arg %} |
| 187 | + {% if not arg.firstArg %},{% endif %} |
| 188 | + {% if arg.isEnum %} |
| 189 | + Nan::New((int)baton->{{ arg.name }}) |
| 190 | + {% elsif arg.isLibgitType %} |
| 191 | + {{ arg.cppClassName }}::New(baton->{{ arg.name }}, false) |
| 192 | + {% elsif arg.cType == "size_t" %} |
| 193 | + // HACK: NAN should really have an overload for Nan::New to support size_t |
| 194 | + Nan::New((unsigned int)baton->{{ arg.name }}) |
| 195 | + {% elsif arg.cppClassName == "String" %} |
| 196 | + baton->{{ arg.name }} == NULL |
| 197 | + ? Nan::EmptyString() |
| 198 | + : Nan::New({%if arg.cType | isDoublePointer %}*{% endif %}baton->{{ arg.name }}).ToLocalChecked() |
| 199 | + {% else %} |
| 200 | + Nan::New(baton->{{ arg.name }}) |
250 | 201 | {% endif %} |
251 | | - {% endif %} |
252 | | - {% endeach %} |
253 | | - {% if not field.isSelfReferential %} |
254 | | - }; |
255 | | - {% elsif field.args|jsArgsCount|subtract 2| setUnsigned > 0 %} |
| 202 | + {% endeach %} |
256 | 203 | }; |
257 | 204 | {% endif %} |
258 | 205 |
|
259 | 206 | Nan::TryCatch tryCatch; |
260 | 207 |
|
261 | 208 | // TODO This should take an async_resource, but we will need to figure out how to pipe the correct context into this |
262 | | - {% if field.isSelfReferential %} |
263 | | - Nan::MaybeLocal<v8::Value> maybeResult = Nan::Call(*(instance->{{ field.name }}.GetCallback()), {{ field.args|jsArgsCount|subtract 2| setUnsigned }}, argv); |
264 | | - {% else %} |
265 | | - Nan::MaybeLocal<v8::Value> maybeResult = Nan::Call(*(instance->{{ field.name }}.GetCallback()), {{ field.args|jsArgsCount }}, argv); |
266 | | - {% endif %} |
267 | | - |
| 209 | + Nan::MaybeLocal<v8::Value> maybeResult = Nan::Call(*(instance->{{ field.name }}.GetCallback()), {{ field.args|callbackArgsCount }}, argv); |
268 | 210 | v8::Local<v8::Value> result; |
269 | 211 | if (!maybeResult.IsEmpty()) { |
270 | 212 | result = maybeResult.ToLocalChecked(); |
|
0 commit comments