aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-09-22 02:16:31 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-09-22 02:16:31 -0700
commit8f460a9be3d954d6be555d1bcd382383d23d9280 (patch)
tree4a64f0164554c99af419564a4e4885d27d09deff
parent204b07f46b6c8985c8928ec58b51d941903ad69b (diff)
downloadbun-8f460a9be3d954d6be555d1bcd382383d23d9280.tar.gz
bun-8f460a9be3d954d6be555d1bcd382383d23d9280.tar.zst
bun-8f460a9be3d954d6be555d1bcd382383d23d9280.zip
Fix parsing bug with arrays that have default values
-rw-r--r--integration/scripts/browser.js1
-rw-r--r--integration/snippets/array-args-with-default-values.js28
-rw-r--r--integration/snippets/package-json-exports/index.js4
-rw-r--r--src/js_parser/js_parser.zig13
4 files changed, 40 insertions, 6 deletions
diff --git a/integration/scripts/browser.js b/integration/scripts/browser.js
index 8eb776c29..5d84de0e7 100644
--- a/integration/scripts/browser.js
+++ b/integration/scripts/browser.js
@@ -114,6 +114,7 @@ async function main() {
"/unicode-identifiers.js",
"/string-escapes.js",
"/package-json-exports/index.js",
+ "/array-args-with-default-values.js",
];
tests.reverse();
diff --git a/integration/snippets/array-args-with-default-values.js b/integration/snippets/array-args-with-default-values.js
new file mode 100644
index 000000000..f733a1bfa
--- /dev/null
+++ b/integration/snippets/array-args-with-default-values.js
@@ -0,0 +1,28 @@
+var lines;
+const data = () =>
+ lines.map(([a = null, b = null, c = null, d = null]) => ({
+ a,
+ b,
+ c,
+ d,
+ }));
+
+export function test() {
+ let ran = false;
+ lines = [
+ [undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined],
+ [undefined, undefined, undefined, undefined],
+ ];
+
+ for (let foo of data()) {
+ console.assert(foo.a === null);
+ console.assert(foo.b === null);
+ console.assert(foo.c === null);
+ console.assert(foo.d === null);
+ ran = true;
+ }
+ console.assert(ran);
+ testDone(import.meta.url);
+}
diff --git a/integration/snippets/package-json-exports/index.js b/integration/snippets/package-json-exports/index.js
index 7603e0d59..7573e431c 100644
--- a/integration/snippets/package-json-exports/index.js
+++ b/integration/snippets/package-json-exports/index.js
@@ -2,9 +2,11 @@ import * as InexactRoot from "inexact";
import * as InexactFile from "inexact/file";
import * as ExactFile from "inexact/foo";
-export function test() {
+export async function test() {
console.assert(InexactRoot.target === "browser");
console.assert(InexactFile.target === "browser");
console.assert(ExactFile.target === "browser");
+
+ console.assert(failed);
return testDone(import.meta.url);
}
diff --git a/src/js_parser/js_parser.zig b/src/js_parser/js_parser.zig
index d3db3861b..a32a077ac 100644
--- a/src/js_parser/js_parser.zig
+++ b/src/js_parser/js_parser.zig
@@ -1507,7 +1507,10 @@ fn notimpl() noreturn {
Global.panic("Not implemented yet!!", .{});
}
-const ExprBindingTuple = struct { expr: ?ExprNodeIndex = null, binding: ?Binding = null, override_expr: ?ExprNodeIndex = null };
+const ExprBindingTuple = struct {
+ expr: ?ExprNodeIndex = null,
+ binding: ?Binding = null,
+};
const TempRef = struct {
ref: Ref,
@@ -3842,13 +3845,13 @@ pub fn NewParser(
// p.markSyntaxFeature(Destructing)
var items = List(js_ast.ArrayBinding).initCapacity(p.allocator, ex.items.len) catch unreachable;
- var is_spread = true;
+ var is_spread = false;
for (ex.items) |_, i| {
var item = ex.items[i];
var _expr = item;
- if (@as(Expr.Tag, item.data) == .e_spread) {
+ if (item.data == .e_spread) {
is_spread = true;
- item = item.getSpread().value;
+ item = item.data.e_spread.value;
}
const res = p.convertExprToBindingAndInitializer(&item, invalid_loc, is_spread);
@@ -3858,7 +3861,7 @@ pub fn NewParser(
// Promise.all(promises).then(([, len]) => true);
// ^ Binding is missing there
.binding = res.binding orelse p.b(B.Missing{}, item.loc),
- .default_value = res.override_expr,
+ .default_value = res.expr,
});
}