From 4837d39ab72605f33178c9301a376cfd02b391c7 Mon Sep 17 00:00:00 2001 From: Selimaj Dev Date: Tue, 5 May 2026 20:30:15 +0200 Subject: [PATCH] Class method AST and grammar --- parser/src/ast.rs | 9 +++++++++ parser/src/grammar.pest | 10 ++++++++-- test/src/main.mist | 6 +++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/parser/src/ast.rs b/parser/src/ast.rs index 085a206..c946096 100644 --- a/parser/src/ast.rs +++ b/parser/src/ast.rs @@ -89,6 +89,15 @@ pub struct ClassConstructor { pub body: Block, } +#[derive(Debug, Clone, Serialize)] +pub struct ClassMethod { + export: bool, + name: String, + params: ParamList, + return_type: TypeExpr, + body: Block, +} + #[derive(Debug, Clone, Serialize)] pub enum Postfix { FieldAccess(String), diff --git a/parser/src/grammar.pest b/parser/src/grammar.pest index 0b536c5..d92a46a 100644 --- a/parser/src/grammar.pest +++ b/parser/src/grammar.pest @@ -26,7 +26,13 @@ class_constructor = { class_fields = { var_decl_statement* } -class_methods = { function_decl* } +class_methods = { method* } + +self_param = { "self" ~ mutable? ~ deref_px? } + +method = { + export? ~ type_expr ~ identifier ~ "(" ~ self_param? ~ param_list? ~ ")" ~ block +} class_decl = { "class" ~ identifier ~ "{" ~ class_fields ~ class_constructor ~ class_methods ~ "}" @@ -167,7 +173,7 @@ prefix = { deref_px | mut_ref_px | ref_px -| new_px + | new_px } deref_px = { "*" } diff --git a/test/src/main.mist b/test/src/main.mist index 9296bb1..28009dc 100644 --- a/test/src/main.mist +++ b/test/src/main.mist @@ -4,9 +4,13 @@ class MyClass { public constructor(str* name) { self.message = format!("Hello {}!", name); } + + public void greet(self*) { + println!("{}", self.message); + } } void main() { var my_class = new MyClass("World"); - println!("{}", my_class.message); + my_class.greet(); }