]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Fix error reporting when duplicating non-reference counted objects, fixes
authorJürg Billeter <j@bitron.ch>
Wed, 4 Jun 2008 14:59:08 +0000 (14:59 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Wed, 4 Jun 2008 14:59:08 +0000 (14:59 +0000)
2008-06-04  Jürg Billeter  <j@bitron.ch>

* gobject/valaccodeassignmentbinding.vala:
* gobject/valaccodegenerator.vala:

Fix error reporting when duplicating non-reference counted objects,
fixes bug 535849

svn path=/trunk/; revision=1563

ChangeLog
gobject/valaccodeassignmentbinding.vala
gobject/valaccodegenerator.vala

index 65318204621160c94dbdcf3ef3e27e2189d268a8..244d734cc07b4fda1dc5a8a57cc0243109909c11 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-06-04  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valaccodeassignmentbinding.vala:
+       * gobject/valaccodegenerator.vala:
+
+       Fix error reporting when duplicating non-reference counted objects,
+       fixes bug 535849
+
 2008-06-04  Jürg Billeter  <j@bitron.ch>
 
        * vapigen/valagidlparser.vala:
index ee75eb418d2def80a40ed24cbd89e7156c36e8bf..25064650da64f618eeb401933dae48d0baf5cf13 100644 (file)
@@ -342,6 +342,11 @@ public class Vala.CCodeAssignmentBinding : CCodeExpressionBinding {
        public override void emit () {
                assignment.accept_children (codegen);
 
+               if (assignment.left.error || assignment.right.error) {
+                       assignment.error = true;
+                       return;
+               }
+
                if (assignment.left.symbol_reference is Property) {
                        emit_property_assignment ();
                } else if (assignment.left.symbol_reference is Signal) {
index ba04fa6c0e463784efdd4e7d1fd23a8a35bb579e..d089b1001744c5544c24931bbc764b42cf941ceb 100644 (file)
@@ -1075,6 +1075,10 @@ public class Vala.CCodeGenerator : CodeGenerator {
                var cblock = new CCodeBlock ();
                
                foreach (CodeNode stmt in b.get_statements ()) {
+                       if (stmt.error) {
+                               continue;
+                       }
+
                        var src = stmt.source_reference;
                        if (src != null && src.comment != null) {
                                cblock.add_statement (new CCodeComment (src.comment));
@@ -1663,6 +1667,11 @@ public class Vala.CCodeGenerator : CodeGenerator {
        }
 
        public override void visit_expression_statement (ExpressionStatement stmt) {
+               if (stmt.expression.error) {
+                       stmt.error = true;
+                       return;
+               }
+
                stmt.ccodenode = new CCodeExpressionStatement ((CCodeExpression) stmt.expression.ccodenode);
 
                if (stmt.tree_can_fail && stmt.expression.tree_can_fail) {
@@ -3521,7 +3530,11 @@ public class Vala.CCodeGenerator : CodeGenerator {
                if (target_type.value_owned && (!expression_type.value_owned || boxing || unboxing)) {
                        // need to copy value
                        if (requires_copy (target_type) && !(expression_type is NullType)) {
-                               cexpr = get_ref_cexpression (target_type, cexpr, expr, expression_type);
+                               CodeNode node = expr;
+                               if (node == null) {
+                                       node = expression_type;
+                               }
+                               cexpr = get_ref_cexpression (target_type, cexpr, expr, node);
                        }
                }