| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | "use strict";module.exports = function(Promise, INTERNAL) {var util = require("./util");var errorObj = util.errorObj;var isObject = util.isObject;function tryConvertToPromise(obj, context) {    if (isObject(obj)) {        if (obj instanceof Promise) return obj;        var then = getThen(obj);        if (then === errorObj) {            if (context) context._pushContext();            var ret = Promise.reject(then.e);            if (context) context._popContext();            return ret;        } else if (typeof then === "function") {            if (isAnyBluebirdPromise(obj)) {                var ret = new Promise(INTERNAL);                obj._then(                    ret._fulfill,                    ret._reject,                    undefined,                    ret,                    null                );                return ret;            }            return doThenable(obj, then, context);        }    }    return obj;}function doGetThen(obj) {    return obj.then;}function getThen(obj) {    try {        return doGetThen(obj);    } catch (e) {        errorObj.e = e;        return errorObj;    }}var hasProp = {}.hasOwnProperty;function isAnyBluebirdPromise(obj) {    try {        return hasProp.call(obj, "_promise0");    } catch (e) {        return false;    }}function doThenable(x, then, context) {    var promise = new Promise(INTERNAL);    var ret = promise;    if (context) context._pushContext();    promise._captureStackTrace();    if (context) context._popContext();    var synchronous = true;    var result = util.tryCatch(then).call(x, resolve, reject);    synchronous = false;    if (promise && result === errorObj) {        promise._rejectCallback(result.e, true, true);        promise = null;    }    function resolve(value) {        if (!promise) return;        promise._resolveCallback(value);        promise = null;    }    function reject(reason) {        if (!promise) return;        promise._rejectCallback(reason, synchronous, true);        promise = null;    }    return ret;}return tryConvertToPromise;};
 |