[wasm] Simplify Runtime_DeserializeWasmModule implementation.

R=herhut@chromium.org

Change-Id: I572a240f0d8f4598e3b4357d50329bcdafd7c60c
Reviewed-on: https://chromium-review.googlesource.com/1186585
Reviewed-by: Stephan Herhut <herhut@chromium.org>
Commit-Queue: Michael Starzinger <mstarzinger@chromium.org>
Cr-Commit-Position: refs/heads/master@{#55362}
This commit is contained in:
Michael Starzinger 2018-08-23 15:18:34 +02:00 committed by Commit Bot
parent 524215be1a
commit 50e142c984

View File

@ -916,7 +916,7 @@ RUNTIME_FUNCTION(Runtime_PromiseSpeciesProtector) {
// Take a compiled wasm module and serialize it into an array buffer, which is
// then returned.
RUNTIME_FUNCTION(Runtime_SerializeWasmModule) {
HandleScope shs(isolate);
HandleScope scope(isolate);
DCHECK_EQ(1, args.length());
CONVERT_ARG_HANDLE_CHECKED(WasmModuleObject, module_obj, 0);
@ -937,31 +937,20 @@ RUNTIME_FUNCTION(Runtime_SerializeWasmModule) {
// Take an array buffer and attempt to reconstruct a compiled wasm module.
// Return undefined if unsuccessful.
RUNTIME_FUNCTION(Runtime_DeserializeWasmModule) {
HandleScope shs(isolate);
HandleScope scope(isolate);
DCHECK_EQ(2, args.length());
CONVERT_ARG_HANDLE_CHECKED(JSArrayBuffer, buffer, 0);
CONVERT_ARG_HANDLE_CHECKED(JSArrayBuffer, wire_bytes, 1);
uint8_t* mem_start = reinterpret_cast<uint8_t*>(buffer->backing_store());
size_t mem_size = static_cast<size_t>(buffer->byte_length()->Number());
// Note that {wasm::DeserializeNativeModule} will allocate. We assume the
// JSArrayBuffer doesn't get relocated.
bool already_external = wire_bytes->is_external();
if (!already_external) {
wire_bytes->set_is_external(true);
isolate->heap()->UnregisterArrayBuffer(*wire_bytes);
}
// JSArrayBuffer backing store doesn't get relocated.
MaybeHandle<WasmModuleObject> maybe_module_object =
wasm::DeserializeNativeModule(
isolate, {mem_start, mem_size},
Vector<const uint8_t>(
reinterpret_cast<uint8_t*>(wire_bytes->backing_store()),
static_cast<int>(wire_bytes->byte_length()->Number())));
if (!already_external) {
wire_bytes->set_is_external(false);
isolate->heap()->RegisterNewArrayBuffer(*wire_bytes);
}
isolate,
{reinterpret_cast<uint8_t*>(buffer->backing_store()),
static_cast<size_t>(buffer->byte_length()->Number())},
{reinterpret_cast<uint8_t*>(wire_bytes->backing_store()),
static_cast<size_t>(wire_bytes->byte_length()->Number())});
Handle<WasmModuleObject> module_object;
if (!maybe_module_object.ToHandle(&module_object)) {
return ReadOnlyRoots(isolate).undefined_value();