diff --git a/crates/oxide_emit/src/module.rs b/crates/oxide_emit/src/module.rs index 94b2dd84..393e8d5c 100644 --- a/crates/oxide_emit/src/module.rs +++ b/crates/oxide_emit/src/module.rs @@ -423,15 +423,13 @@ fn stmt_has_top_level_await(stmt: &Statement) -> bool { Statement::FunctionDeclaration(_) | Statement::ClassDeclaration(_) => false, // `export const/let/var x = await ...` 是顶层 await; // 函数/类声明形态不进入(体是独立异步语义边界,与裸声明臂同口径)。 - Statement::ExportNamedDeclaration(exp) => { - exp.declaration.as_ref().is_some_and(|decl| match decl { - Declaration::VariableDeclaration(vd) => vd - .declarations - .iter() - .any(|d| d.init.as_ref().is_some_and(|i| expr_has_top_level_await(i))), - _ => false, - }) - } + Statement::ExportNamedDeclaration(exp) => exp.declaration.as_ref().is_some_and(|decl| match decl { + Declaration::VariableDeclaration(vd) => vd + .declarations + .iter() + .any(|d| d.init.as_ref().is_some_and(|i| expr_has_top_level_await(i))), + _ => false, + }), // `export default await ...` 是顶层 await;函数/类声明形态不进入(同口径)。 Statement::ExportDefaultDeclaration(exp) => { exp.declaration.as_expression().is_some_and(expr_has_top_level_await) diff --git a/crates/oxide_emit/tests/module_link_tests.rs b/crates/oxide_emit/tests/module_link_tests.rs index 025b591c..9fde5446 100644 --- a/crates/oxide_emit/tests/module_link_tests.rs +++ b/crates/oxide_emit/tests/module_link_tests.rs @@ -579,9 +579,8 @@ fn export_default_await_makes_module_async() { /// 不使模块异步——函数体是独立异步语义边界,不进入游走。 #[test] fn export_named_async_fn_expr_not_tla() { - let (ir, _) = - emit_module("export const f = async () => { await Promise.resolve(1); };", "./entry.js", &[]) - .expect("导出异步函数表达式模块应编译成功"); + let (ir, _) = emit_module("export const f = async () => { await Promise.resolve(1); };", "./entry.js", &[]) + .expect("导出异步函数表达式模块应编译成功"); assert!(!ir.is_async, "异步函数表达式体不得使模块标记异步"); assert_eq!(ir.insts.iter().filter(|i| i.op == OpCode::AWAIT).count(), 0, "主身不得含 AWAIT"); }