aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.vscode/launch.json2
-rw-r--r--src/defines.zig8
-rw-r--r--src/js_parser/js_parser.zig24
-rw-r--r--src/test/fixtures/defines.js4
4 files changed, 24 insertions, 14 deletions
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 564dc65ba..2d2ff211e 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -38,7 +38,7 @@
"--resolve=disable",
"--cwd",
"/Users/jarredsumner/Code/esdev/src/test/fixtures",
- "label-continue-break-bug.js"
+ "defines.js"
],
"cwd": "${workspaceFolder}",
"console": "internalConsole"
diff --git a/src/defines.zig b/src/defines.zig
index 48f5197bf..214094847 100644
--- a/src/defines.zig
+++ b/src/defines.zig
@@ -180,7 +180,7 @@ pub const Define = struct {
var list = try std.ArrayList(DotDefine).initCapacity(allocator, entry.value.len + 1);
list.appendSliceAssumeCapacity(entry.value);
list.appendAssumeCapacity(DotDefine{
- .parts = global[0 .. global.len - 1],
+ .parts = global[0..global.len],
.data = value_define,
});
@@ -188,7 +188,7 @@ pub const Define = struct {
} else {
var list = try std.ArrayList(DotDefine).initCapacity(allocator, 1);
list.appendAssumeCapacity(DotDefine{
- .parts = global[0 .. global.len - 1],
+ .parts = global[0..global.len],
.data = value_define,
});
@@ -223,13 +223,13 @@ pub const Define = struct {
const tail = user_define.key[last_dot + 1 .. user_define.key.len];
const remainder = user_define.key[0..last_dot];
const count = std.mem.count(u8, remainder, ".") + 1;
- var parts = try allocator.alloc(string, count);
+ var parts = try allocator.alloc(string, count + 1);
var splitter = std.mem.split(remainder, ".");
var i: usize = 0;
while (splitter.next()) |split| : (i += 1) {
parts[i] = split;
}
-
+ parts[i] = tail;
var didFind = false;
var initial_values: []DotDefine = &([_]DotDefine{});
diff --git a/src/js_parser/js_parser.zig b/src/js_parser/js_parser.zig
index 2d1f78ba3..7fb347c19 100644
--- a/src/js_parser/js_parser.zig
+++ b/src/js_parser/js_parser.zig
@@ -9759,14 +9759,14 @@ pub const P = struct {
}
// // trim empty statements
- // if (data.stmts.len == 0) {
- // stmts.append(Stmt{ .data = Prefill.Data.SEmpty, .loc = stmt.loc }) catch unreachable;
- // return;
- // } else if (data.stmts.len == 1 and !statementCaresAboutScope(data.stmts[0])) {
- // // Unwrap blocks containing a single statement
- // stmts.append(data.stmts[0]) catch unreachable;
- // return;
- // }
+ if (data.stmts.len == 0) {
+ stmts.append(Stmt{ .data = Prefill.Data.SEmpty, .loc = stmt.loc }) catch unreachable;
+ return;
+ } else if (data.stmts.len == 1 and !statementCaresAboutScope(data.stmts[0])) {
+ // Unwrap blocks containing a single statement
+ stmts.append(data.stmts[0]) catch unreachable;
+ return;
+ }
stmts.append(stmt.*) catch unreachable;
return;
},
@@ -9809,6 +9809,7 @@ pub const P = struct {
data.no = p.visitSingleStmt(no, .none);
}
+ // Trim unnecessary "else" clauses
if (data.no != null and @as(Stmt.Tag, data.no.?.data) == .s_empty) {
data.no = null;
}
@@ -10279,9 +10280,14 @@ pub const P = struct {
switch (expr.data) {
.e_dot => |ex| {
if (parts.len > 1) {
+ if (ex.optional_chain != null) {
+ return false;
+ }
+
// Intermediates must be dot expressions
const last = parts.len - 1;
- return strings.eql(parts[last], ex.name) and ex.optional_chain == null and p.isDotDefineMatch(ex.target, parts[0..last]);
+ const is_tail_match = strings.eql(parts[last], ex.name);
+ return is_tail_match and p.isDotDefineMatch(ex.target, parts[0..last]);
}
},
.e_import_meta => |ex| {
diff --git a/src/test/fixtures/defines.js b/src/test/fixtures/defines.js
new file mode 100644
index 000000000..2b8c54467
--- /dev/null
+++ b/src/test/fixtures/defines.js
@@ -0,0 +1,4 @@
+if (process.env.NODE_ENV === "development") {
+ console.log("hi");
+} else {
+}