| '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; |