summaryrefslogtreecommitdiff
path: root/codegen
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2022-02-24 13:45:18 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2022-02-24 13:45:18 +0100
commit33510fe8fe76a569656de5cc69234c435149da14 (patch)
tree19e6104f0bc289a17b7f857f71910b3dcc4080b4 /codegen
parent181218b09ae45adf6210b3843bbdca6d29262a6f (diff)
downloadvala-33510fe8fe76a569656de5cc69234c435149da14.tar.gz
codegen: Split out GTypeModule.generate_autoptr_cleanup()
Diffstat (limited to 'codegen')
-rw-r--r--codegen/valagtypemodule.vala16
1 files changed, 10 insertions, 6 deletions
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index 270548e72..1f600afe3 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -227,19 +227,23 @@ public class Vala.GTypeModule : GErrorModule {
}
// Custom unref-methods need to be emitted before G_DEFINE_AUTOPTR_CLEANUP_FUNC,
// so we guard against that special case and handle it in generate_method_declaration.
- if (!(base_class.is_compact && is_reference_counting (base_class))
+ generate_autoptr_cleanup (cl, base_class, decl_space);
+ }
+
+ void generate_autoptr_cleanup (ObjectTypeSymbol sym, Class cl, CCodeFile decl_space) {
+ if (!(cl.is_compact && is_reference_counting (cl))
&& (context.header_filename == null|| decl_space.file_type == CCodeFileType.PUBLIC_HEADER
- || (decl_space.file_type == CCodeFileType.INTERNAL_HEADER && base_class.is_internal_symbol()))) {
+ || (decl_space.file_type == CCodeFileType.INTERNAL_HEADER && cl.is_internal_symbol ()))) {
string autoptr_cleanup_func;
- if (is_reference_counting (base_class)) {
- autoptr_cleanup_func = get_ccode_unref_function (base_class);
+ if (is_reference_counting (cl)) {
+ autoptr_cleanup_func = get_ccode_unref_function (cl);
} else {
- autoptr_cleanup_func = get_ccode_free_function (base_class);
+ autoptr_cleanup_func = get_ccode_free_function (cl);
}
if (autoptr_cleanup_func == null || autoptr_cleanup_func == "") {
Report.error (cl.source_reference, "internal error: autoptr_cleanup_func not available");
}
- decl_space.add_type_member_declaration (new CCodeIdentifier ("G_DEFINE_AUTOPTR_CLEANUP_FUNC (%s, %s)".printf (get_ccode_name (cl), autoptr_cleanup_func)));
+ decl_space.add_type_member_declaration (new CCodeIdentifier ("G_DEFINE_AUTOPTR_CLEANUP_FUNC (%s, %s)".printf (get_ccode_name (sym), autoptr_cleanup_func)));
decl_space.add_type_member_declaration (new CCodeNewline ());
}
}