| 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/v8.h" | 8 #include "src/v8.h" |
| 9 | 9 |
| 10 #include "src/bailout-reason.h" | 10 #include "src/bailout-reason.h" |
| (...skipping 1157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1168 bool is_strong, | 1168 bool is_strong, |
| 1169 int pos) { | 1169 int pos) { |
| 1170 return PreParserExpression::Default(); | 1170 return PreParserExpression::Default(); |
| 1171 } | 1171 } |
| 1172 PreParserExpression NewArrayLiteral(PreParserExpressionList values, | 1172 PreParserExpression NewArrayLiteral(PreParserExpressionList values, |
| 1173 int literal_index, | 1173 int literal_index, |
| 1174 bool is_strong, | 1174 bool is_strong, |
| 1175 int pos) { | 1175 int pos) { |
| 1176 return PreParserExpression::Default(); | 1176 return PreParserExpression::Default(); |
| 1177 } | 1177 } |
| 1178 PreParserExpression NewArrayLiteral(PreParserExpressionList values, |
| 1179 int first_spread_index, int literal_index, |
| 1180 bool is_strong, int pos) { |
| 1181 return PreParserExpression::Default(); |
| 1182 } |
| 1178 PreParserExpression NewObjectLiteralProperty(PreParserExpression key, | 1183 PreParserExpression NewObjectLiteralProperty(PreParserExpression key, |
| 1179 PreParserExpression value, | 1184 PreParserExpression value, |
| 1180 ObjectLiteralProperty::Kind kind, | 1185 ObjectLiteralProperty::Kind kind, |
| 1181 bool is_static, | 1186 bool is_static, |
| 1182 bool is_computed_name) { | 1187 bool is_computed_name) { |
| 1183 return PreParserExpression::Default(); | 1188 return PreParserExpression::Default(); |
| 1184 } | 1189 } |
| 1185 PreParserExpression NewObjectLiteralProperty(PreParserExpression key, | 1190 PreParserExpression NewObjectLiteralProperty(PreParserExpression key, |
| 1186 PreParserExpression value, | 1191 PreParserExpression value, |
| 1187 bool is_static, | 1192 bool is_static, |
| (...skipping 1193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2381 | 2386 |
| 2382 template <class Traits> | 2387 template <class Traits> |
| 2383 typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseArrayLiteral( | 2388 typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseArrayLiteral( |
| 2384 ExpressionClassifier* classifier, bool* ok) { | 2389 ExpressionClassifier* classifier, bool* ok) { |
| 2385 // ArrayLiteral :: | 2390 // ArrayLiteral :: |
| 2386 // '[' Expression? (',' Expression?)* ']' | 2391 // '[' Expression? (',' Expression?)* ']' |
| 2387 | 2392 |
| 2388 int pos = peek_position(); | 2393 int pos = peek_position(); |
| 2389 typename Traits::Type::ExpressionList values = | 2394 typename Traits::Type::ExpressionList values = |
| 2390 this->NewExpressionList(4, zone_); | 2395 this->NewExpressionList(4, zone_); |
| 2396 int first_spread_index = -1; |
| 2391 Expect(Token::LBRACK, CHECK_OK); | 2397 Expect(Token::LBRACK, CHECK_OK); |
| 2392 while (peek() != Token::RBRACK) { | 2398 while (peek() != Token::RBRACK) { |
| 2393 bool seen_spread = false; | 2399 bool seen_spread = false; |
| 2394 ExpressionT elem = this->EmptyExpression(); | 2400 ExpressionT elem = this->EmptyExpression(); |
| 2395 if (peek() == Token::COMMA) { | 2401 if (peek() == Token::COMMA) { |
| 2396 if (is_strong(language_mode())) { | 2402 if (is_strong(language_mode())) { |
| 2397 ReportMessageAt(scanner()->peek_location(), | 2403 ReportMessageAt(scanner()->peek_location(), |
| 2398 MessageTemplate::kStrongEllision); | 2404 MessageTemplate::kStrongEllision); |
| 2399 *ok = false; | 2405 *ok = false; |
| 2400 return this->EmptyExpression(); | 2406 return this->EmptyExpression(); |
| 2401 } | 2407 } |
| 2402 elem = this->GetLiteralTheHole(peek_position(), factory()); | 2408 elem = this->GetLiteralTheHole(peek_position(), factory()); |
| 2403 } else if (peek() == Token::ELLIPSIS) { | 2409 } else if (peek() == Token::ELLIPSIS) { |
| 2404 if (!allow_harmony_spread_arrays()) { | 2410 if (!allow_harmony_spread_arrays()) { |
| 2405 ExpressionUnexpectedToken(classifier); | 2411 ExpressionUnexpectedToken(classifier); |
| 2406 } | 2412 } |
| 2407 int start_pos = peek_position(); | 2413 int start_pos = peek_position(); |
| 2408 Consume(Token::ELLIPSIS); | 2414 Consume(Token::ELLIPSIS); |
| 2409 ExpressionT argument = | 2415 ExpressionT argument = |
| 2410 this->ParseAssignmentExpression(true, classifier, CHECK_OK); | 2416 this->ParseAssignmentExpression(true, classifier, CHECK_OK); |
| 2411 elem = factory()->NewSpread(argument, start_pos); | 2417 elem = factory()->NewSpread(argument, start_pos); |
| 2412 seen_spread = true; | 2418 seen_spread = true; |
| 2419 if (first_spread_index < 0) { |
| 2420 first_spread_index = values->length(); |
| 2421 } |
| 2413 } else { | 2422 } else { |
| 2414 elem = this->ParseAssignmentExpression(true, classifier, CHECK_OK); | 2423 elem = this->ParseAssignmentExpression(true, classifier, CHECK_OK); |
| 2415 } | 2424 } |
| 2416 values->Add(elem, zone_); | 2425 values->Add(elem, zone_); |
| 2417 if (peek() != Token::RBRACK) { | 2426 if (peek() != Token::RBRACK) { |
| 2418 if (seen_spread) { | 2427 if (seen_spread) { |
| 2419 BindingPatternUnexpectedToken(classifier); | 2428 BindingPatternUnexpectedToken(classifier); |
| 2420 } | 2429 } |
| 2421 Expect(Token::COMMA, CHECK_OK); | 2430 Expect(Token::COMMA, CHECK_OK); |
| 2422 } | 2431 } |
| 2423 } | 2432 } |
| 2424 Expect(Token::RBRACK, CHECK_OK); | 2433 Expect(Token::RBRACK, CHECK_OK); |
| 2425 | 2434 |
| 2426 // Update the scope information before the pre-parsing bailout. | 2435 // Update the scope information before the pre-parsing bailout. |
| 2427 int literal_index = function_state_->NextMaterializedLiteralIndex(); | 2436 int literal_index = function_state_->NextMaterializedLiteralIndex(); |
| 2428 | 2437 |
| 2429 return factory()->NewArrayLiteral(values, literal_index, | 2438 return factory()->NewArrayLiteral(values, first_spread_index, literal_index, |
| 2430 is_strong(language_mode()), pos); | 2439 is_strong(language_mode()), pos); |
| 2431 } | 2440 } |
| 2432 | 2441 |
| 2433 | 2442 |
| 2434 template <class Traits> | 2443 template <class Traits> |
| 2435 typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParsePropertyName( | 2444 typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParsePropertyName( |
| 2436 IdentifierT* name, bool* is_get, bool* is_set, bool* is_static, | 2445 IdentifierT* name, bool* is_get, bool* is_set, bool* is_static, |
| 2437 bool* is_computed_name, ExpressionClassifier* classifier, bool* ok) { | 2446 bool* is_computed_name, ExpressionClassifier* classifier, bool* ok) { |
| 2438 Token::Value token = peek(); | 2447 Token::Value token = peek(); |
| 2439 int pos = peek_position(); | 2448 int pos = peek_position(); |
| (...skipping 1540 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3980 *ok = false; | 3989 *ok = false; |
| 3981 return; | 3990 return; |
| 3982 } | 3991 } |
| 3983 has_seen_constructor_ = true; | 3992 has_seen_constructor_ = true; |
| 3984 return; | 3993 return; |
| 3985 } | 3994 } |
| 3986 } | 3995 } |
| 3987 } } // v8::internal | 3996 } } // v8::internal |
| 3988 | 3997 |
| 3989 #endif // V8_PREPARSER_H | 3998 #endif // V8_PREPARSER_H |
| OLD | NEW |