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

Side by Side Diff: src/parsing/parser-base.h

Issue 2419663005: Only guard the eager compile hint by whether the target literal was same-zone parsed (Closed)
Patch Set: Created 4 years, 2 months 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/ast/ast.cc ('k') | no next file » | 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 #ifndef V8_PARSING_PARSER_BASE_H 5 #ifndef V8_PARSING_PARSER_BASE_H
6 #define V8_PARSING_PARSER_BASE_H 6 #define V8_PARSING_PARSER_BASE_H
7 7
8 #include "src/ast/ast.h" 8 #include "src/ast/ast.h"
9 #include "src/ast/scopes.h" 9 #include "src/ast/scopes.h"
10 #include "src/bailout-reason.h" 10 #include "src/bailout-reason.h"
(...skipping 3062 matching lines...) Expand 10 before | Expand all | Expand 10 after
3073 } else { 3073 } else {
3074 // For other kinds of calls we record position of the parenthesis as 3074 // For other kinds of calls we record position of the parenthesis as
3075 // position of the call. Note that this is extremely important for 3075 // position of the call. Note that this is extremely important for
3076 // expressions of the form function(){...}() for which call position 3076 // expressions of the form function(){...}() for which call position
3077 // should not point to the closing brace otherwise it will intersect 3077 // should not point to the closing brace otherwise it will intersect
3078 // with positions recorded for function literal and confuse debugger. 3078 // with positions recorded for function literal and confuse debugger.
3079 pos = peek_position(); 3079 pos = peek_position();
3080 // Also the trailing parenthesis are a hint that the function will 3080 // Also the trailing parenthesis are a hint that the function will
3081 // be called immediately. If we happen to have parsed a preceding 3081 // be called immediately. If we happen to have parsed a preceding
3082 // function literal eagerly, we can also compile it eagerly. 3082 // function literal eagerly, we can also compile it eagerly.
3083 if (result->IsFunctionLiteral() && mode() == PARSE_EAGERLY) { 3083 if (result->IsFunctionLiteral()) {
3084 result->AsFunctionLiteral()->SetShouldEagerCompile(); 3084 result->AsFunctionLiteral()->SetShouldEagerCompile();
3085 } 3085 }
3086 } 3086 }
3087 Scanner::Location spread_pos; 3087 Scanner::Location spread_pos;
3088 ExpressionListT args; 3088 ExpressionListT args;
3089 if (V8_UNLIKELY(is_async && impl()->IsIdentifier(result))) { 3089 if (V8_UNLIKELY(is_async && impl()->IsIdentifier(result))) {
3090 ExpressionClassifier async_classifier(this); 3090 ExpressionClassifier async_classifier(this);
3091 args = ParseArguments(&spread_pos, true, CHECK_OK); 3091 args = ParseArguments(&spread_pos, true, CHECK_OK);
3092 if (peek() == Token::ARROW) { 3092 if (peek() == Token::ARROW) {
3093 if (fni_) { 3093 if (fni_) {
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
3403 case Token::TEMPLATE_TAIL: { 3403 case Token::TEMPLATE_TAIL: {
3404 *is_async = false; 3404 *is_async = false;
3405 impl()->RewriteNonPattern(CHECK_OK); 3405 impl()->RewriteNonPattern(CHECK_OK);
3406 BindingPatternUnexpectedToken(); 3406 BindingPatternUnexpectedToken();
3407 ArrowFormalParametersUnexpectedToken(); 3407 ArrowFormalParametersUnexpectedToken();
3408 int pos; 3408 int pos;
3409 if (scanner()->current_token() == Token::IDENTIFIER) { 3409 if (scanner()->current_token() == Token::IDENTIFIER) {
3410 pos = position(); 3410 pos = position();
3411 } else { 3411 } else {
3412 pos = peek_position(); 3412 pos = peek_position();
3413 if (expression->IsFunctionLiteral() && mode() == PARSE_EAGERLY) { 3413 if (expression->IsFunctionLiteral()) {
3414 // If the tag function looks like an IIFE, set_parenthesized() to 3414 // If the tag function looks like an IIFE, set_parenthesized() to
3415 // force eager compilation. 3415 // force eager compilation.
3416 expression->AsFunctionLiteral()->SetShouldEagerCompile(); 3416 expression->AsFunctionLiteral()->SetShouldEagerCompile();
3417 } 3417 }
3418 } 3418 }
3419 expression = ParseTemplateLiteral(expression, pos, CHECK_OK); 3419 expression = ParseTemplateLiteral(expression, pos, CHECK_OK);
3420 break; 3420 break;
3421 } 3421 }
3422 case Token::ILLEGAL: { 3422 case Token::ILLEGAL: {
3423 ReportUnexpectedTokenAt(scanner()->peek_location(), Token::ILLEGAL); 3423 ReportUnexpectedTokenAt(scanner()->peek_location(), Token::ILLEGAL);
(...skipping 2022 matching lines...) Expand 10 before | Expand all | Expand 10 after
5446 has_seen_constructor_ = true; 5446 has_seen_constructor_ = true;
5447 return; 5447 return;
5448 } 5448 }
5449 } 5449 }
5450 5450
5451 5451
5452 } // namespace internal 5452 } // namespace internal
5453 } // namespace v8 5453 } // namespace v8
5454 5454
5455 #endif // V8_PARSING_PARSER_BASE_H 5455 #endif // V8_PARSING_PARSER_BASE_H
OLDNEW
« no previous file with comments | « src/ast/ast.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698