Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var cache = [];
- var undef = void 0;
- var p = process;
- function compile(a, l) {
- var i, j, str, delim;
- str = "var ";
- delim = "";
- for (i = 0; i < l; i++) {
- str += delim;
- str += "l" + i + "=l[" + i + "]";
- delim = ",";
- }
- for (i = 1; i < a; i++) {
- str += delim;
- str += "a" + i + "=a[" + i + "]";
- }
- str += ";"
- for (i = 0; i < l; i++) {
- str += "l" + i + ".call(s";
- for (j = 1; j < a; j++) {
- str += ",a" + j;
- }
- str += ");";
- }
- return new Function("a", "l", "s", str);
- }
- function emitArray(args, listeners, self) {
- var a = args.length;
- var l = listeners.length;
- var c = cache[l];
- var fn;
- if (!c) {
- c = cache[l] = [];
- }
- if (!(a in c)) {
- fn = c[a] = compile(a, l);
- } else {
- fn = c[a];
- }
- fn(args, listeners, self);
- };
- function precompile(a, l) {
- var i, j, c;
- for (i = 1; i <= a; i++) {
- for (j = 1; j <= l; j++) {
- c = cache[j];
- if (!c) {
- c = cache[j] = [];
- }
- c[i] = compile(i, j);
- }
- }
- }
- function emit(type, arg1, arg2, arg3) {
- var er, handler, len, args, i, events, thiz = this, u = thiz.domain
- && p !== thiz;
- if (!thiz._events) {
- events = thiz._events = {};
- } else {
- events = thiz._events;
- }
- // If there is no 'error' event listener then throw.
- if (type === 'error' && !events.error) {
- er = arg1;
- if (domain) {
- if (!er) {
- er = new Error('Uncaught, unspecified "error" event.');
- }
- er.domainEmitter = thiz;
- er.domain = domain;
- er.domainThrown = false;
- domain.emit('error', er);
- } else if (er instanceof Error) {
- throw er; // Unhandled 'error' event
- } else {
- throw Error('Uncaught, unspecified "error" event.');
- }
- return false;
- }
- handler = events[type];
- if (handler === undef) {
- return false;
- }
- if (u) {
- thiz.domain.enter();
- }
- if (typeof handler === 'function') {
- len = arguments.length;
- switch (len) {
- // fast cases
- case 1:
- handler.call(thiz);
- break;
- case 2:
- handler.call(thiz, arg1);
- break;
- case 3:
- handler.call(thiz, arg1, arg2);
- break;
- case 4:
- handler.call(thiz, arg1, arg2, arg3);
- break;
- // slower
- default:
- args = new Array(len - 1);
- for (i = 1; i < len; i++) {
- args[i - 1] = arguments[i];
- }
- handler.apply(thiz, args);
- }
- } else {
- if (Array.isArray(handler) && handler.length > 0) {
- emitArray(arguments, handler, thiz);
- }
- }
- if (u) {
- thiz.domain.exit();
- }
- return true;
- };
- precompile(5, 5);
- var EventEmitter = require("events");
- EventEmitter.prototype.emit = emit;
- module.exports = EventEmitter;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement