| 'use strict'; | 
|   | 
| var GetIntrinsic = require('get-intrinsic'); | 
|   | 
| var $ObjectCreate = GetIntrinsic('%Object.create%', true); | 
| var $TypeError = GetIntrinsic('%TypeError%'); | 
| var $SyntaxError = GetIntrinsic('%SyntaxError%'); | 
|   | 
| var IsArray = require('./IsArray'); | 
| var Type = require('./Type'); | 
|   | 
| var forEach = require('../helpers/forEach'); | 
|   | 
| var SLOT = require('internal-slot'); | 
|   | 
| var hasProto = require('has-proto')(); | 
|   | 
| // https://262.ecma-international.org/11.0/#sec-objectcreate | 
|   | 
| module.exports = function OrdinaryObjectCreate(proto) { | 
|     if (proto !== null && Type(proto) !== 'Object') { | 
|         throw new $TypeError('Assertion failed: `proto` must be null or an object'); | 
|     } | 
|     var additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1]; | 
|     if (!IsArray(additionalInternalSlotsList)) { | 
|         throw new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array'); | 
|     } | 
|   | 
|     // var internalSlotsList = ['[[Prototype]]', '[[Extensible]]']; // step 1 | 
|     // internalSlotsList.push(...additionalInternalSlotsList); // step 2 | 
|     // var O = MakeBasicObject(internalSlotsList); // step 3 | 
|     // setProto(O, proto); // step 4 | 
|     // return O; // step 5 | 
|   | 
|     var O; | 
|     if ($ObjectCreate) { | 
|         O = $ObjectCreate(proto); | 
|     } else if (hasProto) { | 
|         O = { __proto__: proto }; | 
|     } else { | 
|         if (proto === null) { | 
|             throw new $SyntaxError('native Object.create support is required to create null objects'); | 
|         } | 
|         var T = function T() {}; | 
|         T.prototype = proto; | 
|         O = new T(); | 
|     } | 
|   | 
|     if (additionalInternalSlotsList.length > 0) { | 
|         forEach(additionalInternalSlotsList, function (slot) { | 
|             SLOT.set(O, slot, void undefined); | 
|         }); | 
|     } | 
|   | 
|     return O; | 
| }; |