Resolve all compile errors.
This commit is contained in:
		
							parent
							
								
									4eb48cc1a2
								
							
						
					
					
						commit
						86331ee9b0
					
				| @ -29,7 +29,7 @@ fn make_build( | |||||||
|     build: &PolymorphicEnumLoopRuleBuild, |     build: &PolymorphicEnumLoopRuleBuild, | ||||||
| ) -> TokenStream { | ) -> TokenStream { | ||||||
|     let rule_ident = format_ident!("{}", build.name()); |     let rule_ident = format_ident!("{}", build.name()); | ||||||
|     let variant_type_ident = format_ident!("{}", build.name()); |     let variant_type_ident = format_ident!("{}", spec.name()); | ||||||
|     let return_type_ident = format_ident!("{}", spec.kind()); |     let return_type_ident = format_ident!("{}", spec.kind()); | ||||||
|     let variant_ident = format_ident!("{}", build.variant()); |     let variant_ident = format_ident!("{}", build.variant()); | ||||||
| 
 | 
 | ||||||
| @ -81,6 +81,12 @@ pub fn make_polymorphic_enum_loop_build_fn(spec: &PolymorphicEnumLoopBuildSpec) | |||||||
|     let pair_ident = format_ident!("{}", make_build_pair(spec.name())); |     let pair_ident = format_ident!("{}", make_build_pair(spec.name())); | ||||||
|     let return_type_ident = format_ident!("{}", spec.kind()); |     let return_type_ident = format_ident!("{}", spec.kind()); | ||||||
| 
 | 
 | ||||||
|  |     let iter_expr = if spec.reverse() { | ||||||
|  |         quote! { #pair_ident.into_inner().rev() } | ||||||
|  |     } else { | ||||||
|  |         quote! { #pair_ident.into_inner() } | ||||||
|  |     }; | ||||||
|  |     
 | ||||||
|     let match_arms = spec |     let match_arms = spec | ||||||
|         .rules() |         .rules() | ||||||
|         .map(|rule| make_match_arm(spec, rule)) |         .map(|rule| make_match_arm(spec, rule)) | ||||||
| @ -89,7 +95,7 @@ pub fn make_polymorphic_enum_loop_build_fn(spec: &PolymorphicEnumLoopBuildSpec) | |||||||
|     quote! { |     quote! { | ||||||
|         fn #build_fn_ident(#pair_ident: Pair<Rule>) -> #return_type_ident { |         fn #build_fn_ident(#pair_ident: Pair<Rule>) -> #return_type_ident { | ||||||
|             let mut result: Option<#return_type_ident> = None; |             let mut result: Option<#return_type_ident> = None; | ||||||
|             for inner_pair in #pair_ident.into_inner() { |             for inner_pair in #iter_expr { | ||||||
|                 match inner_pair.as_rule() { |                 match inner_pair.as_rule() { | ||||||
|                     #(#match_arms,)* |                     #(#match_arms,)* | ||||||
|                     _ => unreachable!() |                     _ => unreachable!() | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| use crate::deserialize::util::{make_build_fn_name, unwrap_single_member_hash}; | use crate::deserialize::util::{get_as_bool, make_build_fn_name, unwrap_single_member_hash}; | ||||||
| use crate::spec::polymorphic_enum_loop_spec::{ | use crate::spec::polymorphic_enum_loop_spec::{ | ||||||
|     PolymorphicEnumLoopBuildSpec, PolymorphicEnumLoopChildUseCurrent, PolymorphicEnumLoopRule, |     PolymorphicEnumLoopBuildSpec, PolymorphicEnumLoopChildUseCurrent, PolymorphicEnumLoopRule, | ||||||
|     PolymorphicEnumLoopRuleBuild, PolymorphicEnumLoopRuleBuildChild, |     PolymorphicEnumLoopRuleBuild, PolymorphicEnumLoopRuleBuildChild, | ||||||
| @ -62,6 +62,8 @@ fn deserialize_rule(rule_name: &str, props: &Yaml) -> PolymorphicEnumLoopRule { | |||||||
| 
 | 
 | ||||||
| pub fn deserialize_polymorphic_enum_loop(name: &str, props: &Yaml) -> PolymorphicEnumLoopBuildSpec { | pub fn deserialize_polymorphic_enum_loop(name: &str, props: &Yaml) -> PolymorphicEnumLoopBuildSpec { | ||||||
|     let kind = props["kind"].as_str().unwrap(); |     let kind = props["kind"].as_str().unwrap(); | ||||||
|  |     let reverse = get_as_bool(&props["reverse"]); | ||||||
|  |     
 | ||||||
|     let rules = props["rules"] |     let rules = props["rules"] | ||||||
|         .as_vec() |         .as_vec() | ||||||
|         .unwrap() |         .unwrap() | ||||||
| @ -73,5 +75,5 @@ pub fn deserialize_polymorphic_enum_loop(name: &str, props: &Yaml) -> Polymorphi | |||||||
|         .map(Box::new) |         .map(Box::new) | ||||||
|         .collect(); |         .collect(); | ||||||
| 
 | 
 | ||||||
|     PolymorphicEnumLoopBuildSpec::new(name, kind, rules) |     PolymorphicEnumLoopBuildSpec::new(name, kind, reverse, rules) | ||||||
| } | } | ||||||
|  | |||||||
| @ -38,7 +38,7 @@ fn deserialize_member_build(child_name: &str, rule: &str, props: &Yaml) -> Membe | |||||||
|         let kind = node_props["kind"].as_str().unwrap_or(rule); |         let kind = node_props["kind"].as_str().unwrap_or(rule); | ||||||
|         let with = node_props["with"] |         let with = node_props["with"] | ||||||
|             .as_str() |             .as_str() | ||||||
|             .map(ToString::to_string) |             .map(|with| make_build_fn_name(with)) | ||||||
|             .unwrap_or_else(|| make_build_fn_name(kind)); |             .unwrap_or_else(|| make_build_fn_name(kind)); | ||||||
| 
 | 
 | ||||||
|         let or_else = if get_as_bool(&node_props["or_else_default"]) { |         let or_else = if get_as_bool(&node_props["or_else_default"]) { | ||||||
|  | |||||||
| @ -1,14 +1,16 @@ | |||||||
| pub struct PolymorphicEnumLoopBuildSpec { | pub struct PolymorphicEnumLoopBuildSpec { | ||||||
|     name: String, |     name: String, | ||||||
|     kind: String, |     kind: String, | ||||||
|  |     reverse: bool, | ||||||
|     rules: Vec<Box<PolymorphicEnumLoopRule>>, |     rules: Vec<Box<PolymorphicEnumLoopRule>>, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl PolymorphicEnumLoopBuildSpec { | impl PolymorphicEnumLoopBuildSpec { | ||||||
|     pub fn new(name: &str, kind: &str, rules: Vec<Box<PolymorphicEnumLoopRule>>) -> Self { |     pub fn new(name: &str, kind: &str, reverse: bool, rules: Vec<Box<PolymorphicEnumLoopRule>>) -> Self { | ||||||
|         Self { |         Self { | ||||||
|             name: name.to_string(), |             name: name.to_string(), | ||||||
|             kind: kind.to_string(), |             kind: kind.to_string(), | ||||||
|  |             reverse, | ||||||
|             rules, |             rules, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -21,6 +23,10 @@ impl PolymorphicEnumLoopBuildSpec { | |||||||
|         &self.kind |         &self.kind | ||||||
|     } |     } | ||||||
|     
 |     
 | ||||||
|  |     pub fn reverse(&self) -> bool { | ||||||
|  |         self.reverse | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     pub fn rules(&self) -> impl Iterator<Item = &PolymorphicEnumLoopRule> { |     pub fn rules(&self) -> impl Iterator<Item = &PolymorphicEnumLoopRule> { | ||||||
|         self.rules.iter().map(Box::as_ref) |         self.rules.iter().map(Box::as_ref) | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -23,8 +23,8 @@ fn make_vec_child_accessors(vec_child: &VecChild) -> TokenStream { | |||||||
|                     self.#child_ident.iter().map(Box::as_ref) |                     self.#child_ident.iter().map(Box::as_ref) | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 pub fn #child_ident_mut(&mut self) -> impl Iterator<Item = &mut child_type_ident> { |                 pub fn #child_ident_mut(&mut self) -> impl Iterator<Item = &mut #child_type_ident> { | ||||||
|                     self.#child_ident.iter().map(Box::as_mut) |                     self.#child_ident.iter_mut().map(Box::as_mut) | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @ -113,7 +113,7 @@ fn make_member_child_type_ident(member_child: &MemberChild) -> TokenStream { | |||||||
|     match member_child.build() { |     match member_child.build() { | ||||||
|         MemberChildBuild::Node(node_member_build) => { |         MemberChildBuild::Node(node_member_build) => { | ||||||
|             let type_ident = format_ident!("{}", node_member_build.kind()); |             let type_ident = format_ident!("{}", node_member_build.kind()); | ||||||
|             quote! { #type_ident } |             quote! { Box<#type_ident> } | ||||||
|         } |         } | ||||||
|         MemberChildBuild::Boolean(_) => { |         MemberChildBuild::Boolean(_) => { | ||||||
|             quote! { bool } |             quote! { bool } | ||||||
| @ -125,9 +125,9 @@ fn make_member_child_annotated_member(member_child: &MemberChild) -> TokenStream | |||||||
|     let child_name_ident = format_ident!("{}", member_child.name()); |     let child_name_ident = format_ident!("{}", member_child.name()); | ||||||
|     let type_ident = make_member_child_type_ident(member_child); |     let type_ident = make_member_child_type_ident(member_child); | ||||||
|     let type_stream = if member_child.optional() { |     let type_stream = if member_child.optional() { | ||||||
|         quote! { Option<Box<#type_ident>> } |         quote! { Option<#type_ident> } | ||||||
|     } else { |     } else { | ||||||
|         quote! { Box<#type_ident> } |         quote! { #type_ident } | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     quote! { |     quote! { | ||||||
|  | |||||||
| @ -342,6 +342,8 @@ $defs: | |||||||
|         properties: |         properties: | ||||||
|           kind: |           kind: | ||||||
|             type: string |             type: string | ||||||
|  |           reverse: | ||||||
|  |             type: boolean | ||||||
|           rules: |           rules: | ||||||
|             type: array |             type: array | ||||||
|             items: |             items: | ||||||
|  | |||||||
| @ -863,6 +863,10 @@ ComparisonRhs: | |||||||
|       - expression: |       - expression: | ||||||
|           member: |           member: | ||||||
|             rule: ShiftExpression |             rule: ShiftExpression | ||||||
|  |             build:  | ||||||
|  |               node:  | ||||||
|  |                 kind: Expression | ||||||
|  |                 with: ShiftExpression | ||||||
| ComparisonOperator: | ComparisonOperator: | ||||||
|   leaf_enum: |   leaf_enum: | ||||||
|     rules: |     rules: | ||||||
| @ -899,6 +903,10 @@ ShiftRhs: | |||||||
|       - expression: |       - expression: | ||||||
|           member: |           member: | ||||||
|             rule: AdditiveExpression |             rule: AdditiveExpression | ||||||
|  |             build:  | ||||||
|  |               node:  | ||||||
|  |                 kind: Expression | ||||||
|  |                 with: AdditiveExpression | ||||||
| ShiftOperator: | ShiftOperator: | ||||||
|   leaf_enum: |   leaf_enum: | ||||||
|     rules: |     rules: | ||||||
| @ -930,6 +938,10 @@ AdditiveRhs: | |||||||
|       - expression: |       - expression: | ||||||
|           member: |           member: | ||||||
|             rule: MultiplicativeExpression |             rule: MultiplicativeExpression | ||||||
|  |             build:  | ||||||
|  |               node:  | ||||||
|  |                 kind: Expression | ||||||
|  |                 with: MultiplicativeExpression | ||||||
| AdditiveOperator: | AdditiveOperator: | ||||||
|   leaf_enum: |   leaf_enum: | ||||||
|     rules: |     rules: | ||||||
| @ -961,6 +973,10 @@ MultiplicativeRhs: | |||||||
|       - expression: |       - expression: | ||||||
|           member: |           member: | ||||||
|             rule: PrefixExpression |             rule: PrefixExpression | ||||||
|  |             build:  | ||||||
|  |               node:  | ||||||
|  |                 kind: Expression | ||||||
|  |                 with: PrefixExpression | ||||||
| MultiplicativeOperator: | MultiplicativeOperator: | ||||||
|   leaf_enum: |   leaf_enum: | ||||||
|     rules: |     rules: | ||||||
| @ -970,17 +986,18 @@ MultiplicativeOperator: | |||||||
| PrefixExpression: | PrefixExpression: | ||||||
|   polymorphic_enum_loop_build: |   polymorphic_enum_loop_build: | ||||||
|     kind: Expression |     kind: Expression | ||||||
|  |     reverse: true | ||||||
|     rules: |     rules: | ||||||
|       - PrefixOperator: |       - PrefixOperator: | ||||||
|           build: |           build: | ||||||
|             variant: Prefix |             variant: Prefix | ||||||
|             children: |             children: | ||||||
|               - operator: |               - operator: | ||||||
|  |                   on_each:  | ||||||
|  |                     rule: PrefixOperator | ||||||
|  |               - expression: | ||||||
|                   use_current:  |                   use_current:  | ||||||
|                     kind: Expression |                     kind: Expression | ||||||
|               - expression: |  | ||||||
|                   on_each: |  | ||||||
|                     rule: SuffixExpression |  | ||||||
|       - SuffixExpression: |       - SuffixExpression: | ||||||
|           pass_through: |           pass_through: | ||||||
|             kind: Expression |             kind: Expression | ||||||
| @ -1008,7 +1025,7 @@ SuffixExpression: | |||||||
|                     kind: Expression |                     kind: Expression | ||||||
|               - operator: |               - operator: | ||||||
|                   on_each: |                   on_each: | ||||||
|                     rule: SuffixExpression |                     rule: SuffixOperator | ||||||
| SuffixOperator: | SuffixOperator: | ||||||
|   tree_enum: |   tree_enum: | ||||||
|     rules: |     rules: | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Jesse Brault
						Jesse Brault