OLD | NEW |
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 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 i::Handle<i::JSObject> i_obj = | 323 i::Handle<i::JSObject> i_obj = |
324 i::Handle<i::JSObject>::cast(v8::Utils::OpenHandle(*obj)); | 324 i::Handle<i::JSObject>::cast(v8::Utils::OpenHandle(*obj)); |
325 | 325 |
326 i::Handle<i::JSReceiver> ffi = i::Handle<i::JSObject>::null(); | 326 i::Handle<i::JSReceiver> ffi = i::Handle<i::JSObject>::null(); |
327 if (args.Length() > 1 && args[1]->IsObject()) { | 327 if (args.Length() > 1 && args[1]->IsObject()) { |
328 Local<Object> obj = Local<Object>::Cast(args[1]); | 328 Local<Object> obj = Local<Object>::Cast(args[1]); |
329 ffi = i::Handle<i::JSReceiver>::cast(v8::Utils::OpenHandle(*obj)); | 329 ffi = i::Handle<i::JSReceiver>::cast(v8::Utils::OpenHandle(*obj)); |
330 } | 330 } |
331 | 331 |
332 i::Handle<i::JSArrayBuffer> memory = i::Handle<i::JSArrayBuffer>::null(); | 332 i::Handle<i::JSArrayBuffer> memory = i::Handle<i::JSArrayBuffer>::null(); |
333 if (args.Length() > 2 && args[2]->IsArrayBuffer()) { | 333 if (args.Length() > 2 && args[2]->IsObject()) { |
334 Local<Object> obj = Local<Object>::Cast(args[2]); | 334 Local<Object> obj = Local<Object>::Cast(args[2]); |
335 i::Handle<i::Object> mem_obj = v8::Utils::OpenHandle(*obj); | 335 i::Handle<i::Object> mem_obj = v8::Utils::OpenHandle(*obj); |
336 memory = i::Handle<i::JSArrayBuffer>(i::JSArrayBuffer::cast(*mem_obj)); | 336 if (i::WasmJs::IsWasmMemoryObject(i_isolate, mem_obj)) { |
| 337 memory = i::WasmJs::GetWasmMemoryArrayBuffer(i_isolate, mem_obj); |
| 338 } |
337 } | 339 } |
338 i::MaybeHandle<i::JSObject> instance = | 340 i::MaybeHandle<i::JSObject> instance = |
339 i::wasm::WasmModule::Instantiate(i_isolate, &thrower, i_obj, ffi, memory); | 341 i::wasm::WasmModule::Instantiate(i_isolate, &thrower, i_obj, ffi, memory); |
340 if (instance.is_null()) { | 342 if (instance.is_null()) { |
341 if (!thrower.error()) thrower.RuntimeError("Could not instantiate module"); | 343 if (!thrower.error()) thrower.RuntimeError("Could not instantiate module"); |
342 return; | 344 return; |
343 } | 345 } |
344 DCHECK(!i_isolate->has_pending_exception()); | 346 DCHECK(!i_isolate->has_pending_exception()); |
345 v8::ReturnValue<v8::Value> return_value = args.GetReturnValue(); | 347 v8::ReturnValue<v8::Value> return_value = args.GetReturnValue(); |
346 return_value.Set(Utils::ToLocal(instance.ToHandleChecked())); | 348 return_value.Set(Utils::ToLocal(instance.ToHandleChecked())); |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 // There has been an exception, just return. | 460 // There has been an exception, just return. |
459 return; | 461 return; |
460 } | 462 } |
461 if (has_maximum.FromJust()) { | 463 if (has_maximum.FromJust()) { |
462 if (!GetIntegerProperty(isolate, &thrower, context, descriptor, maximum_key, | 464 if (!GetIntegerProperty(isolate, &thrower, context, descriptor, maximum_key, |
463 &maximum, initial, 65536)) { | 465 &maximum, initial, 65536)) { |
464 return; | 466 return; |
465 } | 467 } |
466 } | 468 } |
467 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 469 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
468 i::Handle<i::JSArrayBuffer> buffer = | |
469 i_isolate->factory()->NewJSArrayBuffer(i::SharedFlag::kNotShared); | |
470 size_t size = static_cast<size_t>(i::wasm::WasmModule::kPageSize) * | 470 size_t size = static_cast<size_t>(i::wasm::WasmModule::kPageSize) * |
471 static_cast<size_t>(initial); | 471 static_cast<size_t>(initial); |
472 i::JSArrayBuffer::SetupAllocatingData(buffer, i_isolate, size); | 472 i::Handle<i::JSArrayBuffer> buffer = |
| 473 i::wasm::NewArrayBuffer(i_isolate, size, i::FLAG_wasm_guard_pages); |
473 | 474 |
474 i::Handle<i::JSObject> memory_obj = i::WasmJs::CreateWasmMemoryObject( | 475 i::Handle<i::JSObject> memory_obj = i::WasmJs::CreateWasmMemoryObject( |
475 i_isolate, buffer, has_maximum.FromJust(), maximum); | 476 i_isolate, buffer, has_maximum.FromJust(), maximum); |
476 v8::ReturnValue<v8::Value> return_value = args.GetReturnValue(); | 477 v8::ReturnValue<v8::Value> return_value = args.GetReturnValue(); |
477 return_value.Set(Utils::ToLocal(memory_obj)); | 478 return_value.Set(Utils::ToLocal(memory_obj)); |
478 } | 479 } |
479 | 480 |
480 void WebAssemblyTableGetLength( | 481 void WebAssemblyTableGetLength( |
481 const v8::FunctionCallbackInfo<v8::Value>& args) { | 482 const v8::FunctionCallbackInfo<v8::Value>& args) { |
482 v8::Isolate* isolate = args.GetIsolate(); | 483 v8::Isolate* isolate = args.GetIsolate(); |
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
987 if (!memory_object->IsUndefined(isolate)) { | 988 if (!memory_object->IsUndefined(isolate)) { |
988 DCHECK(IsWasmMemoryObject(isolate, memory_object)); | 989 DCHECK(IsWasmMemoryObject(isolate, memory_object)); |
989 // TODO(gdeepti): This should be a weak list of instance objects | 990 // TODO(gdeepti): This should be a weak list of instance objects |
990 // for instances that share memory. | 991 // for instances that share memory. |
991 JSObject::cast(*memory_object) | 992 JSObject::cast(*memory_object) |
992 ->SetInternalField(kWasmMemoryInstanceObject, *instance); | 993 ->SetInternalField(kWasmMemoryInstanceObject, *instance); |
993 } | 994 } |
994 } | 995 } |
995 } // namespace internal | 996 } // namespace internal |
996 } // namespace v8 | 997 } // namespace v8 |
OLD | NEW |