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_PARSING_PARSER_BASE_H | 5 #ifndef V8_PARSING_PARSER_BASE_H |
6 #define V8_PARSING_PARSER_BASE_H | 6 #define V8_PARSING_PARSER_BASE_H |
7 | 7 |
8 #include "src/ast/ast.h" | 8 #include "src/ast/ast.h" |
9 #include "src/ast/scopes.h" | 9 #include "src/ast/scopes.h" |
10 #include "src/bailout-reason.h" | 10 #include "src/bailout-reason.h" |
(...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
666 int position; | 666 int position; |
667 DeclarationParsingResult parsing_result; | 667 DeclarationParsingResult parsing_result; |
668 }; | 668 }; |
669 | 669 |
670 struct ClassInfo { | 670 struct ClassInfo { |
671 public: | 671 public: |
672 explicit ClassInfo(ParserBase* parser) | 672 explicit ClassInfo(ParserBase* parser) |
673 : proxy(nullptr), | 673 : proxy(nullptr), |
674 extends(parser->impl()->EmptyExpression()), | 674 extends(parser->impl()->EmptyExpression()), |
675 properties(parser->impl()->NewClassPropertyList(4)), | 675 properties(parser->impl()->NewClassPropertyList(4)), |
676 instance_field_initializers(parser->impl()->NewExpressionList(0)), | |
677 constructor(parser->impl()->EmptyFunctionLiteral()), | 676 constructor(parser->impl()->EmptyFunctionLiteral()), |
678 has_seen_constructor(false), | 677 has_seen_constructor(false), |
679 static_initializer_var(nullptr), | |
680 has_name_static_property(false), | 678 has_name_static_property(false), |
681 has_static_computed_names(false) {} | 679 has_static_computed_names(false) {} |
682 VariableProxy* proxy; | 680 VariableProxy* proxy; |
683 ExpressionT extends; | 681 ExpressionT extends; |
684 typename Types::ClassPropertyList properties; | 682 typename Types::ClassPropertyList properties; |
685 ExpressionListT instance_field_initializers; | |
686 FunctionLiteralT constructor; | 683 FunctionLiteralT constructor; |
687 bool has_seen_constructor; | 684 bool has_seen_constructor; |
688 Variable* static_initializer_var; | |
689 bool has_name_static_property; | 685 bool has_name_static_property; |
690 bool has_static_computed_names; | 686 bool has_static_computed_names; |
691 }; | 687 }; |
692 | 688 |
693 DeclarationScope* NewScriptScope() const { | 689 DeclarationScope* NewScriptScope() const { |
694 return new (zone()) DeclarationScope(zone(), ast_value_factory()); | 690 return new (zone()) DeclarationScope(zone(), ast_value_factory()); |
695 } | 691 } |
696 | 692 |
697 DeclarationScope* NewVarblockScope() const { | 693 DeclarationScope* NewVarblockScope() const { |
698 return new (zone()) DeclarationScope(zone(), scope(), BLOCK_SCOPE); | 694 return new (zone()) DeclarationScope(zone(), scope(), BLOCK_SCOPE); |
(...skipping 1603 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2302 initializer_scope->set_end_position(scanner()->location().end_pos); | 2298 initializer_scope->set_end_position(scanner()->location().end_pos); |
2303 typename Types::StatementList body = impl()->NewStatementList(1); | 2299 typename Types::StatementList body = impl()->NewStatementList(1); |
2304 body->Add(factory()->NewReturnStatement(value, kNoSourcePosition), zone()); | 2300 body->Add(factory()->NewReturnStatement(value, kNoSourcePosition), zone()); |
2305 FunctionLiteralT function_literal = factory()->NewFunctionLiteral( | 2301 FunctionLiteralT function_literal = factory()->NewFunctionLiteral( |
2306 impl()->EmptyIdentifierString(), initializer_scope, body, | 2302 impl()->EmptyIdentifierString(), initializer_scope, body, |
2307 initializer_state.materialized_literal_count(), | 2303 initializer_state.materialized_literal_count(), |
2308 initializer_state.expected_property_count(), 0, 0, | 2304 initializer_state.expected_property_count(), 0, 0, |
2309 FunctionLiteral::kNoDuplicateParameters, | 2305 FunctionLiteral::kNoDuplicateParameters, |
2310 FunctionLiteral::kAnonymousExpression, default_eager_compile_hint_, | 2306 FunctionLiteral::kAnonymousExpression, default_eager_compile_hint_, |
2311 initializer_scope->start_position(), true, GetNextFunctionLiteralId()); | 2307 initializer_scope->start_position(), true, GetNextFunctionLiteralId()); |
2312 function_literal->set_is_class_field_initializer(true); | |
2313 return function_literal; | 2308 return function_literal; |
2314 } | 2309 } |
2315 | 2310 |
2316 template <typename Impl> | 2311 template <typename Impl> |
2317 typename ParserBase<Impl>::ObjectLiteralPropertyT | 2312 typename ParserBase<Impl>::ObjectLiteralPropertyT |
2318 ParserBase<Impl>::ParseObjectPropertyDefinition(ObjectLiteralChecker* checker, | 2313 ParserBase<Impl>::ParseObjectPropertyDefinition(ObjectLiteralChecker* checker, |
2319 bool* is_computed_name, | 2314 bool* is_computed_name, |
2320 bool* ok) { | 2315 bool* ok) { |
2321 bool is_get = false; | 2316 bool is_get = false; |
2322 bool is_set = false; | 2317 bool is_set = false; |
(...skipping 832 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3155 bool is_super_call = result->IsSuperCallReference(); | 3150 bool is_super_call = result->IsSuperCallReference(); |
3156 if (spread_pos.IsValid()) { | 3151 if (spread_pos.IsValid()) { |
3157 result = impl()->SpreadCall(result, args, pos); | 3152 result = impl()->SpreadCall(result, args, pos); |
3158 } else { | 3153 } else { |
3159 result = factory()->NewCall(result, args, pos, is_possibly_eval); | 3154 result = factory()->NewCall(result, args, pos, is_possibly_eval); |
3160 } | 3155 } |
3161 | 3156 |
3162 // Explicit calls to the super constructor using super() perform an | 3157 // Explicit calls to the super constructor using super() perform an |
3163 // implicit binding assignment to the 'this' variable. | 3158 // implicit binding assignment to the 'this' variable. |
3164 if (is_super_call) { | 3159 if (is_super_call) { |
3165 result = impl()->RewriteSuperCall(result); | |
3166 ExpressionT this_expr = impl()->ThisExpression(pos); | 3160 ExpressionT this_expr = impl()->ThisExpression(pos); |
3167 result = | 3161 result = |
3168 factory()->NewAssignment(Token::INIT, this_expr, result, pos); | 3162 factory()->NewAssignment(Token::INIT, this_expr, result, pos); |
3169 } | 3163 } |
3170 | 3164 |
3171 if (fni_ != NULL) fni_->RemoveLastFunction(); | 3165 if (fni_ != NULL) fni_->RemoveLastFunction(); |
3172 break; | 3166 break; |
3173 } | 3167 } |
3174 | 3168 |
3175 case Token::PERIOD: { | 3169 case Token::PERIOD: { |
(...skipping 2323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5499 has_seen_constructor_ = true; | 5493 has_seen_constructor_ = true; |
5500 return; | 5494 return; |
5501 } | 5495 } |
5502 } | 5496 } |
5503 | 5497 |
5504 | 5498 |
5505 } // namespace internal | 5499 } // namespace internal |
5506 } // namespace v8 | 5500 } // namespace v8 |
5507 | 5501 |
5508 #endif // V8_PARSING_PARSER_BASE_H | 5502 #endif // V8_PARSING_PARSER_BASE_H |
OLD | NEW |