OLD | NEW |
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 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
430 ~Parser() { | 430 ~Parser() { |
431 delete reusable_preparser_; | 431 delete reusable_preparser_; |
432 reusable_preparser_ = NULL; | 432 reusable_preparser_ = NULL; |
433 } | 433 } |
434 | 434 |
435 bool allow_natives_syntax() const { return allow_natives_syntax_; } | 435 bool allow_natives_syntax() const { return allow_natives_syntax_; } |
436 bool allow_lazy() const { return allow_lazy_; } | 436 bool allow_lazy() const { return allow_lazy_; } |
437 bool allow_modules() { return scanner().HarmonyModules(); } | 437 bool allow_modules() { return scanner().HarmonyModules(); } |
438 bool allow_harmony_scoping() { return scanner().HarmonyScoping(); } | 438 bool allow_harmony_scoping() { return scanner().HarmonyScoping(); } |
439 bool allow_generators() const { return allow_generators_; } | 439 bool allow_generators() const { return allow_generators_; } |
| 440 bool allow_for_of() const { return allow_for_of_; } |
440 | 441 |
441 void set_allow_natives_syntax(bool allow) { allow_natives_syntax_ = allow; } | 442 void set_allow_natives_syntax(bool allow) { allow_natives_syntax_ = allow; } |
442 void set_allow_lazy(bool allow) { allow_lazy_ = allow; } | 443 void set_allow_lazy(bool allow) { allow_lazy_ = allow; } |
443 void set_allow_modules(bool allow) { scanner().SetHarmonyModules(allow); } | 444 void set_allow_modules(bool allow) { scanner().SetHarmonyModules(allow); } |
444 void set_allow_harmony_scoping(bool allow) { | 445 void set_allow_harmony_scoping(bool allow) { |
445 scanner().SetHarmonyScoping(allow); | 446 scanner().SetHarmonyScoping(allow); |
446 } | 447 } |
447 void set_allow_generators(bool allow) { allow_generators_ = allow; } | 448 void set_allow_generators(bool allow) { allow_generators_ = allow; } |
| 449 void set_allow_for_of(bool allow) { allow_for_of_ = allow; } |
448 | 450 |
449 // Parses the source code represented by the compilation info and sets its | 451 // Parses the source code represented by the compilation info and sets its |
450 // function literal. Returns false (and deallocates any allocated AST | 452 // function literal. Returns false (and deallocates any allocated AST |
451 // nodes) if parsing failed. | 453 // nodes) if parsing failed. |
452 static bool Parse(CompilationInfo* info) { return Parser(info).Parse(); } | 454 static bool Parse(CompilationInfo* info) { return Parser(info).Parse(); } |
453 bool Parse(); | 455 bool Parse(); |
454 | 456 |
455 // Returns NULL if parsing failed. | 457 // Returns NULL if parsing failed. |
456 FunctionLiteral* ParseProgram(); | 458 FunctionLiteral* ParseProgram(); |
457 | 459 |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
714 // Any further calls to Next or peek will return the illegal token. | 716 // Any further calls to Next or peek will return the illegal token. |
715 // The current call must return the next token, which might already | 717 // The current call must return the next token, which might already |
716 // have been peek'ed. | 718 // have been peek'ed. |
717 stack_overflow_ = true; | 719 stack_overflow_ = true; |
718 } | 720 } |
719 return scanner().Next(); | 721 return scanner().Next(); |
720 } | 722 } |
721 | 723 |
722 bool is_generator() const { return current_function_state_->is_generator(); } | 724 bool is_generator() const { return current_function_state_->is_generator(); } |
723 | 725 |
| 726 bool CheckInOrOf(ForEachStatement::VisitMode* visit_mode); |
| 727 |
724 bool peek_any_identifier(); | 728 bool peek_any_identifier(); |
725 | 729 |
726 INLINE(void Consume(Token::Value token)); | 730 INLINE(void Consume(Token::Value token)); |
727 void Expect(Token::Value token, bool* ok); | 731 void Expect(Token::Value token, bool* ok); |
728 bool Check(Token::Value token); | 732 bool Check(Token::Value token); |
729 void ExpectSemicolon(bool* ok); | 733 void ExpectSemicolon(bool* ok); |
730 void ExpectContextualKeyword(const char* keyword, bool* ok); | 734 bool CheckContextualKeyword(Vector<const char> keyword); |
| 735 void ExpectContextualKeyword(Vector<const char> keyword, bool* ok); |
731 | 736 |
732 Handle<String> LiteralString(PretenureFlag tenured) { | 737 Handle<String> LiteralString(PretenureFlag tenured) { |
733 if (scanner().is_literal_ascii()) { | 738 if (scanner().is_literal_ascii()) { |
734 return isolate_->factory()->NewStringFromAscii( | 739 return isolate_->factory()->NewStringFromAscii( |
735 scanner().literal_ascii_string(), tenured); | 740 scanner().literal_ascii_string(), tenured); |
736 } else { | 741 } else { |
737 return isolate_->factory()->NewStringFromTwoByte( | 742 return isolate_->factory()->NewStringFromTwoByte( |
738 scanner().literal_utf16_string(), tenured); | 743 scanner().literal_utf16_string(), tenured); |
739 } | 744 } |
740 } | 745 } |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
843 FunctionState* current_function_state_; | 848 FunctionState* current_function_state_; |
844 Target* target_stack_; // for break, continue statements | 849 Target* target_stack_; // for break, continue statements |
845 v8::Extension* extension_; | 850 v8::Extension* extension_; |
846 ScriptDataImpl* pre_parse_data_; | 851 ScriptDataImpl* pre_parse_data_; |
847 FuncNameInferrer* fni_; | 852 FuncNameInferrer* fni_; |
848 | 853 |
849 Mode mode_; | 854 Mode mode_; |
850 bool allow_natives_syntax_; | 855 bool allow_natives_syntax_; |
851 bool allow_lazy_; | 856 bool allow_lazy_; |
852 bool allow_generators_; | 857 bool allow_generators_; |
| 858 bool allow_for_of_; |
853 bool stack_overflow_; | 859 bool stack_overflow_; |
854 // If true, the next (and immediately following) function literal is | 860 // If true, the next (and immediately following) function literal is |
855 // preceded by a parenthesis. | 861 // preceded by a parenthesis. |
856 // Heuristically that means that the function will be called immediately, | 862 // Heuristically that means that the function will be called immediately, |
857 // so never lazily compile it. | 863 // so never lazily compile it. |
858 bool parenthesized_function_; | 864 bool parenthesized_function_; |
859 | 865 |
860 Zone* zone_; | 866 Zone* zone_; |
861 CompilationInfo* info_; | 867 CompilationInfo* info_; |
862 friend class BlockState; | 868 friend class BlockState; |
(...skipping 27 matching lines...) Expand all Loading... |
890 private: | 896 private: |
891 static const int kLiteralTypeSlot = 0; | 897 static const int kLiteralTypeSlot = 0; |
892 static const int kElementsSlot = 1; | 898 static const int kElementsSlot = 1; |
893 | 899 |
894 DISALLOW_IMPLICIT_CONSTRUCTORS(CompileTimeValue); | 900 DISALLOW_IMPLICIT_CONSTRUCTORS(CompileTimeValue); |
895 }; | 901 }; |
896 | 902 |
897 } } // namespace v8::internal | 903 } } // namespace v8::internal |
898 | 904 |
899 #endif // V8_PARSER_H_ | 905 #endif // V8_PARSER_H_ |
OLD | NEW |