| Index: src/wasm/wasm-module.cc
|
| diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc
|
| index 79b99fe04d90f0618cfdf557ff3dd10f14809d34..060fe8b854a698cf26c65551f883d291254cf693 100644
|
| --- a/src/wasm/wasm-module.cc
|
| +++ b/src/wasm/wasm-module.cc
|
| @@ -666,7 +666,7 @@ std::ostream& wasm::operator<<(std::ostream& os, const WasmFunctionName& pair) {
|
| return os;
|
| }
|
|
|
| -Object* wasm::GetOwningWasmInstance(Code* code) {
|
| +WasmInstanceObject* wasm::GetOwningWasmInstance(Code* code) {
|
| DCHECK(code->kind() == Code::WASM_FUNCTION);
|
| DisallowHeapAllocation no_gc;
|
| FixedArray* deopt_data = code->deoptimization_data();
|
| @@ -675,7 +675,8 @@ Object* wasm::GetOwningWasmInstance(Code* code) {
|
| Object* weak_link = deopt_data->get(0);
|
| if (!weak_link->IsWeakCell()) return nullptr;
|
| WeakCell* cell = WeakCell::cast(weak_link);
|
| - return cell->value();
|
| + if (!cell->value()) return nullptr;
|
| + return WasmInstanceObject::cast(cell->value());
|
| }
|
|
|
| int wasm::GetFunctionCodeOffset(Handle<WasmCompiledModule> compiled_module,
|
| @@ -958,8 +959,8 @@ class WasmInstanceBuilder {
|
| memory_(memory) {}
|
|
|
| // Build an instance, in all of its glory.
|
| - MaybeHandle<JSObject> Build() {
|
| - MaybeHandle<JSObject> nothing;
|
| + MaybeHandle<WasmInstanceObject> Build() {
|
| + MaybeHandle<WasmInstanceObject> nothing;
|
| HistogramTimerScope wasm_instantiate_module_time_scope(
|
| isolate_->counters()->wasm_instantiate_module_time());
|
| Factory* factory = isolate_->factory();
|
| @@ -1833,11 +1834,9 @@ class WasmInstanceBuilder {
|
|
|
| // Instantiates a WASM module, creating a WebAssembly.Instance from a
|
| // WebAssembly.Module.
|
| -MaybeHandle<JSObject> WasmModule::Instantiate(Isolate* isolate,
|
| - ErrorThrower* thrower,
|
| - Handle<JSObject> wasm_module,
|
| - Handle<JSReceiver> ffi,
|
| - Handle<JSArrayBuffer> memory) {
|
| +MaybeHandle<WasmInstanceObject> WasmModule::Instantiate(
|
| + Isolate* isolate, ErrorThrower* thrower, Handle<JSObject> wasm_module,
|
| + Handle<JSReceiver> ffi, Handle<JSArrayBuffer> memory) {
|
| WasmInstanceBuilder builder(isolate, thrower, wasm_module, ffi, memory);
|
| return builder.Build();
|
| }
|
| @@ -2000,24 +1999,23 @@ bool wasm::ValidateModuleBytes(Isolate* isolate, const byte* start,
|
| return result.ok();
|
| }
|
|
|
| -MaybeHandle<JSArrayBuffer> wasm::GetInstanceMemory(Isolate* isolate,
|
| - Handle<JSObject> object) {
|
| - auto instance = Handle<WasmInstanceObject>::cast(object);
|
| +MaybeHandle<JSArrayBuffer> wasm::GetInstanceMemory(
|
| + Isolate* isolate, Handle<WasmInstanceObject> instance) {
|
| if (instance->has_memory_buffer()) {
|
| return Handle<JSArrayBuffer>(instance->get_memory_buffer(), isolate);
|
| }
|
| return MaybeHandle<JSArrayBuffer>();
|
| }
|
|
|
| -void SetInstanceMemory(Handle<JSObject> object, JSArrayBuffer* buffer) {
|
| +void SetInstanceMemory(Handle<WasmInstanceObject> instance,
|
| + JSArrayBuffer* buffer) {
|
| DisallowHeapAllocation no_gc;
|
| - auto instance = Handle<WasmInstanceObject>::cast(object);
|
| instance->set_memory_buffer(buffer);
|
| instance->get_compiled_module()->set_ptr_to_memory(buffer);
|
| }
|
|
|
| int32_t wasm::GetInstanceMemorySize(Isolate* isolate,
|
| - Handle<JSObject> instance) {
|
| + Handle<WasmInstanceObject> instance) {
|
| MaybeHandle<JSArrayBuffer> maybe_mem_buffer =
|
| GetInstanceMemory(isolate, instance);
|
| Handle<JSArrayBuffer> buffer;
|
| @@ -2045,10 +2043,9 @@ uint32_t GetMaxInstanceMemorySize(Isolate* isolate,
|
| return WasmModule::kV8MaxPages;
|
| }
|
|
|
| -int32_t wasm::GrowInstanceMemory(Isolate* isolate, Handle<JSObject> object,
|
| +int32_t wasm::GrowInstanceMemory(Isolate* isolate,
|
| + Handle<WasmInstanceObject> instance,
|
| uint32_t pages) {
|
| - if (!IsWasmInstance(*object)) return -1;
|
| - auto instance = Handle<WasmInstanceObject>::cast(object);
|
| if (pages == 0) return GetInstanceMemorySize(isolate, instance);
|
| uint32_t max_pages = GetMaxInstanceMemorySize(isolate, instance);
|
|
|
| @@ -2098,22 +2095,20 @@ int32_t wasm::GrowInstanceMemory(Isolate* isolate, Handle<JSObject> object,
|
| }
|
|
|
| void testing::ValidateInstancesChain(Isolate* isolate,
|
| - Handle<JSObject> wasm_module,
|
| + Handle<WasmModuleObject> module_obj,
|
| int instance_count) {
|
| CHECK_GE(instance_count, 0);
|
| DisallowHeapAllocation no_gc;
|
| - WasmCompiledModule* compiled_module =
|
| - WasmCompiledModule::cast(wasm_module->GetInternalField(0));
|
| + WasmCompiledModule* compiled_module = module_obj->get_compiled_module();
|
| CHECK_EQ(JSObject::cast(compiled_module->ptr_to_weak_wasm_module()->value()),
|
| - *wasm_module);
|
| + *module_obj);
|
| Object* prev = nullptr;
|
| int found_instances = compiled_module->has_weak_owning_instance() ? 1 : 0;
|
| WasmCompiledModule* current_instance = compiled_module;
|
| while (current_instance->has_weak_next_instance()) {
|
| CHECK((prev == nullptr && !current_instance->has_weak_prev_instance()) ||
|
| current_instance->ptr_to_weak_prev_instance()->value() == prev);
|
| - CHECK_EQ(current_instance->ptr_to_weak_wasm_module()->value(),
|
| - *wasm_module);
|
| + CHECK_EQ(current_instance->ptr_to_weak_wasm_module()->value(), *module_obj);
|
| CHECK(IsWasmInstance(
|
| current_instance->ptr_to_weak_owning_instance()->value()));
|
| prev = current_instance;
|
| @@ -2126,21 +2121,19 @@ void testing::ValidateInstancesChain(Isolate* isolate,
|
| }
|
|
|
| void testing::ValidateModuleState(Isolate* isolate,
|
| - Handle<JSObject> wasm_module) {
|
| + Handle<WasmModuleObject> module_obj) {
|
| DisallowHeapAllocation no_gc;
|
| - WasmCompiledModule* compiled_module =
|
| - WasmCompiledModule::cast(wasm_module->GetInternalField(0));
|
| + WasmCompiledModule* compiled_module = module_obj->get_compiled_module();
|
| CHECK(compiled_module->has_weak_wasm_module());
|
| - CHECK_EQ(compiled_module->ptr_to_weak_wasm_module()->value(), *wasm_module);
|
| + CHECK_EQ(compiled_module->ptr_to_weak_wasm_module()->value(), *module_obj);
|
| CHECK(!compiled_module->has_weak_prev_instance());
|
| CHECK(!compiled_module->has_weak_next_instance());
|
| CHECK(!compiled_module->has_weak_owning_instance());
|
| }
|
|
|
| void testing::ValidateOrphanedInstance(Isolate* isolate,
|
| - Handle<JSObject> object) {
|
| + Handle<WasmInstanceObject> instance) {
|
| DisallowHeapAllocation no_gc;
|
| - WasmInstanceObject* instance = WasmInstanceObject::cast(*object);
|
| WasmCompiledModule* compiled_module = instance->get_compiled_module();
|
| CHECK(compiled_module->has_weak_wasm_module());
|
| CHECK(compiled_module->ptr_to_weak_wasm_module()->cleared());
|
|
|