From e15770b607ca25a0cc3ad1500397d961bf6ecd00 Mon Sep 17 00:00:00 2001 From: Juerg Billeter Date: Wed, 12 Dec 2007 17:44:05 +0000 Subject: [PATCH] support assignment of lambda expressions to local variables 2007-12-12 Juerg Billeter * vala/valasemanticanalyzer.vala: support assignment of lambda expressions to local variables svn path=/trunk/; revision=765 --- ChangeLog | 5 +++++ vala/valasemanticanalyzer.vala | 12 +++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index d98d440..79cf1d4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2007-12-12 Jürg Billeter + * vala/valasemanticanalyzer.vala: support assignment of lambda + expressions to local variables + +2007-12-12 Jürg Billeter + * 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 75c1f48..bb8e715 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 */ -- 2.7.4