OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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/runtime/runtime-utils.h" | 5 #include "src/runtime/runtime-utils.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "src/arguments.h" | 9 #include "src/arguments.h" |
10 #include "src/deoptimizer.h" | 10 #include "src/deoptimizer.h" |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 | 254 |
255 Local<v8::ObjectTemplate> desc = v8::ObjectTemplate::New(v8_isolate); | 255 Local<v8::ObjectTemplate> desc = v8::ObjectTemplate::New(v8_isolate); |
256 desc->MarkAsUndetectable(); | 256 desc->MarkAsUndetectable(); |
257 Local<v8::Object> obj; | 257 Local<v8::Object> obj; |
258 if (!desc->NewInstance(v8_isolate->GetCurrentContext()).ToLocal(&obj)) { | 258 if (!desc->NewInstance(v8_isolate->GetCurrentContext()).ToLocal(&obj)) { |
259 return nullptr; | 259 return nullptr; |
260 } | 260 } |
261 return *Utils::OpenHandle(*obj); | 261 return *Utils::OpenHandle(*obj); |
262 } | 262 } |
263 | 263 |
| 264 static void call_as_function(const v8::FunctionCallbackInfo<v8::Value>& args) { |
| 265 double v1 = args[0] |
| 266 ->NumberValue(v8::Isolate::GetCurrent()->GetCurrentContext()) |
| 267 .ToChecked(); |
| 268 double v2 = args[1] |
| 269 ->NumberValue(v8::Isolate::GetCurrent()->GetCurrentContext()) |
| 270 .ToChecked(); |
| 271 args.GetReturnValue().Set( |
| 272 v8::Number::New(v8::Isolate::GetCurrent(), v1 - v2)); |
| 273 } |
| 274 |
| 275 // Returns a callable object. The object returns the difference of its two |
| 276 // parameters when it is called. |
| 277 RUNTIME_FUNCTION(Runtime_GetCallable) { |
| 278 HandleScope scope(isolate); |
| 279 DCHECK(args.length() == 0); |
| 280 v8::Isolate* v8_isolate = reinterpret_cast<v8::Isolate*>(isolate); |
| 281 Local<v8::FunctionTemplate> t = v8::FunctionTemplate::New(v8_isolate); |
| 282 Local<ObjectTemplate> instance_template = t->InstanceTemplate(); |
| 283 instance_template->SetCallAsFunctionHandler(call_as_function); |
| 284 v8_isolate->GetCurrentContext(); |
| 285 Local<v8::Object> instance = |
| 286 t->GetFunction(v8_isolate->GetCurrentContext()) |
| 287 .ToLocalChecked() |
| 288 ->NewInstance(v8_isolate->GetCurrentContext()) |
| 289 .ToLocalChecked(); |
| 290 return *Utils::OpenHandle(*instance); |
| 291 } |
264 | 292 |
265 RUNTIME_FUNCTION(Runtime_ClearFunctionTypeFeedback) { | 293 RUNTIME_FUNCTION(Runtime_ClearFunctionTypeFeedback) { |
266 HandleScope scope(isolate); | 294 HandleScope scope(isolate); |
267 DCHECK(args.length() == 1); | 295 DCHECK(args.length() == 1); |
268 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); | 296 CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0); |
269 function->ClearTypeFeedbackInfo(); | 297 function->ClearTypeFeedbackInfo(); |
270 Code* unoptimized = function->shared()->code(); | 298 Code* unoptimized = function->shared()->code(); |
271 if (unoptimized->kind() == Code::FUNCTION) { | 299 if (unoptimized->kind() == Code::FUNCTION) { |
272 unoptimized->ClearInlineCaches(); | 300 unoptimized->ClearInlineCaches(); |
273 } | 301 } |
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
665 WasmCompiledModuleSerializer::DeserializeWasmModule(isolate, &sc); | 693 WasmCompiledModuleSerializer::DeserializeWasmModule(isolate, &sc); |
666 Handle<FixedArray> compiled_module; | 694 Handle<FixedArray> compiled_module; |
667 if (!maybe_compiled_module.ToHandle(&compiled_module)) { | 695 if (!maybe_compiled_module.ToHandle(&compiled_module)) { |
668 return isolate->heap()->undefined_value(); | 696 return isolate->heap()->undefined_value(); |
669 } | 697 } |
670 return *wasm::CreateCompiledModuleObject(isolate, compiled_module); | 698 return *wasm::CreateCompiledModuleObject(isolate, compiled_module); |
671 } | 699 } |
672 | 700 |
673 } // namespace internal | 701 } // namespace internal |
674 } // namespace v8 | 702 } // namespace v8 |
OLD | NEW |