]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Do not use C statement nodes in property accessors
authorJürg Billeter <j@bitron.ch>
Sun, 10 Oct 2010 09:33:25 +0000 (11:33 +0200)
committerJürg Billeter <j@bitron.ch>
Sun, 10 Oct 2010 09:36:19 +0000 (11:36 +0200)
codegen/valaccodebasemodule.vala
codegen/valadovaobjectmodule.vala

index 9c07a9da3d560ce7feac1cc7b42e901e2f73ede5..e8d676411ed2a97259ce535b785fda6c12824ef3 100644 (file)
@@ -1397,8 +1397,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
                                function.modifiers |= CCodeModifiers.STATIC;
                        }
 
-                       var block = new CCodeBlock ();
-                       function.block = block;
+                       push_function (function);
 
                        CCodeFunctionCall vcast = null;
                        if (prop.parent_symbol is Interface) {
@@ -1417,7 +1416,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
                                vcall.add_argument (new CCodeIdentifier ("self"));
                                if (returns_real_struct) {
                                        vcall.add_argument (new CCodeIdentifier ("result"));
-                                       block.add_statement (new CCodeExpressionStatement (vcall));
+                                       ccode.add_expression (vcall);
                                } else {
                                        if (acc.value_type is ArrayType) {
                                                var array_type = (ArrayType) acc.value_type;
@@ -1430,7 +1429,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
                                                vcall.add_argument (new CCodeIdentifier (get_delegate_target_cname ("result")));
                                        }
 
-                                       block.add_statement (new CCodeReturnStatement (vcall));
+                                       ccode.add_return (vcall);
                                }
                        } else {
                                var vcall = new CCodeFunctionCall (new CCodeMemberAccess.pointer (vcast, "set_%s".printf (prop.name)));
@@ -1448,9 +1447,11 @@ public class Vala.CCodeBaseModule : CodeGenerator {
                                        vcall.add_argument (new CCodeIdentifier (get_delegate_target_cname ("value")));
                                }
 
-                               block.add_statement (new CCodeExpressionStatement (vcall));
+                               ccode.add_expression (vcall);
                        }
 
+                       pop_function ();
+
                        cfile.add_function (function);
                }
 
index 7a0e7ba9143a327c2804b492851f8194fad45b28..6112c72552489e7fc5858ba7a1f77c9716222e4c 100644 (file)
@@ -1210,22 +1210,23 @@ public class Vala.DovaObjectModule : DovaArrayModule {
                                function.modifiers |= CCodeModifiers.STATIC;
                        }
 
-                       var block = new CCodeBlock ();
-                       function.block = block;
+                       push_function (function);
 
                        var vcast = get_type_private_from_type ((ObjectTypeSymbol) prop.parent_symbol, get_type_from_instance (new CCodeIdentifier ("this")));
 
                        if (acc.readable) {
                                var vcall = new CCodeFunctionCall (new CCodeMemberAccess.pointer (vcast, "get_%s".printf (prop.name)));
                                vcall.add_argument (new CCodeIdentifier ("this"));
-                               block.add_statement (new CCodeReturnStatement (vcall));
+                               ccode.add_return (vcall);
                        } else {
                                var vcall = new CCodeFunctionCall (new CCodeMemberAccess.pointer (vcast, "set_%s".printf (prop.name)));
                                vcall.add_argument (new CCodeIdentifier ("this"));
                                vcall.add_argument (new CCodeIdentifier ("value"));
-                               block.add_statement (new CCodeExpressionStatement (vcall));
+                               ccode.add_expression (vcall);
                        }
 
+                       pop_function ();
+
                        cfile.add_function (function);
 
 
@@ -1239,11 +1240,14 @@ public class Vala.DovaObjectModule : DovaArrayModule {
                        var override_func = new CCodeFunction ("%soverride_%s_%s".printf (prop.parent_symbol.get_lower_case_cprefix (), acc.readable ? "get" : "set", prop.name));
                        override_func.add_parameter (new CCodeFormalParameter ("type", "DovaType *"));
                        override_func.add_parameter (new CCodeFormalParameter ("(*function) %s".printf (param_list), acc.readable ? acc.value_type.get_cname () : "void"));
-                       override_func.block = new CCodeBlock ();
+
+                       push_function (override_func);
 
                        vcast = get_type_private_from_type ((ObjectTypeSymbol) prop.parent_symbol, new CCodeIdentifier ("type"));
 
-                       override_func.block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (vcast, "%s_%s".printf (acc.readable ? "get" : "set", prop.name)), new CCodeIdentifier ("function"))));
+                       ccode.add_expression (new CCodeAssignment (new CCodeMemberAccess.pointer (vcast, "%s_%s".printf (acc.readable ? "get" : "set", prop.name)), new CCodeIdentifier ("function")));
+
+                       pop_function ();
 
                        cfile.add_function (override_func);
                }