[vala/0.40] codegen: Always include base_struct declaration if available



commit 8b88a93c1919d7dd3b08c79291d0240ba3610e69
Author: Alistair Thomas <astavale yahoo co uk>
Date:   Tue Oct 27 18:23:09 2015 +0000

    codegen: Always include base_struct declaration if available
    
    This fixes inheritance of structs across source files while not using
    a header file.
    
    Fixes https://gitlab.gnome.org/GNOME/vala/issues/464

 codegen/valaccodestructmodule.vala | 35 +++++++++++++++++++----------------
 1 file changed, 19 insertions(+), 16 deletions(-)
---
diff --git a/codegen/valaccodestructmodule.vala b/codegen/valaccodestructmodule.vala
index 620a07e3f..315bdc7ce 100644
--- a/codegen/valaccodestructmodule.vala
+++ b/codegen/valaccodestructmodule.vala
@@ -30,27 +30,30 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
                        return;
                }
 
+               if (st.base_struct != null) {
+                       generate_struct_declaration (st.base_struct, decl_space);
+               }
+
                if (st.is_boolean_type () || st.is_integer_type () || st.is_floating_type ()) {
+                       string typename;
                        // See GTypeModule.visit_struct()
                        if (st.base_struct != null) {
-                               generate_struct_declaration (st.base_struct, decl_space);
-                               decl_space.add_type_declaration (new CCodeTypeDefinition (get_ccode_name 
(st.base_struct), new CCodeVariableDeclarator (get_ccode_name (st))));
+                               typename = get_ccode_name (st.base_struct);
+                       } else if (st.is_boolean_type ()) {
+                               // typedef for boolean types
+                               decl_space.add_include ("stdbool.h");
+                               typename = "bool";
+                       } else if (st.is_integer_type ()) {
+                               // typedef for integral types
+                               decl_space.add_include ("stdint.h");
+                               typename = "%sint%d_t".printf (st.signed ? "" : "u", st.width);
+                       } else if (st.is_floating_type ()) {
+                               // typedef for floating types
+                               typename = (st.width == 64 ? "double" : "float");
                        } else {
-                               string typename = null;
-                               if (st.is_boolean_type ()) {
-                                       // typedef for boolean types
-                                       decl_space.add_include ("stdbool.h");
-                                       typename = "bool";
-                               } else if (st.is_integer_type ()) {
-                                       // typedef for integral types
-                                       decl_space.add_include ("stdint.h");
-                                       typename = "%sint%d_t".printf (st.signed ? "" : "u", st.width);
-                               } else if (st.is_floating_type ()) {
-                                       // typedef for floating types
-                                       typename = (st.width == 64 ? "double" : "float");
-                               }
-                               decl_space.add_type_declaration (new CCodeTypeDefinition (typename, new 
CCodeVariableDeclarator (get_ccode_name (st))));
+                               assert_not_reached ();
                        }
+                       decl_space.add_type_declaration (new CCodeTypeDefinition (typename, new 
CCodeVariableDeclarator (get_ccode_name (st))));
                        return;
                }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]