Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Unified Diff: src/wasm/wasm-js.cc

Issue 2637703004: Delay all exceptions in WebAssembly.instantiate (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | test/mjsunit/wasm/js-api.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/wasm/wasm-js.cc
diff --git a/src/wasm/wasm-js.cc b/src/wasm/wasm-js.cc
index 3fd70cceaa14200a2c5ce2b55bde8c35fafab9b7..445ecc29093bbcd8e55a4f70e0ccb0ce640b4ffb 100644
--- a/src/wasm/wasm-js.cc
+++ b/src/wasm/wasm-js.cc
@@ -321,32 +321,35 @@ void WebAssemblyInstantiate(const v8::FunctionCallbackInfo<v8::Value>& args) {
HandleScope scope(isolate);
ErrorThrower thrower(i_isolate, "WebAssembly.compile()");
+ Local<Context> context = isolate->GetCurrentContext();
+ v8::Local<v8::Promise::Resolver> resolver;
+ if (!v8::Promise::Resolver::New(context).ToLocal(&resolver)) return;
+ v8::ReturnValue<v8::Value> return_value = args.GetReturnValue();
+ return_value.Set(resolver->GetPromise());
+
if (args.Length() < 1) {
thrower.TypeError("Argument 0 must be a buffer source");
+ resolver->Reject(context, Utils::ToLocal(thrower.Reify()));
return;
}
+
i::MaybeHandle<i::WasmModuleObject> module_obj =
CreateModuleObject(isolate, args[0], &thrower);
-
- Local<Context> context = isolate->GetCurrentContext();
- v8::Local<v8::Promise::Resolver> resolver;
- if (!v8::Promise::Resolver::New(context).ToLocal(&resolver)) return;
if (module_obj.is_null()) {
DCHECK(thrower.error());
resolver->Reject(context, Utils::ToLocal(thrower.Reify()));
+ return;
+ }
+
+ MaybeLocal<Value> instance = InstantiateModuleImpl(
+ i_isolate, module_obj.ToHandleChecked(), args, &thrower);
+ if (instance.IsEmpty()) {
+ DCHECK(thrower.error());
+ resolver->Reject(context, Utils::ToLocal(thrower.Reify()));
} else {
- MaybeLocal<Value> instance = InstantiateModuleImpl(
- i_isolate, module_obj.ToHandleChecked(), args, &thrower);
- if (instance.IsEmpty()) {
- DCHECK(thrower.error());
- resolver->Reject(context, Utils::ToLocal(thrower.Reify()));
- } else {
- DCHECK(!thrower.error());
- resolver->Resolve(context, instance.ToLocalChecked());
- }
+ DCHECK(!thrower.error());
+ resolver->Resolve(context, instance.ToLocalChecked());
}
- v8::ReturnValue<v8::Value> return_value = args.GetReturnValue();
- return_value.Set(resolver->GetPromise());
}
bool GetIntegerProperty(v8::Isolate* isolate, ErrorThrower* thrower,
« no previous file with comments | « no previous file | test/mjsunit/wasm/js-api.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698