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/parsing/parser.h" | 5 #include "src/parsing/parser.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "src/api.h" | 9 #include "src/api.h" |
10 #include "src/ast/ast.h" | 10 #include "src/ast/ast.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 data_ = copy; | 39 data_ = copy; |
40 AcquireDataOwnership(); | 40 AcquireDataOwnership(); |
41 } | 41 } |
42 } | 42 } |
43 | 43 |
44 ParseInfo::ParseInfo(Zone* zone) | 44 ParseInfo::ParseInfo(Zone* zone) |
45 : zone_(zone), | 45 : zone_(zone), |
46 flags_(0), | 46 flags_(0), |
47 source_stream_(nullptr), | 47 source_stream_(nullptr), |
48 source_stream_encoding_(ScriptCompiler::StreamedSource::ONE_BYTE), | 48 source_stream_encoding_(ScriptCompiler::StreamedSource::ONE_BYTE), |
| 49 character_stream_(nullptr), |
49 extension_(nullptr), | 50 extension_(nullptr), |
50 compile_options_(ScriptCompiler::kNoCompileOptions), | 51 compile_options_(ScriptCompiler::kNoCompileOptions), |
51 script_scope_(nullptr), | 52 script_scope_(nullptr), |
52 unicode_cache_(nullptr), | 53 unicode_cache_(nullptr), |
53 stack_limit_(0), | 54 stack_limit_(0), |
54 hash_seed_(0), | 55 hash_seed_(0), |
55 isolate_(nullptr), | 56 isolate_(nullptr), |
56 cached_data_(nullptr), | 57 cached_data_(nullptr), |
57 ast_value_factory_(nullptr), | 58 ast_value_factory_(nullptr), |
58 literal_(nullptr), | 59 literal_(nullptr), |
(...skipping 762 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
821 original_scope_(NULL), | 822 original_scope_(NULL), |
822 target_stack_(NULL), | 823 target_stack_(NULL), |
823 compile_options_(info->compile_options()), | 824 compile_options_(info->compile_options()), |
824 cached_parse_data_(NULL), | 825 cached_parse_data_(NULL), |
825 total_preparse_skipped_(0), | 826 total_preparse_skipped_(0), |
826 pre_parse_timer_(NULL), | 827 pre_parse_timer_(NULL), |
827 parsing_on_main_thread_(true) { | 828 parsing_on_main_thread_(true) { |
828 // Even though we were passed ParseInfo, we should not store it in | 829 // Even though we were passed ParseInfo, we should not store it in |
829 // Parser - this makes sure that Isolate is not accidentally accessed via | 830 // Parser - this makes sure that Isolate is not accidentally accessed via |
830 // ParseInfo during background parsing. | 831 // ParseInfo during background parsing. |
831 DCHECK(!info->script().is_null() || info->source_stream() != NULL); | 832 DCHECK(!info->script().is_null() || info->source_stream() != nullptr || |
| 833 info->character_stream() != nullptr); |
832 set_allow_lazy(info->allow_lazy_parsing()); | 834 set_allow_lazy(info->allow_lazy_parsing()); |
833 set_allow_natives(FLAG_allow_natives_syntax || info->is_native()); | 835 set_allow_natives(FLAG_allow_natives_syntax || info->is_native()); |
834 set_allow_tailcalls(FLAG_harmony_tailcalls && !info->is_native() && | 836 set_allow_tailcalls(FLAG_harmony_tailcalls && !info->is_native() && |
835 info->isolate()->is_tail_call_elimination_enabled()); | 837 info->isolate()->is_tail_call_elimination_enabled()); |
836 set_allow_harmony_do_expressions(FLAG_harmony_do_expressions); | 838 set_allow_harmony_do_expressions(FLAG_harmony_do_expressions); |
837 set_allow_harmony_for_in(FLAG_harmony_for_in); | 839 set_allow_harmony_for_in(FLAG_harmony_for_in); |
838 set_allow_harmony_function_sent(FLAG_harmony_function_sent); | 840 set_allow_harmony_function_sent(FLAG_harmony_function_sent); |
839 set_allow_harmony_restrictive_declarations( | 841 set_allow_harmony_restrictive_declarations( |
840 FLAG_harmony_restrictive_declarations); | 842 FLAG_harmony_restrictive_declarations); |
841 set_allow_harmony_exponentiation_operator( | 843 set_allow_harmony_exponentiation_operator( |
(...skipping 4627 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5469 void Parser::ParseOnBackground(ParseInfo* info) { | 5471 void Parser::ParseOnBackground(ParseInfo* info) { |
5470 parsing_on_main_thread_ = false; | 5472 parsing_on_main_thread_ = false; |
5471 | 5473 |
5472 DCHECK(info->literal() == NULL); | 5474 DCHECK(info->literal() == NULL); |
5473 FunctionLiteral* result = NULL; | 5475 FunctionLiteral* result = NULL; |
5474 fni_ = new (zone()) FuncNameInferrer(ast_value_factory(), zone()); | 5476 fni_ = new (zone()) FuncNameInferrer(ast_value_factory(), zone()); |
5475 | 5477 |
5476 CompleteParserRecorder recorder; | 5478 CompleteParserRecorder recorder; |
5477 if (produce_cached_parse_data()) log_ = &recorder; | 5479 if (produce_cached_parse_data()) log_ = &recorder; |
5478 | 5480 |
5479 DCHECK(info->source_stream() != NULL); | 5481 std::unique_ptr<Utf16CharacterStream> stream; |
5480 ExternalStreamingStream stream(info->source_stream(), | 5482 Utf16CharacterStream* stream_ptr; |
5481 info->source_stream_encoding()); | 5483 if (info->character_stream()) { |
5482 scanner_.Initialize(&stream); | 5484 DCHECK(info->source_stream() == nullptr); |
| 5485 stream_ptr = info->character_stream(); |
| 5486 } else { |
| 5487 DCHECK(info->character_stream() == nullptr); |
| 5488 stream.reset(new ExternalStreamingStream(info->source_stream(), |
| 5489 info->source_stream_encoding())); |
| 5490 stream_ptr = stream.get(); |
| 5491 } |
| 5492 scanner_.Initialize(stream_ptr); |
5483 DCHECK(info->context().is_null() || info->context()->IsNativeContext()); | 5493 DCHECK(info->context().is_null() || info->context()->IsNativeContext()); |
5484 | 5494 |
5485 // When streaming, we don't know the length of the source until we have parsed | 5495 // When streaming, we don't know the length of the source until we have parsed |
5486 // it. The raw data can be UTF-8, so we wouldn't know the source length until | 5496 // it. The raw data can be UTF-8, so we wouldn't know the source length until |
5487 // we have decoded it anyway even if we knew the raw data length (which we | 5497 // we have decoded it anyway even if we knew the raw data length (which we |
5488 // don't). We work around this by storing all the scopes which need their end | 5498 // don't). We work around this by storing all the scopes which need their end |
5489 // position set at the end of the script (the top scope and possible eval | 5499 // position set at the end of the script (the top scope and possible eval |
5490 // scopes) and set their end position after we know the script length. | 5500 // scopes) and set their end position after we know the script length. |
5491 result = DoParseProgram(info); | 5501 result = DoParseProgram(info); |
5492 | 5502 |
(...skipping 1607 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7100 node->Print(Isolate::Current()); | 7110 node->Print(Isolate::Current()); |
7101 } | 7111 } |
7102 #endif // DEBUG | 7112 #endif // DEBUG |
7103 | 7113 |
7104 #undef CHECK_OK | 7114 #undef CHECK_OK |
7105 #undef CHECK_OK_VOID | 7115 #undef CHECK_OK_VOID |
7106 #undef CHECK_FAILED | 7116 #undef CHECK_FAILED |
7107 | 7117 |
7108 } // namespace internal | 7118 } // namespace internal |
7109 } // namespace v8 | 7119 } // namespace v8 |
OLD | NEW |