aboutsummaryrefslogtreecommitdiff
path: root/src/js_parser.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/js_parser.zig')
-rw-r--r--src/js_parser.zig23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/js_parser.zig b/src/js_parser.zig
index 79a0549f0..90d7a5d24 100644
--- a/src/js_parser.zig
+++ b/src/js_parser.zig
@@ -12507,7 +12507,7 @@ fn NewParser_(
return true;
}
- pub fn parseTemplateParts(p: *P, _: bool) ![]E.TemplatePart {
+ pub fn parseTemplateParts(p: *P, include_raw: bool) ![]E.TemplatePart {
var parts = ListManaged(E.TemplatePart).initCapacity(p.allocator, 1) catch unreachable;
// Allow "in" inside template literals
var oldAllowIn = p.allow_in;
@@ -12519,7 +12519,10 @@ fn NewParser_(
const tail_loc = p.lexer.loc();
try p.lexer.rescanCloseBraceAsTemplateToken();
- var tail = p.lexer.toEString();
+ const tail: E.Template.Contents = brk: {
+ if (!include_raw) break :brk .{ .cooked = p.lexer.toEString() };
+ break :brk .{ .raw = p.lexer.rawTemplateContents() };
+ };
parts.append(E.TemplatePart{
.value = value,
@@ -12617,7 +12620,7 @@ fn NewParser_(
// Reset the optional chain flag by default. That way we won't accidentally
// treat "c.d" as OptionalChainContinue in "a?.b + c.d".
- var old_optional_chain = optional_chain;
+ const old_optional_chain = optional_chain;
optional_chain = null;
switch (p.lexer.token) {
.t_dot => {
@@ -12778,11 +12781,11 @@ fn NewParser_(
p.log.addRangeError(p.source, p.lexer.range(), "Template literals cannot have an optional chain as a tag") catch unreachable;
}
// p.markSyntaxFeature(compat.TemplateLiteral, p.lexer.Range());
- const head = p.lexer.toEString();
+ const head = p.lexer.rawTemplateContents();
try p.lexer.next();
left = p.newExpr(E.Template{
.tag = left,
- .head = head,
+ .head = .{ .raw = head },
}, left.loc);
},
.t_template_head => {
@@ -12790,10 +12793,14 @@ fn NewParser_(
p.log.addRangeError(p.source, p.lexer.range(), "Template literals cannot have an optional chain as a tag") catch unreachable;
}
// p.markSyntaxFeature(compat.TemplateLiteral, p.lexer.Range());
- const head = p.lexer.toEString();
+ const head = p.lexer.rawTemplateContents();
const partsGroup = try p.parseTemplateParts(true);
const tag = left;
- left = p.newExpr(E.Template{ .tag = tag, .head = head, .parts = partsGroup }, left.loc);
+ left = p.newExpr(E.Template{
+ .tag = tag,
+ .head = .{ .raw = head },
+ .parts = partsGroup,
+ }, left.loc);
},
.t_open_bracket => {
// When parsing a decorator, ignore EIndex expressions since they may be
@@ -13611,7 +13618,7 @@ fn NewParser_(
// if ()
return p.newExpr(E.Template{
- .head = head,
+ .head = .{ .cooked = head },
.parts = parts,
}, loc);
},