Index: src/wasm/wasm-js.cc |
diff --git a/src/wasm/wasm-js.cc b/src/wasm/wasm-js.cc |
index 4d395b1f08e8ed8504a259ebe7e88f49b10d6762..ac60f3bf834b4ab8677658dd1ac886599b327eec 100644 |
--- a/src/wasm/wasm-js.cc |
+++ b/src/wasm/wasm-js.cc |
@@ -28,12 +28,6 @@ using v8::internal::wasm::ErrorThrower; |
namespace v8 { |
-enum WasmMemoryObjectData { |
- kWasmMemoryBuffer, |
- kWasmMemoryMaximum, |
- kWasmMemoryInstanceObject |
-}; |
- |
namespace { |
i::Handle<i::String> v8_str(i::Isolate* isolate, const char* str) { |
return isolate->factory()->NewStringFromAsciiChecked(str); |
@@ -230,6 +224,7 @@ void WebAssemblyInstance(const v8::FunctionCallbackInfo<v8::Value>& args) { |
i_isolate); |
} else { |
thrower.TypeError("Argument 2 must be a WebAssembly.Memory"); |
+ return; |
} |
} |
i::MaybeHandle<i::JSObject> instance = |
@@ -533,31 +528,15 @@ void WebAssemblyMemoryGrow(const v8::FunctionCallbackInfo<v8::Value>& args) { |
uint32_t delta = args[0]->Uint32Value(context).FromJust(); |
i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
- i::Handle<i::JSObject> receiver = |
- i::Handle<i::JSObject>::cast(Utils::OpenHandle(*args.This())); |
- i::Handle<i::Object> instance_object( |
- receiver->GetInternalField(kWasmMemoryInstanceObject), i_isolate); |
- i::Handle<i::WasmInstanceObject> instance( |
- i::Handle<i::WasmInstanceObject>::cast(instance_object)); |
- |
- // TODO(gdeepti) Implement growing memory when shared by different |
- // instances. |
- int32_t ret = internal::wasm::GrowInstanceMemory(i_isolate, instance, delta); |
+ i::Handle<i::Object> receiver = |
+ i::Handle<i::Object>::cast(Utils::OpenHandle(*args.This())); |
+ int32_t ret = i::wasm::GrowWebAssemblyMemory(i_isolate, receiver, delta); |
if (ret == -1) { |
v8::Local<v8::Value> e = v8::Exception::Error( |
v8_str(isolate, "Unable to grow instance memory.")); |
isolate->ThrowException(e); |
return; |
} |
- i::MaybeHandle<i::JSArrayBuffer> buffer = |
- internal::wasm::GetInstanceMemory(i_isolate, instance); |
- if (buffer.is_null()) { |
- v8::Local<v8::Value> e = v8::Exception::Error( |
- v8_str(isolate, "WebAssembly.Memory buffer object not set.")); |
- isolate->ThrowException(e); |
- return; |
- } |
- receiver->SetInternalField(kWasmMemoryBuffer, *buffer.ToHandleChecked()); |
v8::ReturnValue<v8::Value> return_value = args.GetReturnValue(); |
return_value.Set(ret); |
} |
@@ -573,10 +552,9 @@ void WebAssemblyMemoryGetBuffer( |
return; |
} |
i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
- i::Handle<i::JSObject> receiver = |
- i::Handle<i::JSObject>::cast(Utils::OpenHandle(*args.This())); |
- i::Handle<i::Object> buffer(receiver->GetInternalField(kWasmMemoryBuffer), |
- i_isolate); |
+ i::Handle<i::WasmMemoryObject> receiver = |
+ i::Handle<i::WasmMemoryObject>::cast(Utils::OpenHandle(*args.This())); |
+ i::Handle<i::Object> buffer(receiver->get_buffer(), i_isolate); |
DCHECK(buffer->IsJSArrayBuffer()); |
v8::ReturnValue<v8::Value> return_value = args.GetReturnValue(); |
return_value.Set(Utils::ToLocal(buffer)); |