Index: src/wasm/wasm-js.cc |
diff --git a/src/wasm/wasm-js.cc b/src/wasm/wasm-js.cc |
index 254fd7061abf9363a390deec8a8b00d560d5f330..57ee2654f9981e96d4b9a513d09689f5c60f590d 100644 |
--- a/src/wasm/wasm-js.cc |
+++ b/src/wasm/wasm-js.cc |
@@ -27,6 +27,8 @@ using v8::internal::wasm::ErrorThrower; |
namespace v8 { |
+static const int kWasmMemoryBufferFieldIndex = 0; |
+ |
namespace { |
i::Handle<i::String> v8_str(i::Isolate* isolate, const char* str) { |
return isolate->factory()->NewStringFromAsciiChecked(str); |
@@ -509,7 +511,8 @@ void WebAssemblyMemoryGetBuffer( |
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(0), i_isolate); |
+ i::Handle<i::Object> buffer( |
+ receiver->GetInternalField(kWasmMemoryBufferFieldIndex), i_isolate); |
DCHECK(buffer->IsJSArrayBuffer()); |
v8::ReturnValue<v8::Value> return_value = args.GetReturnValue(); |
return_value.Set(Utils::ToLocal(buffer)); |
@@ -523,7 +526,7 @@ i::Handle<i::JSObject> i::WasmJs::CreateWasmMemoryObject( |
i_isolate->native_context()->wasm_memory_constructor()); |
i::Handle<i::JSObject> memory_obj = |
i_isolate->factory()->NewJSObject(memory_ctor); |
- memory_obj->SetInternalField(0, *buffer); |
+ memory_obj->SetInternalField(kWasmMemoryBufferFieldIndex, *buffer); |
memory_obj->SetInternalField( |
1, has_maximum |
? static_cast<i::Object*>(i::Smi::FromInt(maximum)) |
@@ -737,5 +740,24 @@ void WasmJs::InstallWasmMapsIfNeeded(Isolate* isolate, |
} |
} |
+bool WasmJs::IsWasmMemoryObject(Isolate* isolate, Handle<Object> value) { |
+ if (value->IsJSObject()) { |
+ i::Handle<i::JSObject> object = i::Handle<i::JSObject>::cast(value); |
+ i::Handle<i::Symbol> sym(isolate->context()->wasm_memory_sym(), isolate); |
+ Maybe<bool> has_brand = i::JSObject::HasOwnProperty(object, sym); |
+ if (has_brand.IsNothing()) return false; |
+ if (has_brand.ToChecked()) return true; |
+ } |
+ return false; |
+} |
+ |
+Handle<JSArrayBuffer> WasmJs::GetWasmMemoryArrayBuffer(Isolate* isolate, |
+ Handle<Object> value) { |
+ DCHECK(IsWasmMemoryObject(isolate, value)); |
+ Handle<Object> buf( |
+ JSObject::cast(*value)->GetInternalField(kWasmMemoryBufferFieldIndex), |
+ isolate); |
+ return Handle<JSArrayBuffer>::cast(buf); |
+} |
} // namespace internal |
} // namespace v8 |