diff --git a/crates/oxide_emit/src/closure.rs b/crates/oxide_emit/src/closure.rs index e3e99afd..601f3089 100644 --- a/crates/oxide_emit/src/closure.rs +++ b/crates/oxide_emit/src/closure.rs @@ -426,10 +426,8 @@ impl Emitter { catch_shadow.insert(bi.name.as_str().to_string()); } oxide_parser::BindingPattern::ArrayPattern(ap) => { - for elem in &ap.elements { - if let Some(p) = elem { - self.collect_capture_names_binding_pattern(p, ref_set, shadow, out, catch_shadow); - } + for p in ap.elements.iter().flatten() { + self.collect_capture_names_binding_pattern(p, ref_set, shadow, out, catch_shadow); } if let Some(rest) = &ap.rest { self.collect_capture_names_binding_pattern(&rest.argument, ref_set, shadow, out, catch_shadow); @@ -470,10 +468,8 @@ impl Emitter { self.collect_capture_names_expr(&m.expression, ref_set, shadow, out); } oxide_parser::AssignmentTarget::ArrayAssignmentTarget(a) => { - for elem in &a.elements { - if let Some(e) = elem { - self.collect_capture_names_maybe_default_target(e, ref_set, shadow, out); - } + for e in a.elements.iter().flatten() { + self.collect_capture_names_maybe_default_target(e, ref_set, shadow, out); } if let Some(rest) = &a.rest { self.collect_capture_names_assign_target(&rest.target, ref_set, shadow, out); @@ -528,10 +524,8 @@ impl Emitter { self.collect_capture_names_expr(&m.expression, ref_set, shadow, out); } MaybeDefault::ArrayAssignmentTarget(a) => { - for elem in &a.elements { - if let Some(e) = elem { - self.collect_capture_names_maybe_default_target(e, ref_set, shadow, out); - } + for e in a.elements.iter().flatten() { + self.collect_capture_names_maybe_default_target(e, ref_set, shadow, out); } } MaybeDefault::ObjectAssignmentTarget(o) => { @@ -909,10 +903,8 @@ impl Emitter { match pattern { oxide_parser::BindingPattern::BindingIdentifier(_) => {} oxide_parser::BindingPattern::ArrayPattern(ap) => { - for elem in &ap.elements { - if let Some(p) = elem { - self.collect_captured_binding_pattern(p, own, out); - } + for p in ap.elements.iter().flatten() { + self.collect_captured_binding_pattern(p, own, out); } if let Some(rest) = &ap.rest { self.collect_captured_binding_pattern(&rest.argument, own, out); diff --git a/crates/oxide_emit/src/emit.rs b/crates/oxide_emit/src/emit.rs index 2b023cac..eebe4701 100644 --- a/crates/oxide_emit/src/emit.rs +++ b/crates/oxide_emit/src/emit.rs @@ -704,10 +704,8 @@ impl Emitter { self.collect_pattern_default_exprs(&ap.left, out); } BindingPattern::ArrayPattern(ap) => { - for elem in &ap.elements { - if let Some(p) = elem { - self.collect_pattern_default_exprs(p, out); - } + for p in ap.elements.iter().flatten() { + self.collect_pattern_default_exprs(p, out); } if let Some(rest) = &ap.rest { self.collect_pattern_default_exprs(&rest.argument, out); @@ -822,6 +820,7 @@ impl Emitter { ) } + #[allow(clippy::too_many_arguments)] fn compile_function_body_with_flags<'a>( &self, param_specs: &[ParamSpec<'a>], body_stmts: &[Statement<'a>], parent_ctx: &CompileCtx, is_expression_body: bool, is_arrow: bool, is_generator: bool, is_async: bool, @@ -1069,6 +1068,7 @@ impl Emitter { } /// 参数 prologue:函数作用域 + 参数声明/解构 + 闭包捕获与 upvalue 分析。返回 param_base。 + #[allow(clippy::too_many_arguments)] fn emit_params_prologue<'a>( &self, param_specs: &[ParamSpec<'a>], body_stmts: &[Statement<'a>], parent_ctx: &CompileCtx, ctx: &mut CompileCtx, body_context: FunctionBodyContext, extra_capture_exprs: &[&'a Expression<'a>], diff --git a/crates/oxide_emit/src/module.rs b/crates/oxide_emit/src/module.rs index efd9c994..bceb38e3 100644 --- a/crates/oxide_emit/src/module.rs +++ b/crates/oxide_emit/src/module.rs @@ -200,7 +200,7 @@ impl Emitter { // 自导入:读自身命名空间(依赖即本模块,勿递归)。 ns_reg } else { - if path_stack.iter().any(|p| *p == resolved.path) { + if path_stack.contains(&resolved.path) { return Err(format!("circular module import not supported: {}", resolved.path)); } path_stack.push(resolved.path.clone()); diff --git a/crates/oxide_emit/src/prepass.rs b/crates/oxide_emit/src/prepass.rs index 2b11e8c9..88d4bec9 100644 --- a/crates/oxide_emit/src/prepass.rs +++ b/crates/oxide_emit/src/prepass.rs @@ -537,10 +537,8 @@ impl Emitter { ); } BindingPattern::ArrayPattern(ap) => { - for elem in &ap.elements { - if let Some(e) = elem { - self.predeclare_lexical_pattern(e, is_const, ctx); - } + for e in ap.elements.iter().flatten() { + self.predeclare_lexical_pattern(e, is_const, ctx); } if let Some(rest) = &ap.rest { self.predeclare_lexical_pattern(&rest.argument, is_const, ctx);