Fixed deref with generics

This commit is contained in:
2026-06-09 17:50:40 +02:00
parent abda2c4c41
commit b20337b385
2 changed files with 21 additions and 8 deletions
+17 -4
View File
@@ -454,8 +454,16 @@ impl ClassProcessedData {
fn emit_deref_impls(&self, cg: &mut RustCodegen) { fn emit_deref_impls(&self, cg: &mut RustCodegen) {
if let Some(ref inherits) = self.inherits { if let Some(ref inherits) = self.inherits {
cg.add("impl std::ops::Deref for "); let generics_str = self.generics.get_rust();
cg.add(&self.name.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.addln(" {");
cg.indent += 1; cg.indent += 1;
@@ -468,8 +476,13 @@ impl ClassProcessedData {
cg.indent -= 1; cg.indent -= 1;
cg.addln("}"); cg.addln("}");
cg.add("impl std::ops::DerefMut for "); cg.add(&format!(
cg.add(&self.name.get_rust()); "impl{} std::ops::DerefMut for {}{}",
generics_str,
self.name.get_rust(),
generics_expr_str
));
cg.addln(" {"); cg.addln(" {");
cg.indent += 1; cg.indent += 1;
+2 -2
View File
@@ -15,7 +15,7 @@ pub class Animal<T> {
} }
} }
pub class Mammal : Animal<i32> { pub class Mammal<T> : Animal<T> {
constructor() { constructor() {
unsafe { unsafe {
std::ptr::write(&mut super, Super::new()); std::ptr::write(&mut super, Super::new());
@@ -23,7 +23,7 @@ pub class Mammal : Animal<i32> {
} }
} }
pub class Dog : Mammal { pub class Dog : Mammal<i32> {
constructor() { constructor() {
unsafe { unsafe {
std::ptr::write(&mut super, Super::new()); std::ptr::write(&mut super, Super::new());