template string mozilla ASTs

This commit is contained in:
Fábio Santos 2018-03-20 20:48:28 +00:00
parent 0c924fca64
commit a69b51e25d
4 changed files with 70 additions and 2 deletions

View File

@ -445,7 +445,7 @@ var AST_PrefixedTemplateString = DEFNODE("PrefixedTemplateString", "template_str
this.prefix._walk(visitor);
this.template_string._walk(visitor);
}
})
});
var AST_TemplateString = DEFNODE("TemplateString", "segments", {
$documentation: "A template string literal",

View File

@ -114,6 +114,36 @@
expression: from_moz(M.argument)
});
},
TemplateElement: function(M) {
return new AST_TemplateSegment({
start: my_start_token(M),
end: my_end_token(M),
value: M.value.cooked,
raw: M.value.raw
});
},
TemplateLiteral: function(M) {
var segments = [];
for (var i = 0; i < M.quasis.length; i++) {
segments.push(from_moz(M.quasis[i]));
if (M.expressions[i]) {
segments.push(from_moz(M.expressions[i]));
}
}
return new AST_TemplateString({
start: my_start_token(M),
end: my_end_token(M),
segments: segments
});
},
TaggedTemplateExpression: function(M) {
return new AST_PrefixedTemplateString({
start: my_start_token(M),
end: my_end_token(M),
template_string: from_moz(M.quasi),
prefix: from_moz(M.tag)
});
},
FunctionDeclaration: function(M) {
return new AST_Defun({
start: my_start_token(M),
@ -457,6 +487,38 @@
};
});
def_to_moz(AST_PrefixedTemplateString, function To_Moz_TaggedTemplateExpression(M) {
return {
type: "TaggedTemplateExpression",
tag: to_moz(M.prefix),
quasi: to_moz(M.template_string)
};
});
def_to_moz(AST_TemplateString, function To_Moz_TemplateLiteral(M) {
var quasis = [];
var expressions = [];
for (var i = 0; i < M.segments.length; i++) {
if (i % 2 !== 0) {
expressions.push(to_moz(M.segments[i]));
} else {
quasis.push({
type: "TemplateElement",
value: {
raw: M.segments[i].raw,
cooked: M.segments[i].value
},
tail: i === M.segments.length - 1
});
}
}
return {
type: "TemplateLiteral",
quasis: quasis,
expressions: expressions
};
});
def_to_moz(AST_Defun, function To_Moz_FunctionDeclaration(M) {
return {
type: "FunctionDeclaration",

View File

@ -2693,7 +2693,8 @@ function parse($TEXT, options) {
return subscripts(new AST_PrefixedTemplateString({
start: start,
prefix: expr,
template_string: template_string()
template_string: template_string(),
end: prev()
}), allow_calls);
}
return expr;

View File

@ -66,6 +66,11 @@ var { w: w1, ...V } = { w: 7, x: 1, y: 2 };
for (const x of y) {}
async function f1() { await x + y; }
``;
`x`;
`x${1}`;
String.raw`\n`;
// arrow.js
var foo = ([]) => "foo";