f7c867ba1efc690391f728fb198119d5f7ab6512e8afab458fa75e673a76cef976d03f4402023a46b179e7f38fc72e70766d38a7505f864134af81a614835c 993 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. 'use strict';
  2. var $TypeError = require('es-errors/type');
  3. var $setProto = require('set-proto');
  4. var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf');
  5. var isObject = require('../helpers/isObject');
  6. // https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof
  7. module.exports = function OrdinarySetPrototypeOf(O, V) {
  8. if (V !== null && !isObject(V)) {
  9. throw new $TypeError('Assertion failed: V must be Object or Null');
  10. }
  11. /*
  12. var extensible = IsExtensible(O);
  13. var current = OrdinaryGetPrototypeOf(O);
  14. if (SameValue(V, current)) {
  15. return true;
  16. }
  17. if (!extensible) {
  18. return false;
  19. }
  20. */
  21. try {
  22. $setProto(O, V);
  23. } catch (e) {
  24. return false;
  25. }
  26. return OrdinaryGetPrototypeOf(O) === V;
  27. /*
  28. var p = V;
  29. var done = false;
  30. while (!done) {
  31. if (p === null) {
  32. done = true;
  33. } else if (SameValue(p, O)) {
  34. return false;
  35. } else {
  36. if (wat) {
  37. done = true;
  38. } else {
  39. p = p.[[Prototype]];
  40. }
  41. }
  42. }
  43. O.[[Prototype]] = V;
  44. return true;
  45. */
  46. };