| 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 "src/accessors.h" | 7 #include "src/accessors.h" |
| 8 #include "src/arguments.h" | 8 #include "src/arguments.h" |
| 9 #include "src/compiler.h" | 9 #include "src/compiler.h" |
| 10 #include "src/cpu-profiler.h" | 10 #include "src/cpu-profiler.h" |
| (...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 !Handle<JSFunction>::cast(bound_function)->shared()->bound()); | 487 !Handle<JSFunction>::cast(bound_function)->shared()->bound()); |
| 488 | 488 |
| 489 int total_argc = 0; | 489 int total_argc = 0; |
| 490 base::SmartArrayPointer<Handle<Object>> param_data = | 490 base::SmartArrayPointer<Handle<Object>> param_data = |
| 491 Runtime::GetCallerArguments(isolate, bound_argc, &total_argc); | 491 Runtime::GetCallerArguments(isolate, bound_argc, &total_argc); |
| 492 for (int i = 0; i < bound_argc; i++) { | 492 for (int i = 0; i < bound_argc; i++) { |
| 493 param_data[i] = Handle<Object>( | 493 param_data[i] = Handle<Object>( |
| 494 bound_args->get(JSFunction::kBoundArgumentsStartIndex + i), isolate); | 494 bound_args->get(JSFunction::kBoundArgumentsStartIndex + i), isolate); |
| 495 } | 495 } |
| 496 | 496 |
| 497 if (!bound_function->IsJSFunction()) { | |
| 498 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | |
| 499 isolate, bound_function, | |
| 500 Execution::GetConstructorDelegate(isolate, bound_function)); | |
| 501 } | |
| 502 DCHECK(bound_function->IsJSFunction()); | |
| 503 | |
| 504 Handle<Object> result; | 497 Handle<Object> result; |
| 505 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 498 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 506 isolate, result, Execution::New(Handle<JSFunction>::cast(bound_function), | 499 isolate, result, Execution::New(isolate, bound_function, bound_function, |
| 507 total_argc, param_data.get())); | 500 total_argc, param_data.get())); |
| 508 return *result; | 501 return *result; |
| 509 } | 502 } |
| 510 | 503 |
| 511 | 504 |
| 512 RUNTIME_FUNCTION(Runtime_Call) { | 505 RUNTIME_FUNCTION(Runtime_Call) { |
| 513 HandleScope scope(isolate); | 506 HandleScope scope(isolate); |
| 514 DCHECK_LE(2, args.length()); | 507 DCHECK_LE(2, args.length()); |
| 515 int const argc = args.length() - 2; | 508 int const argc = args.length() - 2; |
| 516 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, target, 0); | 509 CONVERT_ARG_HANDLE_CHECKED(JSReceiver, target, 0); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 isolate, argv[i], Object::GetElement(isolate, arguments, offset + i)); | 550 isolate, argv[i], Object::GetElement(isolate, arguments, offset + i)); |
| 558 } | 551 } |
| 559 | 552 |
| 560 Handle<Object> result; | 553 Handle<Object> result; |
| 561 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 554 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
| 562 isolate, result, Execution::Call(isolate, fun, receiver, argc, argv)); | 555 isolate, result, Execution::Call(isolate, fun, receiver, argc, argv)); |
| 563 return *result; | 556 return *result; |
| 564 } | 557 } |
| 565 | 558 |
| 566 | 559 |
| 567 RUNTIME_FUNCTION(Runtime_GetFunctionDelegate) { | |
| 568 HandleScope scope(isolate); | |
| 569 DCHECK(args.length() == 1); | |
| 570 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0); | |
| 571 RUNTIME_ASSERT(!object->IsJSFunction()); | |
| 572 Handle<JSFunction> result; | |
| 573 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | |
| 574 isolate, result, Execution::GetFunctionDelegate(isolate, object)); | |
| 575 return *result; | |
| 576 } | |
| 577 | |
| 578 | |
| 579 RUNTIME_FUNCTION(Runtime_GetConstructorDelegate) { | |
| 580 HandleScope scope(isolate); | |
| 581 DCHECK(args.length() == 1); | |
| 582 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0); | |
| 583 RUNTIME_ASSERT(!object->IsJSFunction()); | |
| 584 Handle<JSFunction> result; | |
| 585 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | |
| 586 isolate, result, Execution::GetConstructorDelegate(isolate, object)); | |
| 587 return *result; | |
| 588 } | |
| 589 | |
| 590 | |
| 591 RUNTIME_FUNCTION(Runtime_GetOriginalConstructor) { | 560 RUNTIME_FUNCTION(Runtime_GetOriginalConstructor) { |
| 592 SealHandleScope shs(isolate); | 561 SealHandleScope shs(isolate); |
| 593 DCHECK(args.length() == 0); | 562 DCHECK(args.length() == 0); |
| 594 JavaScriptFrameIterator it(isolate); | 563 JavaScriptFrameIterator it(isolate); |
| 595 JavaScriptFrame* frame = it.frame(); | 564 JavaScriptFrame* frame = it.frame(); |
| 596 return frame->IsConstructor() ? frame->GetOriginalConstructor() | 565 return frame->IsConstructor() ? frame->GetOriginalConstructor() |
| 597 : isolate->heap()->undefined_value(); | 566 : isolate->heap()->undefined_value(); |
| 598 } | 567 } |
| 599 | 568 |
| 600 | 569 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 649 | 618 |
| 650 | 619 |
| 651 RUNTIME_FUNCTION(Runtime_ThrowStrongModeTooFewArguments) { | 620 RUNTIME_FUNCTION(Runtime_ThrowStrongModeTooFewArguments) { |
| 652 HandleScope scope(isolate); | 621 HandleScope scope(isolate); |
| 653 DCHECK(args.length() == 0); | 622 DCHECK(args.length() == 0); |
| 654 THROW_NEW_ERROR_RETURN_FAILURE(isolate, | 623 THROW_NEW_ERROR_RETURN_FAILURE(isolate, |
| 655 NewTypeError(MessageTemplate::kStrongArity)); | 624 NewTypeError(MessageTemplate::kStrongArity)); |
| 656 } | 625 } |
| 657 } // namespace internal | 626 } // namespace internal |
| 658 } // namespace v8 | 627 } // namespace v8 |
| OLD | NEW |