|
12345678910111213141516171819202122232425262728 |
- 'use strict';
-
- var GetIntrinsic = require('../GetIntrinsic');
-
- var $Function = GetIntrinsic('%Function%');
- var $TypeError = GetIntrinsic('%TypeError%');
-
- var Get = require('./Get');
- var IsConstructor = require('./IsConstructor');
- var Type = require('./Type');
-
- // https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor
-
- module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) {
- var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic
- if (!IsConstructor(constructor)) {
- throw new $TypeError('Assertion failed: `constructor` must be a constructor');
- }
- var proto = Get(constructor, 'prototype');
- if (Type(proto) !== 'Object') {
- if (!(constructor instanceof $Function)) {
- // ignore other realms, for now
- throw new $TypeError('cross-realm constructors not currently supported');
- }
- proto = intrinsic;
- }
- return proto;
- };
|