@@ -20,6 +20,11 @@ namespace Js
2020 // be certain that the type has only writable data properties.
2121 }
2222
23+ DeferredTypeHandlerBase (DeferredTypeHandlerBase * typeHandler) : DynamicTypeHandler(typeHandler)
24+ {
25+ Assert (this ->GetIsInlineSlotCapacityLocked () == typeHandler->GetIsInlineSlotCapacityLocked ());
26+ Assert (this ->GetHasOnlyWritableDataProperties () == typeHandler->GetHasOnlyWritableDataProperties ());
27+ }
2328 public:
2429 void ConvertFunction (JavascriptFunction * instance, DynamicTypeHandler * handler);
2530 void Convert (DynamicObject * instance, DeferredInitializeMode mode, int initSlotCapacity, BOOL hasAccessor = false );
@@ -75,10 +80,15 @@ namespace Js
7580
7681 private:
7782 DeferredTypeHandler () : DeferredTypeHandlerBase(isPrototypeTemplate, _inlineSlotCapacity, _offsetOfInlineSlots), m_initializer(initializer) { }
83+ DeferredTypeHandler (DeferredTypeHandler * typeHandler) :
84+ DeferredTypeHandlerBase (typeHandler),
85+ m_initializer (typeHandler->m_initializer)
86+ {}
7887
7988 public:
8089 static DeferredTypeHandler *GetDefaultInstance () { return &defaultInstance; }
8190
91+ virtual DynamicTypeHandler * Clone (Recycler* recycler);
8292 virtual BOOL IsLockable () const override { return true ; }
8393 virtual BOOL IsSharable () const override { return true ; }
8494 virtual int GetPropertyCount () override ;
@@ -156,6 +166,12 @@ namespace Js
156166 template <DeferredTypeInitializer initializer, typename DeferredTypeFilter, bool isPrototypeTemplate, uint16 _inlineSlotCapacity, uint16 _offsetOfInlineSlots>
157167 DeferredTypeHandler<initializer, DeferredTypeFilter, isPrototypeTemplate, _inlineSlotCapacity, _offsetOfInlineSlots> DeferredTypeHandler<initializer, DeferredTypeFilter, isPrototypeTemplate, _inlineSlotCapacity, _offsetOfInlineSlots>::defaultInstance;
158168
169+ template <DeferredTypeInitializer initializer, typename DeferredTypeFilter, bool isPrototypeTemplate, uint16 _inlineSlotCapacity, uint16 _offsetOfInlineSlots>
170+ DynamicTypeHandler * DeferredTypeHandler<initializer, DeferredTypeFilter, isPrototypeTemplate, _inlineSlotCapacity, _offsetOfInlineSlots>::Clone(Recycler * recycler)
171+ {
172+ return RecyclerNew (recycler, DeferredTypeHandler, this );
173+ }
174+
159175 template <DeferredTypeInitializer initializer, typename DeferredTypeFilter, bool isPrototypeTemplate, uint16 _inlineSlotCapacity, uint16 _offsetOfInlineSlots>
160176 int DeferredTypeHandler<initializer, DeferredTypeFilter, isPrototypeTemplate, _inlineSlotCapacity, _offsetOfInlineSlots>::GetPropertyCount()
161177 {
0 commit comments