| 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_PREPARSER_H | 5 #ifndef V8_PREPARSER_H |
| 6 #define V8_PREPARSER_H | 6 #define V8_PREPARSER_H |
| 7 | 7 |
| 8 #include "src/bailout-reason.h" | 8 #include "src/bailout-reason.h" |
| 9 #include "src/expression-classifier.h" | 9 #include "src/expression-classifier.h" |
| 10 #include "src/func-name-inferrer.h" | 10 #include "src/func-name-inferrer.h" |
| (...skipping 2995 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3006 if (op == Token::ASSIGN && this->IsThisProperty(expression)) { | 3006 if (op == Token::ASSIGN && this->IsThisProperty(expression)) { |
| 3007 function_state_->AddProperty(); | 3007 function_state_->AddProperty(); |
| 3008 } | 3008 } |
| 3009 | 3009 |
| 3010 this->CheckAssigningFunctionLiteralToProperty(expression, right); | 3010 this->CheckAssigningFunctionLiteralToProperty(expression, right); |
| 3011 | 3011 |
| 3012 if (fni_ != NULL) { | 3012 if (fni_ != NULL) { |
| 3013 // Check if the right hand side is a call to avoid inferring a | 3013 // Check if the right hand side is a call to avoid inferring a |
| 3014 // name if we're dealing with "a = function(){...}();"-like | 3014 // name if we're dealing with "a = function(){...}();"-like |
| 3015 // expression. | 3015 // expression. |
| 3016 if ((op == Token::INIT_VAR | 3016 if ((op == Token::INIT || op == Token::ASSIGN) && |
| 3017 || op == Token::INIT_CONST_LEGACY | 3017 (!right->IsCall() && !right->IsCallNew())) { |
| 3018 || op == Token::ASSIGN) | |
| 3019 && (!right->IsCall() && !right->IsCallNew())) { | |
| 3020 fni_->Infer(); | 3018 fni_->Infer(); |
| 3021 } else { | 3019 } else { |
| 3022 fni_->RemoveLastFunction(); | 3020 fni_->RemoveLastFunction(); |
| 3023 } | 3021 } |
| 3024 fni_->Leave(); | 3022 fni_->Leave(); |
| 3025 } | 3023 } |
| 3026 | 3024 |
| 3027 return factory()->NewAssignment(op, expression, right, pos); | 3025 return factory()->NewAssignment(op, expression, right, pos); |
| 3028 } | 3026 } |
| 3029 | 3027 |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3322 args = Traits::PrepareSpreadArguments(args); | 3320 args = Traits::PrepareSpreadArguments(args); |
| 3323 result = Traits::SpreadCall(result, args, pos); | 3321 result = Traits::SpreadCall(result, args, pos); |
| 3324 } else { | 3322 } else { |
| 3325 result = factory()->NewCall(result, args, pos); | 3323 result = factory()->NewCall(result, args, pos); |
| 3326 } | 3324 } |
| 3327 | 3325 |
| 3328 // Explicit calls to the super constructor using super() perform an | 3326 // Explicit calls to the super constructor using super() perform an |
| 3329 // implicit binding assignment to the 'this' variable. | 3327 // implicit binding assignment to the 'this' variable. |
| 3330 if (is_super_call) { | 3328 if (is_super_call) { |
| 3331 ExpressionT this_expr = this->ThisExpression(scope_, factory(), pos); | 3329 ExpressionT this_expr = this->ThisExpression(scope_, factory(), pos); |
| 3332 result = factory()->NewAssignment(Token::INIT_CONST, this_expr, | 3330 result = |
| 3333 result, pos); | 3331 factory()->NewAssignment(Token::INIT, this_expr, result, pos); |
| 3334 } | 3332 } |
| 3335 | 3333 |
| 3336 if (fni_ != NULL) fni_->RemoveLastFunction(); | 3334 if (fni_ != NULL) fni_->RemoveLastFunction(); |
| 3337 break; | 3335 break; |
| 3338 } | 3336 } |
| 3339 | 3337 |
| 3340 case Token::PERIOD: { | 3338 case Token::PERIOD: { |
| 3341 BindingPatternUnexpectedToken(classifier); | 3339 BindingPatternUnexpectedToken(classifier); |
| 3342 ArrowFormalParametersUnexpectedToken(classifier); | 3340 ArrowFormalParametersUnexpectedToken(classifier); |
| 3343 Consume(Token::PERIOD); | 3341 Consume(Token::PERIOD); |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3610 if (spread_pos.IsValid()) { | 3608 if (spread_pos.IsValid()) { |
| 3611 args = Traits::PrepareSpreadArguments(args); | 3609 args = Traits::PrepareSpreadArguments(args); |
| 3612 expr = Traits::SpreadCall(expr, args, pos); | 3610 expr = Traits::SpreadCall(expr, args, pos); |
| 3613 } else { | 3611 } else { |
| 3614 expr = factory()->NewCall(expr, args, pos); | 3612 expr = factory()->NewCall(expr, args, pos); |
| 3615 } | 3613 } |
| 3616 | 3614 |
| 3617 // Explicit calls to the super constructor using super() perform an implicit | 3615 // Explicit calls to the super constructor using super() perform an implicit |
| 3618 // binding assignment to the 'this' variable. | 3616 // binding assignment to the 'this' variable. |
| 3619 ExpressionT this_expr = this->ThisExpression(scope_, factory(), pos); | 3617 ExpressionT this_expr = this->ThisExpression(scope_, factory(), pos); |
| 3620 return factory()->NewAssignment(Token::INIT_CONST, this_expr, expr, pos); | 3618 return factory()->NewAssignment(Token::INIT, this_expr, expr, pos); |
| 3621 } | 3619 } |
| 3622 | 3620 |
| 3623 | 3621 |
| 3624 template <class Traits> | 3622 template <class Traits> |
| 3625 typename ParserBase<Traits>::ExpressionT | 3623 typename ParserBase<Traits>::ExpressionT |
| 3626 ParserBase<Traits>::ParseSuperExpression(bool is_new, | 3624 ParserBase<Traits>::ParseSuperExpression(bool is_new, |
| 3627 ExpressionClassifier* classifier, | 3625 ExpressionClassifier* classifier, |
| 3628 bool* ok) { | 3626 bool* ok) { |
| 3629 int pos = position(); | 3627 int pos = position(); |
| 3630 Expect(Token::SUPER, CHECK_OK); | 3628 Expect(Token::SUPER, CHECK_OK); |
| (...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4199 return; | 4197 return; |
| 4200 } | 4198 } |
| 4201 has_seen_constructor_ = true; | 4199 has_seen_constructor_ = true; |
| 4202 return; | 4200 return; |
| 4203 } | 4201 } |
| 4204 } | 4202 } |
| 4205 } // namespace internal | 4203 } // namespace internal |
| 4206 } // namespace v8 | 4204 } // namespace v8 |
| 4207 | 4205 |
| 4208 #endif // V8_PREPARSER_H | 4206 #endif // V8_PREPARSER_H |
| OLD | NEW |