diff options
author | Juerg Billeter <j@bitron.ch> | 2007-09-17 16:20:44 +0000 |
---|---|---|
committer | Jürg Billeter <juergbi@src.gnome.org> | 2007-09-17 16:20:44 +0000 |
commit | 2d67e9ce75e04c3e31235261392f3894b34ab0cf (patch) | |
tree | dfdd0e10a89a9c159aaa5d8f18d17b452c6debc4 | |
parent | b1d1dd97615d341d441ed2ff9ae59181652a830e (diff) | |
download | vala-2d67e9ce75e04c3e31235261392f3894b34ab0cf.tar.gz |
switch assignment to external visitor
2007-09-17 Juerg Billeter <j@bitron.ch>
* vala/valaassignment.vala, vala/valacodevisitor.vala,
vala/valamemorymanager.vala, vala/valasemanticanalyzer.vala,
vala/valasymbolresolver.vala,
gobject/valacodegeneratorassignment.vala: switch assignment to
external visitor
svn path=/trunk/; revision=611
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | gobject/valacodegeneratorassignment.vala | 4 | ||||
-rw-r--r-- | vala/valaassignment.vala | 35 | ||||
-rw-r--r-- | vala/valacodevisitor.vala | 12 | ||||
-rw-r--r-- | vala/valamemorymanager.vala | 4 | ||||
-rw-r--r-- | vala/valasemanticanalyzer.vala | 18 | ||||
-rw-r--r-- | vala/valasymbolresolver.vala | 4 |
7 files changed, 47 insertions, 38 deletions
@@ -1,3 +1,11 @@ +2007-09-17 Jürg Billeter <j@bitron.ch> + + * vala/valaassignment.vala, vala/valacodevisitor.vala, + vala/valamemorymanager.vala, vala/valasemanticanalyzer.vala, + vala/valasymbolresolver.vala, + gobject/valacodegeneratorassignment.vala: switch assignment to + external visitor + 2007-09-16 Jürg Billeter <j@bitron.ch> * vala/valamemorymanager.vala: fix memory management when using lambda diff --git a/gobject/valacodegeneratorassignment.vala b/gobject/valacodegeneratorassignment.vala index d63759fec..5695c5211 100644 --- a/gobject/valacodegeneratorassignment.vala +++ b/gobject/valacodegeneratorassignment.vala @@ -25,7 +25,9 @@ using GLib; using Gee; public class Vala.CodeGenerator { - public override void visit_end_assignment (Assignment! a) { + public override void visit_assignment (Assignment! a) { + a.accept_children (this); + MemberAccess ma = null; if (a.left is MemberAccess) { diff --git a/vala/valaassignment.vala b/vala/valaassignment.vala index 802f3d5cc..eab4f26e9 100644 --- a/vala/valaassignment.vala +++ b/vala/valaassignment.vala @@ -1,6 +1,6 @@ /* valaassignment.vala * - * Copyright (C) 2006 Jürg Billeter + * Copyright (C) 2006-2007 Jürg Billeter * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -32,9 +32,7 @@ public class Vala.Assignment : Expression { * Left hand side of the assignment. */ public Expression! left { - get { - return _left; - } + get { return _left; } set construct { _left = value; _left.parent_node = this; @@ -50,9 +48,7 @@ public class Vala.Assignment : Expression { * Right hand side of the assignment. */ public Expression! right { - get { - return _right; - } + get { return _right; } set construct { _right = value; _right.parent_node = this; @@ -65,27 +61,22 @@ public class Vala.Assignment : Expression { /** * Creates a new assignment. * - * @param left left hand side - * @param op assignment operator - * @param right right hand side - * @param source reference to source code - * @return newly created assignment + * @param left left hand side + * @param operator assignment operator + * @param right right hand side + * @param source_reference reference to source code + * @return newly created assignment */ - public Assignment (Expression! _left, Expression! _right, AssignmentOperator _op = AssignmentOperator.SIMPLE, SourceReference _source = null) { - left = _left; - operator = _op; - right = _right; - source_reference = _source; + public Assignment (construct Expression! left, construct Expression! right, construct AssignmentOperator operator = AssignmentOperator.SIMPLE, construct SourceReference source_reference = null) { } public override void accept (CodeVisitor! visitor) { - left.accept (visitor); - - visitor.visit_begin_assignment (this); + visitor.visit_assignment (this); + } + public override void accept_children (CodeVisitor! visitor) { + left.accept (visitor); right.accept (visitor); - - visitor.visit_end_assignment (this); } public override void replace (CodeNode! old_node, CodeNode! new_node) { diff --git a/vala/valacodevisitor.vala b/vala/valacodevisitor.vala index be0408acc..9864bec1a 100644 --- a/vala/valacodevisitor.vala +++ b/vala/valacodevisitor.vala @@ -645,19 +645,11 @@ public abstract class Vala.CodeVisitor : Object { } /** - * Visit operation called at beginning of assignments. + * Visit operation called for assignments. * * @param a an assignment */ - public virtual void visit_begin_assignment (Assignment! a) { - } - - /** - * Visit operation called at end of assignments. - * - * @param a an assignment - */ - public virtual void visit_end_assignment (Assignment! a) { + public virtual void visit_assignment (Assignment! a) { } /** diff --git a/vala/valamemorymanager.vala b/vala/valamemorymanager.vala index 189b28a62..9aea73ce4 100644 --- a/vala/valamemorymanager.vala +++ b/vala/valamemorymanager.vala @@ -268,7 +268,9 @@ public class Vala.MemoryManager : CodeVisitor { visit_possibly_leaked_expression (expr.right); } - public override void visit_end_assignment (Assignment! a) { + public override void visit_assignment (Assignment! a) { + a.accept_children (this); + if (a.left is PointerIndirection || a.left.symbol_reference is Signal) { } else { if (a.left.static_type.takes_ownership) { diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala index d2e8b6233..1729dc579 100644 --- a/vala/valasemanticanalyzer.vala +++ b/vala/valasemanticanalyzer.vala @@ -2548,7 +2548,15 @@ public class Vala.SemanticAnalyzer : CodeVisitor { l.symbol_reference = l.method; } - public override void visit_begin_assignment (Assignment! a) { + public override void visit_assignment (Assignment! a) { + a.left.accept (this); + + if (a.left.error) { + // skip on error in inner expression + a.error = true; + return; + } + if (a.left is MemberAccess) { var ma = (MemberAccess) a.left; @@ -2579,11 +2587,13 @@ public class Vala.SemanticAnalyzer : CodeVisitor { } else { a.error = true; Report.error (a.source_reference, "unsupported lvalue in assignment"); + return; } - } - public override void visit_end_assignment (Assignment! a) { - if (a.error || a.left.error || a.right.error) { + a.right.accept (this); + + if (a.right.error) { + // skip on error in inner expression a.error = true; return; } diff --git a/vala/valasymbolresolver.vala b/vala/valasymbolresolver.vala index 98a971076..bc8d4e1a6 100644 --- a/vala/valasymbolresolver.vala +++ b/vala/valasymbolresolver.vala @@ -318,4 +318,8 @@ public class Vala.SymbolResolver : CodeVisitor { public override void visit_array_creation_expression (ArrayCreationExpression! e) { e.accept_children (this); } + + public override void visit_assignment (Assignment! a) { + a.accept_children (this); + } } |