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/execution.h" | 5 #include "src/execution.h" |
6 | 6 |
7 #include "src/bootstrapper.h" | 7 #include "src/bootstrapper.h" |
8 #include "src/codegen.h" | 8 #include "src/codegen.h" |
9 #include "src/deoptimizer.h" | 9 #include "src/deoptimizer.h" |
10 #include "src/messages.h" | 10 #include "src/messages.h" |
(...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
595 isolate->native_context()->regexp_function()); | 595 isolate->native_context()->regexp_function()); |
596 Handle<Object> re_obj; | 596 Handle<Object> re_obj; |
597 ASSIGN_RETURN_ON_EXCEPTION( | 597 ASSIGN_RETURN_ON_EXCEPTION( |
598 isolate, re_obj, | 598 isolate, re_obj, |
599 RegExpImpl::CreateRegExpLiteral(function, pattern, flags), | 599 RegExpImpl::CreateRegExpLiteral(function, pattern, flags), |
600 JSRegExp); | 600 JSRegExp); |
601 return Handle<JSRegExp>::cast(re_obj); | 601 return Handle<JSRegExp>::cast(re_obj); |
602 } | 602 } |
603 | 603 |
604 | 604 |
605 Handle<Object> Execution::CharAt(Handle<String> string, uint32_t index) { | |
606 Isolate* isolate = string->GetIsolate(); | |
607 Factory* factory = isolate->factory(); | |
608 | |
609 int int_index = static_cast<int>(index); | |
610 if (int_index < 0 || int_index >= string->length()) { | |
611 return factory->undefined_value(); | |
612 } | |
613 | |
614 Handle<Object> char_at = Object::GetProperty( | |
615 isolate->js_builtins_object(), | |
616 factory->char_at_string()).ToHandleChecked(); | |
617 if (!char_at->IsJSFunction()) { | |
618 return factory->undefined_value(); | |
619 } | |
620 | |
621 Handle<Object> index_object = factory->NewNumberFromInt(int_index); | |
622 Handle<Object> index_arg[] = { index_object }; | |
623 Handle<Object> result; | |
624 if (!TryCall(Handle<JSFunction>::cast(char_at), | |
625 string, | |
626 arraysize(index_arg), | |
627 index_arg).ToHandle(&result)) { | |
628 return factory->undefined_value(); | |
629 } | |
630 return result; | |
631 } | |
632 | |
633 | |
634 Handle<String> Execution::GetStackTraceLine(Handle<Object> recv, | 605 Handle<String> Execution::GetStackTraceLine(Handle<Object> recv, |
635 Handle<JSFunction> fun, | 606 Handle<JSFunction> fun, |
636 Handle<Object> pos, | 607 Handle<Object> pos, |
637 Handle<Object> is_global) { | 608 Handle<Object> is_global) { |
638 Isolate* isolate = fun->GetIsolate(); | 609 Isolate* isolate = fun->GetIsolate(); |
639 Handle<Object> args[] = { recv, fun, pos, is_global }; | 610 Handle<Object> args[] = { recv, fun, pos, is_global }; |
640 MaybeHandle<Object> maybe_result = | 611 MaybeHandle<Object> maybe_result = |
641 TryCall(isolate->get_stack_trace_line_fun(), | 612 TryCall(isolate->get_stack_trace_line_fun(), |
642 isolate->js_builtins_object(), | 613 isolate->js_builtins_object(), |
643 arraysize(args), | 614 arraysize(args), |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
686 } | 657 } |
687 | 658 |
688 isolate_->counters()->stack_interrupts()->Increment(); | 659 isolate_->counters()->stack_interrupts()->Increment(); |
689 isolate_->counters()->runtime_profiler_ticks()->Increment(); | 660 isolate_->counters()->runtime_profiler_ticks()->Increment(); |
690 isolate_->runtime_profiler()->OptimizeNow(); | 661 isolate_->runtime_profiler()->OptimizeNow(); |
691 | 662 |
692 return isolate_->heap()->undefined_value(); | 663 return isolate_->heap()->undefined_value(); |
693 } | 664 } |
694 | 665 |
695 } } // namespace v8::internal | 666 } } // namespace v8::internal |
OLD | NEW |