From 5bbb1c682401ab8c3f2523c239852d33280d8ab5 Mon Sep 17 00:00:00 2001 From: "qodo-code-review[bot]" <151058649+qodo-code-review[bot]@users.noreply.github.com> Date: Fri, 4 Sep 2026 21:15:22 +0000 Subject: [PATCH 1/2] =?UTF-8?q?fix:=202=20findings=20=E2=80=94=20Traverse?= =?UTF-8?q?=20call=20and=20new=20spread=20arguments;=20Traverse=20dynam?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Traverse call and new spread arguments - Traverse dynamic import awaits --- crates/bamts-compiler/src/emitter/transforms.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/crates/bamts-compiler/src/emitter/transforms.rs b/crates/bamts-compiler/src/emitter/transforms.rs index bea443a..95f2c08 100644 --- a/crates/bamts-compiler/src/emitter/transforms.rs +++ b/crates/bamts-compiler/src/emitter/transforms.rs @@ -7055,6 +7055,7 @@ fn count_yields(expression: &Expr) -> u32 { .iter() .map(|argument| match argument { CallArgument::Expression(value) => count_yields(value), + CallArgument::Spread(spread) => count_yields(&spread.argument), _ => 0, }) .sum::() @@ -7073,6 +7074,7 @@ fn count_yields(expression: &Expr) -> u32 { .iter() .map(|argument| match argument { CallArgument::Expression(value) => count_yields(value), + CallArgument::Spread(spread) => count_yields(&spread.argument), _ => 0, }) .sum::() @@ -7301,7 +7303,10 @@ fn machine_state_name(skip: &std::collections::HashSet, temps: &[String] } fn call_argument_suspends(argument: &CallArgument) -> bool { - matches!(argument, CallArgument::Expression(value) if contains_yield(value)) + match argument { + CallArgument::Expression(value) => contains_yield(value), + CallArgument::Spread(spread) => contains_yield(&spread.argument), + } } /// Whether an assignment target subtree still holds an await, so the @@ -7340,6 +7345,7 @@ fn contains_await(expression: &Expr) -> bool { contains_await(&call.callee) || call.arguments.iter().any(|argument| match argument { CallArgument::Expression(value) => contains_await(value), + CallArgument::Spread(spread) => contains_await(&spread.argument), _ => false, }) } @@ -7348,6 +7354,7 @@ fn contains_await(expression: &Expr) -> bool { contains_await(&new.callee) || new.arguments.iter().any(|argument| match argument { CallArgument::Expression(value) => contains_await(value), + CallArgument::Spread(spread) => contains_await(&spread.argument), _ => false, }) } @@ -7388,6 +7395,10 @@ fn contains_await(expression: &Expr) -> bool { Expression::Parenthesized(inner) => contains_await(inner), Expression::As(cast) => contains_await(&cast.expression), Expression::NonNull(non_null) => contains_await(&non_null.expression), + Expression::Import(import) => { + contains_await(&import.source) + || import.options.as_deref().is_some_and(contains_await) + } _ => true, } } From 02007298f2199e304712d93178c1e003eb479d1c Mon Sep 17 00:00:00 2001 From: "qodo-code-review[bot]" <151058649+qodo-code-review[bot]@users.noreply.github.com> Date: Fri, 4 Sep 2026 21:15:26 +0000 Subject: [PATCH 2/2] fix: Link regression evidence to the G3 root gate --- .../es5-generator-suspension-walker-divergence.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/solutions/logic-errors/es5-generator-suspension-walker-divergence.md b/docs/solutions/logic-errors/es5-generator-suspension-walker-divergence.md index 28c8c99..fe28307 100644 --- a/docs/solutions/logic-errors/es5-generator-suspension-walker-divergence.md +++ b/docs/solutions/logic-errors/es5-generator-suspension-walker-divergence.md @@ -136,4 +136,6 @@ actually mints. - The corpus-level regression gate is the suite pair (`cargo test -p bamts-compiler` + `cargo test -p bamts-verification` with `BAMTS_ALLOW_NODE_COMPAT=1`), never the bare CLI `-p` path (it never - lowers the machine — refusal form only). + lowers the machine — refusal form only). These results are regression + evidence, not closure by themselves: completion requires their + receipt-backed G3 compiler root-gate linkage.