| "use strict"; |
| module.exports = function(Promise, CapturedTrace, isDebugging) { |
| var contextStack = []; |
| function Context() { |
| this._trace = new CapturedTrace(peekContext()); |
| } |
| Context.prototype._pushContext = function () { |
| if (!isDebugging()) return; |
| if (this._trace !== undefined) { |
| contextStack.push(this._trace); |
| } |
| }; |
| |
| Context.prototype._popContext = function () { |
| if (!isDebugging()) return; |
| if (this._trace !== undefined) { |
| contextStack.pop(); |
| } |
| }; |
| |
| function createContext() { |
| if (isDebugging()) return new Context(); |
| } |
| |
| function peekContext() { |
| var lastIndex = contextStack.length - 1; |
| if (lastIndex >= 0) { |
| return contextStack[lastIndex]; |
| } |
| return undefined; |
| } |
| |
| Promise.prototype._peekContext = peekContext; |
| Promise.prototype._pushContext = Context.prototype._pushContext; |
| Promise.prototype._popContext = Context.prototype._popContext; |
| |
| return createContext; |
| }; |