Brandon Benvie (2013-07-16T23:42:55.000Z)
domenic at domenicdenicola.com (2013-07-18T16:31:46.661Z)
I wonder if the current spec language is a remnant of before @@create was added to the spec. It should be possible to detect when the constructors are called with a receiver that is not an initializing instance and simply create a new instance. Pseudo code: ```js function Map(...args){ if (!IsObject(this) || !%HasMapData(this)) { // got a primitive, the global object, or some random object like from `Map.call({})` return new Map(...args); } else if (!%IsInitializedMap(this)) { // A legit Map but has uninitialized [[MapData]] %MapInitialize(this); } else { // [[MapData]] is present but is already initialized throw TypeError("Attempted to reinitialize a Map"); } } ``` The main point of introducing @@create (I think) was to allow for distinguishing between initializing, initialized, and everything else.