Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: src/preparser.h

Issue 169853002: (Pre)Parser: Move ParseExpression and ParseArrayLiteral to ParserBase. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: old chunk schmold chunk Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/parser.cc ('k') | src/preparser.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 25 matching lines...) Expand all
36 36
37 namespace v8 { 37 namespace v8 {
38 namespace internal { 38 namespace internal {
39 39
40 // Common base class shared between parser and pre-parser. 40 // Common base class shared between parser and pre-parser.
41 template <typename Traits> 41 template <typename Traits>
42 class ParserBase : public Traits { 42 class ParserBase : public Traits {
43 public: 43 public:
44 ParserBase(Scanner* scanner, uintptr_t stack_limit, 44 ParserBase(Scanner* scanner, uintptr_t stack_limit,
45 v8::Extension* extension, 45 v8::Extension* extension,
46 typename Traits::Type::Zone* zone,
46 typename Traits::Type::Parser this_object) 47 typename Traits::Type::Parser this_object)
47 : Traits(this_object), 48 : Traits(this_object),
48 parenthesized_function_(false), 49 parenthesized_function_(false),
49 scope_(NULL), 50 scope_(NULL),
50 function_state_(NULL), 51 function_state_(NULL),
51 extension_(extension), 52 extension_(extension),
52 scanner_(scanner), 53 scanner_(scanner),
53 stack_limit_(stack_limit), 54 stack_limit_(stack_limit),
54 stack_overflow_(false), 55 stack_overflow_(false),
55 allow_lazy_(false), 56 allow_lazy_(false),
56 allow_natives_syntax_(false), 57 allow_natives_syntax_(false),
57 allow_generators_(false), 58 allow_generators_(false),
58 allow_for_of_(false) { } 59 allow_for_of_(false),
60 zone_(zone) { }
59 61
60 // Getters that indicate whether certain syntactical constructs are 62 // Getters that indicate whether certain syntactical constructs are
61 // allowed to be parsed by this instance of the parser. 63 // allowed to be parsed by this instance of the parser.
62 bool allow_lazy() const { return allow_lazy_; } 64 bool allow_lazy() const { return allow_lazy_; }
63 bool allow_natives_syntax() const { return allow_natives_syntax_; } 65 bool allow_natives_syntax() const { return allow_natives_syntax_; }
64 bool allow_generators() const { return allow_generators_; } 66 bool allow_generators() const { return allow_generators_; }
65 bool allow_for_of() const { return allow_for_of_; } 67 bool allow_for_of() const { return allow_for_of_; }
66 bool allow_modules() const { return scanner()->HarmonyModules(); } 68 bool allow_modules() const { return scanner()->HarmonyModules(); }
67 bool allow_harmony_scoping() const { return scanner()->HarmonyScoping(); } 69 bool allow_harmony_scoping() const { return scanner()->HarmonyScoping(); }
68 bool allow_harmony_numeric_literals() const { 70 bool allow_harmony_numeric_literals() const {
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 typename Traits::Type::Factory factory_; 180 typename Traits::Type::Factory factory_;
179 181
180 friend class ParserTraits; 182 friend class ParserTraits;
181 }; 183 };
182 184
183 Scanner* scanner() const { return scanner_; } 185 Scanner* scanner() const { return scanner_; }
184 int position() { return scanner_->location().beg_pos; } 186 int position() { return scanner_->location().beg_pos; }
185 int peek_position() { return scanner_->peek_location().beg_pos; } 187 int peek_position() { return scanner_->peek_location().beg_pos; }
186 bool stack_overflow() const { return stack_overflow_; } 188 bool stack_overflow() const { return stack_overflow_; }
187 void set_stack_overflow() { stack_overflow_ = true; } 189 void set_stack_overflow() { stack_overflow_ = true; }
190 typename Traits::Type::Zone* zone() const { return zone_; }
188 191
189 INLINE(Token::Value peek()) { 192 INLINE(Token::Value peek()) {
190 if (stack_overflow_) return Token::ILLEGAL; 193 if (stack_overflow_) return Token::ILLEGAL;
191 return scanner()->peek(); 194 return scanner()->peek();
192 } 195 }
193 196
194 INLINE(Token::Value Next()) { 197 INLINE(Token::Value Next()) {
195 if (stack_overflow_) return Token::ILLEGAL; 198 if (stack_overflow_) return Token::ILLEGAL;
196 { 199 {
197 int marker; 200 int marker;
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 typename Traits::Type::Identifier ParseIdentifierName(bool* ok); 331 typename Traits::Type::Identifier ParseIdentifierName(bool* ok);
329 // Parses an identifier and determines whether or not it is 'get' or 'set'. 332 // Parses an identifier and determines whether or not it is 'get' or 'set'.
330 typename Traits::Type::Identifier ParseIdentifierNameOrGetOrSet(bool* is_get, 333 typename Traits::Type::Identifier ParseIdentifierNameOrGetOrSet(bool* is_get,
331 bool* is_set, 334 bool* is_set,
332 bool* ok); 335 bool* ok);
333 336
334 typename Traits::Type::Expression ParseRegExpLiteral(bool seen_equal, 337 typename Traits::Type::Expression ParseRegExpLiteral(bool seen_equal,
335 bool* ok); 338 bool* ok);
336 339
337 typename Traits::Type::Expression ParsePrimaryExpression(bool* ok); 340 typename Traits::Type::Expression ParsePrimaryExpression(bool* ok);
341 typename Traits::Type::Expression ParseExpression(bool accept_IN, bool* ok);
342 typename Traits::Type::Expression ParseArrayLiteral(bool* ok);
338 343
339 // Used to detect duplicates in object literals. Each of the values 344 // Used to detect duplicates in object literals. Each of the values
340 // kGetterProperty, kSetterProperty and kValueProperty represents 345 // kGetterProperty, kSetterProperty and kValueProperty represents
341 // a type of object literal property. When parsing a property, its 346 // a type of object literal property. When parsing a property, its
342 // type value is stored in the DuplicateFinder for the property name. 347 // type value is stored in the DuplicateFinder for the property name.
343 // Values are chosen so that having intersection bits means the there is 348 // Values are chosen so that having intersection bits means the there is
344 // an incompatibility. 349 // an incompatibility.
345 // I.e., you can add a getter to a property that already has a setter, since 350 // I.e., you can add a getter to a property that already has a setter, since
346 // kGetterProperty and kSetterProperty doesn't intersect, but not if it 351 // kGetterProperty and kSetterProperty doesn't intersect, but not if it
347 // already has a getter or a value. Adding the getter to an existing 352 // already has a getter or a value. Adding the getter to an existing
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 407
403 private: 408 private:
404 Scanner* scanner_; 409 Scanner* scanner_;
405 uintptr_t stack_limit_; 410 uintptr_t stack_limit_;
406 bool stack_overflow_; 411 bool stack_overflow_;
407 412
408 bool allow_lazy_; 413 bool allow_lazy_;
409 bool allow_natives_syntax_; 414 bool allow_natives_syntax_;
410 bool allow_generators_; 415 bool allow_generators_;
411 bool allow_for_of_; 416 bool allow_for_of_;
417
418 typename Traits::Type::Zone* zone_; // Only used by Parser.
412 }; 419 };
413 420
414 421
415 class PreParserIdentifier { 422 class PreParserIdentifier {
416 public: 423 public:
417 static PreParserIdentifier Default() { 424 static PreParserIdentifier Default() {
418 return PreParserIdentifier(kUnknownIdentifier); 425 return PreParserIdentifier(kUnknownIdentifier);
419 } 426 }
420 static PreParserIdentifier Eval() { 427 static PreParserIdentifier Eval() {
421 return PreParserIdentifier(kEvalIdentifier); 428 return PreParserIdentifier(kEvalIdentifier);
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 kThisPropertyExpression = 8, 541 kThisPropertyExpression = 8,
535 kStrictFunctionExpression = 12 542 kStrictFunctionExpression = 12
536 }; 543 };
537 544
538 explicit PreParserExpression(int expression_code) : code_(expression_code) {} 545 explicit PreParserExpression(int expression_code) : code_(expression_code) {}
539 546
540 int code_; 547 int code_;
541 }; 548 };
542 549
543 550
551 // PreParserExpressionList doesn't actually store the expressions because
552 // PreParser doesn't need to.
553 class PreParserExpressionList {
554 public:
555 // These functions make list->Add(some_expression) work (and do nothing).
556 PreParserExpressionList* operator->() { return this; }
557 void Add(PreParserExpression, void*) { }
558 };
559
560
544 class PreParserScope { 561 class PreParserScope {
545 public: 562 public:
546 explicit PreParserScope(PreParserScope* outer_scope, ScopeType scope_type) 563 explicit PreParserScope(PreParserScope* outer_scope, ScopeType scope_type)
547 : scope_type_(scope_type) { 564 : scope_type_(scope_type) {
548 if (outer_scope) { 565 if (outer_scope) {
549 scope_inside_with_ = 566 scope_inside_with_ =
550 outer_scope->scope_inside_with_ || is_with_scope(); 567 outer_scope->scope_inside_with_ || is_with_scope();
551 language_mode_ = outer_scope->language_mode(); 568 language_mode_ = outer_scope->language_mode();
552 } else { 569 } else {
553 scope_inside_with_ = is_with_scope(); 570 scope_inside_with_ = is_with_scope();
(...skipping 28 matching lines...) Expand all
582 class PreParserFactory { 599 class PreParserFactory {
583 public: 600 public:
584 explicit PreParserFactory(void* extra_param) {} 601 explicit PreParserFactory(void* extra_param) {}
585 602
586 PreParserExpression NewRegExpLiteral(PreParserIdentifier js_pattern, 603 PreParserExpression NewRegExpLiteral(PreParserIdentifier js_pattern,
587 PreParserIdentifier js_flags, 604 PreParserIdentifier js_flags,
588 int literal_index, 605 int literal_index,
589 int pos) { 606 int pos) {
590 return PreParserExpression::Default(); 607 return PreParserExpression::Default();
591 } 608 }
609 PreParserExpression NewBinaryOperation(Token::Value op,
610 PreParserExpression left,
611 PreParserExpression right, int pos) {
612 return PreParserExpression::Default();
613 }
614 PreParserExpression NewArrayLiteral(PreParserExpressionList values,
615 int literal_index,
616 int pos) {
617 return PreParserExpression::Default();
618 }
592 }; 619 };
593 620
594 621
595 class PreParser; 622 class PreParser;
596 623
597 class PreParserTraits { 624 class PreParserTraits {
598 public: 625 public:
599 struct Type { 626 struct Type {
600 typedef PreParser* Parser; 627 typedef PreParser* Parser;
601 628
602 // Types used by FunctionState and BlockState. 629 // Types used by FunctionState and BlockState.
603 typedef PreParserScope Scope; 630 typedef PreParserScope Scope;
604 typedef PreParserFactory Factory; 631 typedef PreParserFactory Factory;
605 // PreParser doesn't need to store generator variables. 632 // PreParser doesn't need to store generator variables.
606 typedef void GeneratorVariable; 633 typedef void GeneratorVariable;
607 // No interaction with Zones. 634 // No interaction with Zones.
608 typedef void Zone; 635 typedef void Zone;
609 636
610 // Return types for traversing functions. 637 // Return types for traversing functions.
611 typedef PreParserIdentifier Identifier; 638 typedef PreParserIdentifier Identifier;
612 typedef PreParserExpression Expression; 639 typedef PreParserExpression Expression;
640 typedef PreParserExpressionList ExpressionList;
613 }; 641 };
614 642
615 explicit PreParserTraits(PreParser* pre_parser) : pre_parser_(pre_parser) {} 643 explicit PreParserTraits(PreParser* pre_parser) : pre_parser_(pre_parser) {}
616 644
617 // Custom operations executed when FunctionStates are created and 645 // Custom operations executed when FunctionStates are created and
618 // destructed. (The PreParser doesn't need to do anything.) 646 // destructed. (The PreParser doesn't need to do anything.)
619 template<typename FS> 647 template<typename FS>
620 static void SetUpFunctionState(FS* function_state, void*) {} 648 static void SetUpFunctionState(FS* function_state, void*) {}
621 template<typename FS> 649 template<typename FS>
622 static void TearDownFunctionState(FS* function_state) {} 650 static void TearDownFunctionState(FS* function_state) {}
(...skipping 16 matching lines...) Expand all
639 const char* name_opt); 667 const char* name_opt);
640 668
641 // "null" return type creators. 669 // "null" return type creators.
642 static PreParserIdentifier EmptyIdentifier() { 670 static PreParserIdentifier EmptyIdentifier() {
643 return PreParserIdentifier::Default(); 671 return PreParserIdentifier::Default();
644 } 672 }
645 static PreParserExpression EmptyExpression() { 673 static PreParserExpression EmptyExpression() {
646 return PreParserExpression::Default(); 674 return PreParserExpression::Default();
647 } 675 }
648 676
677 // Odd-ball literal creators.
678 static PreParserExpression GetLiteralTheHole(int position,
679 PreParserFactory* factory) {
680 return PreParserExpression::Default();
681 }
682
649 // Producing data during the recursive descent. 683 // Producing data during the recursive descent.
650 PreParserIdentifier GetSymbol(Scanner* scanner); 684 PreParserIdentifier GetSymbol(Scanner* scanner);
651 static PreParserIdentifier NextLiteralString(Scanner* scanner, 685 static PreParserIdentifier NextLiteralString(Scanner* scanner,
652 PretenureFlag tenured) { 686 PretenureFlag tenured) {
653 return PreParserIdentifier::Default(); 687 return PreParserIdentifier::Default();
654 } 688 }
655 689
656 static PreParserExpression ThisExpression(PreParserScope* scope, 690 static PreParserExpression ThisExpression(PreParserScope* scope,
657 PreParserFactory* factory) { 691 PreParserFactory* factory) {
658 return PreParserExpression::This(); 692 return PreParserExpression::This();
659 } 693 }
660 694
661 static PreParserExpression ExpressionFromLiteral( 695 static PreParserExpression ExpressionFromLiteral(
662 Token::Value token, int pos, Scanner* scanner, 696 Token::Value token, int pos, Scanner* scanner,
663 PreParserFactory* factory) { 697 PreParserFactory* factory) {
664 return PreParserExpression::Default(); 698 return PreParserExpression::Default();
665 } 699 }
666 700
667 static PreParserExpression ExpressionFromIdentifier( 701 static PreParserExpression ExpressionFromIdentifier(
668 PreParserIdentifier name, int pos, PreParserScope* scope, 702 PreParserIdentifier name, int pos, PreParserScope* scope,
669 PreParserFactory* factory) { 703 PreParserFactory* factory) {
670 return PreParserExpression::FromIdentifier(name); 704 return PreParserExpression::FromIdentifier(name);
671 } 705 }
672 706
673 PreParserExpression ExpressionFromString(int pos, 707 PreParserExpression ExpressionFromString(int pos,
674 Scanner* scanner, 708 Scanner* scanner,
675 PreParserFactory* factory = NULL); 709 PreParserFactory* factory = NULL);
676 710
711 static PreParserExpressionList NewExpressionList(int size, void* zone) {
712 return PreParserExpressionList();
713 }
714
677 // Temporary glue; these functions will move to ParserBase. 715 // Temporary glue; these functions will move to ParserBase.
678 PreParserExpression ParseArrayLiteral(bool* ok); 716 PreParserExpression ParseAssignmentExpression(bool accept_IN, bool* ok);
679 PreParserExpression ParseObjectLiteral(bool* ok); 717 PreParserExpression ParseObjectLiteral(bool* ok);
680 PreParserExpression ParseExpression(bool accept_IN, bool* ok);
681 PreParserExpression ParseV8Intrinsic(bool* ok); 718 PreParserExpression ParseV8Intrinsic(bool* ok);
682 719
683 private: 720 private:
684 PreParser* pre_parser_; 721 PreParser* pre_parser_;
685 }; 722 };
686 723
687 724
688 // Preparsing checks a JavaScript program and emits preparse-data that helps 725 // Preparsing checks a JavaScript program and emits preparse-data that helps
689 // a later parsing to be faster. 726 // a later parsing to be faster.
690 // See preparse-data-format.h for the data format. 727 // See preparse-data-format.h for the data format.
(...skipping 12 matching lines...) Expand all
703 typedef PreParserExpression Expression; 740 typedef PreParserExpression Expression;
704 741
705 enum PreParseResult { 742 enum PreParseResult {
706 kPreParseStackOverflow, 743 kPreParseStackOverflow,
707 kPreParseSuccess 744 kPreParseSuccess
708 }; 745 };
709 746
710 PreParser(Scanner* scanner, 747 PreParser(Scanner* scanner,
711 ParserRecorder* log, 748 ParserRecorder* log,
712 uintptr_t stack_limit) 749 uintptr_t stack_limit)
713 : ParserBase<PreParserTraits>(scanner, stack_limit, NULL, this), 750 : ParserBase<PreParserTraits>(scanner, stack_limit, NULL, NULL, this),
714 log_(log) {} 751 log_(log) {}
715 752
716 // Pre-parse the program from the character stream; returns true on 753 // Pre-parse the program from the character stream; returns true on
717 // success (even if parsing failed, the pre-parse data successfully 754 // success (even if parsing failed, the pre-parse data successfully
718 // captured the syntax error), and false if a stack-overflow happened 755 // captured the syntax error), and false if a stack-overflow happened
719 // during parsing. 756 // during parsing.
720 PreParseResult PreParseProgram() { 757 PreParseResult PreParseProgram() {
721 PreParserScope scope(scope_, GLOBAL_SCOPE); 758 PreParserScope scope(scope_, GLOBAL_SCOPE);
722 FunctionState top_scope(&function_state_, &scope_, &scope, NULL); 759 FunctionState top_scope(&function_state_, &scope_, &scope, NULL);
723 bool ok = true; 760 bool ok = true;
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 Statement ParseReturnStatement(bool* ok); 876 Statement ParseReturnStatement(bool* ok);
840 Statement ParseWithStatement(bool* ok); 877 Statement ParseWithStatement(bool* ok);
841 Statement ParseSwitchStatement(bool* ok); 878 Statement ParseSwitchStatement(bool* ok);
842 Statement ParseDoWhileStatement(bool* ok); 879 Statement ParseDoWhileStatement(bool* ok);
843 Statement ParseWhileStatement(bool* ok); 880 Statement ParseWhileStatement(bool* ok);
844 Statement ParseForStatement(bool* ok); 881 Statement ParseForStatement(bool* ok);
845 Statement ParseThrowStatement(bool* ok); 882 Statement ParseThrowStatement(bool* ok);
846 Statement ParseTryStatement(bool* ok); 883 Statement ParseTryStatement(bool* ok);
847 Statement ParseDebuggerStatement(bool* ok); 884 Statement ParseDebuggerStatement(bool* ok);
848 885
849 Expression ParseExpression(bool accept_IN, bool* ok);
850 Expression ParseAssignmentExpression(bool accept_IN, bool* ok); 886 Expression ParseAssignmentExpression(bool accept_IN, bool* ok);
851 Expression ParseYieldExpression(bool* ok); 887 Expression ParseYieldExpression(bool* ok);
852 Expression ParseConditionalExpression(bool accept_IN, bool* ok); 888 Expression ParseConditionalExpression(bool accept_IN, bool* ok);
853 Expression ParseBinaryExpression(int prec, bool accept_IN, bool* ok); 889 Expression ParseBinaryExpression(int prec, bool accept_IN, bool* ok);
854 Expression ParseUnaryExpression(bool* ok); 890 Expression ParseUnaryExpression(bool* ok);
855 Expression ParsePostfixExpression(bool* ok); 891 Expression ParsePostfixExpression(bool* ok);
856 Expression ParseLeftHandSideExpression(bool* ok); 892 Expression ParseLeftHandSideExpression(bool* ok);
857 Expression ParseMemberExpression(bool* ok); 893 Expression ParseMemberExpression(bool* ok);
858 Expression ParseMemberExpressionContinuation(PreParserExpression expression, 894 Expression ParseMemberExpressionContinuation(PreParserExpression expression,
859 bool* ok); 895 bool* ok);
860 Expression ParseMemberWithNewPrefixesExpression(bool* ok); 896 Expression ParseMemberWithNewPrefixesExpression(bool* ok);
861 Expression ParseArrayLiteral(bool* ok);
862 Expression ParseObjectLiteral(bool* ok); 897 Expression ParseObjectLiteral(bool* ok);
863 Expression ParseV8Intrinsic(bool* ok); 898 Expression ParseV8Intrinsic(bool* ok);
864 899
865 Arguments ParseArguments(bool* ok); 900 Arguments ParseArguments(bool* ok);
866 Expression ParseFunctionLiteral( 901 Expression ParseFunctionLiteral(
867 Identifier name, 902 Identifier name,
868 Scanner::Location function_name_location, 903 Scanner::Location function_name_location,
869 bool name_is_strict_reserved, 904 bool name_is_strict_reserved,
870 bool is_generator, 905 bool is_generator,
871 bool* ok); 906 bool* ok);
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
1145 default: { 1180 default: {
1146 Next(); 1181 Next();
1147 ReportUnexpectedToken(token); 1182 ReportUnexpectedToken(token);
1148 *ok = false; 1183 *ok = false;
1149 } 1184 }
1150 } 1185 }
1151 1186
1152 return result; 1187 return result;
1153 } 1188 }
1154 1189
1190 // Precedence = 1
1191 template <class Traits>
1192 typename Traits::Type::Expression ParserBase<Traits>::ParseExpression(
1193 bool accept_IN, bool* ok) {
1194 // Expression ::
1195 // AssignmentExpression
1196 // Expression ',' AssignmentExpression
1197
1198 typename Traits::Type::Expression result =
1199 this->ParseAssignmentExpression(accept_IN, CHECK_OK);
1200 while (peek() == Token::COMMA) {
1201 Expect(Token::COMMA, CHECK_OK);
1202 int pos = position();
1203 typename Traits::Type::Expression right =
1204 this->ParseAssignmentExpression(accept_IN, CHECK_OK);
1205 result = factory()->NewBinaryOperation(Token::COMMA, result, right, pos);
1206 }
1207 return result;
1208 }
1209
1210
1211 template <class Traits>
1212 typename Traits::Type::Expression ParserBase<Traits>::ParseArrayLiteral(
1213 bool* ok) {
1214 // ArrayLiteral ::
1215 // '[' Expression? (',' Expression?)* ']'
1216
1217 int pos = peek_position();
1218 typename Traits::Type::ExpressionList values =
1219 this->NewExpressionList(4, zone_);
1220 Expect(Token::LBRACK, CHECK_OK);
1221 while (peek() != Token::RBRACK) {
1222 typename Traits::Type::Expression elem = this->EmptyExpression();
1223 if (peek() == Token::COMMA) {
1224 elem = this->GetLiteralTheHole(peek_position(), factory());
1225 } else {
1226 elem = this->ParseAssignmentExpression(true, CHECK_OK);
1227 }
1228 values->Add(elem, zone_);
1229 if (peek() != Token::RBRACK) {
1230 Expect(Token::COMMA, CHECK_OK);
1231 }
1232 }
1233 Expect(Token::RBRACK, CHECK_OK);
1234
1235 // Update the scope information before the pre-parsing bailout.
1236 int literal_index = function_state_->NextMaterializedLiteralIndex();
1237
1238 return factory()->NewArrayLiteral(values, literal_index, pos);
1239 }
1240
1155 #undef CHECK_OK 1241 #undef CHECK_OK
1156 1242
1157 1243
1158 template <typename Traits> 1244 template <typename Traits>
1159 void ParserBase<Traits>::ObjectLiteralChecker::CheckProperty( 1245 void ParserBase<Traits>::ObjectLiteralChecker::CheckProperty(
1160 Token::Value property, 1246 Token::Value property,
1161 PropertyKind type, 1247 PropertyKind type,
1162 bool* ok) { 1248 bool* ok) {
1163 int old; 1249 int old;
1164 if (property == Token::NUMBER) { 1250 if (property == Token::NUMBER) {
(...skipping 21 matching lines...) Expand all
1186 "accessor_get_set"); 1272 "accessor_get_set");
1187 } 1273 }
1188 *ok = false; 1274 *ok = false;
1189 } 1275 }
1190 } 1276 }
1191 1277
1192 1278
1193 } } // v8::internal 1279 } } // v8::internal
1194 1280
1195 #endif // V8_PREPARSER_H 1281 #endif // V8_PREPARSER_H
OLDNEW
« no previous file with comments | « src/parser.cc ('k') | src/preparser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698