Index: src/wasm/wasm-module.h |
diff --git a/src/wasm/wasm-module.h b/src/wasm/wasm-module.h |
index c3ccf619a979f00ed6d3a7cc0c82c64d76cb0bbd..8cf5501efb0274afa7018c2964e8001c8a36c390 100644 |
--- a/src/wasm/wasm-module.h |
+++ b/src/wasm/wasm-module.h |
@@ -374,6 +374,19 @@ |
#define WCM_SMALL_NUMBER(TYPE, NAME) \ |
TYPE NAME() const { \ |
return static_cast<TYPE>(Smi::cast(get(kID_##NAME))->value()); \ |
+ } \ |
+ \ |
+ void set_##NAME(TYPE value) { \ |
+ set(kID_##NAME, Smi::FromInt(static_cast<int>(value))); \ |
+ } |
+ |
+#define WCM_LARGE_NUMBER(TYPE, NAME) \ |
+ TYPE NAME() const { \ |
+ return static_cast<TYPE>(HeapNumber::cast(get(kID_##NAME))->value()); \ |
+ } \ |
+ \ |
+ void set_##NAME(TYPE value) { \ |
+ HeapNumber::cast(get(kID_##NAME))->set_value(static_cast<double>(value)); \ |
} |
#define WCM_WEAK_LINK(TYPE, NAME) \ |
@@ -391,11 +404,12 @@ |
MACRO(OBJECT, FixedArray, indirect_function_tables) \ |
MACRO(OBJECT, String, module_bytes) \ |
MACRO(OBJECT, ByteArray, function_names) \ |
- MACRO(SMALL_NUMBER, uint32_t, min_memory_pages) \ |
+ MACRO(LARGE_NUMBER, uint32_t, min_required_memory) \ |
MACRO(OBJECT, FixedArray, data_segments_info) \ |
MACRO(OBJECT, ByteArray, data_segments) \ |
- MACRO(SMALL_NUMBER, uint32_t, globals_size) \ |
- MACRO(OBJECT, JSArrayBuffer, heap) \ |
+ MACRO(LARGE_NUMBER, uint32_t, globals_size) \ |
+ MACRO(LARGE_NUMBER, uint32_t, mem_size) \ |
+ MACRO(OBJECT, JSArrayBuffer, mem_start) \ |
MACRO(SMALL_NUMBER, bool, export_memory) \ |
MACRO(SMALL_NUMBER, ModuleOrigin, origin) \ |
MACRO(WEAK_LINK, WasmCompiledModule, next_instance) \ |
@@ -411,26 +425,32 @@ |
}; |
public: |
- static Handle<WasmCompiledModule> New(Isolate* isolate, |
- uint32_t min_memory_pages, |
- uint32_t globals_size, |
- bool export_memory, |
- ModuleOrigin origin); |
+ static Handle<WasmCompiledModule> New(Isolate* isolate) { |
+ Handle<FixedArray> ret = |
+ isolate->factory()->NewFixedArray(PropertyIndices::Count, TENURED); |
+ Handle<HeapNumber> number; |
+#define WCM_INIT_OBJECT(IGNORE1, IGNORE2) |
+#define WCM_INIT_WEAK_LINK(IGNORE1, IGNORE2) |
+#define WCM_INIT_SMALL_NUMBER(IGNORE1, IGNORE2) |
+#define WCM_INIT_LARGE_NUMBER(IGNORE, NAME) \ |
+ number = isolate->factory()->NewHeapNumber(0.0, MUTABLE, TENURED); \ |
+ ret->set(kID_##NAME, *number); |
+ |
+#define INITIALIZER(KIND, TYPE, NAME) WCM_INIT_##KIND(TYPE, NAME) |
+ WCM_PROPERTY_TABLE(INITIALIZER) |
+#undef INITIALIZER |
+ return handle(WasmCompiledModule::cast(*ret)); |
+ } |
static Handle<WasmCompiledModule> Clone(Isolate* isolate, |
Handle<WasmCompiledModule> module) { |
Handle<WasmCompiledModule> ret = Handle<WasmCompiledModule>::cast( |
isolate->factory()->CopyFixedArray(module)); |
+ Handle<HeapNumber> number = |
+ isolate->factory()->NewHeapNumber(0.0, MUTABLE, TENURED); |
+ ret->set(kID_mem_size, *number); |
+ ret->set_mem_size(module->mem_size()); |
return ret; |
- } |
- |
- uint32_t mem_size() const { |
- DCHECK(has_heap()); |
- return heap()->byte_length()->Number(); |
- } |
- |
- uint32_t default_mem_size() const { |
- return min_memory_pages() * WasmModule::kPageSize; |
} |
#define DECLARATION(KIND, TYPE, NAME) WCM_##KIND(TYPE, NAME) |