From a23531c36e41263c449b53eee81198c568ffbc34 Mon Sep 17 00:00:00 2001 From: Juerg Billeter Date: Sun, 13 Apr 2008 11:52:43 +0000 Subject: [PATCH] implement get_type_id 2008-04-13 Juerg Billeter * vala/valaerrortype.vala: implement get_type_id * gobject/valaccodeassignmentbinding.vala: don't crash when using unsupported parameter types in D-Bus signal handlers Fixes bug 527027 svn path=/trunk/; revision=1200 --- ChangeLog | 9 +++++++++ gobject/valaccodeassignmentbinding.vala | 10 ++++++++++ vala/valaerrortype.vala | 4 ++++ 3 files changed, 23 insertions(+) diff --git a/ChangeLog b/ChangeLog index 1f06741..0c52663 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2008-04-13 Jürg Billeter + * vala/valaerrortype.vala: implement get_type_id + + * gobject/valaccodeassignmentbinding.vala: don't crash when using + unsupported parameter types in D-Bus signal handlers + + Fixes bug 527027 + +2008-04-13 Jürg Billeter + * vala/valaparser.vala: supported declaration-only interfaces 2008-04-13 Jürg Billeter diff --git a/gobject/valaccodeassignmentbinding.vala b/gobject/valaccodeassignmentbinding.vala index 2a4eab6..03bbdd9 100644 --- a/gobject/valaccodeassignmentbinding.vala +++ b/gobject/valaccodeassignmentbinding.vala @@ -281,12 +281,22 @@ public class Vala.CCodeAssignmentBinding : CCodeExpressionBinding { } if (param.type_reference is ArrayType && ((ArrayType) param.type_reference).element_type.data_type != codegen.string_type.data_type) { var array_type = (ArrayType) param.type_reference; + if (array_type.element_type.data_type.get_type_id () == null) { + Report.error (param.source_reference, "unsupported parameter type for D-Bus signals"); + return; + } + var carray_type = new CCodeFunctionCall (new CCodeIdentifier ("dbus_g_type_get_collection")); carray_type.add_argument (new CCodeConstant ("\"GArray\"")); carray_type.add_argument (new CCodeIdentifier (array_type.element_type.data_type.get_type_id ())); register_call.add_argument (carray_type); add_call.add_argument (carray_type); } else { + if (param.type_reference.get_type_id () == null) { + Report.error (param.source_reference, "unsupported parameter type for D-Bus signals"); + return; + } + register_call.add_argument (new CCodeIdentifier (param.type_reference.get_type_id ())); add_call.add_argument (new CCodeIdentifier (param.type_reference.get_type_id ())); } diff --git a/vala/valaerrortype.vala b/vala/valaerrortype.vala index a2cbc47..9d466a4 100644 --- a/vala/valaerrortype.vala +++ b/vala/valaerrortype.vala @@ -98,4 +98,8 @@ public class Vala.ErrorType : ReferenceType { var gerror_symbol = root_symbol.scope.lookup ("GLib").scope.lookup ("Error"); return gerror_symbol.scope.lookup (member_name); } + + public override string? get_type_id () { + return "G_TYPE_POINTER"; + } } -- 2.7.4