]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Generate typedefs for boolean, integer, and floating types
authorJürg Billeter <j@bitron.ch>
Fri, 30 Mar 2012 19:32:33 +0000 (21:32 +0200)
committerJürg Billeter <j@bitron.ch>
Fri, 30 Mar 2012 19:32:33 +0000 (21:32 +0200)
codegen/valaccodeattribute.vala
codegen/valaccodestructmodule.vala

index 49900dc61fc19461c539a9c8349c07e662729aef..f22598b761384bdf3a4474bb3ae3d57d9104adfa 100644 (file)
@@ -596,20 +596,6 @@ public class Vala.CCodeAttribute : AttributeCache {
                                }
                        } else if (sym is Signal) {
                                return Symbol.camel_case_to_lower_case (sym.name);
-                       } else if (sym is Struct && !sym.external) {
-                               var st = (Struct) sym;
-                               if (st.is_boolean_type ()) {
-                                       // typedef for boolean types
-                                       return "bool";
-                               } else if (st.is_integer_type ()) {
-                                       // typedef for integral types
-                                       return "%sint%d_t".printf (st.signed ? "" : "u", st.width);
-                               } else if (st.is_floating_type ()) {
-                                       // typedef for floating types
-                                       return st.width == 64 ? "double" : "float";
-                               } else {
-                                       return "%s%s".printf (CCodeBaseModule.get_ccode_prefix (sym.parent_symbol), sym.name);
-                               }
                        } else if (sym is LocalVariable || sym is Parameter) {
                                return sym.name;
                        } else {
index ec258d544de0e0d9d6004e847c180a4b5d1263f5..75b14bdad53ac8586f02fdeee2a86dcd7598299b 100644 (file)
@@ -30,13 +30,26 @@ public abstract class Vala.CCodeStructModule : CCodeBaseModule {
                        return;
                }
 
-               if (st.is_boolean_type ()) {
-                       // typedef for boolean types
-                       decl_space.add_include ("stdbool.h");
-                       return;
-               } else if (st.is_integer_type ()) {
-                       // typedef for integral types
-                       decl_space.add_include ("stdint.h");
+               if (st.is_boolean_type () || st.is_integer_type () || st.is_floating_type ()) {
+                       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))));
+                       } 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))));
+                       }
                        return;
                }