From 3d264cb8a65747c494be2c3133c2c100f4478d14 Mon Sep 17 00:00:00 2001 From: overlookmotel <557937+overlookmotel@users.noreply.github.com> Date: Sun, 21 Dec 2025 20:54:15 +0000 Subject: [PATCH] fix(ast_tools): visit nested objects to add `__proto__: NodeProto` in raw transfer codegen (#17230) Fix a bug in codegen for ESTree walker, where it didn't visit nested objects when it adds `__proto__: NodeProto` to node objects. This doesn't make any difference now, but fixing it is required for next PR (#17231). --- .../ast_tools/src/generators/raw_transfer.rs | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/tasks/ast_tools/src/generators/raw_transfer.rs b/tasks/ast_tools/src/generators/raw_transfer.rs index f2abaa49da7b2..6546031e12576 100644 --- a/tasks/ast_tools/src/generators/raw_transfer.rs +++ b/tasks/ast_tools/src/generators/raw_transfer.rs @@ -15,7 +15,7 @@ use oxc_ast::{ Expression, LogicalOperator, ObjectExpression, ObjectPropertyKind, Program, PropertyKind, }, }; -use oxc_ast_visit::VisitMut; +use oxc_ast_visit::{VisitMut, walk_mut}; use oxc_span::SPAN; use crate::{ @@ -1410,20 +1410,21 @@ impl<'a> VisitMut<'a> for LocFieldAdder<'a> { false } }); - if !has_range_field { - return; + + if has_range_field { + // Insert `__proto__: NodeProto` as first field + let prop = self.ast.object_property_kind_object_property( + SPAN, + PropertyKind::Init, + self.ast.property_key_static_identifier(SPAN, "__proto__"), + self.ast.expression_identifier(SPAN, "NodeProto"), + false, + false, + false, + ); + obj_expr.properties.insert(0, prop); } - // Insert `__proto__: NodeProto` as first field - let prop = self.ast.object_property_kind_object_property( - SPAN, - PropertyKind::Init, - self.ast.property_key_static_identifier(SPAN, "__proto__"), - self.ast.expression_identifier(SPAN, "NodeProto"), - false, - false, - false, - ); - obj_expr.properties.insert(0, prop); + walk_mut::walk_object_expression(self, obj_expr); } }