|
328 | 328 | // Run callbacks that have no domain. |
329 | 329 | // Using domains will cause this to be overridden. |
330 | 330 | function _tickCallback() { |
331 | | - var callback, threw, tock; |
| 331 | + var callback, args, threw, tock; |
332 | 332 |
|
333 | 333 | do { |
334 | 334 | while (tickInfo[kIndex] < tickInfo[kLength]) { |
335 | 335 | tock = nextTickQueue[tickInfo[kIndex]++]; |
336 | 336 | callback = tock.callback; |
337 | | - threw = true; |
338 | | - try { |
339 | | - if (tock.args === undefined) |
340 | | - callback(); |
341 | | - else |
342 | | - callback.apply(null, tock.args); |
343 | | - threw = false; |
344 | | - } finally { |
345 | | - if (threw) |
346 | | - tickDone(); |
| 337 | + args = tock.args; |
| 338 | + if (args === undefined) |
| 339 | + threw = doNTCallback0(callback); |
| 340 | + else { |
| 341 | + switch (args.length) { |
| 342 | + case 1: |
| 343 | + threw = doNTCallback1(callback, args[0]); |
| 344 | + break; |
| 345 | + case 2: |
| 346 | + threw = doNTCallback2(callback, args[0], args[1]); |
| 347 | + break; |
| 348 | + case 3: |
| 349 | + threw = doNTCallback3(callback, args[0], args[1], args[2]); |
| 350 | + break; |
| 351 | + default: |
| 352 | + threw = doNTCallbackMany(callback, args); |
| 353 | + } |
347 | 354 | } |
| 355 | + if (threw) |
| 356 | + tickDone(); |
348 | 357 | if (1e4 < tickInfo[kIndex]) |
349 | 358 | tickDone(); |
350 | 359 | } |
|
355 | 364 | } |
356 | 365 |
|
357 | 366 | function _tickDomainCallback() { |
358 | | - var callback, domain, threw, tock; |
| 367 | + var callback, domain, args, threw, tock; |
359 | 368 |
|
360 | 369 | do { |
361 | 370 | while (tickInfo[kIndex] < tickInfo[kLength]) { |
362 | 371 | tock = nextTickQueue[tickInfo[kIndex]++]; |
363 | 372 | callback = tock.callback; |
364 | 373 | domain = tock.domain; |
| 374 | + args = tock.args; |
365 | 375 | if (domain) |
366 | 376 | domain.enter(); |
367 | | - threw = true; |
368 | | - try { |
369 | | - if (tock.args === undefined) |
370 | | - callback(); |
371 | | - else |
372 | | - callback.apply(null, tock.args); |
373 | | - threw = false; |
374 | | - } finally { |
375 | | - if (threw) |
376 | | - tickDone(); |
| 377 | + if (args === undefined) |
| 378 | + threw = doNTCallback0(callback); |
| 379 | + else { |
| 380 | + switch (args.length) { |
| 381 | + case 1: |
| 382 | + threw = doNTCallback1(callback, args[0]); |
| 383 | + break; |
| 384 | + case 2: |
| 385 | + threw = doNTCallback2(callback, args[0], args[1]); |
| 386 | + break; |
| 387 | + case 3: |
| 388 | + threw = doNTCallback3(callback, args[0], args[1], args[2]); |
| 389 | + break; |
| 390 | + default: |
| 391 | + threw = doNTCallbackMany(callback, args); |
| 392 | + } |
377 | 393 | } |
| 394 | + if (threw) |
| 395 | + tickDone(); |
378 | 396 | if (1e4 < tickInfo[kIndex]) |
379 | 397 | tickDone(); |
380 | 398 | if (domain) |
|
386 | 404 | } while (tickInfo[kLength] !== 0); |
387 | 405 | } |
388 | 406 |
|
| 407 | + function doNTCallback0(callback) { |
| 408 | + var threw = true; |
| 409 | + try { |
| 410 | + callback(); |
| 411 | + threw = false; |
| 412 | + } finally {} |
| 413 | + return threw; |
| 414 | + } |
| 415 | + |
| 416 | + function doNTCallback1(callback, arg1) { |
| 417 | + var threw = true; |
| 418 | + try { |
| 419 | + callback(arg1); |
| 420 | + threw = false; |
| 421 | + } finally {} |
| 422 | + return threw; |
| 423 | + } |
| 424 | + |
| 425 | + function doNTCallback2(callback, arg1, arg2) { |
| 426 | + var threw = true; |
| 427 | + try { |
| 428 | + callback(arg1, arg2); |
| 429 | + threw = false; |
| 430 | + } finally {} |
| 431 | + return threw; |
| 432 | + } |
| 433 | + |
| 434 | + function doNTCallback3(callback, arg1, arg2, arg3) { |
| 435 | + var threw = true; |
| 436 | + try { |
| 437 | + callback(arg1, arg2, arg3); |
| 438 | + threw = false; |
| 439 | + } finally {} |
| 440 | + return threw; |
| 441 | + } |
| 442 | + |
| 443 | + function doNTCallbackMany(callback, args) { |
| 444 | + var threw = true; |
| 445 | + try { |
| 446 | + callback.apply(null, args); |
| 447 | + threw = false; |
| 448 | + } finally {} |
| 449 | + return threw; |
| 450 | + } |
| 451 | + |
389 | 452 | function TickObject(c, args) { |
390 | 453 | this.callback = c; |
391 | 454 | this.domain = process.domain || null; |
|
0 commit comments