(function (mod){ if (typeof exports == "object" && typeof module == "object") return mod(exports); if (typeof define == "function" && define.amd) return define(["exports"] , mod); mod((self.tern || (self.tern = { } )).signal = { } ); } )(function (exports){ function on(type, f){ var handlers = this._handlers || (this._handlers = Object.create(null )); (handlers[type] || (handlers[type] = [] )).push(f); } function off(type, f){ var arr = this._handlers && this._handlers[type]; if (arr) for (var i = 0; i < _AN_Read_length("length", arr); ++i)if (arr[i] == f) { arr.splice(i, 1); break ; } } function signal(type, a1, a2, a3, a4){ var arr = this._handlers && this._handlers[type]; if (arr) for (var i = 0; i < _AN_Read_length("length", arr); ++i)arr[i].call(this, a1, a2, a3, a4); } exports.mixin = function (obj){ obj.on = on; obj.off = off; obj.signal = signal; return obj; } ; } );