]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Move array helper functions to CCodeArrayModule
authorJürg Billeter <j@bitron.ch>
Mon, 3 Nov 2008 19:54:12 +0000 (19:54 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Mon, 3 Nov 2008 19:54:12 +0000 (19:54 +0000)
2008-11-03  Jürg Billeter  <j@bitron.ch>

* gobject/valaccodearraymodule.vala:
* gobject/valaccodebasemodule.vala:

Move array helper functions to CCodeArrayModule

svn path=/trunk/; revision=1966

ChangeLog
gobject/valaccodearraymodule.vala
gobject/valaccodebasemodule.vala

index 9c286644a0494165a54921882376f265bc74c44b..1a8cfbfc85d89660a73826e00adda47a142b3e02 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-11-03  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valaccodearraymodule.vala:
+       * gobject/valaccodebasemodule.vala:
+
+       Move array helper functions to CCodeArrayModule
+
 2008-11-03  Jürg Billeter  <j@bitron.ch>
 
        * vapi/glib-2.0.vapi:
index 585d405960f94444ab67dcde87614f24772a11e3..2e6884f634a9af1b56eb29b4ad9d1edf551b4d30 100644 (file)
@@ -309,4 +309,111 @@ public class Vala.CCodeArrayModule : CCodeInvocationExpressionModule {
                        expr.ccodenode = new CCodeElementAccess (ccontainer, cindex);
                }
        }
+
+       private CCodeForStatement get_vala_array_free_loop (bool have_length) {
+               var cbody = new CCodeBlock ();
+               var cptrarray = new CCodeCastExpression (new CCodeIdentifier ("array"), "gpointer*");
+               var cea = new CCodeElementAccess (cptrarray, new CCodeIdentifier ("i"));
+
+               var cfreecall = new CCodeFunctionCall (new CCodeIdentifier ("destroy_func"));
+               cfreecall.add_argument (cea);
+
+               CCodeExpression cforcond;
+
+               if (have_length) {
+                       var cfreecond = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, cea, new CCodeConstant ("NULL"));
+                       cforcond = new CCodeBinaryExpression (CCodeBinaryOperator.LESS_THAN, new CCodeIdentifier ("i"), new CCodeIdentifier ("array_length"));
+                       cbody.add_statement (new CCodeIfStatement (cfreecond, new CCodeExpressionStatement (cfreecall)));
+               } else {
+                       cforcond = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, cea, new CCodeConstant ("NULL"));
+                       cbody.add_statement (new CCodeExpressionStatement (cfreecall));
+               }
+
+               var cfor = new CCodeForStatement (cforcond, cbody);
+               cfor.add_initializer (new CCodeAssignment (new CCodeIdentifier ("i"), new CCodeConstant ("0")));
+               cfor.add_iterator (new CCodeAssignment (new CCodeIdentifier ("i"), new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, new CCodeIdentifier ("i"), new CCodeConstant ("1"))));
+
+               return cfor;
+       }
+
+       public override void append_vala_array_free () {
+               var fun = new CCodeFunction ("_vala_array_free", "void");
+               fun.modifiers = CCodeModifiers.STATIC;
+               fun.add_parameter (new CCodeFormalParameter ("array", "gpointer"));
+               fun.add_parameter (new CCodeFormalParameter ("array_length", "gint"));
+               fun.add_parameter (new CCodeFormalParameter ("destroy_func", "GDestroyNotify"));
+               codegen.source_type_member_declaration.append (fun.copy ());
+
+               var cdofree = new CCodeBlock ();
+
+               var citdecl = new CCodeDeclaration ("int");
+               citdecl.add_declarator (new CCodeVariableDeclarator ("i"));
+               cdofree.add_statement (citdecl);
+
+               var clencheck = new CCodeBinaryExpression (CCodeBinaryOperator.GREATER_THAN_OR_EQUAL, new CCodeIdentifier ("array_length"), new CCodeConstant ("0"));
+               var ciflen = new CCodeIfStatement (clencheck, get_vala_array_free_loop (true), get_vala_array_free_loop (false));
+               cdofree.add_statement (ciflen);
+
+               var ccondarr = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, new CCodeIdentifier ("array"), new CCodeConstant ("NULL"));
+               var ccondfunc = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, new CCodeIdentifier ("destroy_func"), new CCodeConstant ("NULL"));
+               var cif = new CCodeIfStatement (new CCodeBinaryExpression (CCodeBinaryOperator.AND, ccondarr, ccondfunc), cdofree);
+               fun.block = new CCodeBlock ();
+               fun.block.add_statement (cif);
+
+               var carrfree = new CCodeFunctionCall (new CCodeIdentifier ("g_free"));
+               carrfree.add_argument (new CCodeIdentifier ("array"));
+               fun.block.add_statement (new CCodeExpressionStatement (carrfree));
+
+               codegen.source_type_member_definition.append (fun);
+       }
+
+       public override void append_vala_array_move () {
+               codegen.string_h_needed = true;
+
+               // assumes that overwritten array elements are null before invocation
+               // FIXME will leak memory if that's not the case
+               var fun = new CCodeFunction ("_vala_array_move", "void");
+               fun.modifiers = CCodeModifiers.STATIC;
+               fun.add_parameter (new CCodeFormalParameter ("array", "gpointer"));
+               fun.add_parameter (new CCodeFormalParameter ("element_size", "gsize"));
+               fun.add_parameter (new CCodeFormalParameter ("src", "gint"));
+               fun.add_parameter (new CCodeFormalParameter ("dest", "gint"));
+               fun.add_parameter (new CCodeFormalParameter ("length", "gint"));
+               codegen.source_type_member_declaration.append (fun.copy ());
+
+               var array = new CCodeCastExpression (new CCodeIdentifier ("array"), "char*");
+               var element_size = new CCodeIdentifier ("element_size");
+               var length = new CCodeIdentifier ("length");
+               var src = new CCodeIdentifier ("src");
+               var dest = new CCodeIdentifier ("dest");
+               var src_address = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, array, new CCodeBinaryExpression (CCodeBinaryOperator.MUL, src, element_size));
+               var dest_address = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, array, new CCodeBinaryExpression (CCodeBinaryOperator.MUL, dest, element_size));
+               var dest_end_address = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, array, new CCodeBinaryExpression (CCodeBinaryOperator.MUL, new CCodeParenthesizedExpression (new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, dest, length)), element_size));
+
+               fun.block = new CCodeBlock ();
+
+               var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_memmove"));
+               ccall.add_argument (dest_address);
+               ccall.add_argument (src_address);
+               ccall.add_argument (new CCodeBinaryExpression (CCodeBinaryOperator.MUL, length, element_size));
+               fun.block.add_statement (new CCodeExpressionStatement (ccall));
+
+               var czero1 = new CCodeFunctionCall (new CCodeIdentifier ("memset"));
+               czero1.add_argument (src_address);
+               czero1.add_argument (new CCodeConstant ("0"));
+               czero1.add_argument (new CCodeBinaryExpression (CCodeBinaryOperator.MUL, new CCodeParenthesizedExpression (new CCodeBinaryExpression (CCodeBinaryOperator.MINUS, dest, src)), element_size));
+               var czeroblock1 = new CCodeBlock ();
+               czeroblock1.add_statement (new CCodeExpressionStatement (czero1));
+
+               var czero2 = new CCodeFunctionCall (new CCodeIdentifier ("memset"));
+               czero2.add_argument (dest_end_address);
+               czero2.add_argument (new CCodeConstant ("0"));
+               czero2.add_argument (new CCodeBinaryExpression (CCodeBinaryOperator.MUL, new CCodeParenthesizedExpression (new CCodeBinaryExpression (CCodeBinaryOperator.MINUS, src, dest)), element_size));
+               var czeroblock2 = new CCodeBlock ();
+               czeroblock2.add_statement (new CCodeExpressionStatement (czero2));
+
+               fun.block.add_statement (new CCodeIfStatement (new CCodeBinaryExpression (CCodeBinaryOperator.LESS_THAN, src, dest), czeroblock1, czeroblock2));
+
+               codegen.source_type_member_definition.append (fun);
+       }
 }
index 104ec47b38b456022b0e5ca4de2acfd5f3b0429e..26f2987579c76d8f51f41f9270493f5fe09de5b4 100644 (file)
@@ -76,111 +76,10 @@ public class Vala.CCodeBaseModule : CCodeModule {
                return new CCodeIncludeDirective (filename, codegen.context.library == null);
        }
 
-       private CCodeForStatement get_vala_array_free_loop (bool have_length) {
-               var cbody = new CCodeBlock ();
-               var cptrarray = new CCodeCastExpression (new CCodeIdentifier ("array"), "gpointer*");
-               var cea = new CCodeElementAccess (cptrarray, new CCodeIdentifier ("i"));
-
-               var cfreecall = new CCodeFunctionCall (new CCodeIdentifier ("destroy_func"));
-               cfreecall.add_argument (cea);
-
-               CCodeExpression cforcond;
-
-               if (have_length) {
-                       var cfreecond = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, cea, new CCodeConstant ("NULL"));
-                       cforcond = new CCodeBinaryExpression (CCodeBinaryOperator.LESS_THAN, new CCodeIdentifier ("i"), new CCodeIdentifier ("array_length"));
-                       cbody.add_statement (new CCodeIfStatement (cfreecond, new CCodeExpressionStatement (cfreecall)));
-               } else {
-                       cforcond = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, cea, new CCodeConstant ("NULL"));
-                       cbody.add_statement (new CCodeExpressionStatement (cfreecall));
-               }
-
-               var cfor = new CCodeForStatement (cforcond, cbody);
-               cfor.add_initializer (new CCodeAssignment (new CCodeIdentifier ("i"), new CCodeConstant ("0")));
-               cfor.add_iterator (new CCodeAssignment (new CCodeIdentifier ("i"), new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, new CCodeIdentifier ("i"), new CCodeConstant ("1"))));
-
-               return cfor;
-       }
-
-       private void append_vala_array_free () {
-               var fun = new CCodeFunction ("_vala_array_free", "void");
-               fun.modifiers = CCodeModifiers.STATIC;
-               fun.add_parameter (new CCodeFormalParameter ("array", "gpointer"));
-               fun.add_parameter (new CCodeFormalParameter ("array_length", "gint"));
-               fun.add_parameter (new CCodeFormalParameter ("destroy_func", "GDestroyNotify"));
-               codegen.source_type_member_declaration.append (fun.copy ());
-
-               var cdofree = new CCodeBlock ();
-
-               var citdecl = new CCodeDeclaration ("int");
-               citdecl.add_declarator (new CCodeVariableDeclarator ("i"));
-               cdofree.add_statement (citdecl);
-
-               var clencheck = new CCodeBinaryExpression (CCodeBinaryOperator.GREATER_THAN_OR_EQUAL, new CCodeIdentifier ("array_length"), new CCodeConstant ("0"));
-               var ciflen = new CCodeIfStatement (clencheck, get_vala_array_free_loop (true), get_vala_array_free_loop (false));
-               cdofree.add_statement (ciflen);
-
-               var ccondarr = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, new CCodeIdentifier ("array"), new CCodeConstant ("NULL"));
-               var ccondfunc = new CCodeBinaryExpression (CCodeBinaryOperator.INEQUALITY, new CCodeIdentifier ("destroy_func"), new CCodeConstant ("NULL"));
-               var cif = new CCodeIfStatement (new CCodeBinaryExpression (CCodeBinaryOperator.AND, ccondarr, ccondfunc), cdofree);
-               fun.block = new CCodeBlock ();
-               fun.block.add_statement (cif);
-
-               var carrfree = new CCodeFunctionCall (new CCodeIdentifier ("g_free"));
-               carrfree.add_argument (new CCodeIdentifier ("array"));
-               fun.block.add_statement (new CCodeExpressionStatement (carrfree));
-
-               codegen.source_type_member_definition.append (fun);
+       public virtual void append_vala_array_free () {
        }
 
-       private void append_vala_array_move () {
-               codegen.string_h_needed = true;
-
-               // assumes that overwritten array elements are null before invocation
-               // FIXME will leak memory if that's not the case
-               var fun = new CCodeFunction ("_vala_array_move", "void");
-               fun.modifiers = CCodeModifiers.STATIC;
-               fun.add_parameter (new CCodeFormalParameter ("array", "gpointer"));
-               fun.add_parameter (new CCodeFormalParameter ("element_size", "gsize"));
-               fun.add_parameter (new CCodeFormalParameter ("src", "gint"));
-               fun.add_parameter (new CCodeFormalParameter ("dest", "gint"));
-               fun.add_parameter (new CCodeFormalParameter ("length", "gint"));
-               codegen.source_type_member_declaration.append (fun.copy ());
-
-               var array = new CCodeCastExpression (new CCodeIdentifier ("array"), "char*");
-               var element_size = new CCodeIdentifier ("element_size");
-               var length = new CCodeIdentifier ("length");
-               var src = new CCodeIdentifier ("src");
-               var dest = new CCodeIdentifier ("dest");
-               var src_address = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, array, new CCodeBinaryExpression (CCodeBinaryOperator.MUL, src, element_size));
-               var dest_address = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, array, new CCodeBinaryExpression (CCodeBinaryOperator.MUL, dest, element_size));
-               var dest_end_address = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, array, new CCodeBinaryExpression (CCodeBinaryOperator.MUL, new CCodeParenthesizedExpression (new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, dest, length)), element_size));
-
-               fun.block = new CCodeBlock ();
-
-               var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_memmove"));
-               ccall.add_argument (dest_address);
-               ccall.add_argument (src_address);
-               ccall.add_argument (new CCodeBinaryExpression (CCodeBinaryOperator.MUL, length, element_size));
-               fun.block.add_statement (new CCodeExpressionStatement (ccall));
-
-               var czero1 = new CCodeFunctionCall (new CCodeIdentifier ("memset"));
-               czero1.add_argument (src_address);
-               czero1.add_argument (new CCodeConstant ("0"));
-               czero1.add_argument (new CCodeBinaryExpression (CCodeBinaryOperator.MUL, new CCodeParenthesizedExpression (new CCodeBinaryExpression (CCodeBinaryOperator.MINUS, dest, src)), element_size));
-               var czeroblock1 = new CCodeBlock ();
-               czeroblock1.add_statement (new CCodeExpressionStatement (czero1));
-
-               var czero2 = new CCodeFunctionCall (new CCodeIdentifier ("memset"));
-               czero2.add_argument (dest_end_address);
-               czero2.add_argument (new CCodeConstant ("0"));
-               czero2.add_argument (new CCodeBinaryExpression (CCodeBinaryOperator.MUL, new CCodeParenthesizedExpression (new CCodeBinaryExpression (CCodeBinaryOperator.MINUS, src, dest)), element_size));
-               var czeroblock2 = new CCodeBlock ();
-               czeroblock2.add_statement (new CCodeExpressionStatement (czero2));
-
-               fun.block.add_statement (new CCodeIfStatement (new CCodeBinaryExpression (CCodeBinaryOperator.LESS_THAN, src, dest), czeroblock1, czeroblock2));
-
-               codegen.source_type_member_definition.append (fun);
+       public virtual void append_vala_array_move () {
        }
 
        private void append_vala_strcmp0 () {