| 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/arguments.h" | 7 #include "src/arguments.h" |
| 8 #include "src/debug/debug-evaluate.h" | 8 #include "src/debug/debug-evaluate.h" |
| 9 #include "src/debug/debug-frames.h" | 9 #include "src/debug/debug-frames.h" |
| 10 #include "src/debug/debug-scopes.h" | 10 #include "src/debug/debug-scopes.h" |
| (...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 564 RUNTIME_ASSERT(function->shared()->IsSubjectToDebugging()); | 564 RUNTIME_ASSERT(function->shared()->IsSubjectToDebugging()); |
| 565 Handle<SharedFunctionInfo> shared(function->shared()); | 565 Handle<SharedFunctionInfo> shared(function->shared()); |
| 566 Handle<ScopeInfo> scope_info(shared->scope_info()); | 566 Handle<ScopeInfo> scope_info(shared->scope_info()); |
| 567 DCHECK(*scope_info != ScopeInfo::Empty(isolate)); | 567 DCHECK(*scope_info != ScopeInfo::Empty(isolate)); |
| 568 | 568 |
| 569 // Get the locals names and values into a temporary array. | 569 // Get the locals names and values into a temporary array. |
| 570 int local_count = scope_info->LocalCount(); | 570 int local_count = scope_info->LocalCount(); |
| 571 for (int slot = 0; slot < scope_info->LocalCount(); ++slot) { | 571 for (int slot = 0; slot < scope_info->LocalCount(); ++slot) { |
| 572 // Hide compiler-introduced temporary variables, whether on the stack or on | 572 // Hide compiler-introduced temporary variables, whether on the stack or on |
| 573 // the context. | 573 // the context. |
| 574 if (scope_info->LocalIsSynthetic(slot)) local_count--; | 574 if (ScopeInfo::VariableIsSynthetic(scope_info->LocalName(slot))) { |
| 575 local_count--; |
| 576 } |
| 575 } | 577 } |
| 576 | 578 |
| 577 Handle<FixedArray> locals = | 579 Handle<FixedArray> locals = |
| 578 isolate->factory()->NewFixedArray(local_count * 2); | 580 isolate->factory()->NewFixedArray(local_count * 2); |
| 579 | 581 |
| 580 // Fill in the values of the locals. | 582 // Fill in the values of the locals. |
| 581 int local = 0; | 583 int local = 0; |
| 582 int i = 0; | 584 int i = 0; |
| 583 for (; i < scope_info->StackLocalCount(); ++i) { | 585 for (; i < scope_info->StackLocalCount(); ++i) { |
| 584 // Use the value from the stack. | 586 // Use the value from the stack. |
| 585 if (scope_info->LocalIsSynthetic(i)) continue; | 587 if (ScopeInfo::VariableIsSynthetic(scope_info->LocalName(i))) continue; |
| 586 locals->set(local * 2, scope_info->LocalName(i)); | 588 locals->set(local * 2, scope_info->LocalName(i)); |
| 587 Handle<Object> value = frame_inspector.GetExpression(i); | 589 Handle<Object> value = frame_inspector.GetExpression(i); |
| 588 // TODO(yangguo): We convert optimized out values to {undefined} when they | 590 // TODO(yangguo): We convert optimized out values to {undefined} when they |
| 589 // are passed to the debugger. Eventually we should handle them somehow. | 591 // are passed to the debugger. Eventually we should handle them somehow. |
| 590 if (value->IsOptimizedOut()) value = isolate->factory()->undefined_value(); | 592 if (value->IsOptimizedOut()) value = isolate->factory()->undefined_value(); |
| 591 locals->set(local * 2 + 1, *value); | 593 locals->set(local * 2 + 1, *value); |
| 592 local++; | 594 local++; |
| 593 } | 595 } |
| 594 if (local < local_count) { | 596 if (local < local_count) { |
| 595 // Get the context containing declarations. | 597 // Get the context containing declarations. |
| 596 Handle<Context> context( | 598 Handle<Context> context( |
| 597 Handle<Context>::cast(frame_inspector.GetContext())->closure_context()); | 599 Handle<Context>::cast(frame_inspector.GetContext())->closure_context()); |
| 598 for (; i < scope_info->LocalCount(); ++i) { | 600 for (; i < scope_info->LocalCount(); ++i) { |
| 599 if (scope_info->LocalIsSynthetic(i)) continue; | |
| 600 Handle<String> name(scope_info->LocalName(i)); | 601 Handle<String> name(scope_info->LocalName(i)); |
| 602 if (ScopeInfo::VariableIsSynthetic(*name)) continue; |
| 601 VariableMode mode; | 603 VariableMode mode; |
| 602 InitializationFlag init_flag; | 604 InitializationFlag init_flag; |
| 603 MaybeAssignedFlag maybe_assigned_flag; | 605 MaybeAssignedFlag maybe_assigned_flag; |
| 604 locals->set(local * 2, *name); | 606 locals->set(local * 2, *name); |
| 605 int context_slot_index = ScopeInfo::ContextSlotIndex( | 607 int context_slot_index = ScopeInfo::ContextSlotIndex( |
| 606 scope_info, name, &mode, &init_flag, &maybe_assigned_flag); | 608 scope_info, name, &mode, &init_flag, &maybe_assigned_flag); |
| 607 Object* value = context->get(context_slot_index); | 609 Object* value = context->get(context_slot_index); |
| 608 locals->set(local * 2 + 1, value); | 610 locals->set(local * 2 + 1, value); |
| 609 local++; | 611 local++; |
| 610 } | 612 } |
| (...skipping 1032 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1643 return Smi::FromInt(isolate->debug()->is_active()); | 1645 return Smi::FromInt(isolate->debug()->is_active()); |
| 1644 } | 1646 } |
| 1645 | 1647 |
| 1646 | 1648 |
| 1647 RUNTIME_FUNCTION(Runtime_DebugBreakInOptimizedCode) { | 1649 RUNTIME_FUNCTION(Runtime_DebugBreakInOptimizedCode) { |
| 1648 UNIMPLEMENTED(); | 1650 UNIMPLEMENTED(); |
| 1649 return NULL; | 1651 return NULL; |
| 1650 } | 1652 } |
| 1651 } // namespace internal | 1653 } // namespace internal |
| 1652 } // namespace v8 | 1654 } // namespace v8 |
| OLD | NEW |