aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Dylan Conway <35280289+dylan-conway@users.noreply.github.com> 2023-05-19 16:04:38 -0700
committerGravatar GitHub <noreply@github.com> 2023-05-19 16:04:38 -0700
commitaa34529b5b713ba856db47f253f66f651903c438 (patch)
tree7b0fe5c003fc00b64f8895f174ddc61fc30133fa
parent4101eeabdefa5f49631e675e4a1ade797e4264c3 (diff)
downloadbun-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.zig5
-rw-r--r--test/bundler/bundler_string.test.ts30
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`,
},
});
});