From: Jürg Billeter Date: Mon, 30 Apr 2007 08:50:08 +0000 (+0000) Subject: check that void return values are not used, fixes bug 434503 X-Git-Tag: VALA_0_0_9~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9890a3fa214a1d3fc8609d416a9607905f6a5638;p=platform%2Fupstream%2Fvala.git check that void return values are not used, fixes bug 434503 2007-04-30 Jürg Billeter * vala/valasemanticanalyzer.vala: check that void return values are not used, fixes bug 434503 svn path=/trunk/; revision=291 --- diff --git a/vala/ChangeLog b/vala/ChangeLog index 76d2025..6c3d2d1 100644 --- a/vala/ChangeLog +++ b/vala/ChangeLog @@ -1,5 +1,10 @@ 2007-04-30 Jürg Billeter + * vala/valasemanticanalyzer.vala: check that void return values are not + used, fixes bug 434503 + +2007-04-30 Jürg Billeter + * vala/valasemanticanalyzer.vala: fix type check in relational operations, fixes bug 434507 diff --git a/vala/vala/valasemanticanalyzer.vala b/vala/vala/valasemanticanalyzer.vala index c9dcc7a..547dc87 100644 --- a/vala/vala/valasemanticanalyzer.vala +++ b/vala/vala/valasemanticanalyzer.vala @@ -123,23 +123,24 @@ public class Vala.SemanticAnalyzer : CodeVisitor { } private ref List get_all_prerequisites (Interface! iface) { - weak List ret = null; - + List ret = null; + foreach (TypeReference prereq in iface.get_prerequisites ()) { DataType type = prereq.data_type; /* skip on previous errors */ if (type == null) { continue; } - + ret.prepend (type); if (type is Interface) { - ret.concat (get_all_prerequisites ((Interface)type)); + ret.concat (get_all_prerequisites ((Interface) type)); } } - - return ret.reverse (); + + ret.reverse (); + return #ret; } private bool class_is_a (Class! cl, DataType! t) { @@ -1274,6 +1275,15 @@ public class Vala.SemanticAnalyzer : CodeVisitor { ret_type = m.get_return_type (); params = m.get_parameters (); + if (ret_type.data_type == null && ret_type.type_parameter == null) { + // void return type + if (!(expr.parent_node is ExpressionStatement)) { + expr.error = true; + Report.error (expr.source_reference, "invocation of void method not allowed as expression"); + return; + } + } + // resolve generic return values if (ret_type.type_parameter != null) { if (!(expr.call is MemberAccess)) {