From: Jürg Billeter Date: Wed, 4 Jun 2008 14:59:08 +0000 (+0000) Subject: Fix error reporting when duplicating non-reference counted objects, fixes X-Git-Tag: VALA_0_3_4~90 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d6cbd07c6fd5eb8a468e9fffeedfb45354832dcb;p=thirdparty%2Fvala.git Fix error reporting when duplicating non-reference counted objects, fixes 2008-06-04 Jürg Billeter * gobject/valaccodeassignmentbinding.vala: * gobject/valaccodegenerator.vala: Fix error reporting when duplicating non-reference counted objects, fixes bug 535849 svn path=/trunk/; revision=1563 --- diff --git a/ChangeLog b/ChangeLog index 653182046..244d734cc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-06-04 Jürg Billeter + + * gobject/valaccodeassignmentbinding.vala: + * gobject/valaccodegenerator.vala: + + Fix error reporting when duplicating non-reference counted objects, + fixes bug 535849 + 2008-06-04 Jürg Billeter * vapigen/valagidlparser.vala: diff --git a/gobject/valaccodeassignmentbinding.vala b/gobject/valaccodeassignmentbinding.vala index ee75eb418..25064650d 100644 --- a/gobject/valaccodeassignmentbinding.vala +++ b/gobject/valaccodeassignmentbinding.vala @@ -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) { diff --git a/gobject/valaccodegenerator.vala b/gobject/valaccodegenerator.vala index ba04fa6c0..d089b1001 100644 --- a/gobject/valaccodegenerator.vala +++ b/gobject/valaccodegenerator.vala @@ -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); } }