support assignment of lambda expressions to local variables
authorJuerg Billeter <j@bitron.ch>
Wed, 12 Dec 2007 17:44:05 +0000 (17:44 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Wed, 12 Dec 2007 17:44:05 +0000 (17:44 +0000)
2007-12-12  Juerg Billeter  <j@bitron.ch>

* vala/valasemanticanalyzer.vala: support assignment of lambda
  expressions to local variables

svn path=/trunk/; revision=765

ChangeLog
vala/valasemanticanalyzer.vala

index d98d440..79cf1d4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2007-12-12  Jürg Billeter  <j@bitron.ch>
 
+       * vala/valasemanticanalyzer.vala: support assignment of lambda
+         expressions to local variables
+
+2007-12-12  Jürg Billeter  <j@bitron.ch>
+
        * vala/valasemanticanalyzer.vala: verify that the `abstract', `virtual',
          and `overrides' method modifiers are used only where applicable
 
index 75c1f48..bb8e715 100644 (file)
@@ -701,7 +701,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
 
                if (decl.initializer != null) {
                        if (decl.initializer.static_type == null) {
-                               if (!(decl.initializer is MemberAccess)) {
+                               if (!(decl.initializer is MemberAccess) && !(decl.initializer is LambdaExpression)) {
                                        decl.error = true;
                                        Report.error (decl.source_reference, "expression type not allowed as initializer");
                                        return;
@@ -2765,10 +2765,9 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                        } else if (ma.symbol_reference is VariableDeclarator && a.right.static_type == null) {
                                var decl = (VariableDeclarator) ma.symbol_reference;
 
-                               var right_ma = (MemberAccess) a.right;
-                               if (right_ma.symbol_reference is Method &&
+                               if (a.right.symbol_reference is Method &&
                                    decl.type_reference.data_type is Callback) {
-                                       var m = (Method) right_ma.symbol_reference;
+                                       var m = (Method) a.right.symbol_reference;
                                        var cb = (Callback) decl.type_reference.data_type;
 
                                        /* check whether method matches callback type */
@@ -2787,10 +2786,9 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
                        } else if (ma.symbol_reference is Field && a.right.static_type == null) {
                                var f = (Field) ma.symbol_reference;
 
-                               var right_ma = (MemberAccess) a.right;
-                               if (right_ma.symbol_reference is Method &&
+                               if (a.right.symbol_reference is Method &&
                                    f.type_reference.data_type is Callback) {
-                                       var m = (Method) right_ma.symbol_reference;
+                                       var m = (Method) a.right.symbol_reference;
                                        var cb = (Callback) f.type_reference.data_type;
 
                                        /* check whether method matches callback type */