| "use strict"; | 
| module.exports = | 
| function(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) { | 
| var util = require("./util"); | 
| var tryCatch = util.tryCatch; | 
|   | 
| Promise.method = function (fn) { | 
|     if (typeof fn !== "function") { | 
|         throw new Promise.TypeError("expecting a function but got " + util.classString(fn)); | 
|     } | 
|     return function () { | 
|         var ret = new Promise(INTERNAL); | 
|         ret._captureStackTrace(); | 
|         ret._pushContext(); | 
|         var value = tryCatch(fn).apply(this, arguments); | 
|         var promiseCreated = ret._popContext(); | 
|         debug.checkForgottenReturns( | 
|             value, promiseCreated, "Promise.method", ret); | 
|         ret._resolveFromSyncValue(value); | 
|         return ret; | 
|     }; | 
| }; | 
|   | 
| Promise.attempt = Promise["try"] = function (fn) { | 
|     if (typeof fn !== "function") { | 
|         return apiRejection("expecting a function but got " + util.classString(fn)); | 
|     } | 
|     var ret = new Promise(INTERNAL); | 
|     ret._captureStackTrace(); | 
|     ret._pushContext(); | 
|     var value; | 
|     if (arguments.length > 1) { | 
|         debug.deprecated("calling Promise.try with more than 1 argument"); | 
|         var arg = arguments[1]; | 
|         var ctx = arguments[2]; | 
|         value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg) | 
|                                   : tryCatch(fn).call(ctx, arg); | 
|     } else { | 
|         value = tryCatch(fn)(); | 
|     } | 
|     var promiseCreated = ret._popContext(); | 
|     debug.checkForgottenReturns( | 
|         value, promiseCreated, "Promise.try", ret); | 
|     ret._resolveFromSyncValue(value); | 
|     return ret; | 
| }; | 
|   | 
| Promise.prototype._resolveFromSyncValue = function (value) { | 
|     if (value === util.errorObj) { | 
|         this._rejectCallback(value.e, false); | 
|     } else { | 
|         this._resolveCallback(value, true); | 
|     } | 
| }; | 
| }; |