diff options
author | Colin Walters <walters@verbum.org> | 2010-10-26 11:12:26 -0400 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2010-11-12 16:00:10 -0500 |
commit | c8940a11562fd7b888595c6298e39836192fa3d7 (patch) | |
tree | 573d0afbceecc8bd0360e79b11666095470bd8d8 /girepository | |
parent | e876ad4fe073de44fc809400b166d6c4726f08f4 (diff) | |
download | gobject-introspection-c8940a11562fd7b888595c6298e39836192fa3d7.tar.gz |
Add support for gunichar in typelib
Some API such as gtk_text_iter_get_char returns an individual
"gunichar"; we should support this.
https://bugzilla.gnome.org/show_bug.cgi?id=633197
Diffstat (limited to 'girepository')
-rw-r--r-- | girepository/gifieldinfo.c | 2 | ||||
-rw-r--r-- | girepository/girepository.c | 2 | ||||
-rw-r--r-- | girepository/girffi.c | 1 | ||||
-rw-r--r-- | girepository/girnode.c | 2 | ||||
-rw-r--r-- | girepository/girparser.c | 3 | ||||
-rw-r--r-- | girepository/gitypeinfo.h | 2 | ||||
-rw-r--r-- | girepository/gitypelib.c | 4 | ||||
-rw-r--r-- | girepository/gitypes.h | 9 |
8 files changed, 18 insertions, 7 deletions
diff --git a/girepository/gifieldinfo.c b/girepository/gifieldinfo.c index 1a6b688c..d4fd14e2 100644 --- a/girepository/gifieldinfo.c +++ b/girepository/gifieldinfo.c @@ -220,6 +220,7 @@ g_field_info_get_field (GIFieldInfo *field_info, break; case GI_TYPE_TAG_INT32: case GI_TYPE_TAG_UINT32: + case GI_TYPE_TAG_UNICHAR: value->v_uint32 = G_STRUCT_MEMBER (guint32, mem, offset); result = TRUE; break; @@ -399,6 +400,7 @@ g_field_info_set_field (GIFieldInfo *field_info, break; case GI_TYPE_TAG_INT32: case GI_TYPE_TAG_UINT32: + case GI_TYPE_TAG_UNICHAR: G_STRUCT_MEMBER (guint32, mem, offset) = value->v_uint32; result = TRUE; break; diff --git a/girepository/girepository.c b/girepository/girepository.c index 7ac407a1..f7f55e5a 100644 --- a/girepository/girepository.c +++ b/girepository/girepository.c @@ -1408,6 +1408,8 @@ g_type_tag_to_string (GITypeTag type) return "gfloat"; case GI_TYPE_TAG_DOUBLE: return "gdouble"; + case GI_TYPE_TAG_UNICHAR: + return "gunichar"; case GI_TYPE_TAG_GTYPE: return "GType"; case GI_TYPE_TAG_UTF8: diff --git a/girepository/girffi.c b/girepository/girffi.c index c46d3d3c..d2afca0a 100644 --- a/girepository/girffi.c +++ b/girepository/girffi.c @@ -56,6 +56,7 @@ gi_type_tag_get_ffi_type (GITypeTag tag, case GI_TYPE_TAG_INT32: return &ffi_type_sint32; case GI_TYPE_TAG_UINT32: + case GI_TYPE_TAG_UNICHAR: return &ffi_type_uint32; case GI_TYPE_TAG_INT64: return &ffi_type_sint64; diff --git a/girepository/girnode.c b/girepository/girnode.c index 5b9df585..b298c952 100644 --- a/girepository/girnode.c +++ b/girepository/girnode.c @@ -1415,7 +1415,7 @@ g_ir_node_build_typelib (GIrNode *node, *offset += sizeof (SimpleTypeBlob); - if (G_TYPE_TAG_IS_BASIC(type->tag)) + if (G_TYPE_TAG_IS_BASIC (type->tag)) { blob->flags.reserved = 0; blob->flags.reserved2 = 0; diff --git a/girepository/girparser.c b/girepository/girparser.c index 42525ecd..0e31e9f6 100644 --- a/girepository/girparser.c +++ b/girepository/girparser.c @@ -396,6 +396,7 @@ static BasicTypeInfo basic_types[] = { { "GType", GI_TYPE_TAG_GTYPE, 0 }, { "utf8", GI_TYPE_TAG_UTF8, 1 }, { "filename", GI_TYPE_TAG_FILENAME,1 }, + { "gunichar", GI_TYPE_TAG_UNICHAR, 0 }, }; static const BasicTypeInfo * @@ -579,7 +580,7 @@ parse_type_internal (GIrModule *module, if (next) *next = (char*)str; - g_assert (type->tag >= 0 && type->tag <= GI_TYPE_TAG_ERROR); + g_assert (type->tag >= 0 && type->tag < GI_TYPE_TAG_N_TYPES); g_free (temporary_type); return type; diff --git a/girepository/gitypeinfo.h b/girepository/gitypeinfo.h index 39890a7d..5c4fc835 100644 --- a/girepository/gitypeinfo.h +++ b/girepository/gitypeinfo.h @@ -33,7 +33,7 @@ G_BEGIN_DECLS #define GI_IS_TYPE_INFO(info) \ (g_base_info_get_type((GIBaseInfo*)info) == GI_INFO_TYPE_TYPE) -#define G_TYPE_TAG_IS_BASIC(tag) (tag < GI_TYPE_TAG_ARRAY) +#define G_TYPE_TAG_IS_BASIC(tag) (tag < GI_TYPE_TAG_ARRAY || tag == GI_TYPE_TAG_UNICHAR) const gchar* g_type_tag_to_string (GITypeTag type); const gchar* g_info_type_to_string (GIInfoType type); diff --git a/girepository/gitypelib.c b/girepository/gitypelib.c index 4d119b73..e77866aa 100644 --- a/girepository/gitypelib.c +++ b/girepository/gitypelib.c @@ -652,6 +652,7 @@ validate_type_blob (GITypelib *typelib, } if (simple->flags.tag >= GI_TYPE_TAG_UTF8 && + simple->flags.tag != GI_TYPE_TAG_UNICHAR && !simple->flags.pointer) { g_set_error (error, @@ -1010,11 +1011,12 @@ validate_constant_blob (GITypelib *typelib, 0, /* GSLIST */ 0, /* GHASH */ 0, /* ERROR */ + 4 /* UNICHAR */ }; ConstantBlob *blob; SimpleTypeBlob *type; - g_assert (G_N_ELEMENTS (value_size) == GI_TYPE_TAG_ERROR + 1); + g_assert (G_N_ELEMENTS (value_size) == GI_TYPE_TAG_N_TYPES); if (typelib->len < offset + sizeof (ConstantBlob)) { diff --git a/girepository/gitypes.h b/girepository/gitypes.h index a356800c..d15b121a 100644 --- a/girepository/gitypes.h +++ b/girepository/gitypes.h @@ -322,6 +322,7 @@ typedef enum { * @GI_TYPE_TAG_UINT64: 64-bit unsigned integer * @GI_TYPE_TAG_FLOAT: float * @GI_TYPE_TAG_DOUBLE: double floating point + * @GI_TYPE_TAG_UNICHAR: Unicode character * @GI_TYPE_TAG_GTYPE: a #GType * @GI_TYPE_TAG_UTF8: a UTF-8 encoded string * @GI_TYPE_TAG_FILENAME: a filename, encoded in the same encoding @@ -352,18 +353,20 @@ typedef enum { GI_TYPE_TAG_GTYPE = 12, GI_TYPE_TAG_UTF8 = 13, GI_TYPE_TAG_FILENAME = 14, - /* Non-basic types */ + /* Non-basic types; compare with G_TYPE_TAG_IS_BASIC */ GI_TYPE_TAG_ARRAY = 15, GI_TYPE_TAG_INTERFACE = 16, GI_TYPE_TAG_GLIST = 17, GI_TYPE_TAG_GSLIST = 18, GI_TYPE_TAG_GHASH = 19, - GI_TYPE_TAG_ERROR = 20 + GI_TYPE_TAG_ERROR = 20, + /* Another basic type */ + GI_TYPE_TAG_UNICHAR = 21 /* Note - there is only room currently for 32 tags. * See docs/typelib-format.txt SimpleTypeBlob definition */ } GITypeTag; -#define GI_TYPE_TAG_N_TYPES (GI_TYPE_TAG_ERROR+1) +#define GI_TYPE_TAG_N_TYPES (GI_TYPE_TAG_UNICHAR+1) /* These were removed and no longer appear in the typelib; * instead, the machine-specific versions like INT32 are |