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 418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
429 ~Parser() { | 429 ~Parser() { |
430 delete reusable_preparser_; | 430 delete reusable_preparser_; |
431 reusable_preparser_ = NULL; | 431 reusable_preparser_ = NULL; |
432 } | 432 } |
433 | 433 |
434 bool allow_natives_syntax() const { return allow_natives_syntax_; } | 434 bool allow_natives_syntax() const { return allow_natives_syntax_; } |
435 bool allow_lazy() const { return allow_lazy_; } | 435 bool allow_lazy() const { return allow_lazy_; } |
436 bool allow_modules() { return scanner().HarmonyModules(); } | 436 bool allow_modules() { return scanner().HarmonyModules(); } |
437 bool allow_harmony_scoping() { return scanner().HarmonyScoping(); } | 437 bool allow_harmony_scoping() { return scanner().HarmonyScoping(); } |
438 bool allow_generators() const { return allow_generators_; } | 438 bool allow_generators() const { return allow_generators_; } |
| 439 bool allow_for_of() const { return allow_for_of_; } |
439 | 440 |
440 void set_allow_natives_syntax(bool allow) { allow_natives_syntax_ = allow; } | 441 void set_allow_natives_syntax(bool allow) { allow_natives_syntax_ = allow; } |
441 void set_allow_lazy(bool allow) { allow_lazy_ = allow; } | 442 void set_allow_lazy(bool allow) { allow_lazy_ = allow; } |
442 void set_allow_modules(bool allow) { scanner().SetHarmonyModules(allow); } | 443 void set_allow_modules(bool allow) { scanner().SetHarmonyModules(allow); } |
443 void set_allow_harmony_scoping(bool allow) { | 444 void set_allow_harmony_scoping(bool allow) { |
444 scanner().SetHarmonyScoping(allow); | 445 scanner().SetHarmonyScoping(allow); |
445 } | 446 } |
446 void set_allow_generators(bool allow) { allow_generators_ = allow; } | 447 void set_allow_generators(bool allow) { allow_generators_ = allow; } |
| 448 void set_allow_for_of(bool allow) { allow_for_of_ = allow; } |
447 | 449 |
448 // Parses the source code represented by the compilation info and sets its | 450 // Parses the source code represented by the compilation info and sets its |
449 // function literal. Returns false (and deallocates any allocated AST | 451 // function literal. Returns false (and deallocates any allocated AST |
450 // nodes) if parsing failed. | 452 // nodes) if parsing failed. |
451 static bool Parse(CompilationInfo* info) { return Parser(info).Parse(); } | 453 static bool Parse(CompilationInfo* info) { return Parser(info).Parse(); } |
452 bool Parse(); | 454 bool Parse(); |
453 | 455 |
454 // Returns NULL if parsing failed. | 456 // Returns NULL if parsing failed. |
455 FunctionLiteral* ParseProgram(); | 457 FunctionLiteral* ParseProgram(); |
456 | 458 |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
732 // Any further calls to Next or peek will return the illegal token. | 734 // Any further calls to Next or peek will return the illegal token. |
733 // The current call must return the next token, which might already | 735 // The current call must return the next token, which might already |
734 // have been peek'ed. | 736 // have been peek'ed. |
735 stack_overflow_ = true; | 737 stack_overflow_ = true; |
736 } | 738 } |
737 return scanner().Next(); | 739 return scanner().Next(); |
738 } | 740 } |
739 | 741 |
740 bool is_generator() const { return current_function_state_->is_generator(); } | 742 bool is_generator() const { return current_function_state_->is_generator(); } |
741 | 743 |
| 744 bool CheckInOrOf(ForEachStatement::VisitMode* visit_mode); |
| 745 |
742 bool peek_any_identifier(); | 746 bool peek_any_identifier(); |
743 | 747 |
744 INLINE(void Consume(Token::Value token)); | 748 INLINE(void Consume(Token::Value token)); |
745 void Expect(Token::Value token, bool* ok); | 749 void Expect(Token::Value token, bool* ok); |
746 bool Check(Token::Value token); | 750 bool Check(Token::Value token); |
747 void ExpectSemicolon(bool* ok); | 751 void ExpectSemicolon(bool* ok); |
748 void ExpectContextualKeyword(const char* keyword, bool* ok); | 752 bool CheckContextualKeyword(Vector<const char> keyword); |
| 753 void ExpectContextualKeyword(Vector<const char> keyword, bool* ok); |
749 | 754 |
750 Handle<String> LiteralString(PretenureFlag tenured) { | 755 Handle<String> LiteralString(PretenureFlag tenured) { |
751 if (scanner().is_literal_ascii()) { | 756 if (scanner().is_literal_ascii()) { |
752 return isolate_->factory()->NewStringFromAscii( | 757 return isolate_->factory()->NewStringFromAscii( |
753 scanner().literal_ascii_string(), tenured); | 758 scanner().literal_ascii_string(), tenured); |
754 } else { | 759 } else { |
755 return isolate_->factory()->NewStringFromTwoByte( | 760 return isolate_->factory()->NewStringFromTwoByte( |
756 scanner().literal_utf16_string(), tenured); | 761 scanner().literal_utf16_string(), tenured); |
757 } | 762 } |
758 } | 763 } |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
861 FunctionState* current_function_state_; | 866 FunctionState* current_function_state_; |
862 Target* target_stack_; // for break, continue statements | 867 Target* target_stack_; // for break, continue statements |
863 v8::Extension* extension_; | 868 v8::Extension* extension_; |
864 ScriptDataImpl* pre_parse_data_; | 869 ScriptDataImpl* pre_parse_data_; |
865 FuncNameInferrer* fni_; | 870 FuncNameInferrer* fni_; |
866 | 871 |
867 Mode mode_; | 872 Mode mode_; |
868 bool allow_natives_syntax_; | 873 bool allow_natives_syntax_; |
869 bool allow_lazy_; | 874 bool allow_lazy_; |
870 bool allow_generators_; | 875 bool allow_generators_; |
| 876 bool allow_for_of_; |
871 bool stack_overflow_; | 877 bool stack_overflow_; |
872 // If true, the next (and immediately following) function literal is | 878 // If true, the next (and immediately following) function literal is |
873 // preceded by a parenthesis. | 879 // preceded by a parenthesis. |
874 // Heuristically that means that the function will be called immediately, | 880 // Heuristically that means that the function will be called immediately, |
875 // so never lazily compile it. | 881 // so never lazily compile it. |
876 bool parenthesized_function_; | 882 bool parenthesized_function_; |
877 | 883 |
878 Zone* zone_; | 884 Zone* zone_; |
879 CompilationInfo* info_; | 885 CompilationInfo* info_; |
880 friend class BlockState; | 886 friend class BlockState; |
(...skipping 27 matching lines...) Expand all Loading... |
908 private: | 914 private: |
909 static const int kTypeSlot = 0; | 915 static const int kTypeSlot = 0; |
910 static const int kElementsSlot = 1; | 916 static const int kElementsSlot = 1; |
911 | 917 |
912 DISALLOW_IMPLICIT_CONSTRUCTORS(CompileTimeValue); | 918 DISALLOW_IMPLICIT_CONSTRUCTORS(CompileTimeValue); |
913 }; | 919 }; |
914 | 920 |
915 } } // namespace v8::internal | 921 } } // namespace v8::internal |
916 | 922 |
917 #endif // V8_PARSER_H_ | 923 #endif // V8_PARSER_H_ |
OLD | NEW |