diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | vala/valasemanticanalyzer.vala | 12 |
2 files changed, 10 insertions, 7 deletions
@@ -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 diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala index 75c1f48c8..bb8e71546 100644 --- a/vala/valasemanticanalyzer.vala +++ b/vala/valasemanticanalyzer.vala @@ -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 */ |