|
|
- 'use strict';
-
- var ES2015 = require('./es2015');
- var GetIntrinsic = require('./GetIntrinsic');
- var assign = require('./helpers/assign');
- var $setProto = require('./helpers/setProto');
-
- var callBound = require('./helpers/callBound');
- var getIteratorMethod = require('./helpers/getIteratorMethod');
-
- var $TypeError = GetIntrinsic('%TypeError%');
- var $arrayPush = callBound('Array.prototype.push');
- var $getProto = require('./helpers/getProto');
-
- var ES2016 = assign(assign({}, ES2015), {
- // https://www.ecma-international.org/ecma-262/7.0/#sec-samevaluenonnumber
- SameValueNonNumber: function SameValueNonNumber(x, y) {
- if (typeof x === 'number' || typeof x !== typeof y) {
- throw new TypeError('SameValueNonNumber requires two non-number values of the same type.');
- }
- return this.SameValue(x, y);
- },
-
- // https://www.ecma-international.org/ecma-262/7.0/#sec-iterabletoarraylike
- IterableToArrayLike: function IterableToArrayLike(items) {
- var usingIterator = getIteratorMethod(this, items);
- if (typeof usingIterator !== 'undefined') {
- var iterator = this.GetIterator(items, usingIterator);
- var values = [];
- var next = true;
- while (next) {
- next = this.IteratorStep(iterator);
- if (next) {
- var nextValue = this.IteratorValue(next);
- $arrayPush(values, nextValue);
- }
- }
- return values;
- }
-
- return this.ToObject(items);
- },
-
- // https://ecma-international.org/ecma-262/7.0/#sec-ordinarygetprototypeof
- OrdinaryGetPrototypeOf: function (O) {
- if (this.Type(O) !== 'Object') {
- throw new $TypeError('Assertion failed: O must be an Object');
- }
- if (!$getProto) {
- throw new $TypeError('This environment does not support fetching prototypes.');
- }
- return $getProto(O);
- },
-
- // https://ecma-international.org/ecma-262/7.0/#sec-ordinarysetprototypeof
- OrdinarySetPrototypeOf: function (O, V) {
- if (this.Type(V) !== 'Object' && this.Type(V) !== 'Null') {
- throw new $TypeError('Assertion failed: V must be Object or Null');
- }
- /*
- var extensible = this.IsExtensible(O);
- var current = this.OrdinaryGetPrototypeOf(O);
- if (this.SameValue(V, current)) {
- return true;
- }
- if (!extensible) {
- return false;
- }
- */
- try {
- $setProto(O, V);
- } catch (e) {
- return false;
- }
- return this.OrdinaryGetPrototypeOf(O) === V;
- /*
- var p = V;
- var done = false;
- while (!done) {
- if (p === null) {
- done = true;
- } else if (this.SameValue(p, O)) {
- return false;
- } else {
- if (wat) {
- done = true;
- } else {
- p = p.[[Prototype]];
- }
- }
- }
- O.[[Prototype]] = V;
- return true;
- */
- }
- });
-
- module.exports = ES2016;
|