fix: TLA 游走器补 export 声明顶层 await 判定

This commit is contained in:
2026-10-13 18:09:56 +00:00
parent 9e4cfed7f8
commit 9eb30ff1f2
4 changed files with 78 additions and 23 deletions
+17 -1
View File
@@ -421,7 +421,23 @@ fn stmt_has_top_level_await(stmt: &Statement) -> bool {
.any(|d| d.init.as_ref().is_some_and(|i| expr_has_top_level_await(i))),
// 函数/类声明:体不进入(函数体是独立异步语义边界)。
Statement::FunctionDeclaration(_) | Statement::ClassDeclaration(_) => false,
// import/export 与无子表达式的语句(break/continue/debugger/empty)不含顶层 await。
// `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,
})
}
// `export default await ...` 是顶层 await;函数/类声明形态不进入(同口径)。
Statement::ExportDefaultDeclaration(exp) => {
exp.declaration.as_expression().is_some_and(expr_has_top_level_await)
}
// import、`export *`、`export { x }`(无声明)与无子表达式的语句
// (break/continue/debugger/empty)不含顶层 await。
_ => false,
}
}