Class method AST and grammar
This commit is contained in:
@@ -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),
|
||||
|
||||
@@ -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 ~ "}"
|
||||
|
||||
+5
-1
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user