@@ -60,13 +60,13 @@ namespace Js
6060 return AllocWrapper (length, MaxVirtualSize);
6161 }
6262
63- static void FreeMemAlloc (Var ptr)
63+ static void __cdecl FreeMemAlloc (Var ptr)
6464 {
6565 BOOL fSuccess = VirtualFree ((LPVOID)ptr, 0 , MEM_RELEASE);
6666 Assert (fSuccess );
6767 }
6868#else
69- static void FreeMemAlloc (Var ptr)
69+ static void __cdecl FreeMemAlloc (Var ptr)
7070 {
7171 // This free function should never be used
7272 Js::Throw::FatalInternalError ();
@@ -77,7 +77,12 @@ namespace Js
7777
7878 virtual void MarshalToScriptContext (Js::ScriptContext * scriptContext) = 0;
7979
80- ArrayBufferBase (DynamicType *type) : DynamicObject(type), isDetached(false ), infoBits(0 ) { }
80+ ArrayBufferBase (DynamicType *type) :
81+ DynamicObject (type),
82+ isDetached (false ),
83+ infoBits (0 ),
84+ externalized (false ) { }
85+
8186 bool IsDetached () { return isDetached; }
8287
8388#if ENABLE_TTD
@@ -99,8 +104,10 @@ namespace Js
99104
100105 static int GetIsDetachedOffset () { return offsetof (ArrayBufferBase, isDetached); }
101106
107+ void Externalize () { this ->externalized = true ; }
102108 protected:
103109 Field (bool ) isDetached;
110+ Field (bool ) externalized;
104111 Field (char ) infoBits;
105112 };
106113
@@ -142,9 +149,9 @@ namespace Js
142149 class ArrayBufferDetachedState : public ArrayBufferDetachedStateBase
143150 {
144151 public:
145- FreeFN* freeFunction;
152+ FreeFN freeFunction;
146153 Recycler* recycler;
147- ArrayBufferDetachedState (RefCountedBuffer* buffer, uint32 bufferLength, FreeFN* freeFunction, Recycler* r, ArrayBufferAllocationType allocationType)
154+ ArrayBufferDetachedState (RefCountedBuffer* buffer, uint32 bufferLength, FreeFN freeFunction, Recycler* r, ArrayBufferAllocationType allocationType)
148155 : ArrayBufferDetachedStateBase(TypeIds_ArrayBuffer, buffer, bufferLength, allocationType),
149156 recycler (r),
150157 freeFunction(freeFunction)
@@ -206,8 +213,8 @@ namespace Js
206213 RefCountedBuffer *GetBufferContent () { return bufferContent; }
207214 static int GetBufferContentsOffset () { return offsetof (ArrayBuffer, bufferContent); }
208215
209- typedef void __cdecl FreeFn (void * ptr );
210- virtual FreeFn* GetArrayBufferFreeFn () { return nullptr ; }
216+ typedef void ( __cdecl * FreeFn) (void *);
217+ virtual FreeFn GetArrayBufferFreeFn () { return nullptr ; }
211218 static int GetByteLengthOffset () { return offsetof (ArrayBuffer, bufferLength); }
212219 virtual void AddParent (ArrayBufferParent* parent) override ;
213220
@@ -310,7 +317,7 @@ namespace Js
310317 virtual bool IsValidAsmJsBufferLength (uint length, bool forceCheck = false ) override ;
311318 virtual bool IsValidVirtualBufferLength (uint length) const override ;
312319
313- virtual FreeFn* GetArrayBufferFreeFn () override ;
320+ virtual FreeFn GetArrayBufferFreeFn () override ;
314321
315322 protected:
316323 JavascriptArrayBuffer (DynamicType * type);
@@ -358,7 +365,7 @@ namespace Js
358365 DEFINE_VTABLE_CTOR (ProjectionArrayBuffer, ArrayBuffer);
359366 DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT (ProjectionArrayBuffer);
360367
361- typedef void __stdcall FreeFn (LPVOID ptr);
368+ typedef void ( __stdcall * FreeFn) (LPVOID ptr);
362369 virtual ArrayBufferDetachedStateBase* CreateDetachedState (RefCountedBuffer * content, DECLSPEC_GUARD_OVERFLOW uint32 bufferLength) override
363370 {
364371 return HeapNew (ArrayBufferDetachedState<FreeFn>, content, bufferLength, CoTaskMemFree, GetScriptContext ()->GetRecycler (), ArrayBufferAllocationType::CoTask);
0 commit comments