123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 'use strict';
- var $TypeError = require('es-errors/type');
- var $setProto = require('set-proto');
- var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf');
- var isObject = require('../helpers/isObject');
- // https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof
- module.exports = function OrdinarySetPrototypeOf(O, V) {
- if (V !== null && !isObject(V)) {
- 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;
- */
- };
|