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 2210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2221 int end_pos = scanner()->peek_location().end_pos; | 2221 int end_pos = scanner()->peek_location().end_pos; |
2222 ExpressionT result = this->EmptyExpression(); | 2222 ExpressionT result = this->EmptyExpression(); |
2223 Token::Value token = peek(); | 2223 Token::Value token = peek(); |
2224 switch (token) { | 2224 switch (token) { |
2225 case Token::THIS: { | 2225 case Token::THIS: { |
2226 BindingPatternUnexpectedToken(classifier); | 2226 BindingPatternUnexpectedToken(classifier); |
2227 Consume(Token::THIS); | 2227 Consume(Token::THIS); |
2228 if (FLAG_strong_this && is_strong(language_mode())) { | 2228 if (FLAG_strong_this && is_strong(language_mode())) { |
2229 // Constructors' usages of 'this' in strong mode are parsed separately. | 2229 // Constructors' usages of 'this' in strong mode are parsed separately. |
2230 // TODO(rossberg): this does not work with arrow functions yet. | 2230 // TODO(rossberg): this does not work with arrow functions yet. |
2231 if (i::IsConstructor(function_state_->kind())) { | 2231 if (IsClassConstructor(function_state_->kind())) { |
2232 ReportMessage(MessageTemplate::kStrongConstructorThis); | 2232 ReportMessage(MessageTemplate::kStrongConstructorThis); |
2233 *ok = false; | 2233 *ok = false; |
2234 break; | 2234 break; |
2235 } | 2235 } |
2236 } | 2236 } |
2237 result = this->ThisExpression(scope_, factory(), beg_pos); | 2237 result = this->ThisExpression(scope_, factory(), beg_pos); |
2238 break; | 2238 break; |
2239 } | 2239 } |
2240 | 2240 |
2241 case Token::NULL_LITERAL: | 2241 case Token::NULL_LITERAL: |
(...skipping 1363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3605 typename ParserBase<Traits>::ExpressionT | 3605 typename ParserBase<Traits>::ExpressionT |
3606 ParserBase<Traits>::ParseSuperExpression(bool is_new, | 3606 ParserBase<Traits>::ParseSuperExpression(bool is_new, |
3607 ExpressionClassifier* classifier, | 3607 ExpressionClassifier* classifier, |
3608 bool* ok) { | 3608 bool* ok) { |
3609 int pos = position(); | 3609 int pos = position(); |
3610 Expect(Token::SUPER, CHECK_OK); | 3610 Expect(Token::SUPER, CHECK_OK); |
3611 | 3611 |
3612 Scope* scope = scope_->ReceiverScope(); | 3612 Scope* scope = scope_->ReceiverScope(); |
3613 FunctionKind kind = scope->function_kind(); | 3613 FunctionKind kind = scope->function_kind(); |
3614 if (IsConciseMethod(kind) || IsAccessorFunction(kind) || | 3614 if (IsConciseMethod(kind) || IsAccessorFunction(kind) || |
3615 i::IsConstructor(kind)) { | 3615 IsClassConstructor(kind)) { |
3616 if (peek() == Token::PERIOD || peek() == Token::LBRACK) { | 3616 if (peek() == Token::PERIOD || peek() == Token::LBRACK) { |
3617 scope->RecordSuperPropertyUsage(); | 3617 scope->RecordSuperPropertyUsage(); |
3618 return this->SuperPropertyReference(scope_, factory(), pos); | 3618 return this->SuperPropertyReference(scope_, factory(), pos); |
3619 } | 3619 } |
3620 // new super() is never allowed. | 3620 // new super() is never allowed. |
3621 // super() is only allowed in derived constructor | 3621 // super() is only allowed in derived constructor |
3622 if (!is_new && peek() == Token::LPAREN && IsSubclassConstructor(kind)) { | 3622 if (!is_new && peek() == Token::LPAREN && IsSubclassConstructor(kind)) { |
3623 if (is_strong(language_mode())) { | 3623 if (is_strong(language_mode())) { |
3624 // Super calls in strong mode are parsed separately. | 3624 // Super calls in strong mode are parsed separately. |
3625 ReportMessageAt(scanner()->location(), | 3625 ReportMessageAt(scanner()->location(), |
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4178 *ok = false; | 4178 *ok = false; |
4179 return; | 4179 return; |
4180 } | 4180 } |
4181 has_seen_constructor_ = true; | 4181 has_seen_constructor_ = true; |
4182 return; | 4182 return; |
4183 } | 4183 } |
4184 } | 4184 } |
4185 } } // v8::internal | 4185 } } // v8::internal |
4186 | 4186 |
4187 #endif // V8_PREPARSER_H | 4187 #endif // V8_PREPARSER_H |
OLD | NEW |