Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: src/parsing/parser.cc

Issue 2479213002: [parser] Only track parsing-mode (and possibly switch to the preparser) in the parser (Closed)
Patch Set: addressed comments Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/parsing/parser.h ('k') | src/parsing/parser-base.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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-expression-rewriter.h" 10 #include "src/ast/ast-expression-rewriter.h"
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 583
584 return factory()->NewCallRuntime(context_index, args, pos); 584 return factory()->NewCallRuntime(context_index, args, pos);
585 } 585 }
586 586
587 Parser::Parser(ParseInfo* info) 587 Parser::Parser(ParseInfo* info)
588 : ParserBase<Parser>(info->zone(), &scanner_, info->stack_limit(), 588 : ParserBase<Parser>(info->zone(), &scanner_, info->stack_limit(),
589 info->extension(), info->ast_value_factory()), 589 info->extension(), info->ast_value_factory()),
590 scanner_(info->unicode_cache()), 590 scanner_(info->unicode_cache()),
591 reusable_preparser_(nullptr), 591 reusable_preparser_(nullptr),
592 original_scope_(nullptr), 592 original_scope_(nullptr),
593 mode_(PARSE_EAGERLY), // Lazy mode must be set explicitly.
593 target_stack_(nullptr), 594 target_stack_(nullptr),
594 compile_options_(info->compile_options()), 595 compile_options_(info->compile_options()),
595 cached_parse_data_(nullptr), 596 cached_parse_data_(nullptr),
596 total_preparse_skipped_(0), 597 total_preparse_skipped_(0),
597 parsing_on_main_thread_(true), 598 parsing_on_main_thread_(true),
598 log_(nullptr) { 599 log_(nullptr) {
599 // Even though we were passed ParseInfo, we should not store it in 600 // Even though we were passed ParseInfo, we should not store it in
600 // Parser - this makes sure that Isolate is not accidentally accessed via 601 // Parser - this makes sure that Isolate is not accidentally accessed via
601 // ParseInfo during background parsing. 602 // ParseInfo during background parsing.
602 DCHECK(!info->script().is_null() || info->source_stream() != nullptr || 603 DCHECK(!info->script().is_null() || info->source_stream() != nullptr ||
(...skipping 1959 matching lines...) Expand 10 before | Expand all | Expand 10 after
2562 // and 2563 // and
2563 // (function foo() { 2564 // (function foo() {
2564 // var a = 1; 2565 // var a = 1;
2565 // bar = function() { return a; } 2566 // bar = function() { return a; }
2566 // })(); 2567 // })();
2567 2568
2568 // Now foo will be parsed eagerly and compiled eagerly (optimization: assume 2569 // Now foo will be parsed eagerly and compiled eagerly (optimization: assume
2569 // parenthesis before the function means that it will be called 2570 // parenthesis before the function means that it will be called
2570 // immediately). bar can be parsed lazily, but we need to parse it in a mode 2571 // immediately). bar can be parsed lazily, but we need to parse it in a mode
2571 // that tracks unresolved variables. 2572 // that tracks unresolved variables.
2572 DCHECK_IMPLIES(mode() == PARSE_LAZILY, FLAG_lazy); 2573 DCHECK_IMPLIES(parse_lazily(), FLAG_lazy);
2573 DCHECK_IMPLIES(mode() == PARSE_LAZILY, allow_lazy()); 2574 DCHECK_IMPLIES(parse_lazily(), allow_lazy());
2574 DCHECK_IMPLIES(mode() == PARSE_LAZILY, extension_ == nullptr); 2575 DCHECK_IMPLIES(parse_lazily(), extension_ == nullptr);
2575 2576
2576 bool can_preparse = mode() == PARSE_LAZILY && 2577 bool can_preparse = parse_lazily() &&
2577 eager_compile_hint == FunctionLiteral::kShouldLazyCompile; 2578 eager_compile_hint == FunctionLiteral::kShouldLazyCompile;
2578 2579
2579 bool is_lazy_top_level_function = 2580 bool is_lazy_top_level_function =
2580 can_preparse && impl()->AllowsLazyParsingWithoutUnresolvedVariables(); 2581 can_preparse && impl()->AllowsLazyParsingWithoutUnresolvedVariables();
2581 2582
2582 // Determine whether we can still lazy parse the inner function. 2583 // Determine whether we can still lazy parse the inner function.
2583 // The preconditions are: 2584 // The preconditions are:
2584 // - Lazy compilation has to be enabled. 2585 // - Lazy compilation has to be enabled.
2585 // - Neither V8 natives nor native function declarations can be allowed, 2586 // - Neither V8 natives nor native function declarations can be allowed,
2586 // since parsing one would retroactively force the function to be 2587 // since parsing one would retroactively force the function to be
(...skipping 2831 matching lines...) Expand 10 before | Expand all | Expand 10 after
5418 5419
5419 return final_loop; 5420 return final_loop;
5420 } 5421 }
5421 5422
5422 #undef CHECK_OK 5423 #undef CHECK_OK
5423 #undef CHECK_OK_VOID 5424 #undef CHECK_OK_VOID
5424 #undef CHECK_FAILED 5425 #undef CHECK_FAILED
5425 5426
5426 } // namespace internal 5427 } // namespace internal
5427 } // namespace v8 5428 } // namespace v8
OLDNEW
« no previous file with comments | « src/parsing/parser.h ('k') | src/parsing/parser-base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698