| Index: src/wasm/wasm-module.cc
|
| diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc
|
| index 93293c086b8f7f1f18298003276aff702be11bec..90e3f2a26495ab2b4e4635d5121973b94b772414 100644
|
| --- a/src/wasm/wasm-module.cc
|
| +++ b/src/wasm/wasm-module.cc
|
| @@ -1384,33 +1384,8 @@ class WasmInstanceBuilder {
|
| FlushICache(isolate_, code_table);
|
|
|
| //--------------------------------------------------------------------------
|
| - // Run the start function if one was specified.
|
| + // Set up and link the new instance.
|
| //--------------------------------------------------------------------------
|
| - if (compiled_module_->has_startup_function()) {
|
| - Handle<FixedArray> startup_data = compiled_module_->startup_function();
|
| - HandleScope scope(isolate_);
|
| - int32_t start_index =
|
| - startup_data->GetValueChecked<Smi>(isolate_, kExportIndex)->value();
|
| - Handle<Code> startup_code =
|
| - code_table->GetValueChecked<Code>(isolate_, start_index);
|
| - int arity = Smi::cast(startup_data->get(kExportArity))->value();
|
| - MaybeHandle<ByteArray> startup_signature =
|
| - startup_data->GetValue<ByteArray>(isolate_, kExportedSignature);
|
| - Handle<JSFunction> startup_fct = WrapExportCodeAsJSFunction(
|
| - isolate_, startup_code, factory->InternalizeUtf8String("start"),
|
| - arity, startup_signature, instance);
|
| - RecordStats(isolate_, *startup_code);
|
| - // Call the JS function.
|
| - Handle<Object> undefined = factory->undefined_value();
|
| - MaybeHandle<Object> retval =
|
| - Execution::Call(isolate_, startup_fct, undefined, 0, nullptr);
|
| -
|
| - if (retval.is_null()) {
|
| - thrower_->Error("WASM.instantiateModule(): start function failed");
|
| - return nothing;
|
| - }
|
| - }
|
| -
|
| {
|
| Handle<Object> global_handle =
|
| isolate_->global_handles()->Create(*instance);
|
| @@ -1446,6 +1421,38 @@ class WasmInstanceBuilder {
|
| }
|
| }
|
|
|
| + //--------------------------------------------------------------------------
|
| + // Run the start function if one was specified.
|
| + //--------------------------------------------------------------------------
|
| + if (compiled_module_->has_startup_function()) {
|
| + Handle<FixedArray> startup_data = compiled_module_->startup_function();
|
| + HandleScope scope(isolate_);
|
| + int32_t start_index =
|
| + startup_data->GetValueChecked<Smi>(isolate_, kExportIndex)->value();
|
| + Handle<Code> startup_code =
|
| + code_table->GetValueChecked<Code>(isolate_, start_index);
|
| + int arity = Smi::cast(startup_data->get(kExportArity))->value();
|
| + MaybeHandle<ByteArray> startup_signature =
|
| + startup_data->GetValue<ByteArray>(isolate_, kExportedSignature);
|
| + Handle<JSFunction> startup_fct = WrapExportCodeAsJSFunction(
|
| + isolate_, startup_code, factory->InternalizeUtf8String("start"),
|
| + arity, startup_signature, instance);
|
| + RecordStats(isolate_, *startup_code);
|
| + // Call the JS function.
|
| + Handle<Object> undefined = factory->undefined_value();
|
| + MaybeHandle<Object> retval =
|
| + Execution::Call(isolate_, startup_fct, undefined, 0, nullptr);
|
| +
|
| + if (retval.is_null()) {
|
| + thrower_->Error("WASM.instantiateModule(): start function failed");
|
| + // It's unfortunate that the new instance is already linked in the
|
| + // chain. However, we need to set up everything before executing the
|
| + // start function, such that stack trace information can be generated
|
| + // correctly already in the start function.
|
| + return nothing;
|
| + }
|
| + }
|
| +
|
| DCHECK(wasm::IsWasmObject(*instance));
|
|
|
| TRACE("Finishing instance %d\n", compiled_module_->instance_id());
|
|
|