diff options
-rw-r--r-- | gir/Everything-1.0-expected.gir | 20 | ||||
-rw-r--r-- | gir/everything.c | 10 | ||||
-rw-r--r-- | gir/everything.h | 2 | ||||
-rw-r--r-- | girepository/gfield.c | 8 | ||||
-rw-r--r-- | girepository/ginfo.c | 6 | ||||
-rw-r--r-- | girepository/girepository.c | 4 | ||||
-rw-r--r-- | girepository/girepository.h | 40 | ||||
-rw-r--r-- | girepository/girffi.c | 4 | ||||
-rw-r--r-- | girepository/girnode.c | 8 | ||||
-rw-r--r-- | girepository/girparser.c | 2 | ||||
-rw-r--r-- | girepository/gtypelib.c | 2 | ||||
-rw-r--r-- | giscanner/ast.py | 22 | ||||
-rw-r--r-- | giscanner/glibast.py | 12 |
13 files changed, 107 insertions, 33 deletions
diff --git a/gir/Everything-1.0-expected.gir b/gir/Everything-1.0-expected.gir index e3b352d2..1dacddef 100644 --- a/gir/Everything-1.0-expected.gir +++ b/gir/Everything-1.0-expected.gir @@ -1093,6 +1093,16 @@ call and can be released on return."> </parameter> </parameters> </function> + <function name="test_short" c:identifier="test_short"> + <return-value transfer-ownership="none"> + <type name="short" c:type="gshort"/> + </return-value> + <parameters> + <parameter name="in" transfer-ownership="none"> + <type name="short" c:type="gshort"/> + </parameter> + </parameters> + </function> <function name="test_simple_boxed_a_const_return" c:identifier="test_simple_boxed_a_const_return"> <return-value transfer-ownership="none"> @@ -1252,6 +1262,16 @@ call and can be released on return."> </parameter> </parameters> </function> + <function name="test_ushort" c:identifier="test_ushort"> + <return-value transfer-ownership="none"> + <type name="ushort" c:type="gushort"/> + </return-value> + <parameters> + <parameter name="in" transfer-ownership="none"> + <type name="ushort" c:type="gushort"/> + </parameter> + </parameters> + </function> <function name="test_utf8_const_in" c:identifier="test_utf8_const_in"> <return-value transfer-ownership="none"> <type name="none" c:type="void"/> diff --git a/gir/everything.c b/gir/everything.c index 8b0d0fb0..5e5bed80 100644 --- a/gir/everything.c +++ b/gir/everything.c @@ -47,6 +47,16 @@ guint64 test_uint64 (guint64 in) return in; } +gshort test_short (gshort in) +{ + return in; +} + +gushort test_ushort (gushort in) +{ + return in; +} + gint test_int (gint in) { return in; diff --git a/gir/everything.h b/gir/everything.h index 2bbcf9e9..88f91f26 100644 --- a/gir/everything.h +++ b/gir/everything.h @@ -14,6 +14,8 @@ gint32 test_int32 (gint32 in); guint32 test_uint32 (guint32 in); gint64 test_int64 (gint64 in); guint64 test_uint64 (guint64 in); +gshort test_short (gshort in); +gushort test_ushort (gushort in); gint test_int (gint in); guint test_uint (guint in); glong test_long (glong in); diff --git a/girepository/gfield.c b/girepository/gfield.c index 4515bcf5..2fa98227 100644 --- a/girepository/gfield.c +++ b/girepository/gfield.c @@ -55,6 +55,8 @@ g_field_info_get_field (GIFieldInfo *field_info, break; case GI_TYPE_TAG_INT16: case GI_TYPE_TAG_UINT16: + case GI_TYPE_TAG_SHORT: + case GI_TYPE_TAG_USHORT: value->v_uint16 = G_STRUCT_MEMBER(guint16, mem, offset); result = TRUE; break; @@ -138,6 +140,8 @@ g_field_info_get_field (GIFieldInfo *field_info, break; case GI_TYPE_TAG_INT16: case GI_TYPE_TAG_UINT16: + case GI_TYPE_TAG_SHORT: + case GI_TYPE_TAG_USHORT: value->v_int = (gint)G_STRUCT_MEMBER(guint16, mem, offset); result = TRUE; break; @@ -251,6 +255,8 @@ g_field_info_set_field (GIFieldInfo *field_info, break; case GI_TYPE_TAG_INT16: case GI_TYPE_TAG_UINT16: + case GI_TYPE_TAG_SHORT: + case GI_TYPE_TAG_USHORT: G_STRUCT_MEMBER(guint16, mem, offset) = value->v_uint16; result = TRUE; break; @@ -329,6 +335,8 @@ g_field_info_set_field (GIFieldInfo *field_info, break; case GI_TYPE_TAG_INT16: case GI_TYPE_TAG_UINT16: + case GI_TYPE_TAG_SHORT: + case GI_TYPE_TAG_USHORT: G_STRUCT_MEMBER(guint16, mem, offset) = (guint16)value->v_int; result = TRUE; break; diff --git a/girepository/ginfo.c b/girepository/ginfo.c index d522a565..6fbd464f 100644 --- a/girepository/ginfo.c +++ b/girepository/ginfo.c @@ -2091,6 +2091,12 @@ g_constant_info_get_value (GIConstantInfo *info, case GI_TYPE_TAG_TIME_T: value->v_long = *(long*)&base->typelib->data[blob->offset]; break; + case GI_TYPE_TAG_SHORT: + value->v_short = *(gshort*)&base->typelib->data[blob->offset]; + break; + case GI_TYPE_TAG_USHORT: + value->v_ushort = *(gushort*)&base->typelib->data[blob->offset]; + break; case GI_TYPE_TAG_INT: value->v_int = *(gint*)&base->typelib->data[blob->offset]; break; diff --git a/girepository/girepository.c b/girepository/girepository.c index a2a8504d..3e0d08d8 100644 --- a/girepository/girepository.c +++ b/girepository/girepository.c @@ -1321,6 +1321,10 @@ g_type_tag_to_string (GITypeTag type) return "int64"; case GI_TYPE_TAG_UINT64: return "uint64"; + case GI_TYPE_TAG_SHORT: + return "short"; + case GI_TYPE_TAG_USHORT: + return "ushort"; case GI_TYPE_TAG_INT: return "int"; case GI_TYPE_TAG_UINT: diff --git a/girepository/girepository.h b/girepository/girepository.h index a01c3ec3..559be1ee 100644 --- a/girepository/girepository.h +++ b/girepository/girepository.h @@ -240,6 +240,8 @@ typedef union guint64 v_uint64; gfloat v_float; gdouble v_double; + gshort v_short; + gushort v_ushort; gint v_int; guint v_uint; glong v_long; @@ -329,25 +331,27 @@ typedef enum { GI_TYPE_TAG_UINT32 = 7, GI_TYPE_TAG_INT64 = 8, GI_TYPE_TAG_UINT64 = 9, - GI_TYPE_TAG_INT = 10, - GI_TYPE_TAG_UINT = 11, - GI_TYPE_TAG_LONG = 12, - GI_TYPE_TAG_ULONG = 13, - GI_TYPE_TAG_SSIZE = 14, - GI_TYPE_TAG_SIZE = 15, - GI_TYPE_TAG_FLOAT = 16, - GI_TYPE_TAG_DOUBLE = 17, - GI_TYPE_TAG_TIME_T = 18, - GI_TYPE_TAG_GTYPE = 19, - GI_TYPE_TAG_UTF8 = 20, - GI_TYPE_TAG_FILENAME = 21, + GI_TYPE_TAG_SHORT = 10, + GI_TYPE_TAG_USHORT = 11, + GI_TYPE_TAG_INT = 12, + GI_TYPE_TAG_UINT = 13, + GI_TYPE_TAG_LONG = 14, + GI_TYPE_TAG_ULONG = 15, + GI_TYPE_TAG_SSIZE = 16, + GI_TYPE_TAG_SIZE = 17, + GI_TYPE_TAG_FLOAT = 18, + GI_TYPE_TAG_DOUBLE = 19, + GI_TYPE_TAG_TIME_T = 20, + GI_TYPE_TAG_GTYPE = 21, + GI_TYPE_TAG_UTF8 = 22, + GI_TYPE_TAG_FILENAME = 23, /* Non-basic types */ - GI_TYPE_TAG_ARRAY = 22, - GI_TYPE_TAG_INTERFACE = 23, - GI_TYPE_TAG_GLIST = 24, - GI_TYPE_TAG_GSLIST = 25, - GI_TYPE_TAG_GHASH = 26, - GI_TYPE_TAG_ERROR = 27 + GI_TYPE_TAG_ARRAY = 24, + GI_TYPE_TAG_INTERFACE = 25, + GI_TYPE_TAG_GLIST = 26, + GI_TYPE_TAG_GSLIST = 27, + GI_TYPE_TAG_GHASH = 28, + GI_TYPE_TAG_ERROR = 29 /* Note - there is only room currently for 32 tags. * See docs/typelib-format.txt SimpleTypeBlob definition */ } GITypeTag; diff --git a/girepository/girffi.c b/girepository/girffi.c index 4611a630..a001b7d7 100644 --- a/girepository/girffi.c +++ b/girepository/girffi.c @@ -51,6 +51,10 @@ g_ir_ffi_get_ffi_type (GITypeTag tag) return &ffi_type_sint64; case GI_TYPE_TAG_UINT64: return &ffi_type_uint64; + case GI_TYPE_TAG_SHORT: + return &ffi_type_sshort; + case GI_TYPE_TAG_USHORT: + return &ffi_type_ushort; case GI_TYPE_TAG_INT: return &ffi_type_sint; case GI_TYPE_TAG_UINT: diff --git a/girepository/girnode.c b/girepository/girnode.c index 01e83ace..e4f889a7 100644 --- a/girepository/girnode.c +++ b/girepository/girnode.c @@ -2254,6 +2254,14 @@ g_ir_node_build_typelib (GIrNode *node, blob->size = 8; *(guint64*)&data[blob->offset] = (guint64) parse_uint_value (constant->value); break; + case GI_TYPE_TAG_SHORT: + blob->size = sizeof (gshort); + *(gshort*)&data[blob->offset] = (gshort) parse_int_value (constant->value); + break; + case GI_TYPE_TAG_USHORT: + blob->size = sizeof (gushort); + *(gushort*)&data[blob->offset] = (gushort) parse_uint_value (constant->value); + break; case GI_TYPE_TAG_INT: blob->size = sizeof (gint); *(gint*)&data[blob->offset] = (gint) parse_int_value (constant->value); diff --git a/girepository/girparser.c b/girepository/girparser.c index e5f5e75a..9387d252 100644 --- a/girepository/girparser.c +++ b/girepository/girparser.c @@ -364,6 +364,8 @@ static BasicTypeInfo basic_types[] = { { "uint32", GI_TYPE_TAG_UINT32, 0 }, { "int64", GI_TYPE_TAG_INT64, 0 }, { "uint64", GI_TYPE_TAG_UINT64, 0 }, + { "short", GI_TYPE_TAG_SHORT, 0 }, + { "ushort", GI_TYPE_TAG_USHORT, 0 }, { "int", GI_TYPE_TAG_INT, 0 }, { "uint", GI_TYPE_TAG_UINT, 0 }, { "long", GI_TYPE_TAG_LONG, 0 }, diff --git a/girepository/gtypelib.c b/girepository/gtypelib.c index 64138aa0..4e26f1e4 100644 --- a/girepository/gtypelib.c +++ b/girepository/gtypelib.c @@ -904,6 +904,8 @@ validate_constant_blob (GTypelib *typelib, 4, /* UINT32 */ 8, /* INT64 */ 8, /* UINT64 */ + sizeof (gshort), + sizeof (gushort), sizeof (gint), sizeof (guint), sizeof (glong), diff --git a/giscanner/ast.py b/giscanner/ast.py index 0d1b9f3b..911cc2bc 100644 --- a/giscanner/ast.py +++ b/giscanner/ast.py @@ -36,6 +36,8 @@ TYPE_ANY = 'any' TYPE_BOOLEAN = 'boolean' TYPE_INT8 = 'int8' TYPE_UINT8 = 'uint8' +TYPE_SHORT = 'short' +TYPE_USHORT = 'ushort' TYPE_INT16 = 'int16' TYPE_UINT16 = 'uint16' TYPE_INT = 'int' @@ -57,9 +59,10 @@ TYPE_FILENAME = 'filename' BASIC_GIR_TYPES = [TYPE_BOOLEAN, TYPE_INT8, TYPE_UINT8, TYPE_INT16, TYPE_UINT16, TYPE_INT32, TYPE_UINT32, TYPE_INT64, - TYPE_UINT64, TYPE_INT, TYPE_UINT, TYPE_LONG, - TYPE_ULONG, TYPE_SSIZET, TYPE_SIZET, TYPE_FLOAT, - TYPE_DOUBLE, TYPE_TIMET, TYPE_GTYPE] + TYPE_UINT64, TYPE_SHORT, TYPE_USHORT, TYPE_INT, + TYPE_UINT, TYPE_LONG, TYPE_ULONG, TYPE_SSIZET, + TYPE_SIZET, TYPE_FLOAT, TYPE_DOUBLE, TYPE_TIMET, + TYPE_GTYPE] GIR_TYPES = [TYPE_NONE, TYPE_ANY] GIR_TYPES.extend(BASIC_GIR_TYPES) GIR_TYPES.extend([TYPE_STRING, TYPE_FILENAME]) @@ -91,9 +94,9 @@ for name in GIR_TYPES: type_names['char'] = TYPE_INT8 type_names['signed char'] = TYPE_INT8 type_names['unsigned char'] = TYPE_UINT8 -type_names['short'] = TYPE_INT16 -type_names['signed short'] = TYPE_INT16 -type_names['unsigned short'] = TYPE_UINT16 +type_names['short'] = TYPE_SHORT +type_names['signed short'] = TYPE_SHORT +type_names['unsigned short'] = TYPE_USHORT type_names['int'] = TYPE_INT type_names['signed int'] = TYPE_INT type_names['signed'] = TYPE_INT @@ -120,7 +123,7 @@ type_names['id'] = TYPE_ANY # Suppress some GLib names type_names['uchar'] = TYPE_UINT8 -type_names['ushort'] = TYPE_UINT16 +type_names['ushort'] = TYPE_USHORT type_names['size'] = TYPE_SIZET type_names['ssize'] = TYPE_SSIZET type_names['pointer'] = TYPE_ANY @@ -135,8 +138,9 @@ default_array_types['uint8*'] = TYPE_UINT8 default_array_types['utf8*'] = TYPE_STRING # These types, when seen by reference, are interpreted as out parameters -default_out_types = (TYPE_INT, TYPE_UINT, TYPE_LONG, TYPE_ULONG, - TYPE_FLOAT, TYPE_DOUBLE, TYPE_SIZET, TYPE_SSIZET) +default_out_types = (TYPE_SHORT, TYPE_USHORT, TYPE_INT, TYPE_UINT, + TYPE_LONG, TYPE_ULONG, TYPE_FLOAT, TYPE_DOUBLE, + TYPE_SIZET, TYPE_SSIZET) def type_name_from_ctype(ctype): diff --git a/giscanner/glibast.py b/giscanner/glibast.py index e2a9d5b2..fb1ef208 100644 --- a/giscanner/glibast.py +++ b/giscanner/glibast.py @@ -22,10 +22,10 @@ from .ast import (Bitfield, Class, Enum, Interface, Member, Node, Property, Struct, Union, Record) from .ast import ( type_names, default_array_types, - TYPE_STRING, TYPE_INT8, TYPE_UINT8, TYPE_INT16, TYPE_UINT16, - TYPE_INT, TYPE_UINT, TYPE_UINT32, TYPE_INT32, TYPE_LONG, - TYPE_ULONG, TYPE_INT64, TYPE_UINT64, TYPE_FLOAT, - TYPE_DOUBLE, TYPE_BOOLEAN, TYPE_ANY, TYPE_SSIZET, + TYPE_STRING, TYPE_INT8, TYPE_UINT8, TYPE_SHORT, TYPE_USHORT, + TYPE_INT16, TYPE_UINT16, TYPE_INT, TYPE_UINT, TYPE_UINT32, + TYPE_INT32, TYPE_LONG, TYPE_ULONG, TYPE_INT64, TYPE_UINT64, + TYPE_FLOAT, TYPE_DOUBLE, TYPE_BOOLEAN, TYPE_ANY, TYPE_SSIZET, TYPE_SIZET) @@ -53,8 +53,8 @@ type_names['gsize'] = TYPE_SIZET type_names['gssize'] = TYPE_SSIZET type_names['gchar'] = TYPE_INT8 type_names['guchar'] = TYPE_UINT8 -type_names['gshort'] = TYPE_INT16 -type_names['gushort'] = TYPE_UINT16 +type_names['gshort'] = TYPE_SHORT +type_names['gushort'] = TYPE_USHORT # It's not very nice to duplicate the array types from ast.py, # but a clean fix is hard without essentially hardcoding |