From: Luca Bruno Date: Fri, 20 Aug 2010 07:56:01 +0000 (+0200) Subject: Support abstract/virtual delegate properties with target X-Git-Tag: 0.9.8~29 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=040591b48eb4df3be6e9368609606649ff1d7711;p=thirdparty%2Fvala.git Support abstract/virtual delegate properties with target Fixes bug 623888. --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 0356c540a..c3ac32850 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -1521,6 +1521,8 @@ public class Vala.CCodeBaseModule : CodeGenerator { var len_expr = new CCodeIdentifier (get_array_length_cname ("result", dim)); vcall.add_argument (len_expr); } + } else if ((acc.value_type is DelegateType) && ((DelegateType) acc.value_type).delegate_symbol.has_target) { + vcall.add_argument (new CCodeIdentifier (get_delegate_target_cname ("result"))); } block.add_statement (new CCodeReturnStatement (vcall)); @@ -1537,6 +1539,8 @@ public class Vala.CCodeBaseModule : CodeGenerator { var len_expr = new CCodeIdentifier (get_array_length_cname ("value", dim)); vcall.add_argument (len_expr); } + } else if ((acc.value_type is DelegateType) && ((DelegateType) acc.value_type).delegate_symbol.has_target) { + vcall.add_argument (new CCodeIdentifier (get_delegate_target_cname ("value"))); } block.add_statement (new CCodeExpressionStatement (vcall)); diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala index c989a3923..054fdef76 100644 --- a/codegen/valagtypemodule.vala +++ b/codegen/valagtypemodule.vala @@ -266,6 +266,8 @@ public class Vala.GTypeModule : GErrorModule { for (int dim = 1; dim <= array_type.rank; dim++) { vdeclarator.add_parameter (new CCodeFormalParameter (get_array_length_cname ("result", dim), "int*")); } + } else if ((prop.property_type is DelegateType) && ((DelegateType) prop.property_type).delegate_symbol.has_target) { + vdeclarator.add_parameter (new CCodeFormalParameter (get_delegate_target_cname ("result"), "gpointer*")); } var vdecl = new CCodeDeclaration (creturn_type); @@ -289,6 +291,8 @@ public class Vala.GTypeModule : GErrorModule { for (int dim = 1; dim <= array_type.rank; dim++) { vdeclarator.add_parameter (new CCodeFormalParameter (get_array_length_cname ("value", dim), "int")); } + } else if ((prop.property_type is DelegateType) && ((DelegateType) prop.property_type).delegate_symbol.has_target) { + vdeclarator.add_parameter (new CCodeFormalParameter (get_delegate_target_cname ("value"), "gpointer")); } var vdecl = new CCodeDeclaration ("void");