proto-from-ctor-realm.js (2336B)
1 // Copyright (C) 2019 Alexey Shvayka. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 4 /*--- 5 esid: sec-nativeerror 6 description: Default [[Prototype]] value derived from realm of the NewTarget. 7 info: | 8 NativeError ( message ) 9 10 1. If NewTarget is undefined, let newTarget be the active function object; else let newTarget be NewTarget. 11 2. Let O be ? OrdinaryCreateFromConstructor(newTarget, "%NativeErrorPrototype%", « [[ErrorData]] »). 12 ... 13 4. Return O. 14 15 OrdinaryCreateFromConstructor ( constructor, intrinsicDefaultProto [ , internalSlotsList ] ) 16 17 ... 18 2. Let proto be ? GetPrototypeFromConstructor(constructor, intrinsicDefaultProto). 19 3. Return ObjectCreate(proto, internalSlotsList). 20 21 GetPrototypeFromConstructor ( constructor, intrinsicDefaultProto ) 22 23 ... 24 3. Let proto be ? Get(constructor, 'prototype'). 25 4. If Type(proto) is not Object, then 26 a. Let realm be ? GetFunctionRealm(constructor). 27 b. Set proto to realm's intrinsic object named intrinsicDefaultProto. 28 5. Return proto. 29 features: [cross-realm, Reflect, Symbol] 30 ---*/ 31 32 var other = $262.createRealm().global; 33 var newTarget = new other.Function(); 34 var err; 35 36 newTarget.prototype = undefined; 37 err = Reflect.construct(URIError, [], newTarget); 38 assert.sameValue(Object.getPrototypeOf(err), other.URIError.prototype, 'newTarget.prototype is undefined'); 39 40 newTarget.prototype = null; 41 err = Reflect.construct(URIError, [], newTarget); 42 assert.sameValue(Object.getPrototypeOf(err), other.URIError.prototype, 'newTarget.prototype is null'); 43 44 newTarget.prototype = true; 45 err = Reflect.construct(URIError, [], newTarget); 46 assert.sameValue(Object.getPrototypeOf(err), other.URIError.prototype, 'newTarget.prototype is a Boolean'); 47 48 newTarget.prototype = ''; 49 err = Reflect.construct(URIError, [], newTarget); 50 assert.sameValue(Object.getPrototypeOf(err), other.URIError.prototype, 'newTarget.prototype is a String'); 51 52 newTarget.prototype = Symbol(); 53 err = Reflect.construct(URIError, [], newTarget); 54 assert.sameValue(Object.getPrototypeOf(err), other.URIError.prototype, 'newTarget.prototype is a Symbol'); 55 56 newTarget.prototype = 0; 57 err = Reflect.construct(URIError, [], newTarget); 58 assert.sameValue(Object.getPrototypeOf(err), other.URIError.prototype, 'newTarget.prototype is a Number'); 59 60 reportCompare(0, 0);