From: Jürg Billeter Date: Sat, 6 Jun 2009 18:15:34 +0000 (+0200) Subject: Fix type checking for ref and out arguments X-Git-Tag: 0.7.4~46 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3fdb77a0ee8fd3295b35ab33b49499e5806e1562;p=thirdparty%2Fvala.git Fix type checking for ref and out arguments Fixes bug 570058. --- diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala index cf3c1e66f..755b0ae58 100644 --- a/vala/valasemanticanalyzer.vala +++ b/vala/valasemanticanalyzer.vala @@ -386,10 +386,17 @@ public class Vala.SemanticAnalyzer : CodeVisitor { Report.error (arg.source_reference, "Invalid type for argument %d".printf (i + 1)); return false; } - } else if (arg.target_type != null && !arg.value_type.compatible (arg.target_type) - && !(arg is NullLiteral && direction == ParameterDirection.OUT)) { + } else if (arg.target_type != null + && (direction == ParameterDirection.IN || direction == ParameterDirection.REF) + && !arg.value_type.compatible (arg.target_type)) { Report.error (arg.source_reference, "Argument %d: Cannot convert from `%s' to `%s'".printf (i + 1, arg.value_type.to_string (), arg.target_type.to_string ())); return false; + } else if (arg.target_type != null + && (direction == ParameterDirection.REF || direction == ParameterDirection.OUT) + && !arg.target_type.compatible (arg.value_type) + && !(arg is NullLiteral)) { + Report.error (arg.source_reference, "Argument %d: Cannot convert from `%s' to `%s'".printf (i + 1, arg.target_type.to_string (), arg.value_type.to_string ())); + return false; } else { // 0 => null, 1 => in, 2 => ref, 3 => out int arg_type = 1;