From: Luca Bruno Date: Fri, 5 Aug 2011 15:22:18 +0000 (+0200) Subject: vala: Always analyze nodes after they are inserted into the AST X-Git-Tag: 0.43.1~183 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6c44fc72635e0a55f57bb9db526c4d83ddd551df;p=thirdparty%2Fvala.git vala: Always analyze nodes after they are inserted into the AST --- diff --git a/vala/valaassignment.vala b/vala/valaassignment.vala index 8dfef11bd..98c9c77c1 100644 --- a/vala/valaassignment.vala +++ b/vala/valaassignment.vala @@ -113,15 +113,15 @@ public class Vala.Assignment : Expression { var local = new LocalVariable (null, get_temp_name (), right, right.source_reference); var decl = new DeclarationStatement (local, source_reference); - decl.check (context); insert_statement (context.analyzer.insert_block, decl); + decl.check (context); int i = 0; ExpressionStatement stmt = null; foreach (var expr in tuple.get_expressions ()) { if (stmt != null) { - stmt.check (context); insert_statement (context.analyzer.insert_block, stmt); + stmt.check (context); } var temp_access = new MemberAccess.simple (local.name, right.source_reference); diff --git a/vala/valabinaryexpression.vala b/vala/valabinaryexpression.vala index 6fac539fd..be62ed64d 100644 --- a/vala/valabinaryexpression.vala +++ b/vala/valabinaryexpression.vala @@ -170,7 +170,6 @@ public class Vala.BinaryExpression : Expression { var local = new LocalVariable (context.analyzer.bool_type.copy (), get_temp_name (), null, source_reference); var decl = new DeclarationStatement (local, source_reference); - decl.check (context); var right_stmt = new ExpressionStatement (new Assignment (new MemberAccess.simple (local.name, right.source_reference), right, AssignmentOperator.SIMPLE, right.source_reference), right.source_reference); @@ -192,6 +191,8 @@ public class Vala.BinaryExpression : Expression { insert_statement (context.analyzer.insert_block, decl); insert_statement (context.analyzer.insert_block, if_stmt); + decl.check (context); + if (!if_stmt.check (context)) { error = true; return false; @@ -200,10 +201,11 @@ public class Vala.BinaryExpression : Expression { var ma = new MemberAccess.simple (local.name, source_reference); ma.target_type = target_type; ma.formal_target_type = formal_target_type; - ma.check (context); parent_node.replace_expression (this, ma); + ma.check (context); + return true; } @@ -281,10 +283,11 @@ public class Vala.BinaryExpression : Expression { cast.target_type.nullable = false; replace_expr = cast; } - replace_expr.check (context); parent_node.replace_expression (this, replace_expr); + replace_expr.check (context); + return true; } diff --git a/vala/valaconditionalexpression.vala b/vala/valaconditionalexpression.vala index 71acf6d53..98facaaed 100644 --- a/vala/valaconditionalexpression.vala +++ b/vala/valaconditionalexpression.vala @@ -174,20 +174,20 @@ public class Vala.ConditionalExpression : Expression { false_expression.target_type = value_type; var true_stmt = new ExpressionStatement (new Assignment (new MemberAccess.simple (local.name, true_expression.source_reference), true_expression, AssignmentOperator.SIMPLE, true_expression.source_reference), true_expression.source_reference); - true_stmt.check (context); var false_stmt = new ExpressionStatement (new Assignment (new MemberAccess.simple (local.name, false_expression.source_reference), false_expression, AssignmentOperator.SIMPLE, false_expression.source_reference), false_expression.source_reference); - false_stmt.check (context); true_block.replace_statement (true_decl, true_stmt); false_block.replace_statement (false_decl, false_stmt); + true_stmt.check (context); + false_stmt.check (context); var ma = new MemberAccess.simple (local.name, source_reference); ma.formal_target_type = formal_target_type; ma.target_type = target_type; - ma.check (context); parent_node.replace_expression (this, ma); + ma.check (context); return true; } diff --git a/vala/valamethodcall.vala b/vala/valamethodcall.vala index 8f68dc4bd..082e061f7 100644 --- a/vala/valamethodcall.vala +++ b/vala/valamethodcall.vala @@ -649,7 +649,6 @@ public class Vala.MethodCall : Expression { local.initializer = this; decl.check (context); - // move temp variable to insert block to ensure the // variable is in the same block as the declaration // otherwise there will be scoping issues in the generated code diff --git a/vala/valaobjectcreationexpression.vala b/vala/valaobjectcreationexpression.vala index fa419fd22..8bef09b25 100644 --- a/vala/valaobjectcreationexpression.vala +++ b/vala/valaobjectcreationexpression.vala @@ -504,7 +504,6 @@ public class Vala.ObjectCreationExpression : Expression { local.initializer = this; decl.check (context); - // move temp variable to insert block to ensure the // variable is in the same block as the declaration // otherwise there will be scoping issues in the generated code