]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Add CCodeStructModule
authorJürg Billeter <j@bitron.ch>
Fri, 24 Oct 2008 14:54:03 +0000 (14:54 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Fri, 24 Oct 2008 14:54:03 +0000 (14:54 +0000)
2008-10-24  Jürg Billeter  <j@bitron.ch>

* gobject/Makefile.am:
* gobject/valaccodegenerator.vala:
* gobject/valaccodemodule.vala:
* gobject/valaccodestructmodule.vala:

Add CCodeStructModule

svn path=/trunk/; revision=1899

ChangeLog
gobject/Makefile.am
gobject/valaccodegenerator.vala
gobject/valaccodemodule.vala
gobject/valaccodestructmodule.vala [moved from gobject/valaccodegeneratorstruct.vala with 63% similarity]

index f038875ba972fb62ca01ea29062c6ad990ce4de3..1157bd6374af49832980e8289f7b5d68866c4745 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-10-24  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/Makefile.am:
+       * gobject/valaccodegenerator.vala:
+       * gobject/valaccodemodule.vala:
+       * gobject/valaccodestructmodule.vala:
+
+       Add CCodeStructModule
+
 2008-10-24  Jürg Billeter  <j@bitron.ch>
 
        * gobject/Makefile.am:
index c9b47e3b2c129dcf6e3d9b189d8f5ebe176fad4f..993fe6406e7372a6e25de2f831252cf2e2f21eef 100644 (file)
@@ -21,11 +21,11 @@ libvala_la_VALASOURCES = \
        valaccodeelementaccessmodule.vala \
        valaccodegenerator.vala \
        valaccodegeneratorsourcefile.vala \
-       valaccodegeneratorstruct.vala \
        valaccodeinvocationexpressionmodule.vala \
        valaccodememberaccessmodule.vala \
        valaccodemethodmodule.vala \
        valaccodemodule.vala \
+       valaccodestructmodule.vala \
        valaclassregisterfunction.vala \
        valadbusmodule.vala \
        valagirwriter.vala \
index ba24cec4181da756197751036b4531d18de6f61e..4da2c249d63cc3c0d7bd34d2970747654eb8747a 100644 (file)
@@ -142,6 +142,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
 
        public CCodeGenerator () {
                head = new CCodeBaseModule (this, head);
+               head = new CCodeStructModule (this, head);
                head = new CCodeMethodModule (this, head);
                head = new CCodeMemberAccessModule (this, head);
                head = new CCodeElementAccessModule (this, head);
@@ -308,6 +309,10 @@ public class Vala.CCodeGenerator : CodeGenerator {
                head.visit_interface (iface);
        }
 
+       public override void visit_struct (Struct st) {
+               head.visit_struct (st);
+       }
+
        public override void visit_enum (Enum en) {
                cenum = new CCodeEnum (en.get_cname ());
 
index 50845ebacffd584246862854b34196e047e2e45d..613b64d281c120c64e6307ceaebdecc06c8161b6 100644 (file)
@@ -60,6 +60,10 @@ public abstract class Vala.CCodeModule {
                next.visit_interface (iface);
        }
 
+       public virtual void visit_struct (Struct st) {
+               next.visit_struct (st);
+       }
+
        public virtual void visit_method (Method m) {
                next.visit_method (m);
        }
similarity index 63%
rename from gobject/valaccodegeneratorstruct.vala
rename to gobject/valaccodestructmodule.vala
index 8fd89a4c3f0176865c1733902544cf02861e3c66..7615a76caf147d4ac54fa098eb9fb75328b1591d 100644 (file)
@@ -1,4 +1,4 @@
-/* valaccodegeneratorstruct.vala
+/* valaccodestructmodule.vala
  *
  * Copyright (C) 2006-2008  Jürg Billeter, Raffaele Sandrini
  *
 
 using GLib;
 
-public class Vala.CCodeGenerator {
+public class Vala.CCodeStructModule : CCodeModule {
+       public CCodeStructModule (CCodeGenerator codegen, CCodeModule? next) {
+               base (codegen, next);
+       }
+
        public override void visit_struct (Struct st) {
-               var old_type_symbol = current_type_symbol;
-               var old_instance_struct = instance_struct;
-               var old_instance_finalize_fragment = instance_finalize_fragment;
-               current_type_symbol = st;
-               instance_struct = new CCodeStruct ("_%s".printf (st.get_cname ()));
-               instance_finalize_fragment = new CCodeFragment ();
+               var old_type_symbol = codegen.current_type_symbol;
+               var old_instance_struct = codegen.instance_struct;
+               var old_instance_finalize_fragment = codegen.instance_finalize_fragment;
+               codegen.current_type_symbol = st;
+               codegen.instance_struct = new CCodeStruct ("_%s".printf (st.get_cname ()));
+               codegen.instance_finalize_fragment = new CCodeFragment ();
 
                CCodeFragment decl_frag;
                CCodeFragment def_frag;
                if (st.access != SymbolAccessibility.PRIVATE) {
-                       decl_frag = header_type_declaration;
-                       def_frag = header_type_definition;
+                       decl_frag = codegen.header_type_declaration;
+                       def_frag = codegen.header_type_definition;
                } else {
-                       decl_frag = source_type_declaration;
-                       def_frag = source_type_definition;
+                       decl_frag = codegen.source_type_declaration;
+                       def_frag = codegen.source_type_definition;
                }
 
                if (st.source_reference.file.cycle == null) {
@@ -49,18 +53,18 @@ public class Vala.CCodeGenerator {
                if (st.source_reference.comment != null) {
                        def_frag.append (new CCodeComment (st.source_reference.comment));
                }
-               def_frag.append (instance_struct);
+               def_frag.append (codegen.instance_struct);
 
-               st.accept_children (this);
+               st.accept_children (codegen);
 
                if (st.is_disposable ()) {
                        add_struct_copy_function (st);
                        add_struct_destroy_function (st);
                }
 
-               current_type_symbol = old_type_symbol;
-               instance_struct = old_instance_struct;
-               instance_finalize_fragment = old_instance_finalize_fragment;
+               codegen.current_type_symbol = old_type_symbol;
+               codegen.instance_struct = old_instance_struct;
+               codegen.instance_finalize_fragment = old_instance_finalize_fragment;
        }
 
        void add_struct_copy_function (Struct st) {
@@ -73,16 +77,16 @@ public class Vala.CCodeGenerator {
                function.add_parameter (new CCodeFormalParameter ("dest", st.get_cname () + "*"));
 
                if (st.access != SymbolAccessibility.PRIVATE) {
-                       header_type_member_declaration.append (function.copy ());
+                       codegen.header_type_member_declaration.append (function.copy ());
                } else {
-                       source_type_member_declaration.append (function.copy ());
+                       codegen.source_type_member_declaration.append (function.copy ());
                }
 
                var cblock = new CCodeBlock ();
 
                function.block = cblock;
 
-               source_type_member_definition.append (function);
+               codegen.source_type_member_definition.append (function);
        }
 
        void add_struct_destroy_function (Struct st) {
@@ -94,18 +98,18 @@ public class Vala.CCodeGenerator {
                function.add_parameter (new CCodeFormalParameter ("self", st.get_cname () + "*"));
 
                if (st.access != SymbolAccessibility.PRIVATE) {
-                       header_type_member_declaration.append (function.copy ());
+                       codegen.header_type_member_declaration.append (function.copy ());
                } else {
-                       source_type_member_declaration.append (function.copy ());
+                       codegen.source_type_member_declaration.append (function.copy ());
                }
 
                var cblock = new CCodeBlock ();
 
-               cblock.add_statement (instance_finalize_fragment);
+               cblock.add_statement (codegen.instance_finalize_fragment);
 
                function.block = cblock;
 
-               source_type_member_definition.append (function);
+               codegen.source_type_member_definition.append (function);
        }
 }