]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
report error when using invalid expression for ref/out arguments, fixes
authorJuerg Billeter <j@bitron.ch>
Wed, 9 Jan 2008 16:48:32 +0000 (16:48 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Wed, 9 Jan 2008 16:48:32 +0000 (16:48 +0000)
2008-01-09  Juerg Billeter  <j@bitron.ch>

* vala/valasemanticanalyzer.vala: report error when using invalid
  expression for ref/out arguments, fixes bug 480022

svn path=/trunk/; revision=813

ChangeLog
vala/valasemanticanalyzer.vala

index 6b22d30b8720583d304c5d693208d7446ed25f1b..e40b3fa350f7d076b90db14cf18eef6ebb827f13 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-01-09  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valasemanticanalyzer.vala: report error when using invalid
+         expression for ref/out arguments, fixes bug 480022
+
 2008-01-09  Jürg Billeter  <j@bitron.ch>
 
        * gee/hashmap.vala: add return statements to silence C compiler
index 5bcbdccb895115ff8235a4ed1adef1ead93c760a..b7a162cc6d404dbe4e6fe0c59a4d1bdc371adeb3 100644 (file)
@@ -2019,14 +2019,15 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                        expr.parent_node.replace_expression (expr, parenthexp);
                        parenthexp.accept (this);
                        return;
-               } else if (expr.operator == UnaryOperator.REF) {
-                       // value type
-
-                       expr.static_type = expr.inner.static_type;
-               } else if (expr.operator == UnaryOperator.OUT) {
-                       // reference type
-
-                       expr.static_type = expr.inner.static_type;
+               } else if (expr.operator == UnaryOperator.REF || expr.operator == UnaryOperator.OUT) {
+                       if (expr.inner.symbol_reference is Field || expr.inner.symbol_reference is FormalParameter || expr.inner.symbol_reference is VariableDeclarator) {
+                               // ref and out can only be used with fields, parameters, and local variables
+                               expr.static_type = expr.inner.static_type;
+                       } else {
+                               expr.error = true;
+                               Report.error (expr.source_reference, "ref and out method arguments can only be used with fields, parameters, and local variables");
+                               return;
+                       }
                } else {
                        expr.error = true;
                        Report.error (expr.source_reference, "internal error: unsupported unary operator");