1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- 'use strict';
-
- var GetIntrinsic = require('../GetIntrinsic');
-
- var $TypeError = GetIntrinsic('%TypeError%');
-
- var $setProto = require('../helpers/setProto');
-
- var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf');
- var Type = require('./Type');
-
- // https://ecma-international.org/ecma-262/7.0/#sec-ordinarysetprototypeof
-
- module.exports = function OrdinarySetPrototypeOf(O, V) {
- if (Type(V) !== 'Object' && Type(V) !== 'Null') {
- throw new $TypeError('Assertion failed: V must be Object or Null');
- }
- /*
- var extensible = IsExtensible(O);
- var current = OrdinaryGetPrototypeOf(O);
- if (SameValue(V, current)) {
- return true;
- }
- if (!extensible) {
- return false;
- }
- */
- try {
- $setProto(O, V);
- } catch (e) {
- return false;
- }
- return OrdinaryGetPrototypeOf(O) === V;
- /*
- var p = V;
- var done = false;
- while (!done) {
- if (p === null) {
- done = true;
- } else if (SameValue(p, O)) {
- return false;
- } else {
- if (wat) {
- done = true;
- } else {
- p = p.[[Prototype]];
- }
- }
- }
- O.[[Prototype]] = V;
- return true;
- */
- };
|