| 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 14 matching lines...) Expand all Loading... |
| 25 #include "src/wasm/wasm-result.h" | 25 #include "src/wasm/wasm-result.h" |
| 26 | 26 |
| 27 typedef uint8_t byte; | 27 typedef uint8_t byte; |
| 28 | 28 |
| 29 using v8::internal::wasm::ErrorThrower; | 29 using v8::internal::wasm::ErrorThrower; |
| 30 | 30 |
| 31 namespace v8 { | 31 namespace v8 { |
| 32 | 32 |
| 33 namespace { | 33 namespace { |
| 34 | 34 |
| 35 #define ASSIGN(type, var, expr) \ | 35 #define ASSIGN(type, var, expr) \ |
| 36 Local<type> var; \ | 36 Local<type> var; \ |
| 37 do { \ | 37 do { \ |
| 38 if (!expr.ToLocal(&var)) { \ | 38 if (!expr.ToLocal(&var)) { \ |
| 39 DCHECK(i_isolate->has_pending_exception()); \ | 39 DCHECK(i_isolate->has_scheduled_exception()); \ |
| 40 } \ | 40 return; \ |
| 41 } else { \ |
| 42 DCHECK(!i_isolate->has_scheduled_exception()); \ |
| 43 } \ |
| 41 } while (false) | 44 } while (false) |
| 42 | 45 |
| 43 // TODO(wasm): move brand check to the respective types, and don't throw | 46 // TODO(wasm): move brand check to the respective types, and don't throw |
| 44 // in it, rather, use a provided ErrorThrower, or let caller handle it. | 47 // in it, rather, use a provided ErrorThrower, or let caller handle it. |
| 45 static bool HasBrand(i::Handle<i::Object> value, i::Handle<i::Symbol> sym) { | 48 static bool HasBrand(i::Handle<i::Object> value, i::Handle<i::Symbol> sym) { |
| 46 if (!value->IsJSObject()) return false; | 49 if (!value->IsJSObject()) return false; |
| 47 i::Handle<i::JSObject> object = i::Handle<i::JSObject>::cast(value); | 50 i::Handle<i::JSObject> object = i::Handle<i::JSObject>::cast(value); |
| 48 Maybe<bool> has_brand = i::JSObject::HasOwnProperty(object, sym); | 51 Maybe<bool> has_brand = i::JSObject::HasOwnProperty(object, sym); |
| 49 return has_brand.FromMaybe(false); | 52 return has_brand.FromMaybe(false); |
| 50 } | 53 } |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 } | 121 } |
| 119 if (length > i::wasm::kV8MaxWasmModuleSize) { | 122 if (length > i::wasm::kV8MaxWasmModuleSize) { |
| 120 thrower->RangeError("buffer source exceeds maximum size of %zu (is %zu)", | 123 thrower->RangeError("buffer source exceeds maximum size of %zu (is %zu)", |
| 121 i::wasm::kV8MaxWasmModuleSize, length); | 124 i::wasm::kV8MaxWasmModuleSize, length); |
| 122 } | 125 } |
| 123 if (thrower->error()) return i::wasm::ModuleWireBytes(nullptr, nullptr); | 126 if (thrower->error()) return i::wasm::ModuleWireBytes(nullptr, nullptr); |
| 124 // TODO(titzer): use the handle as well? | 127 // TODO(titzer): use the handle as well? |
| 125 return i::wasm::ModuleWireBytes(start, start + length); | 128 return i::wasm::ModuleWireBytes(start, start + length); |
| 126 } | 129 } |
| 127 | 130 |
| 128 i::MaybeHandle<i::JSReceiver> GetValueAsImports(const Local<Value>& arg, | 131 i::MaybeHandle<i::JSReceiver> GetValueAsImports(Local<Value> arg, |
| 129 ErrorThrower* thrower) { | 132 ErrorThrower* thrower) { |
| 130 if (arg->IsUndefined()) return {}; | 133 if (arg->IsUndefined()) return {}; |
| 131 | 134 |
| 132 if (!arg->IsObject()) { | 135 if (!arg->IsObject()) { |
| 133 thrower->TypeError("Argument 1 must be an object"); | 136 thrower->TypeError("Argument 1 must be an object"); |
| 134 return {}; | 137 return {}; |
| 135 } | 138 } |
| 136 Local<Object> obj = Local<Object>::Cast(arg); | 139 Local<Object> obj = Local<Object>::Cast(arg); |
| 137 return i::Handle<i::JSReceiver>::cast(v8::Utils::OpenHandle(*obj)); | 140 return i::Handle<i::JSReceiver>::cast(v8::Utils::OpenHandle(*obj)); |
| 138 } | 141 } |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 | 316 |
| 314 HandleScope scope(args.GetIsolate()); | 317 HandleScope scope(args.GetIsolate()); |
| 315 | 318 |
| 316 Local<Context> context = isolate->GetCurrentContext(); | 319 Local<Context> context = isolate->GetCurrentContext(); |
| 317 Local<Value> module = args[0]; | 320 Local<Value> module = args[0]; |
| 318 | 321 |
| 319 const uint8_t* instance_str = reinterpret_cast<const uint8_t*>("instance"); | 322 const uint8_t* instance_str = reinterpret_cast<const uint8_t*>("instance"); |
| 320 const uint8_t* module_str = reinterpret_cast<const uint8_t*>("module"); | 323 const uint8_t* module_str = reinterpret_cast<const uint8_t*>("module"); |
| 321 Local<Value> instance; | 324 Local<Value> instance; |
| 322 if (!WebAssemblyInstantiateImpl(isolate, module, args.Data()) | 325 if (!WebAssemblyInstantiateImpl(isolate, module, args.Data()) |
| 323 .ToLocal(&instance)) | 326 .ToLocal(&instance)) { |
| 324 return; | 327 return; |
| 328 } |
| 325 | 329 |
| 326 Local<Object> ret = Object::New(isolate); | 330 Local<Object> ret = Object::New(isolate); |
| 327 Local<String> instance_name = | 331 Local<String> instance_name = |
| 328 String::NewFromOneByte(isolate, instance_str, | 332 String::NewFromOneByte(isolate, instance_str, |
| 329 NewStringType::kInternalized) | 333 NewStringType::kInternalized) |
| 330 .ToLocalChecked(); | 334 .ToLocalChecked(); |
| 331 Local<String> module_name = | 335 Local<String> module_name = |
| 332 String::NewFromOneByte(isolate, module_str, NewStringType::kInternalized) | 336 String::NewFromOneByte(isolate, module_str, NewStringType::kInternalized) |
| 333 .ToLocalChecked(); | 337 .ToLocalChecked(); |
| 334 | 338 |
| (...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 968 i::Handle<i::Symbol> symbol(isolate->context()->wasm_memory_sym(), isolate); | 972 i::Handle<i::Symbol> symbol(isolate->context()->wasm_memory_sym(), isolate); |
| 969 return HasBrand(value, symbol); | 973 return HasBrand(value, symbol); |
| 970 } | 974 } |
| 971 | 975 |
| 972 bool WasmJs::IsWasmTableObject(Isolate* isolate, Handle<Object> value) { | 976 bool WasmJs::IsWasmTableObject(Isolate* isolate, Handle<Object> value) { |
| 973 i::Handle<i::Symbol> symbol(isolate->context()->wasm_table_sym(), isolate); | 977 i::Handle<i::Symbol> symbol(isolate->context()->wasm_table_sym(), isolate); |
| 974 return HasBrand(value, symbol); | 978 return HasBrand(value, symbol); |
| 975 } | 979 } |
| 976 } // namespace internal | 980 } // namespace internal |
| 977 } // namespace v8 | 981 } // namespace v8 |
| OLD | NEW |