| Index: test/cctest/test-parsing.cc | 
| diff --git a/test/cctest/test-parsing.cc b/test/cctest/test-parsing.cc | 
| index 40281678d9442c7096f3ff0ee27feaf1f3b09986..e12540db15531f59b4d46d1098d65312984d06bd 100644 | 
| --- a/test/cctest/test-parsing.cc | 
| +++ b/test/cctest/test-parsing.cc | 
| @@ -1334,7 +1334,8 @@ enum ParserFlag { | 
| kAllowHarmonyNumericLiterals, | 
| kAllowArrowFunctions, | 
| kAllowClasses, | 
| -  kAllowHarmonyObjectLiterals | 
| +  kAllowHarmonyObjectLiterals, | 
| +  kAllowHarmonyTemplates | 
| }; | 
|  | 
|  | 
| @@ -1357,6 +1358,7 @@ void SetParserFlags(i::ParserBase<Traits>* parser, | 
| flags.Contains(kAllowHarmonyObjectLiterals)); | 
| parser->set_allow_arrow_functions(flags.Contains(kAllowArrowFunctions)); | 
| parser->set_allow_classes(flags.Contains(kAllowClasses)); | 
| +  parser->set_allow_harmony_templates(flags.Contains(kAllowHarmonyTemplates)); | 
| } | 
|  | 
|  | 
| @@ -1656,6 +1658,7 @@ void RunParserSyncTest(const char* context_data[][2], | 
| kAllowLazy, | 
| kAllowModules, | 
| kAllowNativesSyntax, | 
| +    kAllowHarmonyTemplates | 
| }; | 
| ParserFlag* generated_flags = NULL; | 
| if (flags == NULL) { | 
| @@ -4258,3 +4261,73 @@ TEST(ConstParsingInForInError) { | 
| RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, | 
| arraysize(always_flags)); | 
| } | 
| + | 
| + | 
| +TEST(ScanTemplateLiterals) { | 
| +  const char* context_data[][2] = {{"'use strict';", ""}, | 
| +                                   {"function foo(){ 'use strict';" | 
| +                                    "  var a, b, c; return ", "}"}, | 
| +                                   {NULL, NULL}}; | 
| + | 
| +  const char* data[] = { | 
| +      "`no-subst-template`", | 
| +      "`template-head${a}`", | 
| +      "`${a}template-tail`", | 
| +      "`template-head${a}template-tail`", | 
| +      "`${a}${b}${c}`", | 
| +      "`a${a}b${b}c${c}`", | 
| +      "`${a}a${b}b${c}c`", | 
| +      "`foo\n\nbar\r\nbaz`", | 
| +      "`foo\n\n${  bar  }\r\nbaz`", | 
| +      NULL}; | 
| +  static const ParserFlag always_flags[] = {kAllowHarmonyTemplates}; | 
| +  RunParserSyncTest(context_data, data, kSuccess, NULL, 0, always_flags, | 
| +                    arraysize(always_flags)); | 
| +} | 
| + | 
| + | 
| +TEST(ScanTaggedTemplateLiterals) { | 
| +  const char* context_data[][2] = {{"'use strict';", ""}, | 
| +                                   {"function foo(){ 'use strict';" | 
| +                                    "  function tag() {}" | 
| +                                    "  var a, b, c; return ", "}"}, | 
| +                                   {NULL, NULL}}; | 
| + | 
| +  const char* data[] = { | 
| +      "tag `no-subst-template`", | 
| +      "tag`template-head${a}`", | 
| +      "tag `${a}template-tail`", | 
| +      "tag   `template-head${a}template-tail`", | 
| +      "tag\n`${a}${b}${c}`", | 
| +      "tag\r\n`a${a}b${b}c${c}`", | 
| +      "tag    `${a}a${b}b${c}c`", | 
| +      "tag\t`foo\n\nbar\r\nbaz`", | 
| +      "tag\r`foo\n\n${  bar  }\r\nbaz`", | 
| +      NULL}; | 
| +  static const ParserFlag always_flags[] = {kAllowHarmonyTemplates}; | 
| +  RunParserSyncTest(context_data, data, kSuccess, NULL, 0, always_flags, | 
| +                    arraysize(always_flags)); | 
| +} | 
| + | 
| + | 
| +TEST(ScanUnterminatedTemplateLiterals) { | 
| +  const char* context_data[][2] = {{"'use strict';", ""}, | 
| +                                   {"function foo(){ 'use strict';" | 
| +                                    "  var a, b, c; return ", "}"}, | 
| +                                   {NULL, NULL}}; | 
| + | 
| +  const char* data[] = { | 
| +      "`no-subst-template", | 
| +      "`template-head${a}", | 
| +      "`${a}template-tail", | 
| +      "`template-head${a}template-tail", | 
| +      "`${a}${b}${c}", | 
| +      "`a${a}b${b}c${c}", | 
| +      "`${a}a${b}b${c}c", | 
| +      "`foo\n\nbar\r\nbaz", | 
| +      "`foo\n\n${  bar  }\r\nbaz", | 
| +      NULL}; | 
| +  static const ParserFlag always_flags[] = {kAllowHarmonyTemplates}; | 
| +  RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, | 
| +                    arraysize(always_flags)); | 
| +} | 
|  |