diff options
author | Dr. Chat <arkolbed@gmail.com> | 2021-12-29 22:47:33 -0600 |
---|---|---|
committer | Emilio Cobos Álvarez <emilio@crisal.io> | 2022-01-29 11:29:00 +0100 |
commit | acfc9ac95b65542a5172af383bdbb658dcd07187 (patch) | |
tree | 2972b8379aaa2bc15fed154114607ba825921a6d | |
parent | e755ea4a6d9aee386223a027f2d251b836275515 (diff) |
Pass the vtable's base class as the first parameter
-rw-r--r-- | src/codegen/mod.rs | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index 7b72722a..c7801030 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -1050,6 +1050,7 @@ impl<'a> CodeGenerator for Vtable<'a> { assert_eq!(item.id(), self.item_id); debug_assert!(item.is_enabled_for_codegen(ctx)); let name = ctx.rust_ident(&self.canonical_name(ctx)); + let class_ident = ctx.rust_ident(self.item_id.canonical_name(ctx)); // For now, we will only generate vtables for classes that do not inherit from others. if self.base_classes.is_empty() { @@ -1062,10 +1063,6 @@ impl<'a> CodeGenerator for Vtable<'a> { } let function_item = ctx.resolve_item(m.signature()); - if !function_item.process_before_codegen(ctx, result) { - return None; - } - let function = function_item.expect_function(); let signature_item = ctx.resolve_item(function.signature()); let signature = match signature_item.expect_type().kind() { @@ -1082,9 +1079,9 @@ impl<'a> CodeGenerator for Vtable<'a> { let ret = utils::fnsig_return_ty(ctx, signature); args[0] = if m.is_const() { - quote! { &self } + quote! { this: & #class_ident } } else { - quote! { &mut self } + quote! { this: &mut #class_ident } }; Some(quote! { |