1 var DESCRIPTORS = require('../internals/descriptors');
2 var fails = require('../internals/fails');
3 var has = require('../internals/has');
5 var defineProperty = Object.defineProperty;
8 var thrower = function (it) { throw it; };
10 module.exports = function (METHOD_NAME, options) {
11 if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];
12 if (!options) options = {};
13 var method = [][METHOD_NAME];
14 var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;
15 var argument0 = has(options, 0) ? options[0] : thrower;
16 var argument1 = has(options, 1) ? options[1] : undefined;
18 return cache[METHOD_NAME] = !!method && !fails(function () {
19 if (ACCESSORS && !DESCRIPTORS) return true;
20 var O = { length: -1 };
22 if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });
25 method.call(O, argument0, argument1);