Advertisement
Guest User

Untitled

a guest
Mar 31st, 2015
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. var cache = [];
  2. var undef = void 0;
  3. var p = process;
  4.  
  5. function compile(a, l) {
  6. var i, j, str, delim;
  7.  
  8. str = "var ";
  9. delim = "";
  10. for (i = 0; i < l; i++) {
  11. str += delim;
  12. str += "l" + i + "=l[" + i + "]";
  13. delim = ",";
  14. }
  15. for (i = 1; i < a; i++) {
  16. str += delim;
  17. str += "a" + i + "=a[" + i + "]";
  18. }
  19. str += ";"
  20.  
  21. for (i = 0; i < l; i++) {
  22. str += "l" + i + ".call(s";
  23. for (j = 1; j < a; j++) {
  24. str += ",a" + j;
  25. }
  26. str += ");";
  27. }
  28.  
  29. return new Function("a", "l", "s", str);
  30. }
  31.  
  32. function emitArray(args, listeners, self) {
  33. var a = args.length;
  34. var l = listeners.length;
  35. var c = cache[l];
  36. var fn;
  37.  
  38. if (!c) {
  39. c = cache[l] = [];
  40. }
  41. if (!(a in c)) {
  42. fn = c[a] = compile(a, l);
  43. } else {
  44. fn = c[a];
  45. }
  46.  
  47. fn(args, listeners, self);
  48. };
  49.  
  50. function precompile(a, l) {
  51. var i, j, c;
  52.  
  53. for (i = 1; i <= a; i++) {
  54. for (j = 1; j <= l; j++) {
  55. c = cache[j];
  56. if (!c) {
  57. c = cache[j] = [];
  58. }
  59. c[i] = compile(i, j);
  60. }
  61. }
  62. }
  63.  
  64. function emit(type, arg1, arg2, arg3) {
  65. var er, handler, len, args, i, events, thiz = this, u = thiz.domain
  66. && p !== thiz;
  67.  
  68. if (!thiz._events) {
  69. events = thiz._events = {};
  70. } else {
  71. events = thiz._events;
  72. }
  73.  
  74. // If there is no 'error' event listener then throw.
  75. if (type === 'error' && !events.error) {
  76. er = arg1;
  77. if (domain) {
  78. if (!er) {
  79. er = new Error('Uncaught, unspecified "error" event.');
  80. }
  81. er.domainEmitter = thiz;
  82. er.domain = domain;
  83. er.domainThrown = false;
  84. domain.emit('error', er);
  85. } else if (er instanceof Error) {
  86. throw er; // Unhandled 'error' event
  87. } else {
  88. throw Error('Uncaught, unspecified "error" event.');
  89. }
  90. return false;
  91. }
  92.  
  93. handler = events[type];
  94.  
  95. if (handler === undef) {
  96. return false;
  97. }
  98.  
  99. if (u) {
  100. thiz.domain.enter();
  101. }
  102.  
  103. if (typeof handler === 'function') {
  104. len = arguments.length;
  105. switch (len) {
  106. // fast cases
  107. case 1:
  108. handler.call(thiz);
  109. break;
  110. case 2:
  111. handler.call(thiz, arg1);
  112. break;
  113. case 3:
  114. handler.call(thiz, arg1, arg2);
  115. break;
  116. case 4:
  117. handler.call(thiz, arg1, arg2, arg3);
  118. break;
  119. // slower
  120. default:
  121. args = new Array(len - 1);
  122. for (i = 1; i < len; i++) {
  123. args[i - 1] = arguments[i];
  124. }
  125. handler.apply(thiz, args);
  126. }
  127. } else {
  128. if (Array.isArray(handler) && handler.length > 0) {
  129. emitArray(arguments, handler, thiz);
  130. }
  131. }
  132.  
  133. if (u) {
  134. thiz.domain.exit();
  135. }
  136.  
  137. return true;
  138. };
  139.  
  140. precompile(5, 5);
  141.  
  142. var EventEmitter = require("events");
  143. EventEmitter.prototype.emit = emit;
  144. module.exports = EventEmitter;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement