feat: 实现 SequenceExpression + 带标签 break/continue + EmptyStatement

This commit is contained in:
2026-06-23 23:00:20 +08:00
parent 5de79b4253
commit 3ea2353194
11 changed files with 284 additions and 9 deletions
@@ -34,6 +34,12 @@ pub(super) fn hash_expression(expr: &Expression, h: &mut rustc_hash::FxHasher, i
pin.left.name.as_str().hash(h);
hash_expression(&pin.right, h, include_binding_names);
}
Expression::SequenceExpression(seq) => {
(seq.expressions.len() as u32).hash(h);
for e in &seq.expressions {
hash_expression(e, h, include_binding_names);
}
}
Expression::Identifier(ident) => {
if include_binding_names {
ident.name.as_str().hash(h);
+14 -2
View File
@@ -32,8 +32,20 @@ pub(super) fn hash_statement(stmt: &Statement, h: &mut rustc_hash::FxHasher, inc
hash_statement(s, h, include_binding_names);
}
}
Statement::BreakStatement(_) => {}
Statement::ContinueStatement(_) => {}
Statement::BreakStatement(b) => {
if let Some(label) = &b.label {
label.name.as_str().hash(h);
}
}
Statement::ContinueStatement(c) => {
if let Some(label) = &c.label {
label.name.as_str().hash(h);
}
}
Statement::LabeledStatement(ls) => {
ls.label.name.as_str().hash(h);
hash_statement(&ls.body, h, include_binding_names);
}
Statement::DoWhileStatement(dw) => {
hash_statement(&dw.body, h, include_binding_names);
expression::hash_expression(&dw.test, h, include_binding_names);