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

Unified Diff: src/preparser.h

Issue 909463003: PreParser / Parser consistency: Make PreParser aware of Zone and AstValueFactory. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: . Created 5 years, 10 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/parser.cc ('k') | test/cctest/test-parsing.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/preparser.h
diff --git a/src/preparser.h b/src/preparser.h
index be27be75f75a66ad6b21590808467e91b081d210..ec3e6ba1007315e6ec4451494e815123fbb81400 100644
--- a/src/preparser.h
+++ b/src/preparser.h
@@ -42,7 +42,6 @@ namespace internal {
// // Used by FunctionState and BlockState.
// typedef Scope;
// typedef GeneratorVariable;
-// typedef Zone;
// // Return types for traversing functions.
// typedef Identifier;
// typedef Expression;
@@ -68,15 +67,17 @@ class ParserBase : public Traits {
typedef typename Traits::Type::Literal LiteralT;
typedef typename Traits::Type::ObjectLiteralProperty ObjectLiteralPropertyT;
- ParserBase(Isolate* isolate, typename Traits::Type::Zone* zone,
- Scanner* scanner, uintptr_t stack_limit, v8::Extension* extension,
- ParserRecorder* log, typename Traits::Type::Parser this_object)
+ ParserBase(Isolate* isolate, Zone* zone, Scanner* scanner,
+ uintptr_t stack_limit, v8::Extension* extension,
+ AstValueFactory* ast_value_factory, ParserRecorder* log,
+ typename Traits::Type::Parser this_object)
: Traits(this_object),
parenthesized_function_(false),
scope_(NULL),
function_state_(NULL),
extension_(extension),
fni_(NULL),
+ ast_value_factory_(ast_value_factory),
log_(log),
mode_(PARSE_EAGERLY), // Lazy mode must be set explicitly.
stack_limit_(stack_limit),
@@ -253,7 +254,6 @@ class ParserBase : public Traits {
FunctionState* outer_function_state_;
typename Traits::Type::Scope** scope_stack_;
typename Traits::Type::Scope* outer_scope_;
- typename Traits::Type::Zone* extra_param_;
typename Traits::Type::Factory* factory_;
friend class ParserTraits;
@@ -306,12 +306,13 @@ class ParserBase : public Traits {
Isolate* isolate() const { return isolate_; }
Scanner* scanner() const { return scanner_; }
+ AstValueFactory* ast_value_factory() const { return ast_value_factory_; }
int position() { return scanner_->location().beg_pos; }
int peek_position() { return scanner_->peek_location().beg_pos; }
bool stack_overflow() const { return stack_overflow_; }
void set_stack_overflow() { stack_overflow_ = true; }
Mode mode() const { return mode_; }
- typename Traits::Type::Zone* zone() const { return zone_; }
+ Zone* zone() const { return zone_; }
INLINE(Token::Value peek()) {
if (stack_overflow_) return Token::ILLEGAL;
@@ -616,13 +617,14 @@ class ParserBase : public Traits {
FunctionState* function_state_; // Function state stack.
v8::Extension* extension_;
FuncNameInferrer* fni_;
+ AstValueFactory* ast_value_factory_; // Not owned.
ParserRecorder* log_;
Mode mode_;
uintptr_t stack_limit_;
private:
Isolate* isolate_;
- typename Traits::Type::Zone* zone_; // Only used by Parser.
+ Zone* zone_;
Scanner* scanner_;
bool stack_overflow_;
@@ -1189,8 +1191,6 @@ class PreParserTraits {
// PreParser doesn't need to store generator variables.
typedef void GeneratorVariable;
- // No interaction with Zones.
- typedef void Zone;
typedef int AstProperties;
typedef Vector<PreParserIdentifier> ParameterIdentifierVector;
@@ -1411,15 +1411,15 @@ class PreParserTraits {
return PreParserExpression::Default();
}
- static PreParserExpressionList NewExpressionList(int size, void* zone) {
+ static PreParserExpressionList NewExpressionList(int size, Zone* zone) {
return PreParserExpressionList();
}
- static PreParserStatementList NewStatementList(int size, void* zone) {
+ static PreParserStatementList NewStatementList(int size, Zone* zone) {
return PreParserStatementList();
}
- static PreParserExpressionList NewPropertyList(int size, void* zone) {
+ static PreParserExpressionList NewPropertyList(int size, Zone* zone) {
return PreParserExpressionList();
}
@@ -1467,7 +1467,6 @@ class PreParserTraits {
static bool IsTaggedTemplate(const PreParserExpression tag) {
return !tag.IsNoTemplateTag();
}
- static AstValueFactory* ast_value_factory() { return NULL; }
void CheckConflictingVarDeclarations(PreParserScope scope, bool* ok) {}
@@ -1512,10 +1511,11 @@ class PreParser : public ParserBase<PreParserTraits> {
kPreParseSuccess
};
- PreParser(Isolate* isolate, Scanner* scanner, ParserRecorder* log,
+ PreParser(Isolate* isolate, Zone* zone, Scanner* scanner,
+ AstValueFactory* ast_value_factory, ParserRecorder* log,
uintptr_t stack_limit)
- : ParserBase<PreParserTraits>(isolate, NULL, scanner, stack_limit, NULL,
- log, this) {}
+ : ParserBase<PreParserTraits>(isolate, zone, scanner, stack_limit, NULL,
+ ast_value_factory, log, this) {}
// Pre-parse the program from the character stream; returns true on
// success (even if parsing failed, the pre-parse data successfully
@@ -1737,8 +1737,7 @@ typename ParserBase<Traits>::IdentifierT ParserBase<Traits>::ParseIdentifier(
ReportMessage("strict_eval_arguments");
*ok = false;
}
- if (name->IsArguments(this->ast_value_factory()))
- scope_->RecordArgumentsUsage();
+ if (name->IsArguments(ast_value_factory())) scope_->RecordArgumentsUsage();
return name;
} else if (is_sloppy(language_mode()) &&
(next == Token::FUTURE_STRICT_RESERVED_WORD ||
@@ -1771,8 +1770,7 @@ typename ParserBase<Traits>::IdentifierT ParserBase<
}
IdentifierT name = this->GetSymbol(scanner());
- if (name->IsArguments(this->ast_value_factory()))
- scope_->RecordArgumentsUsage();
+ if (name->IsArguments(ast_value_factory())) scope_->RecordArgumentsUsage();
return name;
}
@@ -1790,8 +1788,7 @@ ParserBase<Traits>::ParseIdentifierName(bool* ok) {
}
IdentifierT name = this->GetSymbol(scanner());
- if (name->IsArguments(this->ast_value_factory()))
- scope_->RecordArgumentsUsage();
+ if (name->IsArguments(ast_value_factory())) scope_->RecordArgumentsUsage();
return name;
}
@@ -2814,7 +2811,7 @@ ParserBase<Traits>::ParseArrowFunctionLiteral(int start_pos,
int handler_count = 0;
{
- typename Traits::Type::Factory function_factory(this->ast_value_factory());
+ typename Traits::Type::Factory function_factory(ast_value_factory());
FunctionState function_state(&function_state_, &scope_,
Traits::Type::ptr_to_scope(scope),
&function_factory);
@@ -2893,7 +2890,7 @@ ParserBase<Traits>::ParseArrowFunctionLiteral(int start_pos,
}
FunctionLiteralT function_literal = factory()->NewFunctionLiteral(
- this->EmptyIdentifierString(), this->ast_value_factory(), scope, body,
+ this->EmptyIdentifierString(), ast_value_factory(), scope, body,
materialized_literal_count, expected_property_count, handler_count,
num_parameters, FunctionLiteral::kNoDuplicateParameters,
FunctionLiteral::ANONYMOUS_EXPRESSION, FunctionLiteral::kIsFunction,
« no previous file with comments | « src/parser.cc ('k') | test/cctest/test-parsing.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698