prefixed template strings, like "String.rawfoo\nbar".

This commit is contained in:
Fábio Santos
2015-09-05 22:48:17 +01:00
parent e1cb1a0e3c
commit 242c61be94
4 changed files with 31 additions and 0 deletions

View File

@@ -501,6 +501,18 @@ var AST_Destructuring = DEFNODE("Destructuring", "names is_array", {
}
});
var AST_PrefixedTemplateString = DEFNODE("PrefixedTemplateString", "template_string prefix", {
$documentation: "A templatestring with a prefix, such as String.raw`foobarbaz`",
$propdoc: {
template_string: "[AST_TemplateString] The template string",
prefix: "[AST_SymbolRef|AST_PropAccess] The prefix, which can be a symbol such as `foo` or a dotted expression such as `String.raw`."
},
_walk: function(visitor) {
this.prefix._walk(visitor);
this.template_string._walk(visitor);
}
})
var AST_TemplateString = DEFNODE("TemplateString", "segments", {
$documentation: "A template string literal",
$propdoc: {

View File

@@ -776,6 +776,10 @@ function OutputStream(options) {
self._do_print(output);
});
DEFPRINT(AST_PrefixedTemplateString, function(self, output) {
self.prefix.print(output);
self.template_string.print(output);
});
DEFPRINT(AST_TemplateString, function(self, output) {
output.print("`");
for (var i = 0; i < self.segments.length; i++) {

View File

@@ -1717,6 +1717,13 @@ function parse($TEXT, options) {
});
return arrow_function(expr);
}
if ((expr instanceof AST_SymbolRef || expr instanceof AST_PropAccess) && is("punc", "`")) {
return new AST_PrefixedTemplateString({
start: start,
prefix: expr,
template_string: template_string()
})
}
if (commas && is("punc", ",")) {
next();
return new AST_Seq({

View File

@@ -56,6 +56,14 @@ template_strings: {
expect_exact: "``;`xx\\`x`;`${foo+2}`;` foo ${bar+`baz ${qux}`}`;";
}
template_string_prefixes: {
input: {
String.raw`foo`;
foo `bar`;
}
expect_exact: "String.raw`foo`;foo`bar`;";
}
destructuring_arguments: {
input: {
(function ( a ) { });