Index: src/wasm/wasm-module.cc |
diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc |
index f133832a89b7eb7e83bfa65a4704bd4739caf586..abbc2ba85d90d2486ec6ca836465315f023759d8 100644 |
--- a/src/wasm/wasm-module.cc |
+++ b/src/wasm/wasm-module.cc |
@@ -565,8 +565,8 @@ void CompileSequentially(Isolate* isolate, const WasmModule* module, |
code = compiler::WasmCompilationUnit::CompileWasmFunction( |
thrower, isolate, module_env, &func); |
if (code.is_null()) { |
- thrower->Error("Compilation of #%d:%.*s failed.", i, str.length(), |
- str.start()); |
+ thrower->CompileError("Compilation of #%d:%.*s failed.", i, str.length(), |
+ str.start()); |
break; |
} |
// Install the code into the linker table. |
@@ -1268,7 +1268,7 @@ class WasmInstanceBuilder { |
NewArrayBuffer(isolate_, globals_size); |
globals = global_buffer; |
if (globals.is_null()) { |
- thrower_->Error("Out of memory: wasm globals"); |
+ thrower_->RangeError("Out of memory: wasm globals"); |
return nothing; |
} |
Address old_address = owner.is_null() |
@@ -1425,6 +1425,8 @@ class WasmInstanceBuilder { |
} |
} |
+ DCHECK(wasm::IsWasmObject(*instance)); |
+ |
//-------------------------------------------------------------------------- |
// Run the start function if one was specified. |
//-------------------------------------------------------------------------- |
@@ -1448,7 +1450,8 @@ class WasmInstanceBuilder { |
Execution::Call(isolate_, startup_fct, undefined, 0, nullptr); |
if (retval.is_null()) { |
- thrower_->Error("WASM.instantiateModule(): start function failed"); |
+ DCHECK(isolate_->has_pending_exception()); |
+ isolate_->OptionalRescheduleException(false); |
// 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 |
@@ -1457,8 +1460,7 @@ class WasmInstanceBuilder { |
} |
} |
- DCHECK(wasm::IsWasmObject(*instance)); |
- |
+ DCHECK(!isolate_->has_pending_exception()); |
TRACE("Finishing instance %d\n", compiled_module_->instance_id()); |
TRACE_CHAIN(WasmCompiledModule::cast(module_object_->GetInternalField(0))); |
return instance; |
@@ -1478,17 +1480,17 @@ class WasmInstanceBuilder { |
MaybeHandle<String> function_name) { |
Handle<String> function_name_handle; |
if (function_name.ToHandle(&function_name_handle)) { |
- thrower_->Error("Import #%d module=\"%.*s\" function=\"%.*s\" error: %s", |
- index, module_name->length(), |
- module_name->ToCString().get(), |
- function_name_handle->length(), |
- function_name_handle->ToCString().get(), error); |
+ thrower_->TypeError( |
+ "Import #%d module=\"%.*s\" function=\"%.*s\" error: %s", index, |
+ module_name->length(), module_name->ToCString().get(), |
+ function_name_handle->length(), |
+ function_name_handle->ToCString().get(), error); |
} else { |
- thrower_->Error("Import #%d module=\"%.*s\" error: %s", index, |
- module_name->length(), module_name->ToCString().get(), |
- error); |
+ thrower_->TypeError("Import #%d module=\"%.*s\" error: %s", index, |
+ module_name->length(), module_name->ToCString().get(), |
+ error); |
} |
- thrower_->Error("Import "); |
+ thrower_->TypeError("Import "); |
return MaybeHandle<JSFunction>(); |
} |
@@ -1773,14 +1775,14 @@ class WasmInstanceBuilder { |
// Allocate memory for a module instance as a new JSArrayBuffer. |
Handle<JSArrayBuffer> AllocateMemory(uint32_t min_mem_pages) { |
if (min_mem_pages > WasmModule::kMaxMemPages) { |
- thrower_->Error("Out of memory: wasm memory too large"); |
+ thrower_->RangeError("Out of memory: wasm memory too large"); |
return Handle<JSArrayBuffer>::null(); |
} |
Handle<JSArrayBuffer> mem_buffer = |
NewArrayBuffer(isolate_, min_mem_pages * WasmModule::kPageSize); |
if (mem_buffer.is_null()) { |
- thrower_->Error("Out of memory: wasm memory"); |
+ thrower_->RangeError("Out of memory: wasm memory"); |
} |
return mem_buffer; |
} |
@@ -1881,8 +1883,8 @@ class WasmInstanceBuilder { |
v8::Maybe<bool> status = JSReceiver::DefineOwnProperty( |
isolate_, exports_object, name, &desc, Object::THROW_ON_ERROR); |
if (!status.IsJust()) { |
- thrower_->Error("export of %.*s failed.", name->length(), |
- name->ToCString().get()); |
+ thrower_->TypeError("export of %.*s failed.", name->length(), |
+ name->ToCString().get()); |
return; |
} |
} |
@@ -2166,7 +2168,7 @@ MaybeHandle<JSObject> wasm::CreateModuleObjectFromBytes( |
DecodeWasmModule(isolate, &zone, start, end, false, origin); |
std::unique_ptr<const WasmModule> decoded_module(result.val); |
if (result.failed()) { |
- thrower->Failed("Wasm decoding failed", result); |
+ thrower->CompileFailed("Wasm decoding failed", result); |
return nothing; |
} |
MaybeHandle<WasmCompiledModule> maybe_compiled_module = |