| var $ = require('../internals/export'); |
| var anObject = require('../internals/an-object'); |
| var isObject = require('../internals/is-object'); |
| var has = require('../internals/has'); |
| var definePropertyModule = require('../internals/object-define-property'); |
| var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor'); |
| var getPrototypeOf = require('../internals/object-get-prototype-of'); |
| var createPropertyDescriptor = require('../internals/create-property-descriptor'); |
| |
| // `Reflect.set` method |
| // https://tc39.github.io/ecma262/#sec-reflect.set |
| function set(target, propertyKey, V /* , receiver */) { |
| var receiver = arguments.length < 4 ? target : arguments[3]; |
| var ownDescriptor = getOwnPropertyDescriptorModule.f(anObject(target), propertyKey); |
| var existingDescriptor, prototype; |
| if (!ownDescriptor) { |
| if (isObject(prototype = getPrototypeOf(target))) { |
| return set(prototype, propertyKey, V, receiver); |
| } |
| ownDescriptor = createPropertyDescriptor(0); |
| } |
| if (has(ownDescriptor, 'value')) { |
| if (ownDescriptor.writable === false || !isObject(receiver)) return false; |
| if (existingDescriptor = getOwnPropertyDescriptorModule.f(receiver, propertyKey)) { |
| if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false; |
| existingDescriptor.value = V; |
| definePropertyModule.f(receiver, propertyKey, existingDescriptor); |
| } else definePropertyModule.f(receiver, propertyKey, createPropertyDescriptor(0, V)); |
| return true; |
| } |
| return ownDescriptor.set === undefined ? false : (ownDescriptor.set.call(receiver, V), true); |
| } |
| |
| $({ target: 'Reflect', stat: true }, { |
| set: set |
| }); |