blob: 5f369cad800539d33ac64494bd2d11272d936fb0 [file] [log] [blame]
'use strict';
var GetIntrinsic = require('get-intrinsic');
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;
};