Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Side by Side Diff: src/wasm/wasm-js.cc

Issue 2460773003: [wasm] make WebAssembly.Instance require a WebAssembly.Memory (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | test/mjsunit/wasm/compiled-module-serialization.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/api-natives.h" 5 #include "src/api-natives.h"
6 #include "src/api.h" 6 #include "src/api.h"
7 #include "src/asmjs/asm-js.h" 7 #include "src/asmjs/asm-js.h"
8 #include "src/asmjs/asm-typer.h" 8 #include "src/asmjs/asm-typer.h"
9 #include "src/asmjs/asm-wasm-builder.h" 9 #include "src/asmjs/asm-wasm-builder.h"
10 #include "src/assert-scope.h" 10 #include "src/assert-scope.h"
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 i::Handle<i::JSObject> i_obj = 221 i::Handle<i::JSObject> i_obj =
222 i::Handle<i::JSObject>::cast(v8::Utils::OpenHandle(*obj)); 222 i::Handle<i::JSObject>::cast(v8::Utils::OpenHandle(*obj));
223 223
224 i::Handle<i::JSReceiver> ffi = i::Handle<i::JSObject>::null(); 224 i::Handle<i::JSReceiver> ffi = i::Handle<i::JSObject>::null();
225 if (args.Length() > 1 && args[1]->IsObject()) { 225 if (args.Length() > 1 && args[1]->IsObject()) {
226 Local<Object> obj = Local<Object>::Cast(args[1]); 226 Local<Object> obj = Local<Object>::Cast(args[1]);
227 ffi = i::Handle<i::JSReceiver>::cast(v8::Utils::OpenHandle(*obj)); 227 ffi = i::Handle<i::JSReceiver>::cast(v8::Utils::OpenHandle(*obj));
228 } 228 }
229 229
230 i::Handle<i::JSArrayBuffer> memory = i::Handle<i::JSArrayBuffer>::null(); 230 i::Handle<i::JSArrayBuffer> memory = i::Handle<i::JSArrayBuffer>::null();
231 if (args.Length() > 2 && args[2]->IsArrayBuffer()) { 231 if (args.Length() > 2 && args[2]->IsObject()) {
232 Local<Object> obj = Local<Object>::Cast(args[2]); 232 Local<Object> obj = Local<Object>::Cast(args[2]);
233 i::Handle<i::Object> mem_obj = v8::Utils::OpenHandle(*obj); 233 i::Handle<i::Object> mem_obj = v8::Utils::OpenHandle(*obj);
234 memory = i::Handle<i::JSArrayBuffer>(i::JSArrayBuffer::cast(*mem_obj)); 234 if (i::WasmJs::IsWasmMemoryObject(i_isolate, mem_obj)) {
235 memory = i::WasmJs::GetWasmMemoryArrayBuffer(i_isolate, mem_obj);
236 } else {
237 thrower.TypeError("Argument 2 must be a WebAssembly.Memory");
238 }
235 } 239 }
236 i::MaybeHandle<i::JSObject> instance = 240 i::MaybeHandle<i::JSObject> instance =
237 i::wasm::WasmModule::Instantiate(i_isolate, &thrower, i_obj, ffi, memory); 241 i::wasm::WasmModule::Instantiate(i_isolate, &thrower, i_obj, ffi, memory);
238 if (instance.is_null()) { 242 if (instance.is_null()) {
239 if (!thrower.error()) thrower.RuntimeError("Could not instantiate module"); 243 if (!thrower.error()) thrower.RuntimeError("Could not instantiate module");
240 return; 244 return;
241 } 245 }
242 DCHECK(!i_isolate->has_pending_exception()); 246 DCHECK(!i_isolate->has_pending_exception());
243 v8::ReturnValue<v8::Value> return_value = args.GetReturnValue(); 247 v8::ReturnValue<v8::Value> return_value = args.GetReturnValue();
244 return_value.Set(Utils::ToLocal(instance.ToHandleChecked())); 248 return_value.Set(Utils::ToLocal(instance.ToHandleChecked()));
(...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after
854 if (!memory_object->IsUndefined(isolate)) { 858 if (!memory_object->IsUndefined(isolate)) {
855 DCHECK(IsWasmMemoryObject(isolate, memory_object)); 859 DCHECK(IsWasmMemoryObject(isolate, memory_object));
856 // TODO(gdeepti): This should be a weak list of instance objects 860 // TODO(gdeepti): This should be a weak list of instance objects
857 // for instances that share memory. 861 // for instances that share memory.
858 JSObject::cast(*memory_object) 862 JSObject::cast(*memory_object)
859 ->SetInternalField(kWasmMemoryInstanceObject, *instance); 863 ->SetInternalField(kWasmMemoryInstanceObject, *instance);
860 } 864 }
861 } 865 }
862 } // namespace internal 866 } // namespace internal
863 } // namespace v8 867 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/wasm/compiled-module-serialization.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698