summaryrefslogtreecommitdiff
path: root/docs/gir-1.2.rnc
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2022-07-13 12:45:57 +0100
committerEmmanuele Bassi <ebassi@gmail.com>2023-01-08 21:48:45 +0000
commit8d44bd13940649a708c8a2186cd3ba58ce6fc503 (patch)
tree390c0457dc2939502a7c7a1e15e8b933fc1145d7 /docs/gir-1.2.rnc
parent9ffbdd3738b02a0220c8d9156babf20e0c5ff7d4 (diff)
downloadgobject-introspection-8d44bd13940649a708c8a2186cd3ba58ce6fc503.tar.gz
Split disguised attribute into two
The disguised attribute started off as a way to indicate a typedef to a structure pointer, e.g. typedef struct Foo* FooPtr; Over the years, though, it started to include opaque structure types, e.g. typedef struct _FooObject FooObject; typedef struct _FooObjectClass FooObjectClass; This has led to issues in language bindings, code generators, and documentation generators, which now have issues when dealing with both pointer aliases and opaque types. An initial attempt at fixing this mess in commit f606183a ended up breaking Vala, and had to be reverted. To avoid breaking existing users we can follow a similar approach to the allow-none/nullable/optional solution: 1. introduce a new pair of attributes: "pointer" and "opaque" 2. deprecate the "disguised" attribute The "pointer" attribute covers the case of pointer types. The "opaque" attribute covers the case of opaque structured types. See also: https://gitlab.gnome.org/GNOME/vala/-/issues/735 Fixes: #101
Diffstat (limited to 'docs/gir-1.2.rnc')
-rw-r--r--docs/gir-1.2.rnc11
1 files changed, 9 insertions, 2 deletions
diff --git a/docs/gir-1.2.rnc b/docs/gir-1.2.rnc
index b7960ffa..a1db5279 100644
--- a/docs/gir-1.2.rnc
+++ b/docs/gir-1.2.rnc
@@ -215,9 +215,16 @@ grammar {
attribute name { xsd:string },
## Corresponding C type of the record
attribute c:type { xsd:string }?,
- ## Binary attribute to tell if the record is disguised, i.e. whether the c:type is a typedef that doesn't look like a pointer, but is one internally
- ## Its second meaning is "private" and is set when any typedef struct is parsed which doesn't also include a full struct with fields (https://gitlab.gnome.org/GNOME/gobject-introspection/issues/101)
+ ## Deprecated. Binary attribute to tell if the record is disguised, i.e. whether the c:type
+ ## is a typedef that doesn't look like a pointer, but is one internally. Its second meaning
+ ## is "private" and is set when any typedef struct is parsed which doesn't also include a
+ ## full struct with fields (https://gitlab.gnome.org/GNOME/gobject-introspection/issues/101)
+ ## Replaced by "opaque" and "pointer".
attribute disguised { "0" | "1" }?,
+ ## Binary attribute for a typedef struct that does not have a corresponding public structure definition
+ attribute opaque { "0" | "1" }?,
+ ## Binary attribute for a typedef struct pointer, e.g. typedef struct Foo* FooPtr
+ attribute pointer { "0" | "1" }?,
## GObject compatible C type of the record
attribute glib:type-name { xsd:string }?,
## Function to get the GObject compatible type of the record