@@ -1030,17 +1030,9 @@ where
1030
1030
let ident = Src :: ident ( & cx[ name] ) ;
1031
1031
let field_handle_expr = |( i, field) : ( usize , & RustField ) | {
1032
1032
if field. refutable {
1033
- quote ! ( _r[ #i] . map( |node| Handle {
1034
- node,
1035
- forest,
1036
- _marker: PhantomData ,
1037
- } ) )
1033
+ quote ! ( Option :: <Handle <' a, ' i, I , _>>:: from_shape_fields( forest, [ fields[ #i] ] ) )
1038
1034
} else {
1039
- quote ! ( Handle {
1040
- node: _r[ #i] . unwrap( ) ,
1041
- forest,
1042
- _marker: PhantomData ,
1043
- } )
1035
+ quote ! ( Handle :: from_shape_fields( forest, [ fields[ #i] ] ) )
1044
1036
}
1045
1037
} ;
1046
1038
@@ -1073,11 +1065,9 @@ where
1073
1065
let variants_expr = variants. iter ( ) . map ( |( & v_name, ( _, variant) ) | {
1074
1066
let variant_ident = Src :: ident ( & cx[ v_name] ) ;
1075
1067
match variant {
1076
- RustVariant :: Newtype ( _) => quote ! ( #ident:: #variant_ident( Handle {
1077
- node: _r[ #max_fields_len] . unwrap( ) ,
1078
- forest,
1079
- _marker: PhantomData ,
1080
- } ) ) ,
1068
+ RustVariant :: Newtype ( _) => quote ! ( #ident:: #variant_ident(
1069
+ Handle :: from_shape_fields( forest, [ fields[ #max_fields_len] ] ) ,
1070
+ ) ) ,
1081
1071
RustVariant :: StructLike ( v_fields) => {
1082
1072
let fields_ident = v_fields. keys ( ) . map ( |& name| Src :: ident ( & cx[ name] ) ) ;
1083
1073
let fields_expr = v_fields. values ( ) . enumerate ( ) . map ( field_handle_expr) ;
@@ -1092,7 +1082,7 @@ where
1092
1082
max_fields_len + 1 ,
1093
1083
quote ! ( { #max_fields_len @ #( #variants_shape) * } ) ,
1094
1084
quote ! (
1095
- match _r [ #max_fields_len] . unwrap( ) . kind {
1085
+ match fields [ #max_fields_len] . unwrap( ) . kind {
1096
1086
#( #variants_kind_src => #variants_expr, ) *
1097
1087
_ => unreachable!( ) ,
1098
1088
}
@@ -1103,7 +1093,7 @@ where
1103
1093
let fields_ident = fields. keys ( ) . map ( |& name| Src :: ident ( & cx[ name] ) ) ;
1104
1094
let fields_expr = fields. values ( ) . enumerate ( ) . map ( field_handle_expr) ;
1105
1095
let marker_field = if fields. is_empty ( ) {
1106
- Some ( quote ! ( _marker: { let _ = forest; PhantomData } , ) )
1096
+ Some ( quote ! ( _marker: { let _ = forest; let [ ] = fields ; PhantomData } , ) )
1107
1097
} else {
1108
1098
None
1109
1099
} ;
@@ -1138,7 +1128,7 @@ where
1138
1128
1139
1129
fn from_shape_fields(
1140
1130
forest: & ' a _forest:: ParseForest <' i, _G, I >,
1141
- _r : Self :: Fields ,
1131
+ fields : Self :: Fields ,
1142
1132
) -> Self {
1143
1133
#from_shape
1144
1134
}
0 commit comments