Override target testing

This commit is contained in:
2026-06-12 17:19:53 +02:00
parent fab7326357
commit d0716fb735
+14 -1
View File
@@ -232,7 +232,7 @@ impl ClassProcessedData {
} }
fn emit_super_v_tests(&self, cg: &mut RustCodegen) { fn emit_super_v_tests(&self, cg: &mut RustCodegen) {
cg.add_indentedln(&format!("const fn __test_vt() {{")); cg.add_indentedln(&format!("fn __test_vt() {{"));
cg.indent += 1; cg.indent += 1;
for (override_tier, _) in self.override_v_table.iter() { for (override_tier, _) in self.override_v_table.iter() {
@@ -293,6 +293,19 @@ impl ClassProcessedData {
} }
} }
// Deref tests for override targets
if self.inherits.is_some() && !self.override_v_table.is_empty() {
cg.add_indentedln("let this: &Self = &unsafe { std::mem::MaybeUninit::<Self>::zeroed().assume_init() };");
for (override_tier, v) in &self.override_v_table {
if let Some(path) = &override_tier.0 {
cg.add_indentedln(&v.get_comment());
// This forces the compiler to statically verify that &Self can Deref into &Target
cg.add_indentedln(&format!("let _: &{} = this;", path.get_rust()));
}
}
}
cg.indent -= 1; cg.indent -= 1;
cg.add_indentedln("}"); cg.add_indentedln("}");
} }