diff --git a/src/codegen.rs b/src/codegen.rs index cb3b58f..1d3c873 100644 --- a/src/codegen.rs +++ b/src/codegen.rs @@ -374,7 +374,26 @@ impl ToRust for TopLevelKind { cg.add_indentedln("let mut this: Self = unsafe { std::mem::MaybeUninit::::zeroed().assume_init() };"); - cg.add_indentedln("this.construct_class();"); + for field in fields { + if let Some(init) = &field.init { + cg.add_indentedln(&format!( + "this.{} = {};", + field.decl.name, + init.get_rust() + )); + } + } + + cg.add_indentedln(&format!( + "this.construct_class({});", + constructor + .params + .0 + .iter() + .map(|e| e.name.to_string()) + .collect::>() + .join(", ") + )); cg.add_indentedln("this"); diff --git a/test/src/main.mist b/test/src/main.mist index e53f67d..a376c85 100644 --- a/test/src/main.mist +++ b/test/src/main.mist @@ -1,12 +1,12 @@ class MyClass { - String my_item; + String message; - constructor() { - self.my_item = "Hello World!".to_string(); + public constructor(str* name) { + self.message = format!("Hello {}!", name); } } void main() { - var my_class = MyClass::new(); - println!("{}", my_class.my_item); + var my_class = MyClass::new("World"); + println!("{}", my_class.message); }