WebAssemblyMemory.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #pragma once
  6. namespace Js
  7. {
  8. class WebAssemblyMemory : public DynamicObject
  9. {
  10. protected:
  11. DEFINE_VTABLE_CTOR( WebAssemblyMemory, DynamicObject );
  12. DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT( WebAssemblyMemory );
  13. #ifdef ENABLE_WASM
  14. public:
  15. class EntryInfo
  16. {
  17. public:
  18. static FunctionInfo NewInstance;
  19. static FunctionInfo Grow;
  20. static FunctionInfo GetterBuffer;
  21. };
  22. static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...);
  23. static Var EntryGrow(RecyclableObject* function, CallInfo callInfo, ...);
  24. static Var EntryGetterBuffer(RecyclableObject* function, CallInfo callInfo, ...);
  25. static WebAssemblyMemory * CreateMemoryObject(uint32 initial, uint32 maximum, bool isShared, ScriptContext * scriptContext);
  26. static WebAssemblyMemory * CreateForExistingBuffer(uint32 initial, uint32 maximum, uint32 currentByteLength, ScriptContext * scriptContext);
  27. #ifdef ENABLE_WASM_THREADS
  28. static WebAssemblyMemory * CreateFromSharedContents(uint32 initial, uint32 maximum, SharedContents* sharedContents, ScriptContext * scriptContext);
  29. #endif
  30. ArrayBufferBase * GetBuffer() const;
  31. uint GetInitialLength() const;
  32. uint GetMaximumLength() const;
  33. uint GetCurrentMemoryPages() const;
  34. #ifdef ENABLE_WASM_THREADS
  35. bool IsSharedMemory() const;
  36. #endif
  37. int32 GrowInternal(uint32 deltaPages);
  38. static int32 GrowHelper(Js::WebAssemblyMemory * memory, uint32 deltaPages);
  39. static int GetOffsetOfArrayBuffer() { return offsetof(WebAssemblyMemory, m_buffer); }
  40. #if DBG
  41. static void TraceMemWrite(WebAssemblyMemory* mem, uint32 index, uint32 offset, Js::ArrayBufferView::ViewType viewType, uint32 bytecodeOffset, ScriptContext* context);
  42. #endif
  43. private:
  44. WebAssemblyMemory(ArrayBufferBase* buffer, uint32 initial, uint32 maximum, DynamicType * type);
  45. static void CheckLimits(ScriptContext * scriptContext, uint32 initial, uint32 maximum);
  46. static void CheckLimits(ScriptContext * scriptContext, uint32 initial, uint32 maximum, uint32 bufferLength);
  47. Field(ArrayBufferBase*) m_buffer;
  48. Field(uint) m_initial;
  49. Field(uint) m_maximum;
  50. #endif
  51. };
  52. template <> inline bool VarIsImpl<WebAssemblyMemory>(RecyclableObject* obj)
  53. {
  54. return JavascriptOperators::GetTypeId(obj) == TypeIds_WebAssemblyMemory;
  55. }
  56. } // namespace Js