summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gir/Everything-1.0-expected.gir20
-rw-r--r--gir/everything.c10
-rw-r--r--gir/everything.h2
-rw-r--r--girepository/gfield.c8
-rw-r--r--girepository/ginfo.c6
-rw-r--r--girepository/girepository.c4
-rw-r--r--girepository/girepository.h40
-rw-r--r--girepository/girffi.c4
-rw-r--r--girepository/girnode.c8
-rw-r--r--girepository/girparser.c2
-rw-r--r--girepository/gtypelib.c2
-rw-r--r--giscanner/ast.py22
-rw-r--r--giscanner/glibast.py12
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