]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Add virtual generate_parameter method. Move array and delegate type
authorJürg Billeter <j@bitron.ch>
Fri, 23 Jan 2009 14:20:15 +0000 (14:20 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Fri, 23 Jan 2009 14:20:15 +0000 (14:20 +0000)
2009-01-23  Jürg Billeter  <j@bitron.ch>

* gobject/valaccodearraymodule.vala:
* gobject/valaccodedelegatemodule.vala:
* gobject/valaccodemethodmodule.vala:

Add virtual generate_parameter method. Move array and delegate type
specific parameter generation to corresponding modules.

svn path=/trunk/; revision=2397

ChangeLog
gobject/valaccodearraymodule.vala
gobject/valaccodedelegatemodule.vala
gobject/valaccodemethodmodule.vala

index 762a0ebbba84edeeb7d244c4f7edb986cab6da52..182b0d9b8ac08bc98080b16fe9f4ebc2a80c89ab 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2009-01-23  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valaccodearraymodule.vala:
+       * gobject/valaccodedelegatemodule.vala:
+       * gobject/valaccodemethodmodule.vala:
+
+       Add virtual generate_parameter method. Move array and delegate type
+       specific parameter generation to corresponding modules.
+
 2009-01-20  Jürg Billeter  <j@bitron.ch>
 
        * vapigen/valagirparser.vala:
index f3f2f5154559d9876917038d1b06c50a2db3d7a1..a9c9b799dc0439bdd443d43a2652d95311840171 100644 (file)
@@ -682,4 +682,33 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
 
                assignment.ccodenode = ccall;
        }
+
+       public override void generate_parameter (FormalParameter param, Map<int,CCodeFormalParameter> cparam_map, Map<int,CCodeExpression>? carg_map) {
+               if (!(param.parameter_type is ArrayType)) {
+                       base.generate_parameter (param, cparam_map, carg_map);
+                       return;
+               }
+
+               var array_type = (ArrayType) param.parameter_type;
+
+               cparam_map.set (get_param_pos (param.cparameter_position), (CCodeFormalParameter) param.ccodenode);
+               if (carg_map != null) {
+                       carg_map.set (get_param_pos (param.cparameter_position), new CCodeIdentifier (param.name));
+               }
+
+               if (!param.no_array_length) {
+                       var length_ctype = "int";
+                       if (param.direction != ParameterDirection.IN) {
+                               length_ctype = "int*";
+                       }
+                       
+                       for (int dim = 1; dim <= array_type.rank; dim++) {
+                               var cparam = new CCodeFormalParameter (head.get_array_length_cname (param.name, dim), length_ctype);
+                               cparam_map.set (get_param_pos (param.carray_length_parameter_position + 0.01 * dim), cparam);
+                               if (carg_map != null) {
+                                       carg_map.set (get_param_pos (param.carray_length_parameter_position + 0.01 * dim), new CCodeIdentifier (cparam.name));
+                               }
+                       }
+               }
+       }
 }
index 0a4fac8d1e210d35412e8a77c669edaa7dc094d0..0335479389c8cae3a4ecea908ab35e350d246903 100644 (file)
@@ -380,4 +380,41 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
 
                return wrapper_name;
        }
+
+       public override void generate_parameter (FormalParameter param, Map<int,CCodeFormalParameter> cparam_map, Map<int,CCodeExpression>? carg_map) {
+               if (!(param.parameter_type is DelegateType || param.parameter_type is MethodType)) {
+                       base.generate_parameter (param, cparam_map, carg_map);
+                       return;
+               }
+
+               cparam_map.set (get_param_pos (param.cparameter_position), (CCodeFormalParameter) param.ccodenode);
+               if (carg_map != null) {
+                       carg_map.set (get_param_pos (param.cparameter_position), new CCodeIdentifier (param.name));
+               }
+
+               if (param.parameter_type is DelegateType) {
+                       var deleg_type = (DelegateType) param.parameter_type;
+                       var d = deleg_type.delegate_symbol;
+                       if (d.has_target) {
+                               var cparam = new CCodeFormalParameter (get_delegate_target_cname (param.name), "void*");
+                               cparam_map.set (get_param_pos (param.cdelegate_target_parameter_position), cparam);
+                               if (carg_map != null) {
+                                       carg_map.set (get_param_pos (param.cdelegate_target_parameter_position), new CCodeIdentifier (cparam.name));
+                               }
+                               if (deleg_type.value_owned) {
+                                       cparam = new CCodeFormalParameter (get_delegate_target_destroy_notify_cname (param.name), "GDestroyNotify");
+                                       cparam_map.set (get_param_pos (param.cdelegate_target_parameter_position + 0.01), cparam);
+                                       if (carg_map != null) {
+                                               carg_map.set (get_param_pos (param.cdelegate_target_parameter_position + 0.01), new CCodeIdentifier (cparam.name));
+                                       }
+                               }
+                       }
+               } else if (param.parameter_type is MethodType) {
+                       var cparam = new CCodeFormalParameter (get_delegate_target_cname (param.name), "void*");
+                       cparam_map.set (get_param_pos (param.cdelegate_target_parameter_position), cparam);
+                       if (carg_map != null) {
+                               carg_map.set (get_param_pos (param.cdelegate_target_parameter_position), new CCodeIdentifier (cparam.name));
+                       }
+               }
+       }
 }
index 9f7817ebe46da1041c20a1e1375bb4dbf0e70de2..a0d8603d38a697c1a29fdf5cb8b100ff98c087b3 100644 (file)
@@ -515,6 +515,13 @@ public class Vala.CCodeMethodModule : CCodeStructModule {
                }
        }
 
+       public virtual void generate_parameter (FormalParameter param, Map<int,CCodeFormalParameter> cparam_map, Map<int,CCodeExpression>? carg_map) {
+               cparam_map.set (get_param_pos (param.cparameter_position), (CCodeFormalParameter) param.ccodenode);
+               if (carg_map != null) {
+                       carg_map.set (get_param_pos (param.cparameter_position), new CCodeIdentifier (param.name));
+               }
+       }
+
        public override void generate_cparameters (Method m, DataType creturn_type, bool in_gtypeinstance_creation_method, Map<int,CCodeFormalParameter> cparam_map, CCodeFunction func, CCodeFunctionDeclarator? vdeclarator = null, Map<int,CCodeExpression>? carg_map = null, CCodeFunctionCall? vcall = null, int direction = 3) {
                if (m.parent_symbol is Class && m is CreationMethod) {
                        var cl = (Class) m.parent_symbol;
@@ -588,52 +595,7 @@ public class Vala.CCodeMethodModule : CCodeStructModule {
                                }
                        }
 
-                       if (!param.no_array_length && param.parameter_type is ArrayType) {
-                               var array_type = (ArrayType) param.parameter_type;
-                               
-                               var length_ctype = "int";
-                               if (param.direction != ParameterDirection.IN) {
-                                       length_ctype = "int*";
-                               }
-                               
-                               for (int dim = 1; dim <= array_type.rank; dim++) {
-                                       var cparam = new CCodeFormalParameter (head.get_array_length_cname (param.name, dim), length_ctype);
-                                       cparam_map.set (get_param_pos (param.carray_length_parameter_position + 0.01 * dim), cparam);
-                                       if (carg_map != null) {
-                                               carg_map.set (get_param_pos (param.carray_length_parameter_position + 0.01 * dim), new CCodeIdentifier (cparam.name));
-                                       }
-                               }
-                       }
-
-                       cparam_map.set (get_param_pos (param.cparameter_position), (CCodeFormalParameter) param.ccodenode);
-                       if (carg_map != null) {
-                               carg_map.set (get_param_pos (param.cparameter_position), new CCodeIdentifier (param.name));
-                       }
-
-                       if (param.parameter_type is DelegateType) {
-                               var deleg_type = (DelegateType) param.parameter_type;
-                               var d = deleg_type.delegate_symbol;
-                               if (d.has_target) {
-                                       var cparam = new CCodeFormalParameter (get_delegate_target_cname (param.name), "void*");
-                                       cparam_map.set (get_param_pos (param.cdelegate_target_parameter_position), cparam);
-                                       if (carg_map != null) {
-                                               carg_map.set (get_param_pos (param.cdelegate_target_parameter_position), new CCodeIdentifier (cparam.name));
-                                       }
-                                       if (deleg_type.value_owned) {
-                                               cparam = new CCodeFormalParameter (get_delegate_target_destroy_notify_cname (param.name), "GDestroyNotify");
-                                               cparam_map.set (get_param_pos (param.cdelegate_target_parameter_position + 0.01), cparam);
-                                               if (carg_map != null) {
-                                                       carg_map.set (get_param_pos (param.cdelegate_target_parameter_position + 0.01), new CCodeIdentifier (cparam.name));
-                                               }
-                                       }
-                               }
-                       } else if (param.parameter_type is MethodType) {
-                               var cparam = new CCodeFormalParameter (get_delegate_target_cname (param.name), "void*");
-                               cparam_map.set (get_param_pos (param.cdelegate_target_parameter_position), cparam);
-                               if (carg_map != null) {
-                                       carg_map.set (get_param_pos (param.cdelegate_target_parameter_position), new CCodeIdentifier (cparam.name));
-                               }
-                       }
+                       generate_parameter (param, cparam_map, carg_map);
                }
 
                if ((direction & 2) != 0) {