glib/girepository
Philip Withnall 0fd99a9f16 gibaseinfo: Stop building GIBoxedInfo instances
Instead, add a method on `GIRegisteredTypeInfo` which indicates whether
the registered type is a boxed type. This will return true for
`GIStructInfo` and `GIUnionInfo` instances which are boxed (not all
structs and unions are).

This makes `GIBoxedInfo` redundant, and it’ll be dropped in a following
commit.

---

There are several different things which typelibs need to be able to
represent:
 1. Plain old datatype (POD) structs
 2. POD unions
 3. Structs with a copy func and/or free func
 4. Unions with a copy func and/or free func
 5. Structs which are the ‘GType struct’ for an object or interface (i.e.
    the class or instance or interface struct)
 6. Structs with a copy func and free func *and* boxed GType
 7. Unions with a copy func and free func *and* boxed GType
 8. Boxed GTypes which represent something other than a struct or union

So there’s a lot going on here. In commit
e28078c70cbf4a57c7dbd39626f43f9bd2674145, a lot of this was reworked,
and support was added for boxed unions and boxed ‘others’ (the last item
on the list above).

Since then, support for boxed types other than structs seems to have
atrophied a bit, and the whole lot has got a bit confusing.

It was perhaps less confusing when all the `GIBaseInfo` subclasses were
actually aliases of each other, but now they have subtype relationships,
the position of `GIBoxedInfo` in that type hierarchy has become unclear.
How is it related to `GIStructInfo`, `GIUnionInfo` and
`GIRegisteredTypeInfo`?

Since a boxed type is necessarily a `GIRegisteredTypeInfo`, and the
methods of `GIRegisteredTypeInfo` are all written to allow a `GType` to
be optional, so that `GIStructInfo` and `GIUnionInfo` can safely derive
from it and still be used to represent plain old datatypes without
`GType`s, it makes sense to add a method to `GIRegisteredTypeInfo` to
indicate that the registered type is derived from `G_TYPE_BOXED`.

Accordingly, the things above are now represented in libgirepository’s
type system as:
 1. `GIStructInfo` instance, `GIRegisteredTypeInfo` methods return no
    `GType` info
 2. `GIUnionInfo` instance similarly
 3. `GIStructInfo` instance, `GIRegisteredTypeInfo` methods return no
    `GType` info, `gi_struct_info_get_{copy,free}_function_name()` return
    non-`NULL` values
 4. `GIUnionInfo` instance similarly
 5. `GIStructInfo` instance, `GIRegisteredTypeInfo` methods return no
    `GType` info, `gi_struct_info_is_gtype_struct()` returns true
 6. `GIStructInfo` instance, `GIRegisteredTypeInfo` methods return valid
    `GType` information, `gi_registered_type_info_is_boxed()` returns
    true, `gi_struct_info_get_{copy,free}_function_name()` return
    `NULL` values (because the copy/free functions are hidden inside the
    boxed type registration at runtime)
 7. `GIUnionInfo` instance similarly
 8. Not representable, but could be represented in future by re-adding a
    `GIBoxedInfo` type which derives from `GIRegisteredTypeInfo` and is
    used solely for boxed ‘other’ types, *not* boxed structs or unions

Signed-off-by: Philip Withnall <pwithnall@gnome.org>

Fixes: #3245
2024-02-12 13:16:07 +00:00
..
cmph cmph: Fix a typo 2024-02-09 14:44:34 +00:00
compiler Merge branch 'no-override-g-ir-compiler' into 'main' 2024-02-09 20:18:39 +00:00
decompiler gi-decompile-repository: Port to girepository-2.0 2024-02-09 20:40:47 +00:00
inspector gi-inspect-repository: Change --version argument to --typelib-version 2024-02-09 20:41:17 +00:00
introspection girepository: Move GIR generation into girepository and prior to tests 2024-01-30 00:50:40 -06:00
tests gibaseinfo: Stop building GIBoxedInfo instances 2024-02-12 13:16:07 +00:00
gdump.c girrepository: Replace usage of gsize with standard size_t 2024-01-16 18:40:42 +01:00
gi-dump-types.c girepository: Replace tabs with spaces in indentation 2024-01-16 17:30:37 +01:00
giarginfo.c girepository: Rename gi_arg_info_load_type() to gi_arg_info_load_type_info() 2024-02-05 15:13:46 +00:00
giarginfo.h girepository: Rename gi_arg_info_load_type() to gi_arg_info_load_type_info() 2024-02-05 15:13:46 +00:00
gibaseinfo-private.h girepository: Make GIInfoType private 2024-02-08 12:56:02 +00:00
gibaseinfo.c gitypelib: Explicitly convert from GITypelibBlobType to GIInfoType 2024-02-12 13:15:38 +00:00
gibaseinfo.h girepository: Make GIInfoType private 2024-02-08 12:56:02 +00:00
giboxedinfo.c giboxedinfo: Add a tag type for boxed types 2024-01-18 13:15:22 +00:00
giboxedinfo.h girepository: Add type-checking cast macros 2024-01-18 13:15:22 +00:00
gicallableinfo.c girepository: Make GIInfoType private 2024-02-08 12:56:02 +00:00
gicallableinfo.h girepository: Add type-checking cast macros 2024-01-18 13:15:22 +00:00
gicallbackinfo.c gicallbackinfo: Port documentation to gi-docgen and update 2023-12-18 14:14:15 +00:00
gicallbackinfo.h girepository: Add type-checking cast macros 2024-01-18 13:15:22 +00:00
giconstantinfo.c girrepository: Replace usage of gsize with standard size_t 2024-01-16 18:40:42 +01:00
giconstantinfo.h girepository: Add type-checking cast macros 2024-01-18 13:15:22 +00:00
gienuminfo.c gibaseinfo: Rename gi_info_new() to gi_base_info_new() 2024-02-08 10:34:40 +00:00
gienuminfo.h girepository: Add type-checking cast macros 2024-01-18 13:15:22 +00:00
gifieldinfo.c gibaseinfo: Rename gi_info_new() to gi_base_info_new() 2024-02-08 10:34:40 +00:00
gifieldinfo.h girepository: Add type-checking cast macros 2024-01-18 13:15:22 +00:00
giflagsinfo.c gienuminfo: Split out GIFlagsInfo as a derived type 2024-01-18 13:15:22 +00:00
giflagsinfo.h girepository: Add type-checking cast macros 2024-01-18 13:15:22 +00:00
gifunctioninfo.c gibaseinfo: Rename gi_info_new() to gi_base_info_new() 2024-02-08 10:34:40 +00:00
gifunctioninfo.h girepository: Add type-checking cast macros 2024-01-18 13:15:22 +00:00
giinterfaceinfo.c gibaseinfo: Rename gi_info_new() to gi_base_info_new() 2024-02-08 10:34:40 +00:00
giinterfaceinfo.h girepository: Add type-checking cast macros 2024-01-18 13:15:22 +00:00
ginvoke.c girrepository: Use standard int sized types instead of g[u]int* 2024-01-16 18:40:42 +01:00
giobjectinfo.c gibaseinfo: Rename gi_info_new() to gi_base_info_new() 2024-02-08 10:34:40 +00:00
giobjectinfo.h girepository: Fix declaration of ‘find using interfaces’ methods 2024-02-05 18:40:03 +00:00
gipropertyinfo.c gipropertyinfo: Port documentation to gi-docgen and update 2023-12-18 14:14:15 +00:00
gipropertyinfo.h girepository: Add type-checking cast macros 2024-01-18 13:15:22 +00:00
giregisteredtypeinfo.c gibaseinfo: Stop building GIBoxedInfo instances 2024-02-12 13:16:07 +00:00
giregisteredtypeinfo.h gibaseinfo: Stop building GIBoxedInfo instances 2024-02-12 13:16:07 +00:00
girepository-private.h girepository: Make GIInfoType private 2024-02-08 12:56:02 +00:00
girepository.c gitypelib: Explicitly convert from GITypelibBlobType to GIInfoType 2024-02-12 13:15:38 +00:00
girepository.h girepository: Add length ‘out’ arguments to several getter methods 2024-02-07 15:47:13 +00:00
girffi.c girepository: Make GIInfoType private 2024-02-08 12:56:02 +00:00
girffi.h girepository: Make GIInfoType private 2024-02-08 12:56:02 +00:00
girmodule-private.h girepository: Various indentation cleanups 2024-01-16 18:56:57 +01:00
girmodule.c Merge branch 'typelib-bytes' into 'main' 2024-01-26 10:15:49 +00:00
girnode-private.h girnode: Improve int types in GIIrNodeUnion 2024-01-26 09:29:30 +00:00
girnode.c girepository: Make GIInfoType private 2024-02-08 12:56:02 +00:00
giroffsets.c girnode: Improve int types in GIIrNodeField 2024-01-26 09:29:30 +00:00
girparser-private.h girepository: Use char instead of glib-specific gchar 2024-01-16 18:40:42 +01:00
girparser.c girnode: Improve int types in GIIrNodeUnion 2024-01-26 09:29:30 +00:00
girwriter-private.h girepository: Rename symbols to the GI namespace 2023-11-08 15:05:20 +00:00
girwriter.c gibaseinfo: Stop building GIBoxedInfo instances 2024-02-12 13:16:07 +00:00
gisignalinfo.c gisignalinfo: Port documentation to gi-docgen and update 2023-12-18 14:14:16 +00:00
gisignalinfo.h girepository: Add type-checking cast macros 2024-01-18 13:15:22 +00:00
gistructinfo.c gibaseinfo: Rename gi_info_new() to gi_base_info_new() 2024-02-08 10:34:40 +00:00
gistructinfo.h girepository: Add type-checking cast macros 2024-01-18 13:15:22 +00:00
gitypeinfo.c girepository: Make GIInfoType private 2024-02-08 12:56:02 +00:00
gitypeinfo.h girepository: Make GIInfoType private 2024-02-08 12:56:02 +00:00
gitypelib-internal.h gitypelib: Explicitly convert from GITypelibBlobType to GIInfoType 2024-02-12 13:15:38 +00:00
gitypelib.c gibaseinfo: Stop building GIBoxedInfo instances 2024-02-12 13:16:07 +00:00
gitypelib.h gitypelib: Add boxed type 2024-02-07 21:07:18 +00:00
gitypes.h girepository: Make GIInfoType private 2024-02-08 12:56:02 +00:00
giunioninfo.c Merge branch 'gi-info-new' into 'main' 2024-02-08 10:34:40 +00:00
giunioninfo.h giunioninfo: Split success and return value for get_discriminator_offset() 2024-02-06 13:34:17 +00:00
giunresolvedinfo.c giunresolvedinfo: Port documentation to gi-docgen and update 2023-12-18 14:14:16 +00:00
giunresolvedinfo.h girepository: Add type-checking cast macros 2024-01-18 13:15:22 +00:00
givalueinfo.c girepository: Split GIValueInfo out of gienuminfo.c 2024-01-18 13:15:22 +00:00
givalueinfo.h girepository: Add type-checking cast macros 2024-01-18 13:15:22 +00:00
givfuncinfo.c gibaseinfo: Rename gi_info_new() to gi_base_info_new() 2024-02-08 10:34:40 +00:00
givfuncinfo.h girepository: Add type-checking cast macros 2024-01-18 13:15:22 +00:00
gthash.c girrepository: Use standard int sized types instead of g[u]int* 2024-01-16 18:40:42 +01:00
meson.build girepository: Rename g-ir-generate and g-ir-inspect 2024-02-09 20:40:17 +00:00