diff --git a/crates/parser/src/ast/top_level.rs b/crates/parser/src/ast/top_level.rs index 5e5a13d..1762de9 100644 --- a/crates/parser/src/ast/top_level.rs +++ b/crates/parser/src/ast/top_level.rs @@ -126,6 +126,7 @@ pub struct FieldDecl { pub visibility: Visibility, pub type_: TypeExpr, pub name: Identifier, + // pub tuple_names: Vec, } #[derive(Debug, Clone, Serialize)] diff --git a/crates/parser/src/grammar.pest b/crates/parser/src/grammar.pest index 1f3891d..147aa62 100644 --- a/crates/parser/src/grammar.pest +++ b/crates/parser/src/grammar.pest @@ -240,7 +240,7 @@ param = { } field_list = { - (field ~ ("," ~ field)* ~ ","?)? + (field ~ ";")* } param_list = { @@ -264,7 +264,7 @@ declare_module = { // ====================================================== struct_decl = { - visibility? ~ "struct" ~ identifier ~ generics_decl? ~ "{" ~ field_list? ~ "}" + visibility? ~ "struct" ~ identifier ~ generics_decl? ~ "{" ~ field_list ~ "}" } // ====================================================== @@ -290,7 +290,7 @@ enum_field = _{ } enum_fields = _{ - enum_field ~ ("," ~ enum_field)* ~ ","? + enum_field ~ ";" } enum_decl = { diff --git a/crates/parser/src/parser/items/mod.rs b/crates/parser/src/parser/items/mod.rs index 05064fd..57e8bee 100644 --- a/crates/parser/src/parser/items/mod.rs +++ b/crates/parser/src/parser/items/mod.rs @@ -54,11 +54,7 @@ impl<'a> TryFrom> for TopLevelKind { .transpose() .map(|v| v.unwrap_or_default())?, - fields: inner - .next() - .map(|pair| collect_recovered(pair.into_inner())) - .transpose() - .map(|v| v.unwrap_or_default())?, + fields: collect_recovered(inner.next().unwrap().into_inner())?, }), Rule::class_decl => Ok(TopLevelKind::ClassDecl {