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

Unified Diff: src/parsing/parser.h

Issue 2531593002: Parser: store parameters in a ThreadedList instead of ZoneList. (Closed)
Patch Set: oops Created 4 years, 1 month 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 | « no previous file | src/parsing/parser.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/parsing/parser.h
diff --git a/src/parsing/parser.h b/src/parsing/parser.h
index d56fdbc2fd728ca9de6d0cfa6906428e32c60780..5b81e86a7e43e3611d03b0537236ddfaef585922 100644
--- a/src/parsing/parser.h
+++ b/src/parsing/parser.h
@@ -14,6 +14,7 @@
#include "src/parsing/preparse-data.h"
#include "src/parsing/preparser.h"
#include "src/pending-compilation-error-handler.h"
+#include "src/utils.h"
namespace v8 {
@@ -135,7 +136,7 @@ class Parser;
struct ParserFormalParameters : FormalParametersBase {
- struct Parameter {
+ struct Parameter : public ZoneObject {
Parameter(const AstRawString* name, Expression* pattern,
Expression* initializer, int initializer_end_position,
bool is_rest)
@@ -149,16 +150,17 @@ struct ParserFormalParameters : FormalParametersBase {
Expression* initializer;
int initializer_end_position;
bool is_rest;
+ Parameter* next_parameter = nullptr;
bool is_simple() const {
return pattern->IsVariableProxy() && initializer == nullptr && !is_rest;
}
+ Parameter** next() { return &next_parameter; }
+ Parameter* const* next() const { return &next_parameter; }
};
explicit ParserFormalParameters(DeclarationScope* scope)
- : FormalParametersBase(scope), params(4, scope->zone()) {}
- ZoneList<Parameter> params;
-
- const Parameter& at(int i) const { return params[i]; }
+ : FormalParametersBase(scope) {}
+ ThreadedList<Parameter> params;
};
template <>
@@ -1043,34 +1045,39 @@ class V8_EXPORT_PRIVATE Parser : public NON_EXPORTED_BASE(ParserBase<Parser>) {
const AstRawString* name = is_simple
? pattern->AsVariableProxy()->raw_name()
: ast_value_factory()->empty_string();
- parameters->params.Add(
- ParserFormalParameters::Parameter(name, pattern, initializer,
- initializer_end_position, is_rest),
- parameters->scope->zone());
+ auto parameter =
+ new (parameters->scope->zone()) ParserFormalParameters::Parameter(
+ name, pattern, initializer, initializer_end_position, is_rest);
+
+ parameters->params.Add(parameter);
}
- V8_INLINE void DeclareFormalParameter(
+ V8_INLINE void DeclareFormalParameters(
DeclarationScope* scope,
- const ParserFormalParameters::Parameter& parameter) {
- bool is_duplicate = false;
- bool is_simple = classifier()->is_simple_parameter_list();
- auto name = is_simple || parameter.is_rest
- ? parameter.name
- : ast_value_factory()->empty_string();
- auto mode = is_simple || parameter.is_rest ? VAR : TEMPORARY;
- if (!is_simple) scope->SetHasNonSimpleParameters();
- bool is_optional = parameter.initializer != nullptr;
- Variable* var =
- scope->DeclareParameter(name, mode, is_optional, parameter.is_rest,
- &is_duplicate, ast_value_factory());
- if (is_duplicate) {
- classifier()->RecordDuplicateFormalParameterError(scanner()->location());
- }
- if (is_sloppy(scope->language_mode())) {
- // TODO(sigurds) Mark every parameter as maybe assigned. This is a
- // conservative approximation necessary to account for parameters
- // that are assigned via the arguments array.
- var->set_maybe_assigned();
+ const ThreadedList<ParserFormalParameters::Parameter>& parameters) {
+ for (auto parameter : parameters) {
+ bool is_duplicate = false;
+ bool is_simple = classifier()->is_simple_parameter_list();
+ auto name = is_simple || parameter->is_rest
+ ? parameter->name
+ : ast_value_factory()->empty_string();
+ auto mode = is_simple || parameter->is_rest ? VAR : TEMPORARY;
+ if (!is_simple) scope->SetHasNonSimpleParameters();
+ bool is_optional = parameter->initializer != nullptr;
+ Variable* var =
+ scope->DeclareParameter(name, mode, is_optional, parameter->is_rest,
+ &is_duplicate, ast_value_factory());
+ if (is_duplicate &&
+ classifier()->is_valid_formal_parameter_list_without_duplicates()) {
+ classifier()->RecordDuplicateFormalParameterError(
+ scanner()->location());
+ }
+ if (is_sloppy(scope->language_mode())) {
+ // TODO(sigurds) Mark every parameter as maybe assigned. This is a
+ // conservative approximation necessary to account for parameters
+ // that are assigned via the arguments array.
+ var->set_maybe_assigned();
+ }
}
}
« no previous file with comments | « no previous file | src/parsing/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698