Chromium Code Reviews| Index: src/wasm/wasm-module.cc |
| diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc |
| index 6f44991cf979be0404a21542e43ce0bc3e633c7e..bf63642e626641f682fc6c13a49b43819f7b946c 100644 |
| --- a/src/wasm/wasm-module.cc |
| +++ b/src/wasm/wasm-module.cc |
| @@ -1121,8 +1121,8 @@ void wasm::UpdateDispatchTables(Isolate* isolate, |
| class WasmInstanceBuilder { |
| public: |
| WasmInstanceBuilder(Isolate* isolate, ErrorThrower* thrower, |
| - Handle<JSObject> module_object, Handle<JSReceiver> ffi, |
| - Handle<JSArrayBuffer> memory) |
| + Handle<WasmModuleObject> module_object, |
| + Handle<JSReceiver> ffi, Handle<JSArrayBuffer> memory) |
| : isolate_(isolate), |
| thrower_(thrower), |
| module_object_(module_object), |
| @@ -1154,8 +1154,7 @@ class WasmInstanceBuilder { |
| Handle<WasmCompiledModule> original; |
| { |
| DisallowHeapAllocation no_gc; |
| - original = handle( |
| - WasmCompiledModule::cast(module_object_->GetInternalField(0))); |
| + original = handle(module_object_->compiled_module()); |
| if (original->has_weak_owning_instance()) { |
| owner = handle(WasmInstanceObject::cast( |
| original->weak_owning_instance()->value())); |
| @@ -1442,7 +1441,7 @@ class WasmInstanceBuilder { |
| DCHECK(!isolate_->has_pending_exception()); |
| TRACE("Finishing instance %d\n", compiled_module_->instance_id()); |
| - TRACE_CHAIN(WasmCompiledModule::cast(module_object_->GetInternalField(0))); |
| + TRACE_CHAIN(module_object_->compiled_module()); |
| return instance; |
| } |
| @@ -1458,7 +1457,7 @@ class WasmInstanceBuilder { |
| Isolate* isolate_; |
| WasmModule* module_; |
| ErrorThrower* thrower_; |
| - Handle<JSObject> module_object_; |
| + Handle<WasmModuleObject> module_object_; |
| Handle<JSReceiver> ffi_; |
| Handle<JSArrayBuffer> memory_; |
| Handle<JSArrayBuffer> globals_; |
| @@ -1475,9 +1474,9 @@ class WasmInstanceBuilder { |
| import_name->length(), import_name->ToCString().get(), error); |
| } |
| - MaybeHandle<Object> ReportTypeError(const char* error, uint32_t index, |
| + MaybeHandle<Object> ReportLinkError(const char* error, uint32_t index, |
| Handle<String> module_name) { |
| - thrower_->TypeError("Import #%d module=\"%.*s\" error: %s", index, |
| + thrower_->LinkError("Import #%d module=\"%.*s\" error: %s", index, |
| module_name->length(), module_name->ToCString().get(), |
| error); |
| return MaybeHandle<Object>(); |
| @@ -1486,22 +1485,22 @@ class WasmInstanceBuilder { |
| // Look up an import value in the {ffi_} object. |
| MaybeHandle<Object> LookupImport(uint32_t index, Handle<String> module_name, |
| Handle<String> import_name) { |
| - if (ffi_.is_null()) { |
| - return ReportTypeError("FFI is not an object", index, module_name); |
| - } |
| + // We pre-validated in the js-api layer that the ffi object is present, and |
| + // a JSObject, if the module has imports. |
|
rossberg
2017/01/13 08:59:12
Actually, I just realised that it is incorrect tha
|
| + DCHECK(!ffi_.is_null()); |
| // Look up the module first. |
| MaybeHandle<Object> result = |
| Object::GetPropertyOrElement(ffi_, module_name); |
| if (result.is_null()) { |
| - return ReportTypeError("module not found", index, module_name); |
| + return ReportLinkError("module not found", index, module_name); |
| } |
| Handle<Object> module = result.ToHandleChecked(); |
| // Look up the value in the module. |
| if (!module->IsJSReceiver()) { |
| - return ReportTypeError("module is not an object or function", index, |
| + return ReportLinkError("module is not an object or function", index, |
| module_name); |
| } |
| @@ -2082,8 +2081,9 @@ class WasmInstanceBuilder { |
| // Instantiates a WASM module, creating a WebAssembly.Instance from a |
| // WebAssembly.Module. |
| MaybeHandle<WasmInstanceObject> WasmModule::Instantiate( |
| - Isolate* isolate, ErrorThrower* thrower, Handle<JSObject> wasm_module, |
| - Handle<JSReceiver> ffi, Handle<JSArrayBuffer> memory) { |
| + Isolate* isolate, ErrorThrower* thrower, |
| + Handle<WasmModuleObject> wasm_module, Handle<JSReceiver> ffi, |
| + Handle<JSArrayBuffer> memory) { |
| WasmInstanceBuilder builder(isolate, thrower, wasm_module, ffi, memory); |
| return builder.Build(); |
| } |