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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -20,6 +22,10 @@ impl PolymorphicEnumLoopBuildSpec {
|
|||||||
pub fn kind(&self) -> &str {
|
pub fn kind(&self) -> &str {
|
||||||
&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:
|
||||||
use_current:
|
on_each:
|
||||||
kind: Expression
|
rule: PrefixOperator
|
||||||
- expression:
|
- expression:
|
||||||
on_each:
|
use_current:
|
||||||
rule: SuffixExpression
|
kind: Expression
|
||||||
- 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