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_PARSER_H_ | 5 #ifndef V8_PARSER_H_ |
6 #define V8_PARSER_H_ | 6 #define V8_PARSER_H_ |
7 | 7 |
8 #include "src/allocation.h" | 8 #include "src/allocation.h" |
9 #include "src/ast.h" | 9 #include "src/ast.h" |
10 #include "src/compiler.h" // For CachedDataMode | 10 #include "src/compiler.h" // For CachedDataMode |
(...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
628 return tag != NULL; | 628 return tag != NULL; |
629 } | 629 } |
630 | 630 |
631 private: | 631 private: |
632 Parser* parser_; | 632 Parser* parser_; |
633 }; | 633 }; |
634 | 634 |
635 | 635 |
636 class Parser : public ParserBase<ParserTraits> { | 636 class Parser : public ParserBase<ParserTraits> { |
637 public: | 637 public: |
638 // Note that the hash seed in ParseInfo must be the hash seed from the | 638 Parser(CompilationInfo* info, uintptr_t stack_limit, uint32_t hash_seed, |
639 // Isolate's heap, otherwise the heap will be in an inconsistent state once | 639 UnicodeCache* unicode_cache); |
640 // the strings created by the Parser are internalized. | |
641 struct ParseInfo { | |
642 uintptr_t stack_limit; | |
643 uint32_t hash_seed; | |
644 UnicodeCache* unicode_cache; | |
645 }; | |
646 | |
647 Parser(CompilationInfo* info, ParseInfo* parse_info); | |
648 ~Parser() { | 640 ~Parser() { |
649 delete reusable_preparser_; | 641 delete reusable_preparser_; |
650 reusable_preparser_ = NULL; | 642 reusable_preparser_ = NULL; |
651 delete cached_parse_data_; | 643 delete cached_parse_data_; |
652 cached_parse_data_ = NULL; | 644 cached_parse_data_ = NULL; |
653 } | 645 } |
654 | 646 |
655 // Parses the source code represented by the compilation info and sets its | 647 // Parses the source code represented by the compilation info and sets its |
656 // function literal. Returns false (and deallocates any allocated AST | 648 // function literal. Returns false (and deallocates any allocated AST |
657 // nodes) if parsing failed. | 649 // nodes) if parsing failed. |
658 static bool Parse(CompilationInfo* info, | 650 static bool Parse(CompilationInfo* info, bool allow_lazy = false); |
659 bool allow_lazy = false) { | |
660 ParseInfo parse_info = {info->isolate()->stack_guard()->real_climit(), | |
661 info->isolate()->heap()->HashSeed(), | |
662 info->isolate()->unicode_cache()}; | |
663 Parser parser(info, &parse_info); | |
664 parser.set_allow_lazy(allow_lazy); | |
665 if (parser.Parse()) { | |
666 info->SetLanguageMode(info->function()->language_mode()); | |
667 return true; | |
668 } | |
669 return false; | |
670 } | |
671 bool Parse(); | 651 bool Parse(); |
672 void ParseOnBackground(); | 652 void ParseOnBackground(); |
673 | 653 |
674 // Handle errors detected during parsing, move statistics to Isolate, | 654 // Handle errors detected during parsing, move statistics to Isolate, |
675 // internalize strings (move them to the heap). | 655 // internalize strings (move them to the heap). |
676 void Internalize(); | 656 void Internalize(); |
677 void HandleSourceURLComments(); | 657 void HandleSourceURLComments(); |
678 | 658 |
679 private: | 659 private: |
680 friend class ParserTraits; | 660 friend class ParserTraits; |
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
980 } | 960 } |
981 | 961 |
982 | 962 |
983 Expression* ParserTraits::CloseTemplateLiteral(TemplateLiteralState* state, | 963 Expression* ParserTraits::CloseTemplateLiteral(TemplateLiteralState* state, |
984 int start, Expression* tag) { | 964 int start, Expression* tag) { |
985 return parser_->CloseTemplateLiteral(state, start, tag); | 965 return parser_->CloseTemplateLiteral(state, start, tag); |
986 } | 966 } |
987 } } // namespace v8::internal | 967 } } // namespace v8::internal |
988 | 968 |
989 #endif // V8_PARSER_H_ | 969 #endif // V8_PARSER_H_ |
OLD | NEW |