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 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/api.h" | 7 #include "src/api.h" |
8 #include "src/ast.h" | 8 #include "src/ast.h" |
9 #include "src/bailout-reason.h" | 9 #include "src/bailout-reason.h" |
10 #include "src/base/platform/platform.h" | 10 #include "src/base/platform/platform.h" |
(...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
664 DCHECK(result != NULL); | 664 DCHECK(result != NULL); |
665 return result; | 665 return result; |
666 } | 666 } |
667 | 667 |
668 | 668 |
669 const AstRawString* ParserTraits::GetNumberAsSymbol(Scanner* scanner) { | 669 const AstRawString* ParserTraits::GetNumberAsSymbol(Scanner* scanner) { |
670 double double_value = parser_->scanner()->DoubleValue(); | 670 double double_value = parser_->scanner()->DoubleValue(); |
671 char array[100]; | 671 char array[100]; |
672 const char* string = | 672 const char* string = |
673 DoubleToCString(double_value, Vector<char>(array, arraysize(array))); | 673 DoubleToCString(double_value, Vector<char>(array, arraysize(array))); |
674 return ast_value_factory()->GetOneByteString(string); | 674 return parser_->ast_value_factory()->GetOneByteString(string); |
675 } | 675 } |
676 | 676 |
677 | 677 |
678 const AstRawString* ParserTraits::GetNextSymbol(Scanner* scanner) { | 678 const AstRawString* ParserTraits::GetNextSymbol(Scanner* scanner) { |
679 return parser_->scanner()->NextSymbol(parser_->ast_value_factory()); | 679 return parser_->scanner()->NextSymbol(parser_->ast_value_factory()); |
680 } | 680 } |
681 | 681 |
682 | 682 |
683 Expression* ParserTraits::ThisExpression(Scope* scope, AstNodeFactory* factory, | 683 Expression* ParserTraits::ThisExpression(Scope* scope, AstNodeFactory* factory, |
684 int pos) { | 684 int pos) { |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
787 ClassLiteral* ParserTraits::ParseClassLiteral( | 787 ClassLiteral* ParserTraits::ParseClassLiteral( |
788 const AstRawString* name, Scanner::Location class_name_location, | 788 const AstRawString* name, Scanner::Location class_name_location, |
789 bool name_is_strict_reserved, int pos, bool* ok) { | 789 bool name_is_strict_reserved, int pos, bool* ok) { |
790 return parser_->ParseClassLiteral(name, class_name_location, | 790 return parser_->ParseClassLiteral(name, class_name_location, |
791 name_is_strict_reserved, pos, ok); | 791 name_is_strict_reserved, pos, ok); |
792 } | 792 } |
793 | 793 |
794 | 794 |
795 Parser::Parser(CompilationInfo* info, ParseInfo* parse_info) | 795 Parser::Parser(CompilationInfo* info, ParseInfo* parse_info) |
796 : ParserBase<ParserTraits>(info->isolate(), info->zone(), &scanner_, | 796 : ParserBase<ParserTraits>(info->isolate(), info->zone(), &scanner_, |
797 parse_info->stack_limit, info->extension(), NULL, | 797 parse_info->stack_limit, info->extension(), |
798 this), | 798 info->ast_value_factory(), NULL, this), |
799 scanner_(parse_info->unicode_cache), | 799 scanner_(parse_info->unicode_cache), |
800 reusable_preparser_(NULL), | 800 reusable_preparser_(NULL), |
801 original_scope_(NULL), | 801 original_scope_(NULL), |
802 target_stack_(NULL), | 802 target_stack_(NULL), |
803 cached_parse_data_(NULL), | 803 cached_parse_data_(NULL), |
804 info_(info), | 804 info_(info), |
805 parsing_lazy_arrow_parameters_(false), | 805 parsing_lazy_arrow_parameters_(false), |
806 has_pending_error_(false), | 806 has_pending_error_(false), |
807 pending_error_message_(NULL), | 807 pending_error_message_(NULL), |
808 pending_error_arg_(NULL), | 808 pending_error_arg_(NULL), |
(...skipping 16 matching lines...) Expand all Loading... |
825 FLAG_harmony_computed_property_names); | 825 FLAG_harmony_computed_property_names); |
826 set_allow_harmony_rest_params(FLAG_harmony_rest_parameters); | 826 set_allow_harmony_rest_params(FLAG_harmony_rest_parameters); |
827 for (int feature = 0; feature < v8::Isolate::kUseCounterFeatureCount; | 827 for (int feature = 0; feature < v8::Isolate::kUseCounterFeatureCount; |
828 ++feature) { | 828 ++feature) { |
829 use_counts_[feature] = 0; | 829 use_counts_[feature] = 0; |
830 } | 830 } |
831 if (info->ast_value_factory() == NULL) { | 831 if (info->ast_value_factory() == NULL) { |
832 // info takes ownership of AstValueFactory. | 832 // info takes ownership of AstValueFactory. |
833 info->SetAstValueFactory( | 833 info->SetAstValueFactory( |
834 new AstValueFactory(zone(), parse_info->hash_seed)); | 834 new AstValueFactory(zone(), parse_info->hash_seed)); |
| 835 ast_value_factory_ = info->ast_value_factory(); |
835 } | 836 } |
836 } | 837 } |
837 | 838 |
838 | 839 |
839 FunctionLiteral* Parser::ParseProgram() { | 840 FunctionLiteral* Parser::ParseProgram() { |
840 // TODO(bmeurer): We temporarily need to pass allow_nesting = true here, | 841 // TODO(bmeurer): We temporarily need to pass allow_nesting = true here, |
841 // see comment for HistogramTimerScope class. | 842 // see comment for HistogramTimerScope class. |
842 | 843 |
843 // It's OK to use the counters here, since this function is only called in | 844 // It's OK to use the counters here, since this function is only called in |
844 // the main thread. | 845 // the main thread. |
(...skipping 3135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3980 PreParser::PreParseResult Parser::ParseLazyFunctionBodyWithPreParser( | 3981 PreParser::PreParseResult Parser::ParseLazyFunctionBodyWithPreParser( |
3981 SingletonLogger* logger) { | 3982 SingletonLogger* logger) { |
3982 // This function may be called on a background thread too; record only the | 3983 // This function may be called on a background thread too; record only the |
3983 // main thread preparse times. | 3984 // main thread preparse times. |
3984 if (pre_parse_timer_ != NULL) { | 3985 if (pre_parse_timer_ != NULL) { |
3985 pre_parse_timer_->Start(); | 3986 pre_parse_timer_->Start(); |
3986 } | 3987 } |
3987 DCHECK_EQ(Token::LBRACE, scanner()->current_token()); | 3988 DCHECK_EQ(Token::LBRACE, scanner()->current_token()); |
3988 | 3989 |
3989 if (reusable_preparser_ == NULL) { | 3990 if (reusable_preparser_ == NULL) { |
3990 reusable_preparser_ = | 3991 reusable_preparser_ = new PreParser( |
3991 new PreParser(isolate(), &scanner_, NULL, stack_limit_); | 3992 isolate(), zone(), &scanner_, ast_value_factory(), NULL, stack_limit_); |
3992 reusable_preparser_->set_allow_lazy(true); | 3993 reusable_preparser_->set_allow_lazy(true); |
3993 reusable_preparser_->set_allow_natives(allow_natives()); | 3994 reusable_preparser_->set_allow_natives(allow_natives()); |
3994 reusable_preparser_->set_allow_harmony_scoping(allow_harmony_scoping()); | 3995 reusable_preparser_->set_allow_harmony_scoping(allow_harmony_scoping()); |
3995 reusable_preparser_->set_allow_harmony_modules(allow_harmony_modules()); | 3996 reusable_preparser_->set_allow_harmony_modules(allow_harmony_modules()); |
3996 reusable_preparser_->set_allow_harmony_arrow_functions( | 3997 reusable_preparser_->set_allow_harmony_arrow_functions( |
3997 allow_harmony_arrow_functions()); | 3998 allow_harmony_arrow_functions()); |
3998 reusable_preparser_->set_allow_harmony_numeric_literals( | 3999 reusable_preparser_->set_allow_harmony_numeric_literals( |
3999 allow_harmony_numeric_literals()); | 4000 allow_harmony_numeric_literals()); |
4000 reusable_preparser_->set_allow_harmony_classes(allow_harmony_classes()); | 4001 reusable_preparser_->set_allow_harmony_classes(allow_harmony_classes()); |
4001 reusable_preparser_->set_allow_harmony_object_literals( | 4002 reusable_preparser_->set_allow_harmony_object_literals( |
(...skipping 1410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5412 } else { | 5413 } else { |
5413 const uc16* data = reinterpret_cast<const uc16*>(raw_string->raw_data()); | 5414 const uc16* data = reinterpret_cast<const uc16*>(raw_string->raw_data()); |
5414 running_hash = StringHasher::ComputeRunningHash(running_hash, data, | 5415 running_hash = StringHasher::ComputeRunningHash(running_hash, data, |
5415 raw_string->length()); | 5416 raw_string->length()); |
5416 } | 5417 } |
5417 } | 5418 } |
5418 | 5419 |
5419 return running_hash; | 5420 return running_hash; |
5420 } | 5421 } |
5421 } } // namespace v8::internal | 5422 } } // namespace v8::internal |
OLD | NEW |