[vala] Warn about mismatched parameter direction before mismatched type



commit 4bed25c2fe2a081537cb17f62a965ffa55937115
Author: Sam Thursfield <ssssam gmail com>
Date:   Wed Nov 30 17:26:00 2011 +0100

    Warn about mismatched parameter direction before mismatched type
    
    https://bugzilla.gnome.org/show_bug.cgi?id=664049

 vala/valasemanticanalyzer.vala |   25 ++++++++++++++-----------
 1 files changed, 14 insertions(+), 11 deletions(-)
---
diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala
index ef023e1..f3b1a63 100644
--- a/vala/valasemanticanalyzer.vala
+++ b/vala/valasemanticanalyzer.vala
@@ -483,17 +483,6 @@ 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
-                          && (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;
@@ -559,6 +548,20 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                                }
                        }
                }
+
+               if (arg.target_type != null) {
+                       if ((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 ((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;
+                       }
+               }
+
                var ma = arg as MemberAccess;
                if (ma != null && ma.prototype_access) {
                        // allow prototype access if target type is delegate without target


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]