| OLD | NEW |
| 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_PARSER_H_ | 5 #ifndef V8_PARSER_H_ |
| 6 #define V8_PARSER_H_ | 6 #define V8_PARSER_H_ |
| 7 | 7 |
| 8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
| 9 #include "src/ast.h" | 9 #include "src/ast.h" |
| 10 #include "src/compiler.h" // TODO(titzer): remove this include dependency | 10 #include "src/compiler.h" // TODO(titzer): remove this include dependency |
| (...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 544 // ---------------------------------------------------------------------------- | 544 // ---------------------------------------------------------------------------- |
| 545 // JAVASCRIPT PARSING | 545 // JAVASCRIPT PARSING |
| 546 | 546 |
| 547 class Parser; | 547 class Parser; |
| 548 class SingletonLogger; | 548 class SingletonLogger; |
| 549 | 549 |
| 550 | 550 |
| 551 struct ParserFormalParameters : FormalParametersBase { | 551 struct ParserFormalParameters : FormalParametersBase { |
| 552 struct Parameter { | 552 struct Parameter { |
| 553 Parameter(const AstRawString* name, Expression* pattern, | 553 Parameter(const AstRawString* name, Expression* pattern, |
| 554 Expression* initializer, bool is_rest) | 554 Expression* initializer, int initializer_end_position, |
| 555 : name(name), pattern(pattern), initializer(initializer), | 555 bool is_rest) |
| 556 : name(name), |
| 557 pattern(pattern), |
| 558 initializer(initializer), |
| 559 initializer_end_position(initializer_end_position), |
| 556 is_rest(is_rest) {} | 560 is_rest(is_rest) {} |
| 557 const AstRawString* name; | 561 const AstRawString* name; |
| 558 Expression* pattern; | 562 Expression* pattern; |
| 559 Expression* initializer; | 563 Expression* initializer; |
| 564 int initializer_end_position; |
| 560 bool is_rest; | 565 bool is_rest; |
| 561 bool is_simple() const { | 566 bool is_simple() const { |
| 562 return pattern->IsVariableProxy() && initializer == nullptr && !is_rest; | 567 return pattern->IsVariableProxy() && initializer == nullptr && !is_rest; |
| 563 } | 568 } |
| 564 }; | 569 }; |
| 565 | 570 |
| 566 explicit ParserFormalParameters(Scope* scope) | 571 explicit ParserFormalParameters(Scope* scope) |
| 567 : FormalParametersBase(scope), params(4, scope->zone()) {} | 572 : FormalParametersBase(scope), params(4, scope->zone()) {} |
| 568 ZoneList<Parameter> params; | 573 ZoneList<Parameter> params; |
| 569 | 574 |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 786 return new(zone) ZoneList<v8::internal::Statement*>(size, zone); | 791 return new(zone) ZoneList<v8::internal::Statement*>(size, zone); |
| 787 } | 792 } |
| 788 | 793 |
| 789 V8_INLINE void AddParameterInitializationBlock( | 794 V8_INLINE void AddParameterInitializationBlock( |
| 790 const ParserFormalParameters& parameters, | 795 const ParserFormalParameters& parameters, |
| 791 ZoneList<v8::internal::Statement*>* body, bool* ok); | 796 ZoneList<v8::internal::Statement*>* body, bool* ok); |
| 792 | 797 |
| 793 V8_INLINE Scope* NewScope(Scope* parent_scope, ScopeType scope_type, | 798 V8_INLINE Scope* NewScope(Scope* parent_scope, ScopeType scope_type, |
| 794 FunctionKind kind = kNormalFunction); | 799 FunctionKind kind = kNormalFunction); |
| 795 | 800 |
| 796 V8_INLINE void AddFormalParameter( | 801 V8_INLINE void AddFormalParameter(ParserFormalParameters* parameters, |
| 797 ParserFormalParameters* parameters, Expression* pattern, | 802 Expression* pattern, |
| 798 Expression* initializer, bool is_rest); | 803 Expression* initializer, |
| 804 int initializer_end_position, bool is_rest); |
| 799 V8_INLINE void DeclareFormalParameter( | 805 V8_INLINE void DeclareFormalParameter( |
| 800 Scope* scope, const ParserFormalParameters::Parameter& parameter, | 806 Scope* scope, const ParserFormalParameters::Parameter& parameter, |
| 801 ExpressionClassifier* classifier); | 807 ExpressionClassifier* classifier); |
| 802 void ParseArrowFunctionFormalParameters(ParserFormalParameters* parameters, | 808 void ParseArrowFunctionFormalParameters(ParserFormalParameters* parameters, |
| 803 Expression* params, | 809 Expression* params, |
| 804 const Scanner::Location& params_loc, | 810 const Scanner::Location& params_loc, |
| 805 bool* ok); | 811 bool* ok); |
| 806 void ParseArrowFunctionFormalParameterList( | 812 void ParseArrowFunctionFormalParameterList( |
| 807 ParserFormalParameters* parameters, Expression* params, | 813 ParserFormalParameters* parameters, Expression* params, |
| 808 const Scanner::Location& params_loc, | 814 const Scanner::Location& params_loc, |
| (...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1331 return parser_->SpreadCall(function, args, pos); | 1337 return parser_->SpreadCall(function, args, pos); |
| 1332 } | 1338 } |
| 1333 | 1339 |
| 1334 | 1340 |
| 1335 Expression* ParserTraits::SpreadCallNew( | 1341 Expression* ParserTraits::SpreadCallNew( |
| 1336 Expression* function, ZoneList<v8::internal::Expression*>* args, int pos) { | 1342 Expression* function, ZoneList<v8::internal::Expression*>* args, int pos) { |
| 1337 return parser_->SpreadCallNew(function, args, pos); | 1343 return parser_->SpreadCallNew(function, args, pos); |
| 1338 } | 1344 } |
| 1339 | 1345 |
| 1340 | 1346 |
| 1341 void ParserTraits::AddFormalParameter( | 1347 void ParserTraits::AddFormalParameter(ParserFormalParameters* parameters, |
| 1342 ParserFormalParameters* parameters, | 1348 Expression* pattern, |
| 1343 Expression* pattern, Expression* initializer, bool is_rest) { | 1349 Expression* initializer, |
| 1350 int initializer_end_position, |
| 1351 bool is_rest) { |
| 1344 bool is_simple = | 1352 bool is_simple = |
| 1345 !is_rest && pattern->IsVariableProxy() && initializer == nullptr; | 1353 !is_rest && pattern->IsVariableProxy() && initializer == nullptr; |
| 1346 DCHECK(parser_->allow_harmony_destructuring_bind() || | 1354 DCHECK(parser_->allow_harmony_destructuring_bind() || |
| 1347 parser_->allow_harmony_rest_parameters() || | 1355 parser_->allow_harmony_rest_parameters() || |
| 1348 parser_->allow_harmony_default_parameters() || is_simple); | 1356 parser_->allow_harmony_default_parameters() || is_simple); |
| 1349 const AstRawString* name = is_simple | 1357 const AstRawString* name = is_simple |
| 1350 ? pattern->AsVariableProxy()->raw_name() | 1358 ? pattern->AsVariableProxy()->raw_name() |
| 1351 : parser_->ast_value_factory()->empty_string(); | 1359 : parser_->ast_value_factory()->empty_string(); |
| 1352 parameters->params.Add( | 1360 parameters->params.Add( |
| 1353 ParserFormalParameters::Parameter(name, pattern, initializer, is_rest), | 1361 ParserFormalParameters::Parameter(name, pattern, initializer, |
| 1362 initializer_end_position, is_rest), |
| 1354 parameters->scope->zone()); | 1363 parameters->scope->zone()); |
| 1355 } | 1364 } |
| 1356 | 1365 |
| 1357 | 1366 |
| 1358 void ParserTraits::DeclareFormalParameter( | 1367 void ParserTraits::DeclareFormalParameter( |
| 1359 Scope* scope, const ParserFormalParameters::Parameter& parameter, | 1368 Scope* scope, const ParserFormalParameters::Parameter& parameter, |
| 1360 ExpressionClassifier* classifier) { | 1369 ExpressionClassifier* classifier) { |
| 1361 bool is_duplicate = false; | 1370 bool is_duplicate = false; |
| 1362 bool is_simple = classifier->is_simple_parameter_list(); | 1371 bool is_simple = classifier->is_simple_parameter_list(); |
| 1363 auto name = parameter.name; | 1372 auto name = parameter.name; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1395 | 1404 |
| 1396 DoExpression* ParserTraits::ParseDoExpression(bool* ok) { | 1405 DoExpression* ParserTraits::ParseDoExpression(bool* ok) { |
| 1397 return parser_->ParseDoExpression(ok); | 1406 return parser_->ParseDoExpression(ok); |
| 1398 } | 1407 } |
| 1399 | 1408 |
| 1400 | 1409 |
| 1401 } // namespace internal | 1410 } // namespace internal |
| 1402 } // namespace v8 | 1411 } // namespace v8 |
| 1403 | 1412 |
| 1404 #endif // V8_PARSER_H_ | 1413 #endif // V8_PARSER_H_ |
| OLD | NEW |