]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Remove fallback in array length handling
authorJürg Billeter <j@bitron.ch>
Sun, 17 Oct 2010 17:16:58 +0000 (19:16 +0200)
committerJürg Billeter <j@bitron.ch>
Sun, 17 Oct 2010 17:16:58 +0000 (19:16 +0200)
codegen/valaccodearraymodule.vala
codegen/valaccodecontrolflowmodule.vala
codegen/valadbusclientmodule.vala
codegen/valadbusservermodule.vala
codegen/valagdbusclientmodule.vala
codegen/valagdbusservermodule.vala

index e57793eea7b852640e68824d716bbbb6d3ad4141..4e938f6c4f95026f2394af2667a77a8c2c5229f9 100644 (file)
@@ -154,31 +154,9 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
                        }
                }
 
-               bool is_out = false;
-
-               if (array_expr is UnaryExpression) {
-                       var unary_expr = (UnaryExpression) array_expr;
-                       if (unary_expr.operator == UnaryOperator.OUT || unary_expr.operator == UnaryOperator.REF) {
-                               is_out = true;
-                       }
-               }
-               
                List<CCodeExpression> size = get_array_sizes (array_expr);
-               if (size != null && size.size >= dim) {
-                       return size[dim - 1];
-               }
-
-               if (!is_out) {
-                       /* allow arrays with unknown length even for value types
-                        * as else it may be impossible to bind some libraries
-                        * users of affected libraries should explicitly set
-                        * the array length as early as possible
-                        * by setting the virtual length field of the array
-                        */
-                       return new CCodeConstant ("-1");
-               } else {
-                       return new CCodeConstant ("NULL");
-               }
+               assert (size != null && size.size >= dim);
+               return size[dim - 1];
        }
 
        public override string get_array_size_cname (string array_cname) {
index 46a4b439718cf42697e27cad1d60e66c13da747e..c94008832fa1517f1e52e8f016b62752aece3ff6 100644 (file)
@@ -371,6 +371,8 @@ public class Vala.CCodeControlFlowModule : CCodeMethodModule {
                        if (requires_destroy (local.variable_type)) {
                                var ma = new MemberAccess.simple (local.name);
                                ma.symbol_reference = local;
+                               ma.value_type = local.variable_type.copy ();
+                               visit_member_access (ma);
                                ccode.add_expression (get_unref_expression (get_variable_cexpression (local.name), local.variable_type, ma));
                        }
                }
index 3e3abe3adc66cc0b71fe62f7c391d5e8f5f693bc..1666a7abd5707c19e95f2fea3be9eef31371a96a 100644 (file)
@@ -1581,6 +1581,8 @@ public class Vala.DBusClientModule : DBusModule {
                                var local = new LocalVariable (owned_type, param.name);
                                var ma = new MemberAccess.simple (param.name);
                                ma.symbol_reference = local;
+                               ma.value_type = owned_type.copy ();
+                               visit_member_access (ma);
                                var stmt = new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (param.name), owned_type, ma));
                                postfragment.append (stmt);
                        }
index edf5e5a794c64c0ef7f4fe185119a4cadf9ac004..9476d510d90d218cb3f8a0c1ea459f685635686c 100644 (file)
@@ -254,6 +254,8 @@ public class Vala.DBusServerModule : DBusClientModule {
                                var local = new LocalVariable (owned_type, param.name);
                                var ma = new MemberAccess.simple (param.name);
                                ma.symbol_reference = local;
+                               ma.value_type = owned_type.copy ();
+                               visit_member_access (ma);
                                var stmt = new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (param.name), owned_type, ma));
                                if (param.direction == ParameterDirection.IN) {
                                        in_postfragment.append (stmt);
@@ -288,6 +290,8 @@ public class Vala.DBusServerModule : DBusClientModule {
                                        var local = new LocalVariable (m.return_type, " result");
                                        var ma = new MemberAccess.simple ("result");
                                        ma.symbol_reference = local;
+                                       ma.value_type = m.return_type.copy ();
+                                       visit_member_access (ma);
                                        out_postfragment.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier ("result"), m.return_type, ma)));
                                }
 
@@ -332,6 +336,8 @@ public class Vala.DBusServerModule : DBusClientModule {
                                        var local = new LocalVariable (m.return_type, " result");
                                        var ma = new MemberAccess.simple ("result");
                                        ma.symbol_reference = local;
+                                       ma.value_type = m.return_type.copy ();
+                                       visit_member_access (ma);
                                        out_postfragment.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier ("result"), m.return_type, ma)));
                                }
                        }
@@ -824,6 +830,8 @@ public class Vala.DBusServerModule : DBusClientModule {
                                var local = new LocalVariable (prop.get_accessor.value_type, " result");
                                var ma = new MemberAccess.simple ("result");
                                ma.symbol_reference = local;
+                               ma.value_type = local.variable_type.copy ();
+                               visit_member_access (ma);
                                postfragment.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier ("result"), prop.get_accessor.value_type, ma)));
                        }
 
@@ -1040,6 +1048,8 @@ public class Vala.DBusServerModule : DBusClientModule {
                                var local = new LocalVariable (prop.get_accessor.value_type, " result");
                                var ma = new MemberAccess.simple ("result");
                                ma.symbol_reference = local;
+                               ma.value_type = local.variable_type.copy ();
+                               visit_member_access (ma);
                                postfragment.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier ("result"), prop.get_accessor.value_type, ma)));
                        }
 
@@ -1217,6 +1227,8 @@ public class Vala.DBusServerModule : DBusClientModule {
                                var local = new LocalVariable (owned_type, "value");
                                var ma = new MemberAccess.simple ("value");
                                ma.symbol_reference = local;
+                               ma.value_type = local.variable_type.copy ();
+                               visit_member_access (ma);
                                prop_block.add_statement (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier ("value"), owned_type, ma)));
                        }
 
index dd35c09f5759c09d0cc2c48588533682276eabcd..223703a9b406aa24ccd837a34e0612e7b4d92454 100644 (file)
@@ -323,6 +323,8 @@ public class Vala.GDBusClientModule : GDBusModule {
                                var local = new LocalVariable (owned_type, param.name);
                                var ma = new MemberAccess.simple (param.name);
                                ma.symbol_reference = local;
+                               ma.value_type = local.variable_type.copy ();
+                               visit_member_access (ma);
                                ccode.add_expression (get_unref_expression (new CCodeIdentifier (param.name), owned_type, ma));
                        }
                }
index bf5fe2c1f2a1d065d69c65029ec83d50dbca6885..28acf7623bc4409e605db502f5c38e5c081bfb3b 100644 (file)
@@ -242,6 +242,8 @@ public class Vala.GDBusServerModule : GDBusClientModule {
                                                var local = new LocalVariable (m.return_type, " result");
                                                var ma = new MemberAccess.simple ("result");
                                                ma.symbol_reference = local;
+                                               ma.value_type = local.variable_type.copy ();
+                                               visit_member_access (ma);
                                                ccode.add_expression (get_unref_expression (new CCodeIdentifier ("result"), m.return_type, ma));
                                        }
                                } else {
@@ -265,6 +267,8 @@ public class Vala.GDBusServerModule : GDBusClientModule {
                                                var local = new LocalVariable (m.return_type, " result");
                                                var ma = new MemberAccess.simple ("result");
                                                ma.symbol_reference = local;
+                                               ma.value_type = local.variable_type.copy ();
+                                               visit_member_access (ma);
                                                ccode.add_expression (get_unref_expression (new CCodeIdentifier ("result"), m.return_type, ma));
                                        }
                                }
@@ -288,6 +292,8 @@ public class Vala.GDBusServerModule : GDBusClientModule {
                                        var local = new LocalVariable (owned_type, param.name);
                                        var ma = new MemberAccess.simple (param.name);
                                        ma.symbol_reference = local;
+                                       ma.value_type = local.variable_type.copy ();
+                                       visit_member_access (ma);
                                        ccode.add_expression (get_unref_expression (new CCodeIdentifier (param.name), owned_type, ma));
                                }
                        }
@@ -436,6 +442,8 @@ public class Vala.GDBusServerModule : GDBusClientModule {
                        var local = new LocalVariable (prop.property_type, " result");
                        var ma = new MemberAccess.simple ("result");
                        ma.symbol_reference = local;
+                       ma.value_type = local.variable_type.copy ();
+                       visit_member_access (ma);
                        ccode.add_expression (get_unref_expression (new CCodeIdentifier ("result"), prop.property_type, ma));
                }
 
@@ -493,6 +501,8 @@ public class Vala.GDBusServerModule : GDBusClientModule {
                        var local = new LocalVariable (owned_type, "value");
                        var ma = new MemberAccess.simple ("value");
                        ma.symbol_reference = local;
+                       ma.value_type = local.variable_type.copy ();
+                       visit_member_access (ma);
                        ccode.add_expression (get_unref_expression (new CCodeIdentifier ("value"), owned_type, ma));
                }