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

Unified Diff: src/ast/scopes.cc

Issue 2269293004: Replace rest_index_ with has_rest_ (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 4 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') | no next file » | 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 fbc29609fd06ef80a112e561e69f78ae42789286..fdae39c3d9aead166f2b5288a89ee03896f7c164 100644
--- a/src/ast/scopes.cc
+++ b/src/ast/scopes.cc
@@ -200,13 +200,13 @@ void DeclarationScope::SetDefaults() {
force_eager_compilation_ = false;
has_arguments_parameter_ = false;
scope_uses_super_property_ = false;
+ has_rest_ = false;
receiver_ = nullptr;
new_target_ = nullptr;
function_ = nullptr;
arguments_ = nullptr;
this_function_ = nullptr;
arity_ = 0;
- rest_index_ = -1;
}
void Scope::SetDefaults() {
@@ -681,6 +681,7 @@ Variable* DeclarationScope::DeclareParameter(
bool* is_duplicate, AstValueFactory* ast_value_factory) {
DCHECK(!already_resolved_);
DCHECK(is_function_scope());
+ DCHECK(!has_rest_parameter());
DCHECK(!is_optional || !is_rest);
Variable* var;
if (mode == TEMPORARY) {
@@ -694,7 +695,7 @@ Variable* DeclarationScope::DeclareParameter(
if (!is_optional && !is_rest && arity_ == params_.length()) {
++arity_;
}
- if (is_rest) rest_index_ = num_parameters();
+ has_rest_ = is_rest;
params_.Add(var, zone());
if (name == ast_value_factory->arguments_string()) {
has_arguments_parameter_ = true;
@@ -1498,11 +1499,10 @@ void DeclarationScope::AllocateParameterLocals() {
// If it does, and if it is not copied into the context object, it must
// receive the highest parameter index for that parameter; thus iteration
// order is relevant!
- for (int i = params_.length() - 1; i >= 0; --i) {
- if (i == rest_index_) continue;
+ for (int i = num_parameters() - 1; i >= 0; --i) {
Variable* var = params_[i];
-
- DCHECK(var->scope() == this);
+ DCHECK(!has_rest_parameter() || var != rest_parameter());
+ DCHECK_EQ(this, var->scope());
if (uses_sloppy_arguments) {
var->ForceContextAllocation();
}
@@ -1594,8 +1594,8 @@ void DeclarationScope::AllocateLocals() {
AllocateNonParameterLocal(function_);
}
- DCHECK(!has_rest_parameter() || !MustAllocate(params_[rest_index_]) ||
- !params_[rest_index_]->IsUnallocated());
+ DCHECK(!has_rest_parameter() || !MustAllocate(rest_parameter()) ||
+ !rest_parameter()->IsUnallocated());
if (new_target_ != nullptr && !MustAllocate(new_target_)) {
new_target_ = nullptr;
« no previous file with comments | « src/ast/scopes.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698