From: Juerg Billeter Date: Sat, 23 Feb 2008 17:23:53 +0000 (+0000) Subject: fix D-Bus method calls and signal handlers, fixes bug 516194 X-Git-Tag: VALA_0_1_7~54 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ab855783481e5ea7ba369d35b0581fec87ff6b7a;p=platform%2Fupstream%2Fvala.git fix D-Bus method calls and signal handlers, fixes bug 516194 2008-02-23 Juerg Billeter * vala/valaformalparameter.vala, gobject/valaccodeassignmentbinding.vala, gobject/valaccodegeneratorinvocationexpression.vala: fix D-Bus method calls and signal handlers, fixes bug 516194 svn path=/trunk/; revision=1037 --- diff --git a/ChangeLog b/ChangeLog index dbd0e96..2e95f02 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-02-23 Jürg Billeter + + * vala/valaformalparameter.vala, + gobject/valaccodeassignmentbinding.vala, + gobject/valaccodegeneratorinvocationexpression.vala: fix D-Bus + method calls and signal handlers, fixes bug 516194 + 2008-02-23 Raffaele Sandrini * gobject/valaccodegenerator.vala, vala/valaerrortype.vala: fix diff --git a/gobject/valaccodeassignmentbinding.vala b/gobject/valaccodeassignmentbinding.vala index b2098af..a65a709 100644 --- a/gobject/valaccodeassignmentbinding.vala +++ b/gobject/valaccodeassignmentbinding.vala @@ -196,7 +196,12 @@ public class Vala.CCodeAssignmentBinding : CCodeExpressionBinding { } // third resp. sixth argument: handler - ccall.add_argument (new CCodeCastExpression (new CCodeIdentifier (generate_signal_handler_wrapper (m, sig)), "GCallback")); + if (sig is DBusSignal) { + // signal handler wrappers not used for D-Bus signals + ccall.add_argument (new CCodeCastExpression (new CCodeIdentifier (m.get_cname ()), "GCallback")); + } else { + ccall.add_argument (new CCodeCastExpression (new CCodeIdentifier (generate_signal_handler_wrapper (m, sig)), "GCallback")); + } if (m.instance) { // g_signal_connect_object or g_signal_handlers_disconnect_matched @@ -249,7 +254,7 @@ public class Vala.CCodeAssignmentBinding : CCodeExpressionBinding { first = false; continue; } - sig.add_parameter (param); + sig.add_parameter (param.copy ()); } sig.accept (codegen); diff --git a/gobject/valaccodegeneratorinvocationexpression.vala b/gobject/valaccodegeneratorinvocationexpression.vala index 41050b1..ad7669f 100644 --- a/gobject/valaccodegeneratorinvocationexpression.vala +++ b/gobject/valaccodegeneratorinvocationexpression.vala @@ -169,8 +169,8 @@ public class Vala.CCodeGenerator { cb_fun.block.add_statement (cdecl); cend_call.add_argument (get_dbus_array_type (array_type)); cend_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier (param.name))); - creply_call.add_argument (new CCodeMemberAccess.pointer (new CCodeIdentifier (param.name), "len")); creply_call.add_argument (new CCodeMemberAccess.pointer (new CCodeIdentifier (param.name), "data")); + creply_call.add_argument (new CCodeMemberAccess.pointer (new CCodeIdentifier (param.name), "len")); } else { var cdecl = new CCodeDeclaration (param.type_reference.get_cname ()); cdecl.add_declarator (new CCodeVariableDeclarator (param.name)); @@ -218,7 +218,7 @@ public class Vala.CCodeGenerator { break; } - carg_map.set (get_param_pos (i - 0.1), new CCodeIdentifier (arg.static_type.data_type.get_type_id ())); + carg_map.set (get_param_pos (i - 0.1, true), new CCodeIdentifier (arg.static_type.data_type.get_type_id ())); } CCodeExpression cexpr = (CCodeExpression) arg.ccodenode; @@ -365,7 +365,7 @@ public class Vala.CCodeGenerator { var dbus_attr = dbus_iface.get_attribute ("DBusInterface"); carg_map.set (get_param_pos (-1), new CCodeConstant ("\"%s\"".printf (dbus_attr.get_string ("name")))); } else if (m is DBusMethod) { - carg_map.set (get_param_pos (-1), new CCodeIdentifier ("G_TYPE_INVALID")); + carg_map.set (get_param_pos (-1, true), new CCodeIdentifier ("G_TYPE_INVALID")); } if (expr.can_fail && !(m is DBusMethod)) { diff --git a/vala/valaformalparameter.vala b/vala/valaformalparameter.vala index 758ffab..a023826 100644 --- a/vala/valaformalparameter.vala +++ b/vala/valaformalparameter.vala @@ -148,4 +148,13 @@ public class Vala.FormalParameter : Symbol { } } } + + public FormalParameter copy () { + if (!ellipsis) { + var result = new FormalParameter (name, type_reference, source_reference); + return result; + } else { + return new FormalParameter.with_ellipsis (); + } + } }