From 4eb48cc1a2373f7dd658503ce091cc9990fa23a4 Mon Sep 17 00:00:00 2001 From: Jesse Brault Date: Wed, 24 Sep 2025 20:40:17 -0500 Subject: [PATCH] Fixing polymorphic enum loop build fn bug. --- .../polymorphic_enum_loop_build_fn.rs | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/ast-generator/src/build_fn/polymorphic_enum_loop_build_fn.rs b/ast-generator/src/build_fn/polymorphic_enum_loop_build_fn.rs index db6cf5f..1331393 100644 --- a/ast-generator/src/build_fn/polymorphic_enum_loop_build_fn.rs +++ b/ast-generator/src/build_fn/polymorphic_enum_loop_build_fn.rs @@ -1,8 +1,8 @@ use crate::deserialize::util::{make_build_fn_name, make_build_pair}; use crate::spec::polymorphic_enum_loop_spec::{ - PolymorphicEnumLoopBuildSpec, PolymorphicEnumLoopRule, - PolymorphicEnumLoopRuleBuild, PolymorphicEnumLoopRuleBuildChild, - PolymorphicEnumLoopRuleChildOnEach, PolymorphicEnumLoopRulePassThrough, + PolymorphicEnumLoopBuildSpec, PolymorphicEnumLoopRule, PolymorphicEnumLoopRuleBuild, + PolymorphicEnumLoopRuleBuildChild, PolymorphicEnumLoopRuleChildOnEach, + PolymorphicEnumLoopRulePassThrough, }; use proc_macro2::TokenStream; use quote::{format_ident, quote}; @@ -20,7 +20,7 @@ fn make_pass_through(pass_through: &PolymorphicEnumLoopRulePassThrough) -> Token fn make_on_each_child_build(child: &PolymorphicEnumLoopRuleChildOnEach) -> TokenStream { let child_build_fn_ident = format_ident!("{}", make_build_fn_name(child.rule())); quote! { - #child_build_fn_ident(inner_pair) + Box::new(#child_build_fn_ident(inner_pair)) } } @@ -39,21 +39,19 @@ fn make_build( PolymorphicEnumLoopRuleBuildChild::OnEach(_) => true, _ => false, }) - .map(|child| { - match child { - PolymorphicEnumLoopRuleBuildChild::OnEach(on_each) => on_each, - _ => unreachable!(), - } + .map(|child| match child { + PolymorphicEnumLoopRuleBuildChild::OnEach(on_each) => on_each, + _ => unreachable!(), }) .unwrap(); - + let build_on_each_child = make_on_each_child_build(on_each_child); let child_args = build .children() .map(|child| match child { PolymorphicEnumLoopRuleBuildChild::UseCurrent(_) => { - quote! { result.unwrap() } + quote! { Box::new(result.unwrap()) } } PolymorphicEnumLoopRuleBuildChild::OnEach(_) => quote! { on_each_child }, }) @@ -68,7 +66,10 @@ fn make_build( } } -fn make_match_arm(spec: &PolymorphicEnumLoopBuildSpec, rule: &PolymorphicEnumLoopRule) -> TokenStream { +fn make_match_arm( + spec: &PolymorphicEnumLoopBuildSpec, + rule: &PolymorphicEnumLoopRule, +) -> TokenStream { match rule { PolymorphicEnumLoopRule::PassThrough(pass_through) => make_pass_through(pass_through), PolymorphicEnumLoopRule::Build(build) => make_build(spec, build),