| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 | "use strict";var cr = Object.create;if (cr) {    var callerCache = cr(null);    var getterCache = cr(null);    callerCache[" size"] = getterCache[" size"] = 0;}module.exports = function(Promise) {var util = require("./util");var canEvaluate = util.canEvaluate;var isIdentifier = util.isIdentifier;var getMethodCaller;var getGetter;if (!false) {var makeMethodCaller = function (methodName) {    return new Function("ensureMethod", "                                    \n\        return function(obj) {                                               \n\            'use strict'                                                     \n\            var len = this.length;                                           \n\            ensureMethod(obj, 'methodName');                                 \n\            switch(len) {                                                    \n\                case 1: return obj.methodName(this[0]);                      \n\                case 2: return obj.methodName(this[0], this[1]);             \n\                case 3: return obj.methodName(this[0], this[1], this[2]);    \n\                case 0: return obj.methodName();                             \n\                default:                                                     \n\                    return obj.methodName.apply(obj, this);                  \n\            }                                                                \n\        };                                                                   \n\        ".replace(/methodName/g, methodName))(ensureMethod);};var makeGetter = function (propertyName) {    return new Function("obj", "                                             \n\        'use strict';                                                        \n\        return obj.propertyName;                                             \n\        ".replace("propertyName", propertyName));};var getCompiled = function(name, compiler, cache) {    var ret = cache[name];    if (typeof ret !== "function") {        if (!isIdentifier(name)) {            return null;        }        ret = compiler(name);        cache[name] = ret;        cache[" size"]++;        if (cache[" size"] > 512) {            var keys = Object.keys(cache);            for (var i = 0; i < 256; ++i) delete cache[keys[i]];            cache[" size"] = keys.length - 256;        }    }    return ret;};getMethodCaller = function(name) {    return getCompiled(name, makeMethodCaller, callerCache);};getGetter = function(name) {    return getCompiled(name, makeGetter, getterCache);};}function ensureMethod(obj, methodName) {    var fn;    if (obj != null) fn = obj[methodName];    if (typeof fn !== "function") {        var message = "Object " + util.classString(obj) + " has no method '" +            util.toString(methodName) + "'";        throw new Promise.TypeError(message);    }    return fn;}function caller(obj) {    var methodName = this.pop();    var fn = ensureMethod(obj, methodName);    return fn.apply(obj, this);}Promise.prototype.call = function (methodName) {    var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];};    if (!false) {        if (canEvaluate) {            var maybeCaller = getMethodCaller(methodName);            if (maybeCaller !== null) {                return this._then(                    maybeCaller, undefined, undefined, args, undefined);            }        }    }    args.push(methodName);    return this._then(caller, undefined, undefined, args, undefined);};function namedGetter(obj) {    return obj[this];}function indexedGetter(obj) {    var index = +this;    if (index < 0) index = Math.max(0, index + obj.length);    return obj[index];}Promise.prototype.get = function (propertyName) {    var isIndex = (typeof propertyName === "number");    var getter;    if (!isIndex) {        if (canEvaluate) {            var maybeGetter = getGetter(propertyName);            getter = maybeGetter !== null ? maybeGetter : namedGetter;        } else {            getter = namedGetter;        }    } else {        getter = indexedGetter;    }    return this._then(getter, undefined, undefined, propertyName, undefined);};};
 |