| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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/ast/scopes.h" | 5 #include "src/ast/scopes.h" | 
| 6 | 6 | 
| 7 #include <set> | 7 #include <set> | 
| 8 | 8 | 
| 9 #include "src/accessors.h" | 9 #include "src/accessors.h" | 
| 10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" | 
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 210 } | 210 } | 
| 211 | 211 | 
| 212 void Scope::SetDefaults() { | 212 void Scope::SetDefaults() { | 
| 213 #ifdef DEBUG | 213 #ifdef DEBUG | 
| 214   scope_name_ = nullptr; | 214   scope_name_ = nullptr; | 
| 215   already_resolved_ = false; | 215   already_resolved_ = false; | 
| 216 #endif | 216 #endif | 
| 217   inner_scope_ = nullptr; | 217   inner_scope_ = nullptr; | 
| 218   sibling_ = nullptr; | 218   sibling_ = nullptr; | 
| 219   unresolved_ = nullptr; | 219   unresolved_ = nullptr; | 
| 220   dynamics_ = nullptr; |  | 
| 221 | 220 | 
| 222   start_position_ = kNoSourcePosition; | 221   start_position_ = kNoSourcePosition; | 
| 223   end_position_ = kNoSourcePosition; | 222   end_position_ = kNoSourcePosition; | 
| 224 | 223 | 
| 225   num_stack_slots_ = 0; | 224   num_stack_slots_ = 0; | 
| 226   num_heap_slots_ = Context::MIN_CONTEXT_SLOTS; | 225   num_heap_slots_ = Context::MIN_CONTEXT_SLOTS; | 
| 227   num_global_slots_ = 0; | 226   num_global_slots_ = 0; | 
| 228 | 227 | 
| 229   set_language_mode(SLOPPY); | 228   set_language_mode(SLOPPY); | 
| 230 | 229 | 
| (...skipping 839 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1070       comma = true; | 1069       comma = true; | 
| 1071     } | 1070     } | 
| 1072     if (var->maybe_assigned() == kMaybeAssigned) { | 1071     if (var->maybe_assigned() == kMaybeAssigned) { | 
| 1073       if (comma) PrintF(", "); | 1072       if (comma) PrintF(", "); | 
| 1074       PrintF("maybe assigned"); | 1073       PrintF("maybe assigned"); | 
| 1075     } | 1074     } | 
| 1076     PrintF("\n"); | 1075     PrintF("\n"); | 
| 1077   } | 1076   } | 
| 1078 } | 1077 } | 
| 1079 | 1078 | 
| 1080 | 1079 static void PrintMap(int indent, VariableMap* map, bool locals) { | 
| 1081 static void PrintMap(int indent, VariableMap* map) { | 1080   for (VariableMap::Entry* p = map->Start(); p != nullptr; p = map->Next(p)) { | 
| 1082   for (VariableMap::Entry* p = map->Start(); p != NULL; p = map->Next(p)) { |  | 
| 1083     Variable* var = reinterpret_cast<Variable*>(p->value); | 1081     Variable* var = reinterpret_cast<Variable*>(p->value); | 
| 1084     if (var == NULL) { | 1082     bool local = !IsDynamicVariableMode(var->mode()); | 
| 1085       Indent(indent, "<?>\n"); | 1083     if (locals ? local : !local) { | 
| 1086     } else { | 1084       if (var == nullptr) { | 
| 1087       PrintVar(indent, var); | 1085         Indent(indent, "<?>\n"); | 
|  | 1086       } else { | 
|  | 1087         PrintVar(indent, var); | 
|  | 1088       } | 
| 1088     } | 1089     } | 
| 1089   } | 1090   } | 
| 1090 } | 1091 } | 
| 1091 | 1092 | 
| 1092 void DeclarationScope::PrintParameters() { | 1093 void DeclarationScope::PrintParameters() { | 
| 1093   PrintF(" ("); | 1094   PrintF(" ("); | 
| 1094   for (int i = 0; i < params_.length(); i++) { | 1095   for (int i = 0; i < params_.length(); i++) { | 
| 1095     if (i > 0) PrintF(", "); | 1096     if (i > 0) PrintF(", "); | 
| 1096     const AstRawString* name = params_[i]->raw_name(); | 1097     const AstRawString* name = params_[i]->raw_name(); | 
| 1097     if (name->IsEmpty()) | 1098     if (name->IsEmpty()) | 
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1166       if (!printed_header) { | 1167       if (!printed_header) { | 
| 1167         printed_header = true; | 1168         printed_header = true; | 
| 1168         Indent(n1, "// temporary vars:\n"); | 1169         Indent(n1, "// temporary vars:\n"); | 
| 1169       } | 1170       } | 
| 1170       PrintVar(n1, (*temps)[i]); | 1171       PrintVar(n1, (*temps)[i]); | 
| 1171     } | 1172     } | 
| 1172   } | 1173   } | 
| 1173 | 1174 | 
| 1174   if (variables_.Start() != NULL) { | 1175   if (variables_.Start() != NULL) { | 
| 1175     Indent(n1, "// local vars:\n"); | 1176     Indent(n1, "// local vars:\n"); | 
| 1176     PrintMap(n1, &variables_); | 1177     PrintMap(n1, &variables_, true); | 
| 1177   } |  | 
| 1178 | 1178 | 
| 1179   if (dynamics_ != NULL) { |  | 
| 1180     Indent(n1, "// dynamic vars:\n"); | 1179     Indent(n1, "// dynamic vars:\n"); | 
| 1181     PrintMap(n1, dynamics_->GetMap(DYNAMIC)); | 1180     PrintMap(n1, &variables_, false); | 
| 1182     PrintMap(n1, dynamics_->GetMap(DYNAMIC_LOCAL)); |  | 
| 1183     PrintMap(n1, dynamics_->GetMap(DYNAMIC_GLOBAL)); |  | 
| 1184   } | 1181   } | 
| 1185 | 1182 | 
| 1186   // Print inner scopes (disable by providing negative n). | 1183   // Print inner scopes (disable by providing negative n). | 
| 1187   if (n >= 0) { | 1184   if (n >= 0) { | 
| 1188     for (Scope* scope = inner_scope_; scope != nullptr; | 1185     for (Scope* scope = inner_scope_; scope != nullptr; | 
| 1189          scope = scope->sibling_) { | 1186          scope = scope->sibling_) { | 
| 1190       PrintF("\n"); | 1187       PrintF("\n"); | 
| 1191       scope->Print(n1); | 1188       scope->Print(n1); | 
| 1192     } | 1189     } | 
| 1193   } | 1190   } | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 1208 } | 1205 } | 
| 1209 | 1206 | 
| 1210 void Scope::CheckZones() { | 1207 void Scope::CheckZones() { | 
| 1211   for (Scope* scope = inner_scope_; scope != nullptr; scope = scope->sibling_) { | 1208   for (Scope* scope = inner_scope_; scope != nullptr; scope = scope->sibling_) { | 
| 1212     CHECK_EQ(scope->zone(), zone()); | 1209     CHECK_EQ(scope->zone(), zone()); | 
| 1213   } | 1210   } | 
| 1214 } | 1211 } | 
| 1215 #endif  // DEBUG | 1212 #endif  // DEBUG | 
| 1216 | 1213 | 
| 1217 Variable* Scope::NonLocal(const AstRawString* name, VariableMode mode) { | 1214 Variable* Scope::NonLocal(const AstRawString* name, VariableMode mode) { | 
| 1218   if (dynamics_ == NULL) dynamics_ = new (zone()) DynamicScopePart(zone()); | 1215   // Declare a new non-local. | 
| 1219   VariableMap* map = dynamics_->GetMap(mode); | 1216   DCHECK(IsDynamicVariableMode(mode)); | 
| 1220   Variable* var = map->Lookup(name); | 1217   Variable* var = variables_.Declare(zone(), NULL, name, mode, Variable::NORMAL, | 
| 1221   if (var == NULL) { | 1218                                      kCreatedInitialized); | 
| 1222     // Declare a new non-local. | 1219   // Allocate it by giving it a dynamic lookup. | 
| 1223     DCHECK(!IsLexicalVariableMode(mode)); | 1220   var->AllocateTo(VariableLocation::LOOKUP, -1); | 
| 1224     var = map->Declare(zone(), NULL, name, mode, Variable::NORMAL, |  | 
| 1225                        kCreatedInitialized); |  | 
| 1226     // Allocate it by giving it a dynamic lookup. |  | 
| 1227     var->AllocateTo(VariableLocation::LOOKUP, -1); |  | 
| 1228   } |  | 
| 1229   return var; | 1221   return var; | 
| 1230 } | 1222 } | 
| 1231 | 1223 | 
| 1232 Variable* Scope::LookupRecursive(VariableProxy* proxy, bool declare_free, | 1224 Variable* Scope::LookupRecursive(VariableProxy* proxy, bool declare_free, | 
| 1233                                  Scope* outer_scope_end) { | 1225                                  Scope* outer_scope_end) { | 
| 1234   DCHECK_NE(outer_scope_end, this); | 1226   DCHECK_NE(outer_scope_end, this); | 
| 1235   // Short-cut: whenever we find a debug-evaluate scope, just look everything up | 1227   // Short-cut: whenever we find a debug-evaluate scope, just look everything up | 
| 1236   // dynamically. Debug-evaluate doesn't properly create scope info for the | 1228   // dynamically. Debug-evaluate doesn't properly create scope info for the | 
| 1237   // lookups it does. It may not have a valid 'this' declaration, and anything | 1229   // lookups it does. It may not have a valid 'this' declaration, and anything | 
| 1238   // accessed through debug-evaluate might invalidly resolve to stack-allocated | 1230   // accessed through debug-evaluate might invalidly resolve to stack-allocated | 
| (...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1681       function != nullptr && function->IsContextSlot(); | 1673       function != nullptr && function->IsContextSlot(); | 
| 1682   return num_heap_slots() - Context::MIN_CONTEXT_SLOTS - num_global_slots() - | 1674   return num_heap_slots() - Context::MIN_CONTEXT_SLOTS - num_global_slots() - | 
| 1683          (is_function_var_in_context ? 1 : 0); | 1675          (is_function_var_in_context ? 1 : 0); | 
| 1684 } | 1676 } | 
| 1685 | 1677 | 
| 1686 | 1678 | 
| 1687 int Scope::ContextGlobalCount() const { return num_global_slots(); } | 1679 int Scope::ContextGlobalCount() const { return num_global_slots(); } | 
| 1688 | 1680 | 
| 1689 }  // namespace internal | 1681 }  // namespace internal | 
| 1690 }  // namespace v8 | 1682 }  // namespace v8 | 
| OLD | NEW | 
|---|