From b20337b385747a2a45a94037e583619898c6c637 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Tue, 9 Jun 2026 17:50:40 +0200 Subject: [PATCH] Fixed deref with generics --- crates/codegen/src/class_decl.rs | 25 +++++++++++++++++++------ mist-test/src/items/class_test.mist | 4 ++-- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/crates/codegen/src/class_decl.rs b/crates/codegen/src/class_decl.rs index 176baed..2aaa082 100644 --- a/crates/codegen/src/class_decl.rs +++ b/crates/codegen/src/class_decl.rs @@ -454,8 +454,16 @@ impl ClassProcessedData { fn emit_deref_impls(&self, cg: &mut RustCodegen) { if let Some(ref inherits) = self.inherits { - cg.add("impl std::ops::Deref for "); - cg.add(&self.name.get_rust()); + let generics_str = self.generics.get_rust(); + let generics_expr_str = Generics::from(self.generics.clone()).get_rust(); + + cg.add(&format!( + "impl{} std::ops::Deref for {}{}", + generics_str, + self.name.get_rust(), + generics_expr_str + )); + cg.addln(" {"); cg.indent += 1; @@ -463,17 +471,22 @@ impl ClassProcessedData { cg.add(&inherits.get_rust()); cg.addln(";"); - cg.add_indentedln("fn deref(&self) -> &Self::Target {&self._super}"); + cg.add_indentedln("fn deref(&self) -> &Self::Target { &self._super }"); cg.indent -= 1; cg.addln("}"); - cg.add("impl std::ops::DerefMut for "); - cg.add(&self.name.get_rust()); + cg.add(&format!( + "impl{} std::ops::DerefMut for {}{}", + generics_str, + self.name.get_rust(), + generics_expr_str + )); + cg.addln(" {"); cg.indent += 1; - cg.add_indentedln("fn deref_mut(&mut self) -> &mut Self::Target {&mut self._super}"); + cg.add_indentedln("fn deref_mut(&mut self) -> &mut Self::Target { &mut self._super }"); cg.indent -= 1; cg.addln("}"); diff --git a/mist-test/src/items/class_test.mist b/mist-test/src/items/class_test.mist index 076571d..3174f54 100644 --- a/mist-test/src/items/class_test.mist +++ b/mist-test/src/items/class_test.mist @@ -15,7 +15,7 @@ pub class Animal { } } -pub class Mammal : Animal { +pub class Mammal : Animal { constructor() { unsafe { std::ptr::write(&mut super, Super::new()); @@ -23,7 +23,7 @@ pub class Mammal : Animal { } } -pub class Dog : Mammal { +pub class Dog : Mammal { constructor() { unsafe { std::ptr::write(&mut super, Super::new());