@@ -8,7 +8,7 @@ pub(crate) mod buffer;
88pub ( crate ) use buffer:: * ;
99
1010use wasm_bindgen:: JsCast ;
11- use wasmer_types:: { MemoryError , MemoryType , Pages } ;
11+ use wasmer_types:: { MemoryError , MemoryType , Pages , WASM_PAGE_SIZE } ;
1212
1313use crate :: {
1414 js:: vm:: memory:: VMMemory ,
@@ -88,6 +88,24 @@ impl Memory {
8888 MemoryView :: new ( self , store)
8989 }
9090
91+ pub fn size ( & self , store : & impl AsStoreRef ) -> Pages {
92+ let js_memory = & self . handle . memory ;
93+ let our_js_memory: & JSMemory = JsCast :: unchecked_from_js_ref ( js_memory) ;
94+ let buffer = our_js_memory. buffer ( ) ;
95+
96+ let byte_length = match buffer. dyn_into :: < js_sys:: ArrayBuffer > ( ) {
97+ Ok ( array_buffer) => array_buffer. byte_length ( ) ,
98+ Err ( buffer) => match buffer. dyn_into :: < js_sys:: SharedArrayBuffer > ( ) {
99+ Ok ( array_buffer) => array_buffer. byte_length ( ) ,
100+ Err ( _) => {
101+ unreachable ! ( "Memory.buffer should be an array buffer or a shared array buffer" )
102+ }
103+ } ,
104+ } ;
105+
106+ Pages ( byte_length. div_ceil ( WASM_PAGE_SIZE as u32 ) )
107+ }
108+
91109 pub fn grow < IntoPages > (
92110 & self ,
93111 store : & mut impl AsStoreMut ,
0 commit comments