| Index: src/preparser.h
 | 
| diff --git a/src/preparser.h b/src/preparser.h
 | 
| index a17296349b362df6afefbb5b8538d7c030915270..8e0bacb463b591d8e0bac68f10163f54d072fbce 100644
 | 
| --- a/src/preparser.h
 | 
| +++ b/src/preparser.h
 | 
| @@ -589,6 +589,8 @@ class ParserBase : public Traits {
 | 
|    ExpressionT ParseArrowFunctionLiteral(int start_pos, ExpressionT params_ast,
 | 
|                                          bool* ok);
 | 
|    ExpressionT ParseTemplateLiteral(ExpressionT tag, int start, bool* ok);
 | 
| +  ExpressionT ParseTemplateLiteralAsMemberExpressionContinuation(
 | 
| +      ExpressionT tag, bool* ok);
 | 
|    void AddTemplateExpression(ExpressionT);
 | 
|    ExpressionT ParseSuperExpression(bool is_new, bool* ok);
 | 
|  
 | 
| @@ -2655,18 +2657,8 @@ ParserBase<Traits>::ParseLeftHandSideExpression(bool* ok) {
 | 
|  
 | 
|        case Token::TEMPLATE_SPAN:
 | 
|        case Token::TEMPLATE_TAIL: {
 | 
| -        int pos;
 | 
| -        if (scanner()->current_token() == Token::IDENTIFIER) {
 | 
| -          pos = position();
 | 
| -        } else {
 | 
| -          pos = peek_position();
 | 
| -          if (result->IsFunctionLiteral() && mode() == PARSE_EAGERLY) {
 | 
| -            // If the tag function looks like an IIFE, set_parenthesized() to
 | 
| -            // force eager compilation.
 | 
| -            result->AsFunctionLiteral()->set_parenthesized();
 | 
| -          }
 | 
| -        }
 | 
| -        result = ParseTemplateLiteral(result, pos, CHECK_OK);
 | 
| +        result = ParseTemplateLiteralAsMemberExpressionContinuation(
 | 
| +            result, CHECK_OK);
 | 
|          break;
 | 
|        }
 | 
|  
 | 
| @@ -2842,6 +2834,12 @@ ParserBase<Traits>::ParseMemberExpressionContinuation(ExpressionT expression,
 | 
|          }
 | 
|          break;
 | 
|        }
 | 
| +      case Token::TEMPLATE_SPAN:
 | 
| +      case Token::TEMPLATE_TAIL: {
 | 
| +        expression = ParseTemplateLiteralAsMemberExpressionContinuation(
 | 
| +            expression, CHECK_OK);
 | 
| +        break;
 | 
| +      }
 | 
|        default:
 | 
|          return expression;
 | 
|      }
 | 
| @@ -2853,6 +2851,25 @@ ParserBase<Traits>::ParseMemberExpressionContinuation(ExpressionT expression,
 | 
|  
 | 
|  template <class Traits>
 | 
|  typename ParserBase<Traits>::ExpressionT
 | 
| +ParserBase<Traits>::ParseTemplateLiteralAsMemberExpressionContinuation(
 | 
| +    ExpressionT expression, bool* ok) {
 | 
| +  int pos;
 | 
| +  if (scanner()->current_token() == Token::IDENTIFIER) {
 | 
| +    pos = position();
 | 
| +  } else {
 | 
| +    pos = peek_position();
 | 
| +    if (expression->IsFunctionLiteral() && mode() == PARSE_EAGERLY) {
 | 
| +      // If the tag function looks like an IIFE, set_parenthesized() to
 | 
| +      // force eager compilation.
 | 
| +      expression->AsFunctionLiteral()->set_parenthesized();
 | 
| +    }
 | 
| +  }
 | 
| +  return ParseTemplateLiteral(expression, pos, CHECK_OK);
 | 
| +}
 | 
| +
 | 
| +
 | 
| +template <class Traits>
 | 
| +typename ParserBase<Traits>::ExpressionT
 | 
|  ParserBase<Traits>::ParseArrowFunctionLiteral(int start_pos,
 | 
|                                                ExpressionT params_ast,
 | 
|                                                bool* ok) {
 | 
| 
 |