]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Split out GTypeModule.generate_autoptr_cleanup()
authorRico Tzschichholz <ricotz@ubuntu.com>
Thu, 24 Feb 2022 12:45:18 +0000 (13:45 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Thu, 17 Mar 2022 10:52:20 +0000 (11:52 +0100)
codegen/valagtypemodule.vala

index 270548e7205f4f5a4681ca800866b63489e73e96..1f600afe3fd6992ca3fb0e7328531e87dcd1723f 100644 (file)
@@ -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 ());
                }
        }