Class method AST and grammar
This commit is contained in:
@@ -89,6 +89,15 @@ pub struct ClassConstructor {
|
|||||||
pub body: Block,
|
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)]
|
#[derive(Debug, Clone, Serialize)]
|
||||||
pub enum Postfix {
|
pub enum Postfix {
|
||||||
FieldAccess(String),
|
FieldAccess(String),
|
||||||
|
|||||||
@@ -26,7 +26,13 @@ class_constructor = {
|
|||||||
|
|
||||||
class_fields = { var_decl_statement* }
|
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_decl = {
|
||||||
"class" ~ identifier ~ "{" ~ class_fields ~ class_constructor ~ class_methods ~ "}"
|
"class" ~ identifier ~ "{" ~ class_fields ~ class_constructor ~ class_methods ~ "}"
|
||||||
|
|||||||
+5
-1
@@ -4,9 +4,13 @@ class MyClass {
|
|||||||
public constructor(str* name) {
|
public constructor(str* name) {
|
||||||
self.message = format!("Hello {}!", name);
|
self.message = format!("Hello {}!", name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void greet(self*) {
|
||||||
|
println!("{}", self.message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
var my_class = new MyClass("World");
|
var my_class = new MyClass("World");
|
||||||
println!("{}", my_class.message);
|
my_class.greet();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user