From: Juerg Billeter Date: Tue, 24 Jul 2007 13:42:50 +0000 (+0000) Subject: remove unnecessary runtime checks in release mode, simplify creation X-Git-Tag: VALA_0_1_2~27 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=47a06b0cb371e77bd64e1efaad57fa7d77e18b68;p=thirdparty%2Fvala.git remove unnecessary runtime checks in release mode, simplify creation 2007-07-24 Juerg Billeter * gobject/valacodegenerator.vala, gobject/valacodegeneratormemberaccess.vala, gobject/valacodegeneratormethod.vala: remove unnecessary runtime checks in release mode, simplify creation method when not using construction properties svn path=/trunk/; revision=380 --- diff --git a/ChangeLog b/ChangeLog index 5191071d7..6bdf9d4a1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2007-07-24 Jürg Billeter + + * gobject/valacodegenerator.vala, + gobject/valacodegeneratormemberaccess.vala, + gobject/valacodegeneratormethod.vala: remove unnecessary runtime + checks in release mode, simplify creation method when not using + construction properties + 2007-07-24 Jürg Billeter * vala/parser.y, vala/valainterface.vala: allow private static fields in diff --git a/gobject/valacodegenerator.vala b/gobject/valacodegenerator.vala index 426389000..5e9cc2a7b 100644 --- a/gobject/valacodegenerator.vala +++ b/gobject/valacodegenerator.vala @@ -648,14 +648,19 @@ public class Vala.CodeGenerator : CodeVisitor { public override void visit_begin_block (Block! b) { current_symbol = b; } - - private void add_object_creation (CCodeBlock! b) { + + private void add_object_creation (CCodeBlock! b, bool has_params) { var cl = (Class) current_type_symbol; var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_object_newv")); ccall.add_argument (new CCodeConstant (cl.get_type_id ())); - ccall.add_argument (new CCodeConstant ("__params_it - __params")); - ccall.add_argument (new CCodeConstant ("__params")); + if (has_params) { + ccall.add_argument (new CCodeConstant ("__params_it - __params")); + ccall.add_argument (new CCodeConstant ("__params")); + } else { + ccall.add_argument (new CCodeConstant ("0")); + ccall.add_argument (new CCodeConstant ("NULL")); + } var cdecl = new CCodeVariableDeclarator ("self"); cdecl.initializer = ccall; diff --git a/gobject/valacodegeneratormemberaccess.vala b/gobject/valacodegeneratormemberaccess.vala index 3e2b8c5dd..7eaa2fbdc 100644 --- a/gobject/valacodegeneratormemberaccess.vala +++ b/gobject/valacodegeneratormemberaccess.vala @@ -59,9 +59,12 @@ public class Vala.CodeGenerator { if (f.instance) { CCodeExpression typed_inst; if (f.parent_symbol != base_type) { - // FIXME: use C cast if debugging disabled - typed_inst = new CCodeFunctionCall (new CCodeIdentifier (((DataType) f.parent_symbol).get_upper_case_cname (null))); - ((CCodeFunctionCall) typed_inst).add_argument (pub_inst); + if (context.debug) { + typed_inst = new CCodeFunctionCall (new CCodeIdentifier (((DataType) f.parent_symbol).get_upper_case_cname (null))); + ((CCodeFunctionCall) typed_inst).add_argument (pub_inst); + } else { + typed_inst = new CCodeCastExpression (pub_inst, ((DataType) f.parent_symbol).get_cname () + "*"); + } } else { typed_inst = pub_inst; } @@ -99,10 +102,13 @@ public class Vala.CodeGenerator { /* cast if necessary */ if (base_property_type != base_type) { - // FIXME: use C cast if debugging disabled - var ccast = new CCodeFunctionCall (new CCodeIdentifier (base_property_type.get_upper_case_cname (null))); - ccast.add_argument (pub_inst); - typed_pub_inst = ccast; + if (context.debug) { + var ccast = new CCodeFunctionCall (new CCodeIdentifier (base_property_type.get_upper_case_cname (null))); + ccast.add_argument (pub_inst); + typed_pub_inst = ccast; + } else { + typed_pub_inst = new CCodeCastExpression (pub_inst, base_property_type.get_cname () + "*"); + } } ccall.add_argument (typed_pub_inst); diff --git a/gobject/valacodegeneratormethod.vala b/gobject/valacodegeneratormethod.vala index c3ce16979..390d14add 100644 --- a/gobject/valacodegeneratormethod.vala +++ b/gobject/valacodegeneratormethod.vala @@ -55,7 +55,7 @@ public class Vala.CodeGenerator { } } - add_object_creation (cblock); + add_object_creation (cblock, ((CreationMethod) m).n_construction_params > 0); foreach (CodeNode stmt in m.body.get_statements ()) { if (!((ExpressionStatement) stmt).assigned_property ().set_accessor.construction) { @@ -209,11 +209,17 @@ public class Vala.CodeGenerator { if (m.parent_symbol is Class) { var cl = (Class) m.parent_symbol; if (m.overrides || m.base_interface_method != null) { - var ccall = new CCodeFunctionCall (new CCodeIdentifier (cl.get_upper_case_cname (null))); - ccall.add_argument (new CCodeIdentifier ("base")); + CCodeExpression cself; + if (context.debug) { + var ccall = new CCodeFunctionCall (new CCodeIdentifier (cl.get_upper_case_cname (null))); + ccall.add_argument (new CCodeIdentifier ("base")); + cself = ccall; + } else { + cself = new CCodeCastExpression (new CCodeIdentifier ("base"), cl.get_cname () + "*"); + } var cdecl = new CCodeDeclaration ("%s *".printf (cl.get_cname ())); - cdecl.add_declarator (new CCodeVariableDeclarator.with_initializer ("self", ccall)); + cdecl.add_declarator (new CCodeVariableDeclarator.with_initializer ("self", cself)); cinit.append (cdecl); } else if (m.instance) { @@ -247,20 +253,21 @@ public class Vala.CodeGenerator { if (m is CreationMethod) { if (current_type_symbol is Class) { int n_params = ((CreationMethod) m).n_construction_params; - n_params += (int) current_class.get_type_parameters ().length (); - // declare construction parameter array - var cparamsinit = new CCodeFunctionCall (new CCodeIdentifier ("g_new0")); - cparamsinit.add_argument (new CCodeIdentifier ("GParameter")); - cparamsinit.add_argument (new CCodeConstant (n_params.to_string ())); - - var cdecl = new CCodeDeclaration ("GParameter *"); - cdecl.add_declarator (new CCodeVariableDeclarator.with_initializer ("__params", cparamsinit)); - cinit.append (cdecl); - - cdecl = new CCodeDeclaration ("GParameter *"); - cdecl.add_declarator (new CCodeVariableDeclarator.with_initializer ("__params_it", new CCodeIdentifier ("__params"))); - cinit.append (cdecl); + if (n_params > 0) { + // declare construction parameter array + var cparamsinit = new CCodeFunctionCall (new CCodeIdentifier ("g_new0")); + cparamsinit.add_argument (new CCodeIdentifier ("GParameter")); + cparamsinit.add_argument (new CCodeConstant (n_params.to_string ())); + + var cdecl = new CCodeDeclaration ("GParameter *"); + cdecl.add_declarator (new CCodeVariableDeclarator.with_initializer ("__params", cparamsinit)); + cinit.append (cdecl); + + cdecl = new CCodeDeclaration ("GParameter *"); + cdecl.add_declarator (new CCodeVariableDeclarator.with_initializer ("__params_it", new CCodeIdentifier ("__params"))); + cinit.append (cdecl); + } /* destroy func properties for generic types */ foreach (TypeParameter type_param in current_class.get_type_parameters ()) {