diff --git a/parser/src/ast.rs b/parser/src/ast.rs index 8b29051..b82abc8 100644 --- a/parser/src/ast.rs +++ b/parser/src/ast.rs @@ -3,13 +3,13 @@ use serde::Serialize; #[derive(Debug, Clone, Serialize)] pub struct Identifier(pub String); -#[derive(Debug, Clone, Serialize)] +#[derive(Debug, Clone, Serialize, Default)] pub struct FieldList(pub Vec<(Identifier, Visibility, TypeExpr)>); -#[derive(Debug, Clone, Serialize)] +#[derive(Debug, Clone, Serialize, Default)] pub struct ParamList(pub Vec); -#[derive(Debug, Clone, Serialize)] +#[derive(Debug, Clone, Serialize, Default)] pub struct Block(pub Vec); #[derive(Debug, Clone, Serialize)] @@ -95,7 +95,7 @@ pub enum TopLevelKind { }, } -#[derive(Debug, Clone, Serialize)] +#[derive(Debug, Clone, Serialize, Default)] pub struct Generics(pub Vec<(Identifier, Vec)>); #[derive(Debug, Clone, Serialize)] diff --git a/parser/src/lib.rs b/parser/src/lib.rs index 79886ac..062f0af 100644 --- a/parser/src/lib.rs +++ b/parser/src/lib.rs @@ -260,8 +260,8 @@ impl From> for TopLevelKind { name: Identifier::from(inner.next().unwrap()), generics: consume_rule(&mut inner, Rule::generics) .map(Generics::from) - .unwrap_or(Generics(Vec::new())), - fields: FieldList::from(inner.next().unwrap()), + .unwrap_or_default(), + fields: inner.next().map(FieldList::from).unwrap_or_default(), }, Rule::class_decl => TopLevelKind::ClassDecl { diff --git a/test/src/main.mist b/test/src/main.mist index 6996a76..602dd59 100644 --- a/test/src/main.mist +++ b/test/src/main.mist @@ -2,8 +2,6 @@ mod my_class; use ; use ; -struct Test {} - void main() { var my_class = new MyClass("World"); my_class.greet();