diff --git a/src/codegen.rs b/src/codegen.rs index 905de44..cb3b58f 100644 --- a/src/codegen.rs +++ b/src/codegen.rs @@ -372,15 +372,28 @@ impl ToRust for TopLevelKind { )); cg.indent += 1; - cg.add_indentedln("let this: Self = unsafe { std::mem::zeroed() };"); + cg.add_indentedln("let mut this: Self = unsafe { std::mem::MaybeUninit::::zeroed().assume_init() };"); - constructor.body.to_rust(cg); + cg.add_indentedln("this.construct_class();"); cg.add_indentedln("this"); cg.indent -= 1; cg.add_indentedln("}\n"); + // Constructor function + cg.add_indentedln(&format!( + "{}fn construct_class(&mut self, {}) {{", + if constructor.export { "pub " } else { "" }, + params_str + )); + cg.indent += 1; + + constructor.body.to_rust(cg); + + cg.indent -= 1; + cg.add_indentedln("}\n"); + cg.indent -= 1; cg.addln("}\n"); } diff --git a/test/src/main.mist b/test/src/main.mist index 87d8396..e53f67d 100644 --- a/test/src/main.mist +++ b/test/src/main.mist @@ -2,10 +2,11 @@ class MyClass { String my_item; constructor() { - + self.my_item = "Hello World!".to_string(); } } void main() { var my_class = MyClass::new(); + println!("{}", my_class.my_item); }