[parser] parse `CalllExpression TemplateLiteral` production
authorcaitpotter88 <caitpotter88@gmail.com>
Tue, 16 Jun 2015 18:08:21 +0000 (11:08 -0700)
committerCommit bot <commit-bot@chromium.org>
Tue, 16 Jun 2015 18:08:28 +0000 (18:08 +0000)
BUG=v8:4183
R=arv@chromium.org, rossberg@chromium.org
LOG=N

Review URL: https://codereview.chromium.org/1184373002

Cr-Commit-Position: refs/heads/master@{#29055}

src/preparser.h
test/mjsunit/es6/templates.js

index 41ebf97..862b7fb 100644 (file)
@@ -3095,6 +3095,13 @@ ParserBase<Traits>::ParseLeftHandSideExpression(
         break;
       }
 
+      case Token::TEMPLATE_SPAN:
+      case Token::TEMPLATE_TAIL: {
+        BindingPatternUnexpectedToken(classifier);
+        result = ParseTemplateLiteral(result, position(), classifier, CHECK_OK);
+        break;
+      }
+
       default:
         return result;
     }
index 0734f0e..feb7364 100644 (file)
@@ -588,6 +588,26 @@ var global = this;
 })();
 
 
+(function testReturnValueAsTagFn() {
+  "use strict";
+  var i = 0;
+  function makeTag() {
+    return function tag(cs) {
+      var args = Array.prototype.slice.call(arguments, 1);
+      var rcs = [];
+      rcs.raw = cs.map(function(s) {
+        return '!' + s + '!';
+      });
+      args.unshift(rcs);
+      return String.raw.apply(null, args);
+    }
+  }
+  assertEquals('!hi!', makeTag()`hi`);
+  assertEquals('!test!0!test!', makeTag()`test${0}test`);
+  assertEquals('!!', makeTag()``);
+});
+
+
 (function testToStringSubstitutions() {
   var a = {
     toString: function() { return "a"; },