From df5d333a07ecc7ba3c74580f19157fe4c59f5dae Mon Sep 17 00:00:00 2001 From: Juerg Billeter Date: Thu, 8 May 2008 20:19:15 +0000 Subject: [PATCH] Support inheritance for type_id, marshaller_type_name, get_value_function, 2008-05-08 Juerg Billeter * vala/valastruct.vala: * gobject/valaccodetypesymbolbinding.vala: Support inheritance for type_id, marshaller_type_name, get_value_function, and set_value_function * vapi/glib-2.0.vapi: Set type_id, marshaller_type_name, get_value_function, and set_value_function for uint32, fixes bug 530603 svn path=/trunk/; revision=1344 --- ChangeLog | 13 +++ gobject/valaccodetypesymbolbinding.vala | 152 ++++++++++++++++---------------- vala/valastruct.vala | 24 +++++ vapi/glib-2.0.vapi | 2 +- 4 files changed, 116 insertions(+), 75 deletions(-) diff --git a/ChangeLog b/ChangeLog index 950fdf4..f9c9ddf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,18 @@ 2008-05-08 Jürg Billeter + * vala/valastruct.vala: + * gobject/valaccodetypesymbolbinding.vala: + + Support inheritance for type_id, marshaller_type_name, + get_value_function, and set_value_function + + * vapi/glib-2.0.vapi: + + Set type_id, marshaller_type_name, get_value_function, and + set_value_function for uint32, fixes bug 530603 + +2008-05-08 Jürg Billeter + * vapi/sdl.vapi: add SDL ActiveState enum, patch by Levi Bard, fixes bug 530429 diff --git a/gobject/valaccodetypesymbolbinding.vala b/gobject/valaccodetypesymbolbinding.vala index 3b0d430..c54342f 100644 --- a/gobject/valaccodetypesymbolbinding.vala +++ b/gobject/valaccodetypesymbolbinding.vala @@ -61,83 +61,87 @@ public abstract class Vala.CCodeTypesymbolBinding : CCodeBinding { } else { cspec.add_argument (new CCodeConstant (prop.type_reference.data_type.get_default_value ())); } - } else if (prop.type_reference.data_type == codegen.int_type.data_type) { - cspec.call = new CCodeIdentifier ("g_param_spec_int"); - cspec.add_argument (new CCodeConstant ("G_MININT")); - cspec.add_argument (new CCodeConstant ("G_MAXINT")); - if (prop.default_expression != null) { - cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); - } else { + } else if (prop.type_reference.data_type is Struct) { + var st = (Struct) prop.type_reference.data_type; + if (st.get_type_id () == "G_TYPE_INT") { + cspec.call = new CCodeIdentifier ("g_param_spec_int"); + cspec.add_argument (new CCodeConstant ("G_MININT")); + cspec.add_argument (new CCodeConstant ("G_MAXINT")); + if (prop.default_expression != null) { + cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); + } else { + cspec.add_argument (new CCodeConstant ("0")); + } + } else if (st.get_type_id () == "G_TYPE_UINT") { + cspec.call = new CCodeIdentifier ("g_param_spec_uint"); cspec.add_argument (new CCodeConstant ("0")); - } - } else if (prop.type_reference.data_type == codegen.uint_type.data_type) { - cspec.call = new CCodeIdentifier ("g_param_spec_uint"); - cspec.add_argument (new CCodeConstant ("0")); - cspec.add_argument (new CCodeConstant ("G_MAXUINT")); - if (prop.default_expression != null) { - cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); - } else { - cspec.add_argument (new CCodeConstant ("0U")); - } - } else if (prop.type_reference.data_type == codegen.long_type.data_type) { - cspec.call = new CCodeIdentifier ("g_param_spec_long"); - cspec.add_argument (new CCodeConstant ("G_MINLONG")); - cspec.add_argument (new CCodeConstant ("G_MAXLONG")); - if (prop.default_expression != null) { - cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); - } else { - cspec.add_argument (new CCodeConstant ("0L")); - } - } else if (prop.type_reference.data_type == codegen.ulong_type.data_type) { - cspec.call = new CCodeIdentifier ("g_param_spec_ulong"); - cspec.add_argument (new CCodeConstant ("0")); - cspec.add_argument (new CCodeConstant ("G_MAXULONG")); - if (prop.default_expression != null) { - cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); - } else { - cspec.add_argument (new CCodeConstant ("0UL")); - } - } else if (prop.type_reference.data_type == codegen.bool_type.data_type) { - cspec.call = new CCodeIdentifier ("g_param_spec_boolean"); - if (prop.default_expression != null) { - cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); - } else { - cspec.add_argument (new CCodeConstant ("FALSE")); - } - } else if (prop.type_reference.data_type == codegen.int8_type.data_type - || prop.type_reference.data_type == codegen.char_type.data_type) { - cspec.call = new CCodeIdentifier ("g_param_spec_char"); - cspec.add_argument (new CCodeConstant ("G_MININT8")); - cspec.add_argument (new CCodeConstant ("G_MAXINT8")); - if (prop.default_expression != null) { - cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); - } else { + cspec.add_argument (new CCodeConstant ("G_MAXUINT")); + if (prop.default_expression != null) { + cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); + } else { + cspec.add_argument (new CCodeConstant ("0U")); + } + } else if (st.get_type_id () == "G_TYPE_LONG") { + cspec.call = new CCodeIdentifier ("g_param_spec_long"); + cspec.add_argument (new CCodeConstant ("G_MINLONG")); + cspec.add_argument (new CCodeConstant ("G_MAXLONG")); + if (prop.default_expression != null) { + cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); + } else { + cspec.add_argument (new CCodeConstant ("0L")); + } + } else if (st.get_type_id () == "G_TYPE_ULONG") { + cspec.call = new CCodeIdentifier ("g_param_spec_ulong"); cspec.add_argument (new CCodeConstant ("0")); - } - } else if (prop.type_reference.data_type == codegen.float_type.data_type) { - cspec.call = new CCodeIdentifier ("g_param_spec_float"); - cspec.add_argument (new CCodeConstant ("-G_MAXFLOAT")); - cspec.add_argument (new CCodeConstant ("G_MAXFLOAT")); - if (prop.default_expression != null) { - cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); - } else { - cspec.add_argument (new CCodeConstant ("0.0F")); - } - } else if (prop.type_reference.data_type == codegen.double_type.data_type) { - cspec.call = new CCodeIdentifier ("g_param_spec_double"); - cspec.add_argument (new CCodeConstant ("-G_MAXDOUBLE")); - cspec.add_argument (new CCodeConstant ("G_MAXDOUBLE")); - if (prop.default_expression != null) { - cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); - } else { - cspec.add_argument (new CCodeConstant ("0.0")); - } - } else if (prop.type_reference.data_type == codegen.gtype_type) { - cspec.call = new CCodeIdentifier ("g_param_spec_gtype"); - if (prop.default_expression != null) { - cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); + cspec.add_argument (new CCodeConstant ("G_MAXULONG")); + if (prop.default_expression != null) { + cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); + } else { + cspec.add_argument (new CCodeConstant ("0UL")); + } + } else if (st.get_type_id () == "G_TYPE_BOOLEAN") { + cspec.call = new CCodeIdentifier ("g_param_spec_boolean"); + if (prop.default_expression != null) { + cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); + } else { + cspec.add_argument (new CCodeConstant ("FALSE")); + } + } else if (st.get_type_id () == "G_TYPE_CHAR") { + cspec.call = new CCodeIdentifier ("g_param_spec_char"); + cspec.add_argument (new CCodeConstant ("G_MININT8")); + cspec.add_argument (new CCodeConstant ("G_MAXINT8")); + if (prop.default_expression != null) { + cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); + } else { + cspec.add_argument (new CCodeConstant ("0")); + } + } else if (st.get_type_id () == "G_TYPE_FLOAT") { + cspec.call = new CCodeIdentifier ("g_param_spec_float"); + cspec.add_argument (new CCodeConstant ("-G_MAXFLOAT")); + cspec.add_argument (new CCodeConstant ("G_MAXFLOAT")); + if (prop.default_expression != null) { + cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); + } else { + cspec.add_argument (new CCodeConstant ("0.0F")); + } + } else if (st.get_type_id () == "G_TYPE_FLOAT") { + cspec.call = new CCodeIdentifier ("g_param_spec_double"); + cspec.add_argument (new CCodeConstant ("-G_MAXDOUBLE")); + cspec.add_argument (new CCodeConstant ("G_MAXDOUBLE")); + if (prop.default_expression != null) { + cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); + } else { + cspec.add_argument (new CCodeConstant ("0.0")); + } + } else if (st.get_type_id () == "G_TYPE_GTYPE") { + cspec.call = new CCodeIdentifier ("g_param_spec_gtype"); + if (prop.default_expression != null) { + cspec.add_argument ((CCodeExpression) prop.default_expression.ccodenode); + } else { + cspec.add_argument (new CCodeConstant ("G_TYPE_NONE")); + } } else { - cspec.add_argument (new CCodeConstant ("G_TYPE_NONE")); + cspec.call = new CCodeIdentifier ("g_param_spec_pointer"); } } else { cspec.call = new CCodeIdentifier ("g_param_spec_pointer"); diff --git a/vala/valastruct.vala b/vala/valastruct.vala index bd97bd0..4928dd2 100644 --- a/vala/valastruct.vala +++ b/vala/valastruct.vala @@ -354,6 +354,12 @@ public class Vala.Struct : Typesymbol { public override string? get_type_id () { if (type_id == null) { + foreach (DataType type in base_types) { + var st = type.data_type as Struct; + if (st != null) { + return st.get_type_id ();; + } + } if (simple_type) { Report.error (source_reference, "The type `%s` doesn't declare a type id".printf (get_full_name ())); } else { @@ -369,6 +375,12 @@ public class Vala.Struct : Typesymbol { public override string? get_marshaller_type_name () { if (marshaller_type_name == null) { + foreach (DataType type in base_types) { + var st = type.data_type as Struct; + if (st != null) { + return st.get_marshaller_type_name (); + } + } if (simple_type) { Report.error (source_reference, "The type `%s` doesn't declare a marshaller type name".printf (get_full_name ())); } else { @@ -384,6 +396,12 @@ public class Vala.Struct : Typesymbol { public override string? get_get_value_function () { if (get_value_function == null) { + foreach (DataType type in base_types) { + var st = type.data_type as Struct; + if (st != null) { + return st.get_get_value_function (); + } + } if (simple_type) { Report.error (source_reference, "The value type `%s` doesn't declare a GValue get function".printf (get_full_name ())); return null; @@ -397,6 +415,12 @@ public class Vala.Struct : Typesymbol { public override string? get_set_value_function () { if (set_value_function == null) { + foreach (DataType type in base_types) { + var st = type.data_type as Struct; + if (st != null) { + return st.get_set_value_function (); + } + } if (simple_type) { Report.error (source_reference, "The value type `%s` doesn't declare a GValue set function".printf (get_full_name ())); return null; diff --git a/vapi/glib-2.0.vapi b/vapi/glib-2.0.vapi index 2fa39e1..3cc4e83 100644 --- a/vapi/glib-2.0.vapi +++ b/vapi/glib-2.0.vapi @@ -259,7 +259,7 @@ public struct int32 { } [SimpleType] -[CCode (cname = "guint32", cheader_filename = "glib.h", default_value = "0U", type_signature = "u")] +[CCode (cname = "guint32", cheader_filename = "glib.h", type_id = "G_TYPE_UINT", marshaller_type_name = "UINT", get_value_function = "g_value_get_uint", set_value_function = "g_value_set_uint", default_value = "0U", type_signature = "u")] [IntegerType (rank = 7)] public struct uint32 { [CCode (cname = "0U")] -- 2.7.4