mirror of
https://github.com/Sevichecc/Urara-Blog.git
synced 2025-05-03 03:39:29 +08:00
28 lines
921 B
Text
28 lines
921 B
Text
'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;
|
|
};
|