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

Side by Side Diff: src/parsing/parser.h

Issue 2258123002: [parser] Refactor parser and preparser traits (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@nickie-2264483003-ord-traits
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 unified diff | Download patch
« no previous file with comments | « no previous file | src/parsing/parser.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #ifndef V8_PARSING_PARSER_H_ 5 #ifndef V8_PARSING_PARSER_H_
6 #define V8_PARSING_PARSER_H_ 6 #define V8_PARSING_PARSER_H_
7 7
8 #include "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/ast/ast.h" 9 #include "src/ast/ast.h"
10 #include "src/ast/scopes.h" 10 #include "src/ast/scopes.h"
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 409
410 static const AstRawString* AsIdentifier(Expression* expression) { 410 static const AstRawString* AsIdentifier(Expression* expression) {
411 DCHECK(IsIdentifier(expression)); 411 DCHECK(IsIdentifier(expression));
412 return expression->AsVariableProxy()->raw_name(); 412 return expression->AsVariableProxy()->raw_name();
413 } 413 }
414 414
415 bool IsPrototype(const AstRawString* identifier) const; 415 bool IsPrototype(const AstRawString* identifier) const;
416 416
417 bool IsConstructor(const AstRawString* identifier) const; 417 bool IsConstructor(const AstRawString* identifier) const;
418 418
419 bool IsDirectEvalCall(Expression* expression) { 419 bool IsDirectEvalCall(Expression* expression) const {
420 if (!expression->IsCall()) return false; 420 if (!expression->IsCall()) return false;
421 expression = expression->AsCall()->expression(); 421 expression = expression->AsCall()->expression();
422 return IsIdentifier(expression) && IsEval(AsIdentifier(expression)); 422 return IsIdentifier(expression) && IsEval(AsIdentifier(expression));
423 } 423 }
424 424
425 static bool IsBoilerplateProperty(ObjectLiteral::Property* property) { 425 static bool IsBoilerplateProperty(ObjectLiteral::Property* property) {
426 return ObjectLiteral::IsBoilerplateProperty(property); 426 return ObjectLiteral::IsBoilerplateProperty(property);
427 } 427 }
428 428
429 static bool IsArrayIndex(const AstRawString* string, uint32_t* index) { 429 static bool IsArrayIndex(const AstRawString* string, uint32_t* index) {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 static const AstRawString* EmptyIdentifier() { return nullptr; } 508 static const AstRawString* EmptyIdentifier() { return nullptr; }
509 static Expression* EmptyExpression() { return nullptr; } 509 static Expression* EmptyExpression() { return nullptr; }
510 static Literal* EmptyLiteral() { return nullptr; } 510 static Literal* EmptyLiteral() { return nullptr; }
511 static ObjectLiteralProperty* EmptyObjectLiteralProperty() { return nullptr; } 511 static ObjectLiteralProperty* EmptyObjectLiteralProperty() { return nullptr; }
512 static FunctionLiteral* EmptyFunctionLiteral() { return nullptr; } 512 static FunctionLiteral* EmptyFunctionLiteral() { return nullptr; }
513 513
514 // Used in error return values. 514 // Used in error return values.
515 static ZoneList<Expression*>* NullExpressionList() { return nullptr; } 515 static ZoneList<Expression*>* NullExpressionList() { return nullptr; }
516 516
517 // Non-NULL empty string. 517 // Non-NULL empty string.
518 V8_INLINE const AstRawString* EmptyIdentifierString(); 518 V8_INLINE const AstRawString* EmptyIdentifierString() const;
519 519
520 // Odd-ball literal creators. 520 // Odd-ball literal creators.
521 Literal* GetLiteralTheHole(int position, AstNodeFactory* factory); 521 Literal* GetLiteralTheHole(int position, AstNodeFactory* factory) const;
522 522
523 // Producing data during the recursive descent. 523 // Producing data during the recursive descent.
524 const AstRawString* GetSymbol(Scanner* scanner); 524 const AstRawString* GetSymbol(Scanner* scanner) const;
525 const AstRawString* GetNextSymbol(Scanner* scanner); 525 const AstRawString* GetNextSymbol(Scanner* scanner) const;
526 const AstRawString* GetNumberAsSymbol(Scanner* scanner); 526 const AstRawString* GetNumberAsSymbol(Scanner* scanner) const;
527 527
528 Expression* ThisExpression(int pos); 528 Expression* ThisExpression(int pos = kNoSourcePosition) const;
529 Expression* NewSuperPropertyReference(AstNodeFactory* factory, int pos); 529 Expression* NewSuperPropertyReference(AstNodeFactory* factory, int pos) const;
530 Expression* NewSuperCallReference(AstNodeFactory* factory, int pos); 530 Expression* NewSuperCallReference(AstNodeFactory* factory, int pos) const;
531 Expression* NewTargetExpression(int pos); 531 Expression* NewTargetExpression(int pos) const;
532 Expression* FunctionSentExpression(AstNodeFactory* factory, int pos); 532 Expression* FunctionSentExpression(AstNodeFactory* factory, int pos) const;
533 Literal* ExpressionFromLiteral(Token::Value token, int pos, Scanner* scanner, 533 Literal* ExpressionFromLiteral(Token::Value token, int pos, Scanner* scanner,
534 AstNodeFactory* factory); 534 AstNodeFactory* factory) const;
535 Expression* ExpressionFromIdentifier(const AstRawString* name, 535 Expression* ExpressionFromIdentifier(const AstRawString* name,
536 int start_position, int end_position, 536 int start_position, int end_position,
537 InferName = InferName::kYes); 537 InferName = InferName::kYes) const;
538 Expression* ExpressionFromString(int pos, Scanner* scanner, 538 Expression* ExpressionFromString(int pos, Scanner* scanner,
539 AstNodeFactory* factory); 539 AstNodeFactory* factory) const;
540 Expression* GetIterator(Expression* iterable, AstNodeFactory* factory, 540 Expression* GetIterator(Expression* iterable, AstNodeFactory* factory,
541 int pos); 541 int pos);
542 ZoneList<v8::internal::Expression*>* NewExpressionList(int size, Zone* zone) { 542 ZoneList<v8::internal::Expression*>* NewExpressionList(int size,
543 Zone* zone) const {
543 return new(zone) ZoneList<v8::internal::Expression*>(size, zone); 544 return new(zone) ZoneList<v8::internal::Expression*>(size, zone);
544 } 545 }
545 ZoneList<ObjectLiteral::Property*>* NewPropertyList(int size, Zone* zone) { 546 ZoneList<ObjectLiteral::Property*>* NewPropertyList(int size,
547 Zone* zone) const {
546 return new(zone) ZoneList<ObjectLiteral::Property*>(size, zone); 548 return new(zone) ZoneList<ObjectLiteral::Property*>(size, zone);
547 } 549 }
548 ZoneList<v8::internal::Statement*>* NewStatementList(int size, Zone* zone) { 550 ZoneList<v8::internal::Statement*>* NewStatementList(int size,
551 Zone* zone) const {
549 return new(zone) ZoneList<v8::internal::Statement*>(size, zone); 552 return new(zone) ZoneList<v8::internal::Statement*>(size, zone);
550 } 553 }
551 554
552 V8_INLINE void AddParameterInitializationBlock( 555 V8_INLINE void AddParameterInitializationBlock(
553 const ParserFormalParameters& parameters, 556 const ParserFormalParameters& parameters,
554 ZoneList<v8::internal::Statement*>* body, bool is_async, bool* ok); 557 ZoneList<v8::internal::Statement*>* body, bool is_async, bool* ok) const;
555 558
556 void ParseAsyncArrowSingleExpressionBody( 559 void ParseAsyncArrowSingleExpressionBody(
557 ZoneList<Statement*>* body, bool accept_IN, 560 ZoneList<Statement*>* body, bool accept_IN,
558 Type::ExpressionClassifier* classifier, int pos, bool* ok); 561 Type::ExpressionClassifier* classifier, int pos, bool* ok);
559 562
560 V8_INLINE void AddFormalParameter(ParserFormalParameters* parameters, 563 V8_INLINE void AddFormalParameter(ParserFormalParameters* parameters,
561 Expression* pattern, 564 Expression* pattern,
562 Expression* initializer, 565 Expression* initializer,
563 int initializer_end_position, bool is_rest); 566 int initializer_end_position, bool is_rest);
564 V8_INLINE void DeclareFormalParameter( 567 V8_INLINE void DeclareFormalParameter(
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
1181 void Print(AstNode* node); 1184 void Print(AstNode* node);
1182 #endif // DEBUG 1185 #endif // DEBUG
1183 }; 1186 };
1184 1187
1185 1188
1186 bool ParserTraits::IsFutureStrictReserved( 1189 bool ParserTraits::IsFutureStrictReserved(
1187 const AstRawString* identifier) const { 1190 const AstRawString* identifier) const {
1188 return parser_->scanner()->IdentifierIsFutureStrictReserved(identifier); 1191 return parser_->scanner()->IdentifierIsFutureStrictReserved(identifier);
1189 } 1192 }
1190 1193
1191 const AstRawString* ParserTraits::EmptyIdentifierString() { 1194 const AstRawString* ParserTraits::EmptyIdentifierString() const {
1192 return parser_->ast_value_factory()->empty_string(); 1195 return parser_->ast_value_factory()->empty_string();
1193 } 1196 }
1194 1197
1195 1198
1196 void ParserTraits::SkipLazyFunctionBody(int* materialized_literal_count, 1199 void ParserTraits::SkipLazyFunctionBody(int* materialized_literal_count,
1197 int* expected_property_count, bool* ok, 1200 int* expected_property_count, bool* ok,
1198 Scanner::BookmarkScope* bookmark) { 1201 Scanner::BookmarkScope* bookmark) {
1199 return parser_->SkipLazyFunctionBody(materialized_literal_count, 1202 return parser_->SkipLazyFunctionBody(materialized_literal_count,
1200 expected_property_count, ok, bookmark); 1203 expected_property_count, ok, bookmark);
1201 } 1204 }
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
1319 if (is_sloppy(scope->language_mode())) { 1322 if (is_sloppy(scope->language_mode())) {
1320 // TODO(sigurds) Mark every parameter as maybe assigned. This is a 1323 // TODO(sigurds) Mark every parameter as maybe assigned. This is a
1321 // conservative approximation necessary to account for parameters 1324 // conservative approximation necessary to account for parameters
1322 // that are assigned via the arguments array. 1325 // that are assigned via the arguments array.
1323 var->set_maybe_assigned(); 1326 var->set_maybe_assigned();
1324 } 1327 }
1325 } 1328 }
1326 1329
1327 void ParserTraits::AddParameterInitializationBlock( 1330 void ParserTraits::AddParameterInitializationBlock(
1328 const ParserFormalParameters& parameters, 1331 const ParserFormalParameters& parameters,
1329 ZoneList<v8::internal::Statement*>* body, bool is_async, bool* ok) { 1332 ZoneList<v8::internal::Statement*>* body, bool is_async, bool* ok) const {
1330 if (!parameters.is_simple) { 1333 if (!parameters.is_simple) {
1331 auto* init_block = 1334 auto* init_block =
1332 parser_->BuildParameterInitializationBlock(parameters, ok); 1335 parser_->BuildParameterInitializationBlock(parameters, ok);
1333 if (!*ok) return; 1336 if (!*ok) return;
1334 1337
1335 if (is_async) { 1338 if (is_async) {
1336 init_block = parser_->BuildRejectPromiseOnException(init_block); 1339 init_block = parser_->BuildRejectPromiseOnException(init_block);
1337 } 1340 }
1338 1341
1339 if (init_block != nullptr) { 1342 if (init_block != nullptr) {
(...skipping 12 matching lines...) Expand all
1352 1355
1353 Expression* ParserTraits::RewriteYieldStar(Expression* generator, 1356 Expression* ParserTraits::RewriteYieldStar(Expression* generator,
1354 Expression* iterable, int pos) { 1357 Expression* iterable, int pos) {
1355 return parser_->RewriteYieldStar(generator, iterable, pos); 1358 return parser_->RewriteYieldStar(generator, iterable, pos);
1356 } 1359 }
1357 1360
1358 } // namespace internal 1361 } // namespace internal
1359 } // namespace v8 1362 } // namespace v8
1360 1363
1361 #endif // V8_PARSING_PARSER_H_ 1364 #endif // V8_PARSING_PARSER_H_
OLDNEW
« 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