|
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, 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 | + doNTCallback0(callback); |
| 340 | + else { |
| 341 | + switch (args.length) { |
| 342 | + case 1: |
| 343 | + doNTCallback1(callback, args[0]); |
| 344 | + break; |
| 345 | + case 2: |
| 346 | + doNTCallback2(callback, args[0], args[1]); |
| 347 | + break; |
| 348 | + case 3: |
| 349 | + doNTCallback3(callback, args[0], args[1], args[2]); |
| 350 | + break; |
| 351 | + default: |
| 352 | + doNTCallbackMany(callback, args); |
| 353 | + } |
347 | 354 | }
|
348 | 355 | if (1e4 < tickInfo[kIndex])
|
349 | 356 | tickDone();
|
|
355 | 362 | }
|
356 | 363 |
|
357 | 364 | function _tickDomainCallback() {
|
358 |
| - var callback, domain, threw, tock; |
| 365 | + var callback, domain, args, tock; |
359 | 366 |
|
360 | 367 | do {
|
361 | 368 | while (tickInfo[kIndex] < tickInfo[kLength]) {
|
362 | 369 | tock = nextTickQueue[tickInfo[kIndex]++];
|
363 | 370 | callback = tock.callback;
|
364 | 371 | domain = tock.domain;
|
| 372 | + args = tock.args; |
365 | 373 | if (domain)
|
366 | 374 | 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(); |
| 375 | + if (args === undefined) |
| 376 | + doNTCallback0(callback); |
| 377 | + else { |
| 378 | + switch (args.length) { |
| 379 | + case 1: |
| 380 | + doNTCallback1(callback, args[0]); |
| 381 | + break; |
| 382 | + case 2: |
| 383 | + doNTCallback2(callback, args[0], args[1]); |
| 384 | + break; |
| 385 | + case 3: |
| 386 | + doNTCallback3(callback, args[0], args[1], args[2]); |
| 387 | + break; |
| 388 | + default: |
| 389 | + doNTCallbackMany(callback, args); |
| 390 | + } |
377 | 391 | }
|
378 | 392 | if (1e4 < tickInfo[kIndex])
|
379 | 393 | tickDone();
|
|
386 | 400 | } while (tickInfo[kLength] !== 0);
|
387 | 401 | }
|
388 | 402 |
|
| 403 | + function doNTCallback0(callback) { |
| 404 | + var threw = true; |
| 405 | + try { |
| 406 | + callback(); |
| 407 | + threw = false; |
| 408 | + } finally { |
| 409 | + if (threw) |
| 410 | + tickDone(); |
| 411 | + } |
| 412 | + } |
| 413 | + |
| 414 | + function doNTCallback1(callback, arg1) { |
| 415 | + var threw = true; |
| 416 | + try { |
| 417 | + callback(arg1); |
| 418 | + threw = false; |
| 419 | + } finally { |
| 420 | + if (threw) |
| 421 | + tickDone(); |
| 422 | + } |
| 423 | + } |
| 424 | + |
| 425 | + function doNTCallback2(callback, arg1, arg2) { |
| 426 | + var threw = true; |
| 427 | + try { |
| 428 | + callback(arg1, arg2); |
| 429 | + threw = false; |
| 430 | + } finally { |
| 431 | + if (threw) |
| 432 | + tickDone(); |
| 433 | + } |
| 434 | + } |
| 435 | + |
| 436 | + function doNTCallback3(callback, arg1, arg2, arg3) { |
| 437 | + var threw = true; |
| 438 | + try { |
| 439 | + callback(arg1, arg2, arg3); |
| 440 | + threw = false; |
| 441 | + } finally { |
| 442 | + if (threw) |
| 443 | + tickDone(); |
| 444 | + } |
| 445 | + } |
| 446 | + |
| 447 | + function doNTCallbackMany(callback, args) { |
| 448 | + var threw = true; |
| 449 | + try { |
| 450 | + callback.apply(null, args); |
| 451 | + threw = false; |
| 452 | + } finally { |
| 453 | + if (threw) |
| 454 | + tickDone(); |
| 455 | + } |
| 456 | + } |
| 457 | + |
389 | 458 | function TickObject(c, args) {
|
390 | 459 | this.callback = c;
|
391 | 460 | this.domain = process.domain || null;
|
|
0 commit comments