]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Drop unnecessary comma expressions in silent casts
authorLuca Bruno <lucabru@src.gnome.org>
Tue, 15 Feb 2011 14:36:20 +0000 (15:36 +0100)
committerJürg Billeter <j@bitron.ch>
Wed, 16 Feb 2011 07:05:11 +0000 (08:05 +0100)
Assume temporary variable owns value depending on the relative
expression.

codegen/valaccodebasemodule.vala

index 0052eceb174579a182e1d1945a8b8d261910e50d..08bddc0215b5ba1726d380a0fe0ca17c6ef9472a 100644 (file)
@@ -4707,21 +4707,16 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                if (context.profile == Profile.GOBJECT && (iface != null || (cl != null && !cl.is_compact))) {
                        // checked cast for strict subtypes of GTypeInstance
                        if (expr.is_silent_cast) {
-                               var ccomma = new CCodeCommaExpression ();
-                               var temp_decl = get_temp_variable (expr.inner.value_type, true, expr, false);
-
+                               var temp_decl = get_temp_variable (expr.inner.value_type, expr.inner.value_type.value_owned, expr, false);
                                emit_temp_var (temp_decl);
-
                                var ctemp = get_variable_cexpression (temp_decl.name);
-                               var cinit = new CCodeAssignment (ctemp, get_cvalue (expr.inner));
+
+                               ccode.add_assignment (ctemp, get_cvalue (expr.inner));
                                var ccheck = create_type_check (ctemp, expr.type_reference);
                                var ccast = new CCodeCastExpression (ctemp, expr.type_reference.get_cname ());
                                var cnull = new CCodeConstant ("NULL");
-
-                               ccomma.append_expression (cinit);
-                               ccomma.append_expression (new CCodeConditionalExpression (ccheck, ccast, cnull));
        
-                               set_cvalue (expr, ccomma);
+                               set_cvalue (expr, new CCodeConditionalExpression (ccheck, ccast, cnull));
                        } else {
                                set_cvalue (expr, generate_instance_cast (get_cvalue (expr.inner), expr.type_reference.data_type));
                        }