| 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 160 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 171     return {}; | 171     return {}; | 
| 172   } | 172   } | 
| 173   Local<Object> obj = Local<Object>::Cast(args[1]); | 173   Local<Object> obj = Local<Object>::Cast(args[1]); | 
| 174   return i::Handle<i::JSReceiver>::cast(v8::Utils::OpenHandle(*obj)); | 174   return i::Handle<i::JSReceiver>::cast(v8::Utils::OpenHandle(*obj)); | 
| 175 } | 175 } | 
| 176 | 176 | 
| 177 // WebAssembly.compile(bytes) -> Promise | 177 // WebAssembly.compile(bytes) -> Promise | 
| 178 void WebAssemblyCompile(const v8::FunctionCallbackInfo<v8::Value>& args) { | 178 void WebAssemblyCompile(const v8::FunctionCallbackInfo<v8::Value>& args) { | 
| 179   v8::Isolate* isolate = args.GetIsolate(); | 179   v8::Isolate* isolate = args.GetIsolate(); | 
| 180   i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 180   i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 
|  | 181   if (i_isolate->wasm_compile_callback()(args)) return; | 
|  | 182 | 
| 181   HandleScope scope(isolate); | 183   HandleScope scope(isolate); | 
| 182   ErrorThrower thrower(i_isolate, "WebAssembly.compile()"); | 184   ErrorThrower thrower(i_isolate, "WebAssembly.compile()"); | 
| 183 | 185 | 
| 184   Local<Context> context = isolate->GetCurrentContext(); | 186   Local<Context> context = isolate->GetCurrentContext(); | 
| 185   v8::Local<v8::Promise::Resolver> resolver; | 187   v8::Local<v8::Promise::Resolver> resolver; | 
| 186   if (!v8::Promise::Resolver::New(context).ToLocal(&resolver)) return; | 188   if (!v8::Promise::Resolver::New(context).ToLocal(&resolver)) return; | 
| 187   v8::ReturnValue<v8::Value> return_value = args.GetReturnValue(); | 189   v8::ReturnValue<v8::Value> return_value = args.GetReturnValue(); | 
| 188   return_value.Set(resolver->GetPromise()); | 190   return_value.Set(resolver->GetPromise()); | 
| 189 | 191 | 
| 190   auto bytes = GetFirstArgumentAsBytes(args, &thrower); | 192   auto bytes = GetFirstArgumentAsBytes(args, &thrower); | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 215   } else { | 217   } else { | 
| 216     if (thrower.wasm_error()) thrower.Reify();  // Clear error. | 218     if (thrower.wasm_error()) thrower.Reify();  // Clear error. | 
| 217     return_value.Set(v8::False(isolate)); | 219     return_value.Set(v8::False(isolate)); | 
| 218   } | 220   } | 
| 219 } | 221 } | 
| 220 | 222 | 
| 221 // new WebAssembly.Module(bytes) -> WebAssembly.Module | 223 // new WebAssembly.Module(bytes) -> WebAssembly.Module | 
| 222 void WebAssemblyModule(const v8::FunctionCallbackInfo<v8::Value>& args) { | 224 void WebAssemblyModule(const v8::FunctionCallbackInfo<v8::Value>& args) { | 
| 223   v8::Isolate* isolate = args.GetIsolate(); | 225   v8::Isolate* isolate = args.GetIsolate(); | 
| 224   i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 226   i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 
|  | 227   if (i_isolate->wasm_module_callback()(args)) return; | 
|  | 228 | 
| 225   HandleScope scope(isolate); | 229   HandleScope scope(isolate); | 
| 226   ErrorThrower thrower(i_isolate, "WebAssembly.Module()"); | 230   ErrorThrower thrower(i_isolate, "WebAssembly.Module()"); | 
| 227 | 231 | 
| 228   auto bytes = GetFirstArgumentAsBytes(args, &thrower); | 232   auto bytes = GetFirstArgumentAsBytes(args, &thrower); | 
| 229   if (!IsCompilationAllowed(i_isolate, &thrower, args[0], false)) return; | 233   if (!IsCompilationAllowed(i_isolate, &thrower, args[0], false)) return; | 
| 230 | 234 | 
| 231   DCHECK(!thrower.error()); | 235   DCHECK(!thrower.error()); | 
| 232   i::MaybeHandle<i::Object> module_obj = | 236   i::MaybeHandle<i::Object> module_obj = | 
| 233       i::wasm::SyncCompile(i_isolate, &thrower, bytes); | 237       i::wasm::SyncCompile(i_isolate, &thrower, bytes); | 
| 234   if (module_obj.is_null()) return; | 238   if (module_obj.is_null()) return; | 
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 290                                  i::Handle<i::String>::cast(name), &thrower); | 294                                  i::Handle<i::String>::cast(name), &thrower); | 
| 291   if (thrower.error()) return; | 295   if (thrower.error()) return; | 
| 292   args.GetReturnValue().Set(Utils::ToLocal(custom_sections)); | 296   args.GetReturnValue().Set(Utils::ToLocal(custom_sections)); | 
| 293 } | 297 } | 
| 294 | 298 | 
| 295 // new WebAssembly.Instance(module, imports) -> WebAssembly.Instance | 299 // new WebAssembly.Instance(module, imports) -> WebAssembly.Instance | 
| 296 void WebAssemblyInstance(const v8::FunctionCallbackInfo<v8::Value>& args) { | 300 void WebAssemblyInstance(const v8::FunctionCallbackInfo<v8::Value>& args) { | 
| 297   HandleScope scope(args.GetIsolate()); | 301   HandleScope scope(args.GetIsolate()); | 
| 298   v8::Isolate* isolate = args.GetIsolate(); | 302   v8::Isolate* isolate = args.GetIsolate(); | 
| 299   i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 303   i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 
|  | 304   if (i_isolate->wasm_instance_callback()(args)) return; | 
|  | 305 | 
| 300   ErrorThrower thrower(i_isolate, "WebAssembly.Instance()"); | 306   ErrorThrower thrower(i_isolate, "WebAssembly.Instance()"); | 
| 301 | 307 | 
| 302   auto maybe_module = GetFirstArgumentAsModule(args, &thrower); | 308   auto maybe_module = GetFirstArgumentAsModule(args, &thrower); | 
| 303   if (thrower.error()) return; | 309   if (thrower.error()) return; | 
| 304 | 310 | 
| 305   auto maybe_imports = GetSecondArgumentAsImports(args, &thrower); | 311   auto maybe_imports = GetSecondArgumentAsImports(args, &thrower); | 
| 306   if (!IsInstantiationAllowed(i_isolate, &thrower, args[0], maybe_imports, | 312   if (!IsInstantiationAllowed(i_isolate, &thrower, args[0], maybe_imports, | 
| 307                               false)) { | 313                               false)) { | 
| 308     return; | 314     return; | 
| 309   } | 315   } | 
| 310   DCHECK(!thrower.error()); | 316   DCHECK(!thrower.error()); | 
| 311 | 317 | 
| 312   i::MaybeHandle<i::Object> instance_object = i::wasm::SyncInstantiate( | 318   i::MaybeHandle<i::Object> instance_object = i::wasm::SyncInstantiate( | 
| 313       i_isolate, &thrower, maybe_module.ToHandleChecked(), maybe_imports, | 319       i_isolate, &thrower, maybe_module.ToHandleChecked(), maybe_imports, | 
| 314       i::MaybeHandle<i::JSArrayBuffer>()); | 320       i::MaybeHandle<i::JSArrayBuffer>()); | 
| 315   if (instance_object.is_null()) return; | 321   if (instance_object.is_null()) return; | 
| 316   args.GetReturnValue().Set(Utils::ToLocal(instance_object.ToHandleChecked())); | 322   args.GetReturnValue().Set(Utils::ToLocal(instance_object.ToHandleChecked())); | 
| 317 } | 323 } | 
| 318 | 324 | 
| 319 // WebAssembly.instantiate(module, imports) -> WebAssembly.Instance | 325 // WebAssembly.instantiate(module, imports) -> WebAssembly.Instance | 
| 320 // WebAssembly.instantiate(bytes, imports) -> | 326 // WebAssembly.instantiate(bytes, imports) -> | 
| 321 //     {module: WebAssembly.Module, instance: WebAssembly.Instance} | 327 //     {module: WebAssembly.Module, instance: WebAssembly.Instance} | 
| 322 void WebAssemblyInstantiate(const v8::FunctionCallbackInfo<v8::Value>& args) { | 328 void WebAssemblyInstantiate(const v8::FunctionCallbackInfo<v8::Value>& args) { | 
| 323   v8::Isolate* isolate = args.GetIsolate(); | 329   v8::Isolate* isolate = args.GetIsolate(); | 
| 324   i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 330   i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); | 
|  | 331   if (i_isolate->wasm_instantiate_callback()(args)) return; | 
|  | 332 | 
| 325   ErrorThrower thrower(i_isolate, "WebAssembly.instantiate()"); | 333   ErrorThrower thrower(i_isolate, "WebAssembly.instantiate()"); | 
| 326 | 334 | 
| 327   HandleScope scope(isolate); | 335   HandleScope scope(isolate); | 
| 328 | 336 | 
| 329   Local<Context> context = isolate->GetCurrentContext(); | 337   Local<Context> context = isolate->GetCurrentContext(); | 
| 330   i::Handle<i::Context> i_context = Utils::OpenHandle(*context); | 338   i::Handle<i::Context> i_context = Utils::OpenHandle(*context); | 
| 331 | 339 | 
| 332   v8::Local<v8::Promise::Resolver> resolver; | 340   v8::Local<v8::Promise::Resolver> resolver; | 
| 333   if (!v8::Promise::Resolver::New(context).ToLocal(&resolver)) return; | 341   if (!v8::Promise::Resolver::New(context).ToLocal(&resolver)) return; | 
| 334   v8::ReturnValue<v8::Value> return_value = args.GetReturnValue(); | 342   v8::ReturnValue<v8::Value> return_value = args.GetReturnValue(); | 
| (...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 924   i::Handle<i::Symbol> symbol(isolate->context()->wasm_memory_sym(), isolate); | 932   i::Handle<i::Symbol> symbol(isolate->context()->wasm_memory_sym(), isolate); | 
| 925   return HasBrand(value, symbol); | 933   return HasBrand(value, symbol); | 
| 926 } | 934 } | 
| 927 | 935 | 
| 928 bool WasmJs::IsWasmTableObject(Isolate* isolate, Handle<Object> value) { | 936 bool WasmJs::IsWasmTableObject(Isolate* isolate, Handle<Object> value) { | 
| 929   i::Handle<i::Symbol> symbol(isolate->context()->wasm_table_sym(), isolate); | 937   i::Handle<i::Symbol> symbol(isolate->context()->wasm_table_sym(), isolate); | 
| 930   return HasBrand(value, symbol); | 938   return HasBrand(value, symbol); | 
| 931 } | 939 } | 
| 932 }  // namespace internal | 940 }  // namespace internal | 
| 933 }  // namespace v8 | 941 }  // namespace v8 | 
| OLD | NEW | 
|---|