OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
721 FunctionLiteral* Parser::ParseProgram(Handle<String> source, | 721 FunctionLiteral* Parser::ParseProgram(Handle<String> source, |
722 bool in_global_context) { | 722 bool in_global_context) { |
723 CompilationZoneScope zone_scope(DONT_DELETE_ON_EXIT); | 723 CompilationZoneScope zone_scope(DONT_DELETE_ON_EXIT); |
724 | 724 |
725 HistogramTimerScope timer(&Counters::parse); | 725 HistogramTimerScope timer(&Counters::parse); |
726 Counters::total_parse_size.Increment(source->length()); | 726 Counters::total_parse_size.Increment(source->length()); |
727 fni_ = new FuncNameInferrer(); | 727 fni_ = new FuncNameInferrer(); |
728 | 728 |
729 // Initialize parser state. | 729 // Initialize parser state. |
730 source->TryFlatten(); | 730 source->TryFlatten(); |
731 scanner_.Initialize(source, JAVASCRIPT); | 731 scanner_.Initialize(source); |
732 ASSERT(target_stack_ == NULL); | 732 ASSERT(target_stack_ == NULL); |
733 if (pre_data_ != NULL) pre_data_->Initialize(); | 733 if (pre_data_ != NULL) pre_data_->Initialize(); |
734 | 734 |
735 // Compute the parsing mode. | 735 // Compute the parsing mode. |
736 mode_ = FLAG_lazy ? PARSE_LAZILY : PARSE_EAGERLY; | 736 mode_ = FLAG_lazy ? PARSE_LAZILY : PARSE_EAGERLY; |
737 if (allow_natives_syntax_ || extension_ != NULL) mode_ = PARSE_EAGERLY; | 737 if (allow_natives_syntax_ || extension_ != NULL) mode_ = PARSE_EAGERLY; |
738 | 738 |
739 Scope::Type type = | 739 Scope::Type type = |
740 in_global_context | 740 in_global_context |
741 ? Scope::GLOBAL_SCOPE | 741 ? Scope::GLOBAL_SCOPE |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
784 HistogramTimerScope timer(&Counters::parse_lazy); | 784 HistogramTimerScope timer(&Counters::parse_lazy); |
785 Handle<String> source(String::cast(script_->source())); | 785 Handle<String> source(String::cast(script_->source())); |
786 Counters::total_parse_size.Increment(source->length()); | 786 Counters::total_parse_size.Increment(source->length()); |
787 | 787 |
788 Handle<String> name(String::cast(info->name())); | 788 Handle<String> name(String::cast(info->name())); |
789 fni_ = new FuncNameInferrer(); | 789 fni_ = new FuncNameInferrer(); |
790 fni_->PushEnclosingName(name); | 790 fni_->PushEnclosingName(name); |
791 | 791 |
792 // Initialize parser state. | 792 // Initialize parser state. |
793 source->TryFlatten(); | 793 source->TryFlatten(); |
794 scanner_.Initialize(source, info->start_position(), info->end_position(), | 794 scanner_.Initialize(source, info->start_position(), info->end_position()); |
795 JAVASCRIPT); | |
796 ASSERT(target_stack_ == NULL); | 795 ASSERT(target_stack_ == NULL); |
797 mode_ = PARSE_EAGERLY; | 796 mode_ = PARSE_EAGERLY; |
798 | 797 |
799 // Place holder for the result. | 798 // Place holder for the result. |
800 FunctionLiteral* result = NULL; | 799 FunctionLiteral* result = NULL; |
801 | 800 |
802 { | 801 { |
803 // Parse the function literal. | 802 // Parse the function literal. |
804 Handle<String> no_name = Factory::empty_symbol(); | 803 Handle<String> no_name = Factory::empty_symbol(); |
805 Scope* scope = | 804 Scope* scope = |
(...skipping 2800 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3606 args->Add(new Literal(array)); | 3605 args->Add(new Literal(array)); |
3607 return new Throw(new CallRuntime(constructor, NULL, args), | 3606 return new Throw(new CallRuntime(constructor, NULL, args), |
3608 scanner().location().beg_pos); | 3607 scanner().location().beg_pos); |
3609 } | 3608 } |
3610 | 3609 |
3611 // ---------------------------------------------------------------------------- | 3610 // ---------------------------------------------------------------------------- |
3612 // JSON | 3611 // JSON |
3613 | 3612 |
3614 Handle<Object> JsonParser::ParseJson(Handle<String> source) { | 3613 Handle<Object> JsonParser::ParseJson(Handle<String> source) { |
3615 source->TryFlatten(); | 3614 source->TryFlatten(); |
3616 scanner_.Initialize(source, JSON); | 3615 scanner_.Initialize(source); |
3617 Handle<Object> result = ParseJsonValue(); | 3616 Handle<Object> result = ParseJsonValue(); |
3618 if (result.is_null() || scanner_.Next() != Token::EOS) { | 3617 if (result.is_null() || scanner_.Next() != Token::EOS) { |
3619 if (scanner_.stack_overflow()) { | 3618 if (scanner_.stack_overflow()) { |
3620 // Scanner failed. | 3619 // Scanner failed. |
3621 Top::StackOverflow(); | 3620 Top::StackOverflow(); |
3622 } else { | 3621 } else { |
3623 // Parse failed. Scanner's current token is the unexpected token. | 3622 // Parse failed. Scanner's current token is the unexpected token. |
3624 Token::Value token = scanner_.current_token(); | 3623 Token::Value token = scanner_.current_token(); |
3625 | 3624 |
3626 const char* message; | 3625 const char* message; |
(...skipping 1007 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4634 data++; | 4633 data++; |
4635 } | 4634 } |
4636 *source = data; | 4635 *source = data; |
4637 return result; | 4636 return result; |
4638 } | 4637 } |
4639 | 4638 |
4640 | 4639 |
4641 static ScriptDataImpl* DoPreParse(UTF16Buffer* stream, | 4640 static ScriptDataImpl* DoPreParse(UTF16Buffer* stream, |
4642 bool allow_lazy, | 4641 bool allow_lazy, |
4643 PartialParserRecorder* recorder) { | 4642 PartialParserRecorder* recorder) { |
4644 typedef preparser::Scanner<UTF16Buffer, UTF8Buffer> PreScanner; | 4643 preparser::Scanner scanner; |
4645 PreScanner scanner; | |
4646 scanner.Initialize(stream); | 4644 scanner.Initialize(stream); |
4647 preparser::PreParser<PreScanner, PartialParserRecorder> preparser; | 4645 preparser::PreParser<preparser::Scanner, PartialParserRecorder> preparser; |
4648 if (!preparser.PreParseProgram(&scanner, recorder, allow_lazy)) { | 4646 if (!preparser.PreParseProgram(&scanner, recorder, allow_lazy)) { |
4649 Top::StackOverflow(); | 4647 Top::StackOverflow(); |
4650 return NULL; | 4648 return NULL; |
4651 } | 4649 } |
4652 | 4650 |
4653 // Extract the accumulated data from the recorder as a single | 4651 // Extract the accumulated data from the recorder as a single |
4654 // contiguous vector that we are responsible for disposing. | 4652 // contiguous vector that we are responsible for disposing. |
4655 Vector<unsigned> store = recorder->ExtractData(); | 4653 Vector<unsigned> store = recorder->ExtractData(); |
4656 return new ScriptDataImpl(store); | 4654 return new ScriptDataImpl(store); |
4657 } | 4655 } |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4766 Handle<String> source = Handle<String>(String::cast(script->source())); | 4764 Handle<String> source = Handle<String>(String::cast(script->source())); |
4767 result = parser.ParseProgram(source, info->is_global()); | 4765 result = parser.ParseProgram(source, info->is_global()); |
4768 } | 4766 } |
4769 } | 4767 } |
4770 | 4768 |
4771 info->SetFunction(result); | 4769 info->SetFunction(result); |
4772 return (result != NULL); | 4770 return (result != NULL); |
4773 } | 4771 } |
4774 | 4772 |
4775 } } // namespace v8::internal | 4773 } } // namespace v8::internal |
OLD | NEW |