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

Unified Diff: src/runtime/runtime-debug.cc

Issue 1218783005: Support for global var shortcuts in script contexts. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: src/runtime/runtime-debug.cc
diff --git a/src/runtime/runtime-debug.cc b/src/runtime/runtime-debug.cc
index 8ddc494428f9726df604c0c4808e5666b1cf6c28..305344e509851dc0064718f9baefa17167e3c253 100644
--- a/src/runtime/runtime-debug.cc
+++ b/src/runtime/runtime-debug.cc
@@ -681,11 +681,14 @@ RUNTIME_FUNCTION(Runtime_GetFrameDetails) {
if (scope_info->LocalIsSynthetic(i)) continue;
Handle<String> name(scope_info->LocalName(i));
VariableMode mode;
+ ContextSlotKindFlag slot_kind;
InitializationFlag init_flag;
MaybeAssignedFlag maybe_assigned_flag;
locals->set(local * 2, *name);
- int context_slot_index = ScopeInfo::ContextSlotIndex(
- scope_info, name, &mode, &init_flag, &maybe_assigned_flag);
+ int context_slot_index =
+ ScopeInfo::ContextSlotIndex(scope_info, name, &mode, &slot_kind,
+ &init_flag, &maybe_assigned_flag);
+ DCHECK(ContextSlotKindFlag::kLocal == slot_kind);
Toon Verwaest 2015/07/01 09:28:55 DCHECK_EQ This may not be necessary anymore if you
Igor Sheludko 2015/07/02 16:50:13 Done.
Object* value = context->get(context_slot_index);
locals->set(local * 2 + 1, value);
local++;
@@ -856,10 +859,11 @@ RUNTIME_FUNCTION(Runtime_GetFrameDetails) {
static bool ParameterIsShadowedByContextLocal(Handle<ScopeInfo> info,
Handle<String> parameter_name) {
VariableMode mode;
+ ContextSlotKindFlag slot_kind;
InitializationFlag init_flag;
MaybeAssignedFlag maybe_assigned_flag;
- return ScopeInfo::ContextSlotIndex(info, parameter_name, &mode, &init_flag,
- &maybe_assigned_flag) != -1;
+ return ScopeInfo::ContextSlotIndex(info, parameter_name, &mode, &slot_kind,
+ &init_flag, &maybe_assigned_flag) != -1;
}
@@ -873,6 +877,7 @@ static Handle<Context> MaterializeReceiver(Isolate* isolate,
switch (scope_info->scope_type()) {
case FUNCTION_SCOPE: {
VariableMode variable_mode;
+ ContextSlotKindFlag slot_kind;
InitializationFlag init_flag;
MaybeAssignedFlag maybe_assigned_flag;
@@ -880,7 +885,7 @@ static Handle<Context> MaterializeReceiver(Isolate* isolate,
// already.
if (ScopeInfo::ContextSlotIndex(
scope_info, isolate->factory()->this_string(), &variable_mode,
- &init_flag, &maybe_assigned_flag) >= 0) {
+ &slot_kind, &init_flag, &maybe_assigned_flag) >= 0) {
return target;
}
receiver = handle(frame->receiver(), isolate);
@@ -1077,10 +1082,12 @@ static bool SetContextLocalValue(Isolate* isolate, Handle<ScopeInfo> scope_info,
Handle<String> next_name(scope_info->ContextLocalName(i));
if (String::Equals(variable_name, next_name)) {
VariableMode mode;
+ ContextSlotKindFlag slot_kind;
InitializationFlag init_flag;
MaybeAssignedFlag maybe_assigned_flag;
- int context_index = ScopeInfo::ContextSlotIndex(
- scope_info, next_name, &mode, &init_flag, &maybe_assigned_flag);
+ int context_index =
+ ScopeInfo::ContextSlotIndex(scope_info, next_name, &mode, &slot_kind,
+ &init_flag, &maybe_assigned_flag);
context->set(context_index, *new_value);
return true;
}
@@ -2671,6 +2678,14 @@ RUNTIME_FUNCTION(Runtime_DebugEvaluate) {
}
+static inline bool IsDebugContext(Isolate* isolate, Context* context) {
+ // Try to unwrap script context if it exist.
+ if (context->IsScriptContext()) context = context->previous();
+ DCHECK_NOT_NULL(context);
+ return context == *isolate->debug()->debug_context();
+}
+
+
RUNTIME_FUNCTION(Runtime_DebugEvaluateGlobal) {
HandleScope scope(isolate);
@@ -2690,7 +2705,7 @@ RUNTIME_FUNCTION(Runtime_DebugEvaluateGlobal) {
// Enter the top context from before the debugger was invoked.
SaveContext save(isolate);
SaveContext* top = &save;
- while (top != NULL && *top->context() == *isolate->debug()->debug_context()) {
+ while (top != NULL && IsDebugContext(isolate, *top->context())) {
top = top->prev();
}
if (top != NULL) {

Powered by Google App Engine
This is Rietveld 408576698