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

Unified Diff: src/ast/scopes.cc

Issue 2119933002: Reland of Add errors for declarations which conflict with catch parameters. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fixes per Adam Created 4 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
« no previous file with comments | « src/ast/scopes.h ('k') | src/parsing/parser.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ast/scopes.cc
diff --git a/src/ast/scopes.cc b/src/ast/scopes.cc
index 95ab56a46c20978bcb8fc0c204c369b9c0d92623..772a223ef32998a685972f7961fb56c0cd0d2379 100644
--- a/src/ast/scopes.cc
+++ b/src/ast/scopes.cc
@@ -141,7 +141,7 @@ Scope::Scope(Zone* zone, Scope* inner_scope,
zone_(zone) {
SetDefaults(CATCH_SCOPE, NULL, Handle<ScopeInfo>::null());
AddInnerScope(inner_scope);
- ++num_var_or_const_;
+ ++num_var_;
num_heap_slots_ = Context::MIN_CONTEXT_SLOTS;
Variable* variable = variables_.Declare(this,
catch_variable_name,
@@ -185,7 +185,7 @@ void Scope::SetDefaults(ScopeType scope_type, Scope* outer_scope,
force_eager_compilation_ = false;
force_context_allocation_ = (outer_scope != NULL && !is_function_scope())
? outer_scope->has_forced_context_allocation() : false;
- num_var_or_const_ = 0;
+ num_var_ = 0;
num_stack_slots_ = 0;
num_heap_slots_ = 0;
num_global_slots_ = 0;
@@ -339,8 +339,7 @@ Scope* Scope::FinalizeBlockScope() {
DCHECK(temps_.is_empty());
DCHECK(params_.is_empty());
- if (num_var_or_const() > 0 ||
- (is_declaration_scope() && calls_sloppy_eval())) {
+ if (num_var() > 0 || (is_declaration_scope() && calls_sloppy_eval())) {
return this;
}
@@ -512,7 +511,7 @@ Variable* Scope::DeclareLocal(const AstRawString* name, VariableMode mode,
// introduced during variable allocation, and TEMPORARY variables are
// allocated via NewTemporary().
DCHECK(IsDeclaredVariableMode(mode));
- ++num_var_or_const_;
+ ++num_var_;
return variables_.Declare(this, name, mode, kind, init_flag,
maybe_assigned_flag);
}
@@ -611,6 +610,25 @@ Declaration* Scope::CheckConflictingVarDeclarations() {
return NULL;
}
+Declaration* Scope::CheckLexDeclarationsConflictingWith(
+ const ZoneList<const AstRawString*>& names) {
+ DCHECK(is_block_scope());
+ for (int i = 0; i < names.length(); ++i) {
+ Variable* var = LookupLocal(names.at(i));
+ if (var != nullptr) {
+ // Conflict; find and return its declaration.
+ DCHECK(IsLexicalVariableMode(var->mode()));
+ const AstRawString* name = names.at(i);
+ for (int j = 0; j < decls_.length(); ++j) {
+ if (decls_[j]->proxy()->raw_name() == name) {
+ return decls_[j];
+ }
+ }
+ DCHECK(false);
+ }
+ }
+ return nullptr;
+}
class VarAndOrder {
public:
« no previous file with comments | « src/ast/scopes.h ('k') | src/parsing/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698