Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/runtime/runtime-debug.cc

Issue 1695433002: Handlify DeoptimizedFrameInfo, remove custom GC iteration. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Use handle rather than the constructor. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/heap/heap.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/arguments.h" 7 #include "src/arguments.h"
8 #include "src/debug/debug.h" 8 #include "src/debug/debug.h"
9 #include "src/debug/debug-evaluate.h" 9 #include "src/debug/debug-evaluate.h"
10 #include "src/debug/debug-frames.h" 10 #include "src/debug/debug-frames.h"
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 Handle<Object> frame_id(DebugFrameHelper::WrapFrameId(it.frame()->id()), 521 Handle<Object> frame_id(DebugFrameHelper::WrapFrameId(it.frame()->id()),
522 isolate); 522 isolate);
523 523
524 // Find source position in unoptimized code. 524 // Find source position in unoptimized code.
525 int position = frame_inspector.GetSourcePosition(); 525 int position = frame_inspector.GetSourcePosition();
526 526
527 // Check for constructor frame. 527 // Check for constructor frame.
528 bool constructor = frame_inspector.IsConstructor(); 528 bool constructor = frame_inspector.IsConstructor();
529 529
530 // Get scope info and read from it for local variable information. 530 // Get scope info and read from it for local variable information.
531 Handle<JSFunction> function(JSFunction::cast(frame_inspector.GetFunction())); 531 Handle<JSFunction> function =
532 Handle<JSFunction>::cast(frame_inspector.GetFunction());
532 RUNTIME_ASSERT(function->shared()->IsSubjectToDebugging()); 533 RUNTIME_ASSERT(function->shared()->IsSubjectToDebugging());
533 Handle<SharedFunctionInfo> shared(function->shared()); 534 Handle<SharedFunctionInfo> shared(function->shared());
534 Handle<ScopeInfo> scope_info(shared->scope_info()); 535 Handle<ScopeInfo> scope_info(shared->scope_info());
535 DCHECK(*scope_info != ScopeInfo::Empty(isolate)); 536 DCHECK(*scope_info != ScopeInfo::Empty(isolate));
536 537
537 // Get the locals names and values into a temporary array. 538 // Get the locals names and values into a temporary array.
538 int local_count = scope_info->LocalCount(); 539 int local_count = scope_info->LocalCount();
539 for (int slot = 0; slot < scope_info->LocalCount(); ++slot) { 540 for (int slot = 0; slot < scope_info->LocalCount(); ++slot) {
540 // Hide compiler-introduced temporary variables, whether on the stack or on 541 // Hide compiler-introduced temporary variables, whether on the stack or on
541 // the context. 542 // the context.
542 if (scope_info->LocalIsSynthetic(slot)) local_count--; 543 if (scope_info->LocalIsSynthetic(slot)) local_count--;
543 } 544 }
544 545
545 Handle<FixedArray> locals = 546 Handle<FixedArray> locals =
546 isolate->factory()->NewFixedArray(local_count * 2); 547 isolate->factory()->NewFixedArray(local_count * 2);
547 548
548 // Fill in the values of the locals. 549 // Fill in the values of the locals.
549 int local = 0; 550 int local = 0;
550 int i = 0; 551 int i = 0;
551 for (; i < scope_info->StackLocalCount(); ++i) { 552 for (; i < scope_info->StackLocalCount(); ++i) {
552 // Use the value from the stack. 553 // Use the value from the stack.
553 if (scope_info->LocalIsSynthetic(i)) continue; 554 if (scope_info->LocalIsSynthetic(i)) continue;
554 locals->set(local * 2, scope_info->LocalName(i)); 555 locals->set(local * 2, scope_info->LocalName(i));
555 locals->set(local * 2 + 1, frame_inspector.GetExpression(i)); 556 locals->set(local * 2 + 1, *(frame_inspector.GetExpression(i)));
556 local++; 557 local++;
557 } 558 }
558 if (local < local_count) { 559 if (local < local_count) {
559 // Get the context containing declarations. 560 // Get the context containing declarations.
560 Handle<Context> context( 561 Handle<Context> context(
561 Context::cast(frame_inspector.GetContext())->closure_context()); 562 Handle<Context>::cast(frame_inspector.GetContext())->closure_context());
562 for (; i < scope_info->LocalCount(); ++i) { 563 for (; i < scope_info->LocalCount(); ++i) {
563 if (scope_info->LocalIsSynthetic(i)) continue; 564 if (scope_info->LocalIsSynthetic(i)) continue;
564 Handle<String> name(scope_info->LocalName(i)); 565 Handle<String> name(scope_info->LocalName(i));
565 VariableMode mode; 566 VariableMode mode;
566 InitializationFlag init_flag; 567 InitializationFlag init_flag;
567 MaybeAssignedFlag maybe_assigned_flag; 568 MaybeAssignedFlag maybe_assigned_flag;
568 locals->set(local * 2, *name); 569 locals->set(local * 2, *name);
569 int context_slot_index = ScopeInfo::ContextSlotIndex( 570 int context_slot_index = ScopeInfo::ContextSlotIndex(
570 scope_info, name, &mode, &init_flag, &maybe_assigned_flag); 571 scope_info, name, &mode, &init_flag, &maybe_assigned_flag);
571 Object* value = context->get(context_slot_index); 572 Object* value = context->get(context_slot_index);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 631
631 // Calculate the size of the result. 632 // Calculate the size of the result.
632 int details_size = kFrameDetailsFirstDynamicIndex + 633 int details_size = kFrameDetailsFirstDynamicIndex +
633 2 * (argument_count + local_count) + (at_return ? 1 : 0); 634 2 * (argument_count + local_count) + (at_return ? 1 : 0);
634 Handle<FixedArray> details = isolate->factory()->NewFixedArray(details_size); 635 Handle<FixedArray> details = isolate->factory()->NewFixedArray(details_size);
635 636
636 // Add the frame id. 637 // Add the frame id.
637 details->set(kFrameDetailsFrameIdIndex, *frame_id); 638 details->set(kFrameDetailsFrameIdIndex, *frame_id);
638 639
639 // Add the function (same as in function frame). 640 // Add the function (same as in function frame).
640 details->set(kFrameDetailsFunctionIndex, frame_inspector.GetFunction()); 641 details->set(kFrameDetailsFunctionIndex, *(frame_inspector.GetFunction()));
641 642
642 // Add the arguments count. 643 // Add the arguments count.
643 details->set(kFrameDetailsArgumentCountIndex, Smi::FromInt(argument_count)); 644 details->set(kFrameDetailsArgumentCountIndex, Smi::FromInt(argument_count));
644 645
645 // Add the locals count 646 // Add the locals count
646 details->set(kFrameDetailsLocalCountIndex, Smi::FromInt(local_count)); 647 details->set(kFrameDetailsLocalCountIndex, Smi::FromInt(local_count));
647 648
648 // Add the source position. 649 // Add the source position.
649 if (position != RelocInfo::kNoPosition) { 650 if (position != RelocInfo::kNoPosition) {
650 details->set(kFrameDetailsSourcePositionIndex, Smi::FromInt(position)); 651 details->set(kFrameDetailsSourcePositionIndex, Smi::FromInt(position));
(...skipping 29 matching lines...) Expand all
680 // Name of the argument. 681 // Name of the argument.
681 if (i < scope_info->ParameterCount()) { 682 if (i < scope_info->ParameterCount()) {
682 details->set(details_index++, scope_info->ParameterName(i)); 683 details->set(details_index++, scope_info->ParameterName(i));
683 } else { 684 } else {
684 details->set(details_index++, heap->undefined_value()); 685 details->set(details_index++, heap->undefined_value());
685 } 686 }
686 687
687 // Parameter value. 688 // Parameter value.
688 if (i < frame_inspector.GetParametersCount()) { 689 if (i < frame_inspector.GetParametersCount()) {
689 // Get the value from the stack. 690 // Get the value from the stack.
690 details->set(details_index++, frame_inspector.GetParameter(i)); 691 details->set(details_index++, *(frame_inspector.GetParameter(i)));
691 } else { 692 } else {
692 details->set(details_index++, heap->undefined_value()); 693 details->set(details_index++, heap->undefined_value());
693 } 694 }
694 } 695 }
695 696
696 // Add locals name and value from the temporary copy from the function frame. 697 // Add locals name and value from the temporary copy from the function frame.
697 for (int i = 0; i < local_count * 2; i++) { 698 for (int i = 0; i < local_count * 2; i++) {
698 details->set(details_index++, locals->get(i)); 699 details->set(details_index++, locals->get(i));
699 } 700 }
700 701
(...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after
1673 return Smi::FromInt(isolate->debug()->is_active()); 1674 return Smi::FromInt(isolate->debug()->is_active());
1674 } 1675 }
1675 1676
1676 1677
1677 RUNTIME_FUNCTION(Runtime_DebugBreakInOptimizedCode) { 1678 RUNTIME_FUNCTION(Runtime_DebugBreakInOptimizedCode) {
1678 UNIMPLEMENTED(); 1679 UNIMPLEMENTED();
1679 return NULL; 1680 return NULL;
1680 } 1681 }
1681 } // namespace internal 1682 } // namespace internal
1682 } // namespace v8 1683 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/heap.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698