| Index: src/wasm/wasm-module.cc
|
| diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc
|
| index df99e93e6169db06b8de88febb17d372178c6e5e..40015a70e161c889906896a242e94d7b4fa399b9 100644
|
| --- a/src/wasm/wasm-module.cc
|
| +++ b/src/wasm/wasm-module.cc
|
| @@ -2604,6 +2604,44 @@
|
| instance_object.ToHandleChecked());
|
| }
|
|
|
| +void wasm::AsyncCompileAndInstantiate(Isolate* isolate,
|
| + Handle<JSPromise> promise,
|
| + const ModuleWireBytes& bytes,
|
| + MaybeHandle<JSReceiver> imports) {
|
| + ErrorThrower thrower(isolate, nullptr);
|
| +
|
| + // Compile the module.
|
| + MaybeHandle<WasmModuleObject> module_object =
|
| + SyncCompile(isolate, &thrower, bytes);
|
| + if (thrower.error()) {
|
| + RejectPromise(isolate, handle(isolate->context()), &thrower, promise);
|
| + return;
|
| + }
|
| + Handle<WasmModuleObject> module = module_object.ToHandleChecked();
|
| +
|
| + // Instantiate the module.
|
| + MaybeHandle<WasmInstanceObject> instance_object = SyncInstantiate(
|
| + isolate, &thrower, module, imports, Handle<JSArrayBuffer>::null());
|
| + if (thrower.error()) {
|
| + RejectPromise(isolate, handle(isolate->context()), &thrower, promise);
|
| + return;
|
| + }
|
| +
|
| + Handle<JSFunction> object_function =
|
| + Handle<JSFunction>(isolate->native_context()->object_function(), isolate);
|
| + Handle<JSObject> ret =
|
| + isolate->factory()->NewJSObject(object_function, TENURED);
|
| + Handle<String> module_property_name =
|
| + isolate->factory()->InternalizeUtf8String("module");
|
| + Handle<String> instance_property_name =
|
| + isolate->factory()->InternalizeUtf8String("instance");
|
| + JSObject::AddProperty(ret, module_property_name, module, NONE);
|
| + JSObject::AddProperty(ret, instance_property_name,
|
| + instance_object.ToHandleChecked(), NONE);
|
| +
|
| + ResolvePromise(isolate, handle(isolate->context()), promise, ret);
|
| +}
|
| +
|
| // Encapsulates all the state and steps of an asynchronous compilation.
|
| // An asynchronous compile job consists of a number of tasks that are executed
|
| // as foreground and background tasks. Any phase that touches the V8 heap or
|
|
|