twitst4tz

twitter statistics web application
Log | Files | Refs | README | LICENSE

context.js (2382B)


      1 "use strict";
      2 module.exports = function(Promise) {
      3 var longStackTraces = false;
      4 var contextStack = [];
      5 
      6 Promise.prototype._promiseCreated = function() {};
      7 Promise.prototype._pushContext = function() {};
      8 Promise.prototype._popContext = function() {return null;};
      9 Promise._peekContext = Promise.prototype._peekContext = function() {};
     10 
     11 function Context() {
     12     this._trace = new Context.CapturedTrace(peekContext());
     13 }
     14 Context.prototype._pushContext = function () {
     15     if (this._trace !== undefined) {
     16         this._trace._promiseCreated = null;
     17         contextStack.push(this._trace);
     18     }
     19 };
     20 
     21 Context.prototype._popContext = function () {
     22     if (this._trace !== undefined) {
     23         var trace = contextStack.pop();
     24         var ret = trace._promiseCreated;
     25         trace._promiseCreated = null;
     26         return ret;
     27     }
     28     return null;
     29 };
     30 
     31 function createContext() {
     32     if (longStackTraces) return new Context();
     33 }
     34 
     35 function peekContext() {
     36     var lastIndex = contextStack.length - 1;
     37     if (lastIndex >= 0) {
     38         return contextStack[lastIndex];
     39     }
     40     return undefined;
     41 }
     42 Context.CapturedTrace = null;
     43 Context.create = createContext;
     44 Context.deactivateLongStackTraces = function() {};
     45 Context.activateLongStackTraces = function() {
     46     var Promise_pushContext = Promise.prototype._pushContext;
     47     var Promise_popContext = Promise.prototype._popContext;
     48     var Promise_PeekContext = Promise._peekContext;
     49     var Promise_peekContext = Promise.prototype._peekContext;
     50     var Promise_promiseCreated = Promise.prototype._promiseCreated;
     51     Context.deactivateLongStackTraces = function() {
     52         Promise.prototype._pushContext = Promise_pushContext;
     53         Promise.prototype._popContext = Promise_popContext;
     54         Promise._peekContext = Promise_PeekContext;
     55         Promise.prototype._peekContext = Promise_peekContext;
     56         Promise.prototype._promiseCreated = Promise_promiseCreated;
     57         longStackTraces = false;
     58     };
     59     longStackTraces = true;
     60     Promise.prototype._pushContext = Context.prototype._pushContext;
     61     Promise.prototype._popContext = Context.prototype._popContext;
     62     Promise._peekContext = Promise.prototype._peekContext = peekContext;
     63     Promise.prototype._promiseCreated = function() {
     64         var ctx = this._peekContext();
     65         if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this;
     66     };
     67 };
     68 return Context;
     69 };