Index: src/runtime/runtime-wasm.cc |
diff --git a/src/runtime/runtime-wasm.cc b/src/runtime/runtime-wasm.cc |
index 84bb819a3974679060a9ba91d90f7c319baf4a09..4be8fa57184e71535bd8108b4dc3737c364db359 100644 |
--- a/src/runtime/runtime-wasm.cc |
+++ b/src/runtime/runtime-wasm.cc |
@@ -23,7 +23,6 @@ RUNTIME_FUNCTION(Runtime_WasmGrowMemory) { |
DCHECK_EQ(1, args.length()); |
CONVERT_UINT32_ARG_CHECKED(delta_pages, 0); |
Handle<JSObject> module_instance; |
- |
{ |
// Get the module JSObject |
DisallowHeapAllocation no_allocation; |
@@ -36,77 +35,8 @@ RUNTIME_FUNCTION(Runtime_WasmGrowMemory) { |
CHECK_NOT_NULL(owning_instance); |
module_instance = handle(JSObject::cast(owning_instance), isolate); |
} |
- |
- Address old_mem_start, new_mem_start; |
- uint32_t old_size, new_size; |
- |
- // Get mem buffer associated with module object |
- MaybeHandle<JSArrayBuffer> maybe_mem_buffer = |
- wasm::GetInstanceMemory(isolate, module_instance); |
- Handle<JSArrayBuffer> old_buffer; |
- if (!maybe_mem_buffer.ToHandle(&old_buffer)) { |
- // If module object does not have linear memory associated with it, |
- // Allocate new array buffer of given size. |
- old_mem_start = nullptr; |
- old_size = 0; |
- // TODO(gdeepti): Fix bounds check to take into account size of memtype. |
- new_size = delta_pages * wasm::WasmModule::kPageSize; |
- // The code generated in the wasm compiler guarantees this precondition. |
- DCHECK(delta_pages <= wasm::WasmModule::kMaxMemPages); |
- new_mem_start = |
- static_cast<Address>(isolate->array_buffer_allocator()->Allocate( |
- static_cast<uint32_t>(new_size))); |
- if (new_mem_start == NULL) { |
- return *isolate->factory()->NewNumberFromInt(-1); |
- } |
-#if DEBUG |
- // Double check the API allocator actually zero-initialized the memory. |
- for (size_t i = old_size; i < new_size; i++) { |
- DCHECK_EQ(0, new_mem_start[i]); |
- } |
-#endif |
- } else { |
- old_mem_start = static_cast<Address>(old_buffer->backing_store()); |
- old_size = old_buffer->byte_length()->Number(); |
- // If the old memory was zero-sized, we should have been in the |
- // "undefined" case above. |
- DCHECK_NOT_NULL(old_mem_start); |
- DCHECK_NE(0, old_size); |
- |
- new_size = old_size + delta_pages * wasm::WasmModule::kPageSize; |
- if (new_size > |
- wasm::WasmModule::kMaxMemPages * wasm::WasmModule::kPageSize) { |
- return *isolate->factory()->NewNumberFromInt(-1); |
- } |
- new_mem_start = |
- static_cast<Address>(isolate->array_buffer_allocator()->Allocate( |
- static_cast<uint32_t>(new_size))); |
- if (new_mem_start == NULL) { |
- return *isolate->factory()->NewNumberFromInt(-1); |
- } |
-#if DEBUG |
- // Double check the API allocator actually zero-initialized the memory. |
- for (size_t i = old_size; i < new_size; i++) { |
- DCHECK_EQ(0, new_mem_start[i]); |
- } |
-#endif |
- // Copy contents of the old buffer to the new buffer |
- memcpy(new_mem_start, old_mem_start, old_size); |
- } |
- |
- Handle<JSArrayBuffer> buffer = isolate->factory()->NewJSArrayBuffer(); |
- JSArrayBuffer::Setup(buffer, isolate, false, new_mem_start, new_size); |
- buffer->set_is_neuterable(false); |
- |
- // Set new buffer to be wasm memory |
- |
- wasm::SetInstanceMemory(module_instance, *buffer); |
- |
- CHECK(wasm::UpdateWasmModuleMemory(module_instance, old_mem_start, |
- new_mem_start, old_size, new_size)); |
- |
- return *isolate->factory()->NewNumberFromInt(old_size / |
- wasm::WasmModule::kPageSize); |
+ return *isolate->factory()->NewNumberFromInt( |
+ wasm::GrowInstanceMemory(isolate, module_instance, delta_pages)); |
} |
RUNTIME_FUNCTION(Runtime_WasmThrowTypeError) { |