From 578cb6ad1671a0a8f2124aa0fb7196ea718c9906 Mon Sep 17 00:00:00 2001 From: Jeff Date: Fri, 21 Jun 2024 13:56:04 -0400 Subject: [PATCH] Add new function for EnumDeclaration --- .../src/abstract_tree/enum_declaration.rs | 20 +++++++++++-- dust-lang/src/parser/mod.rs | 8 ++--- dust-lang/src/parser/tests.rs | 30 +++++++++---------- 3 files changed, 34 insertions(+), 24 deletions(-) diff --git a/dust-lang/src/abstract_tree/enum_declaration.rs b/dust-lang/src/abstract_tree/enum_declaration.rs index b710b4a..41fe7d9 100644 --- a/dust-lang/src/abstract_tree/enum_declaration.rs +++ b/dust-lang/src/abstract_tree/enum_declaration.rs @@ -10,9 +10,23 @@ use super::{Evaluate, Evaluation, Type, TypeConstructor, WithPosition}; #[derive(Clone, Debug, Eq, PartialEq, PartialOrd, Ord, Serialize, Deserialize)] pub struct EnumDeclaration { - pub name: WithPosition, - pub type_parameters: Option>>, - pub variants: Vec, + name: WithPosition, + type_parameters: Option>>, + variants: Vec, +} + +impl EnumDeclaration { + pub fn new( + name: WithPosition, + type_parameters: Option>>, + variants: Vec, + ) -> Self { + Self { + name, + type_parameters, + variants, + } + } } impl Evaluate for EnumDeclaration { diff --git a/dust-lang/src/parser/mod.rs b/dust-lang/src/parser/mod.rs index 2827a66..2068bab 100644 --- a/dust-lang/src/parser/mod.rs +++ b/dust-lang/src/parser/mod.rs @@ -729,12 +729,8 @@ pub fn parser<'src>( ) .map_with(|((name, type_parameters), variants), state| { Statement::EnumDeclaration( - EnumDeclaration { - name, - type_parameters, - variants, - } - .with_position(state.span()), + EnumDeclaration::new(name, type_parameters, variants) + .with_position(state.span()), ) }); diff --git a/dust-lang/src/parser/tests.rs b/dust-lang/src/parser/tests.rs index 6f4bbd5..da40637 100644 --- a/dust-lang/src/parser/tests.rs +++ b/dust-lang/src/parser/tests.rs @@ -54,10 +54,10 @@ fn enum_declaration() { assert_eq!( parse(&lex("enum MyEnum { X, Y }").unwrap()).unwrap()[0], Statement::EnumDeclaration( - EnumDeclaration { - name: Identifier::new("MyEnum").with_position((5, 11)), - type_parameters: None, - variants: vec![ + EnumDeclaration::new( + Identifier::new("MyEnum").with_position((5, 11)), + None, + vec![ EnumVariant { name: Identifier::new("X").with_position((14, 15)), content: None @@ -67,7 +67,7 @@ fn enum_declaration() { content: None } ], - } + ) .with_position((0, 20)) ) ); @@ -78,10 +78,10 @@ fn enum_with_contents() { assert_eq!( parse(&lex("enum MyEnum { X(str, int), Y(int) }").unwrap()).unwrap()[0], Statement::EnumDeclaration( - EnumDeclaration { - name: Identifier::new("MyEnum").with_position((5, 11)), - type_parameters: None, - variants: vec![ + EnumDeclaration::new( + Identifier::new("MyEnum").with_position((5, 11)), + None, + vec![ EnumVariant { name: Identifier::new("X").with_position((14, 15)), content: Some(vec![ @@ -100,7 +100,7 @@ fn enum_with_contents() { ),]) } ] - } + ) .with_position((0, 35)) ) ); @@ -111,13 +111,13 @@ fn enum_with_type_parameters() { assert_eq!( parse(&lex("enum MyEnum { X(T), Y(U) }").unwrap()).unwrap()[0], Statement::EnumDeclaration( - EnumDeclaration { - name: Identifier::new("MyEnum").with_position((5, 11)), - type_parameters: Some(vec![ + EnumDeclaration::new( + Identifier::new("MyEnum").with_position((5, 11)), + Some(vec![ Identifier::new("T").with_position((13, 14)), Identifier::new("U").with_position((16, 17)) ]), - variants: vec![ + vec![ EnumVariant { name: Identifier::new("X").with_position((21, 22)), content: Some(vec![TypeConstructor::Invokation( @@ -137,7 +137,7 @@ fn enum_with_type_parameters() { )]) }, ] - } + ) .with_position((0, 33)) ) );