@@ -49,9 +49,7 @@ void StringObjectSerialize(Serializer &s, const GCCell *cell) {
4949
5050void StringObjectDeserialize (Deserializer &d, CellKind kind) {
5151 assert (kind == CellKind::StringObjectKind && " Expected StringObject" );
52- void *mem = d.getRuntime ()->alloc (cellSize<JSString>());
53- auto *cell = new (mem) JSString (d, &JSString::vt.base );
54-
52+ auto *cell = d.getRuntime ()->makeAFixed <JSString>(d, &JSString::vt.base );
5553 d.endObject (cell);
5654}
5755#endif
@@ -60,13 +58,11 @@ CallResult<Handle<JSString>> JSString::create(
6058 Runtime *runtime,
6159 Handle<StringPrimitive> value,
6260 Handle<JSObject> parentHandle) {
63- JSObjectAlloc<JSString> mem{runtime};
64- auto selfHandle = mem.initToHandle (new (mem) JSString (
65- runtime,
66- *parentHandle,
67- runtime->getHiddenClassForPrototypeRaw (
68- *parentHandle,
69- numOverlapSlots<JSString>() + ANONYMOUS_PROPERTY_SLOTS )));
61+ auto clazzHandle = runtime->getHiddenClassForPrototype (
62+ *parentHandle, numOverlapSlots<JSString>() + ANONYMOUS_PROPERTY_SLOTS );
63+ auto obj = runtime->makeAFixed <JSString>(runtime, parentHandle, clazzHandle);
64+
65+ auto selfHandle = JSObjectInit::initToHandle (runtime, obj);
7066
7167 JSObject::setInternalProperty (
7268 *selfHandle,
@@ -233,8 +229,7 @@ void StringIteratorSerialize(Serializer &s, const GCCell *cell) {
233229
234230void StringIteratorDeserialize (Deserializer &d, CellKind kind) {
235231 assert (kind == CellKind::StringIteratorKind && " Expected StringIterator" );
236- void *mem = d.getRuntime ()->alloc (cellSize<JSStringIterator>());
237- auto *cell = new (mem) JSStringIterator (d);
232+ auto *cell = d.getRuntime ()->makeAFixed <JSStringIterator>(d);
238233 d.endObject (cell);
239234}
240235#endif
@@ -244,15 +239,11 @@ PseudoHandle<JSStringIterator> JSStringIterator::create(
244239 Runtime *runtime,
245240 Handle<StringPrimitive> string) {
246241 auto proto = Handle<JSObject>::vmcast (&runtime->stringIteratorPrototype );
247-
248- JSObjectAlloc<JSStringIterator> mem{runtime};
249- return mem.initToPseudoHandle (new (mem) JSStringIterator (
250- runtime,
251- *proto,
252- runtime->getHiddenClassForPrototypeRaw (
253- *proto,
254- numOverlapSlots<JSStringIterator>() + ANONYMOUS_PROPERTY_SLOTS ),
255- *string));
242+ auto clazzHandle = runtime->getHiddenClassForPrototype (
243+ *proto, numOverlapSlots<JSStringIterator>() + ANONYMOUS_PROPERTY_SLOTS );
244+ auto obj = runtime->makeAFixed <JSStringIterator>(
245+ runtime, proto, clazzHandle, string);
246+ return JSObjectInit::initToPseudoHandle (runtime, obj);
256247}
257248
258249// / ES6.0 21.1.5.2.1 %StringIteratorPrototype%.next ( ) 4-14
@@ -346,8 +337,7 @@ void NumberObjectSerialize(Serializer &s, const GCCell *cell) {
346337
347338void NumberObjectDeserialize (Deserializer &d, CellKind kind) {
348339 assert (kind == CellKind::NumberObjectKind && " Expected NumberObject" );
349- void *mem = d.getRuntime ()->alloc (cellSize<JSNumber>());
350- auto *cell = new (mem) JSNumber (d, &JSNumber::vt.base );
340+ auto *cell = d.getRuntime ()->makeAFixed <JSNumber>(d, &JSNumber::vt.base );
351341 d.endObject (cell);
352342}
353343#endif
@@ -356,13 +346,10 @@ PseudoHandle<JSNumber> JSNumber::create(
356346 Runtime *runtime,
357347 double value,
358348 Handle<JSObject> parentHandle) {
359- JSObjectAlloc<JSNumber> mem{runtime};
360- auto self = mem.initToPseudoHandle (new (mem) JSNumber (
361- runtime,
362- *parentHandle,
363- runtime->getHiddenClassForPrototypeRaw (
364- *parentHandle,
365- numOverlapSlots<JSNumber>() + ANONYMOUS_PROPERTY_SLOTS )));
349+ auto clazzHandle = runtime->getHiddenClassForPrototype (
350+ *parentHandle, numOverlapSlots<JSNumber>() + ANONYMOUS_PROPERTY_SLOTS );
351+ auto obj = runtime->makeAFixed <JSNumber>(runtime, parentHandle, clazzHandle);
352+ auto self = JSObjectInit::initToPseudoHandle (runtime, obj);
366353
367354 JSObject::setInternalProperty (
368355 self.get (),
@@ -403,21 +390,17 @@ void BooleanObjectSerialize(Serializer &s, const GCCell *cell) {
403390
404391void BooleanObjectDeserialize (Deserializer &d, CellKind kind) {
405392 assert (kind == CellKind::BooleanObjectKind && " Expected BooleanObject" );
406- void *mem = d.getRuntime ()->alloc (cellSize<JSBoolean>());
407- auto *cell = new (mem) JSBoolean (d, &JSBoolean::vt.base );
393+ auto *cell = d.getRuntime ()->makeAFixed <JSBoolean>(d, &JSBoolean::vt.base );
408394 d.endObject (cell);
409395}
410396#endif
411397
412398PseudoHandle<JSBoolean>
413399JSBoolean::create (Runtime *runtime, bool value, Handle<JSObject> parentHandle) {
414- JSObjectAlloc<JSBoolean> mem{runtime};
415- auto self = mem.initToPseudoHandle (new (mem) JSBoolean (
416- runtime,
417- *parentHandle,
418- runtime->getHiddenClassForPrototypeRaw (
419- *parentHandle,
420- numOverlapSlots<JSBoolean>() + ANONYMOUS_PROPERTY_SLOTS )));
400+ auto clazzHandle = runtime->getHiddenClassForPrototype (
401+ *parentHandle, numOverlapSlots<JSBoolean>() + ANONYMOUS_PROPERTY_SLOTS );
402+ auto obj = runtime->makeAFixed <JSBoolean>(runtime, parentHandle, clazzHandle);
403+ auto self = JSObjectInit::initToPseudoHandle (runtime, obj);
421404
422405 JSObject::setInternalProperty (
423406 self.get (),
@@ -456,8 +439,7 @@ void SymbolObjectSerialize(Serializer &s, const GCCell *cell) {
456439
457440void SymbolObjectDeserialize (Deserializer &d, CellKind kind) {
458441 assert (kind == CellKind::SymbolObjectKind && " Expected SymbolObject" );
459- void *mem = d.getRuntime ()->alloc (cellSize<JSSymbol>());
460- auto *cell = new (mem) JSSymbol (d);
442+ auto *cell = d.getRuntime ()->makeAFixed <JSSymbol>(d);
461443 d.endObject (cell);
462444}
463445#endif
@@ -466,13 +448,10 @@ PseudoHandle<JSSymbol> JSSymbol::create(
466448 Runtime *runtime,
467449 SymbolID value,
468450 Handle<JSObject> parentHandle) {
469- JSObjectAlloc<JSSymbol> mem{runtime};
470- auto self = mem.initToPseudoHandle (new (mem) JSSymbol (
471- runtime,
472- *parentHandle,
473- runtime->getHiddenClassForPrototypeRaw (
474- *parentHandle,
475- numOverlapSlots<JSSymbol>() + ANONYMOUS_PROPERTY_SLOTS )));
451+ auto clazzHandle = runtime->getHiddenClassForPrototype (
452+ *parentHandle, numOverlapSlots<JSSymbol>() + ANONYMOUS_PROPERTY_SLOTS );
453+ auto *obj = runtime->makeAFixed <JSSymbol>(runtime, parentHandle, clazzHandle);
454+ auto self = JSObjectInit::initToPseudoHandle (runtime, obj);
476455
477456 JSObject::setInternalProperty (
478457 self.get (),
0 commit comments