diff options
author | 2023-05-19 16:04:38 -0700 | |
---|---|---|
committer | 2023-05-19 16:04:38 -0700 | |
commit | aa34529b5b713ba856db47f253f66f651903c438 (patch) | |
tree | 7b0fe5c003fc00b64f8895f174ddc61fc30133fa | |
parent | 4101eeabdefa5f49631e675e4a1ade797e4264c3 (diff) | |
download | bun-aa34529b5b713ba856db47f253f66f651903c438.tar.gz bun-aa34529b5b713ba856db47f253f66f651903c438.tar.zst bun-aa34529b5b713ba856db47f253f66f651903c438.zip |
resolve rope string for multipart template (#2963)
* resolve rope for multipart template
* fix tests
* clone template part if it is `e_string` and folded
* clone string only
* don't clone data again
-rw-r--r-- | src/js_ast.zig | 5 | ||||
-rw-r--r-- | test/bundler/bundler_string.test.ts | 30 |
2 files changed, 31 insertions, 4 deletions
diff --git a/src/js_ast.zig b/src/js_ast.zig index a3fb81402..fbf699483 100644 --- a/src/js_ast.zig +++ b/src/js_ast.zig @@ -2428,11 +2428,10 @@ pub const E = struct { if (part.value.data == .e_string and part.tail.cooked.isUTF8() and part.value.data.e_string.isUTF8()) { if (parts.items.len == 0) { if (part.value.data.e_string.len() > 0) { - head.data.e_string.push(part.value.data.e_string); + head.data.e_string.push(Expr.init(E.String, part.value.data.e_string.*, logger.Loc.Empty).data.e_string); } if (part.tail.cooked.len() > 0) { - head.data.e_string.resolveRopeIfNeeded(allocator); head.data.e_string.push(Expr.init(E.String, part.tail.cooked, part.tail_loc).data.e_string); } @@ -2443,7 +2442,7 @@ pub const E = struct { if (prev_part.tail.cooked.isUTF8()) { if (part.value.data.e_string.len() > 0) { - prev_part.tail.cooked.push(part.value.data.e_string); + prev_part.tail.cooked.push(Expr.init(E.String, part.value.data.e_string.*, logger.Loc.Empty).data.e_string); } if (part.tail.cooked.len() > 0) { diff --git a/test/bundler/bundler_string.test.ts b/test/bundler/bundler_string.test.ts index 5a6861a05..3c2d7802c 100644 --- a/test/bundler/bundler_string.test.ts +++ b/test/bundler/bundler_string.test.ts @@ -168,6 +168,28 @@ describe("bundler", () => { console.log(nonHexChars); const validHexSize = new RegExp(\`^\${match3or4Hex}\$|^\${match6or8Hex}$\`, "i"); console.log(validHexSize); + + const INTERNAL = "OOPS"; + + function foo() { + return "NAME"; + } + + console.log(\`k\${foo()}=\${INTERNAL}j\`); + console.log("d" + INTERNAL); + console.log(INTERNAL + "l"); + console.log("d" + INTERNAL + "l"); + + const CONST_VALUE = "CONST_VALUE"; + + function blaBla(a) { + const { propertyName } = a; + const condition = \`\${propertyName}.\${CONST_VALUE}AA.WHAT\`; + return condition; + } + + console.log(CONST_VALUE); + console.log(CONST_VALUE === "CONST_VALUE"); `, }, bundling: false, @@ -183,7 +205,13 @@ describe("bundler", () => { #?[a-f\d]{3}[a-f\d]? #?[a-f\d]{6}([a-f\d]{2})? /[^#a-f\d]/gi - /^#?[a-f\d]{3}[a-f\d]?$|^#?[a-f\d]{6}([a-f\d]{2})?$/i`, + /^#?[a-f\d]{3}[a-f\d]?$|^#?[a-f\d]{6}([a-f\d]{2})?$/i + kNAME=OOPSj + dOOPS + OOPSl + dOOPSl + CONST_VALUE + true`, }, }); }); |