| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- #pragma once
- namespace Js
- {
- class WebAssemblyMemory : public DynamicObject
- {
- protected:
- DEFINE_VTABLE_CTOR( WebAssemblyMemory, DynamicObject );
- DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT( WebAssemblyMemory );
- #ifdef ENABLE_WASM
- public:
- class EntryInfo
- {
- public:
- static FunctionInfo NewInstance;
- static FunctionInfo Grow;
- static FunctionInfo GetterBuffer;
- };
- static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...);
- static Var EntryGrow(RecyclableObject* function, CallInfo callInfo, ...);
- static Var EntryGetterBuffer(RecyclableObject* function, CallInfo callInfo, ...);
- static WebAssemblyMemory * CreateMemoryObject(uint32 initial, uint32 maximum, bool isShared, ScriptContext * scriptContext);
- static WebAssemblyMemory * CreateForExistingBuffer(uint32 initial, uint32 maximum, uint32 currentByteLength, ScriptContext * scriptContext);
- #ifdef ENABLE_WASM_THREADS
- static WebAssemblyMemory * CreateFromSharedContents(uint32 initial, uint32 maximum, SharedContents* sharedContents, ScriptContext * scriptContext);
- #endif
- ArrayBufferBase * GetBuffer() const;
- uint GetInitialLength() const;
- uint GetMaximumLength() const;
- uint GetCurrentMemoryPages() const;
- #ifdef ENABLE_WASM_THREADS
- bool IsSharedMemory() const;
- #endif
- int32 GrowInternal(uint32 deltaPages);
- static int32 GrowHelper(Js::WebAssemblyMemory * memory, uint32 deltaPages);
- static int GetOffsetOfArrayBuffer() { return offsetof(WebAssemblyMemory, m_buffer); }
- #if DBG
- static void TraceMemWrite(WebAssemblyMemory* mem, uint32 index, uint32 offset, Js::ArrayBufferView::ViewType viewType, uint32 bytecodeOffset, ScriptContext* context);
- #endif
- private:
- WebAssemblyMemory(ArrayBufferBase* buffer, uint32 initial, uint32 maximum, DynamicType * type);
- static void CheckLimits(ScriptContext * scriptContext, uint32 initial, uint32 maximum);
- static void CheckLimits(ScriptContext * scriptContext, uint32 initial, uint32 maximum, uint32 bufferLength);
- Field(ArrayBufferBase*) m_buffer;
- Field(uint) m_initial;
- Field(uint) m_maximum;
- #endif
- };
- template <> inline bool VarIsImpl<WebAssemblyMemory>(RecyclableObject* obj)
- {
- return JavascriptOperators::GetTypeId(obj) == TypeIds_WebAssemblyMemory;
- }
- } // namespace Js
|