summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuerg Billeter <j@bitron.ch>2007-09-17 16:20:44 +0000
committerJürg Billeter <juergbi@src.gnome.org>2007-09-17 16:20:44 +0000
commit2d67e9ce75e04c3e31235261392f3894b34ab0cf (patch)
treedfdd0e10a89a9c159aaa5d8f18d17b452c6debc4
parentb1d1dd97615d341d441ed2ff9ae59181652a830e (diff)
downloadvala-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--ChangeLog8
-rw-r--r--gobject/valacodegeneratorassignment.vala4
-rw-r--r--vala/valaassignment.vala35
-rw-r--r--vala/valacodevisitor.vala12
-rw-r--r--vala/valamemorymanager.vala4
-rw-r--r--vala/valasemanticanalyzer.vala18
-rw-r--r--vala/valasymbolresolver.vala4
7 files changed, 47 insertions, 38 deletions
diff --git a/ChangeLog b/ChangeLog
index ba839c4d2..eec4b2f36 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);
+ }
}