add is_pure method to Expression class
authorJuerg Billeter <j@bitron.ch>
Thu, 29 Nov 2007 19:35:24 +0000 (19:35 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Thu, 29 Nov 2007 19:35:24 +0000 (19:35 +0000)
2007-11-29  Juerg Billeter  <j@bitron.ch>

* vala/valaaddressofexpression.vala,
  vala/valaarraycreationexpression.vala, vala/valaassignment.vala,
  vala/valabaseaccess.vala, vala/valabinaryexpression.vala,
  vala/valacastexpression.vala, vala/valaconditionalexpression.vala,
  vala/valaelementaccess.vala, vala/valaexpression.vala,
  vala/valainitializerlist.vala, vala/valainvocationexpression.vala,
  vala/valalambdaexpression.vala, vala/valaliteralexpression.vala,
  vala/valamemberaccess.vala, vala/valaobjectcreationexpression.vala,
  vala/valaparenthesizedexpression.vala,
  vala/valapointerindirection.vala, vala/valapostfixexpression.vala,
  vala/valareferencetransferexpression.vala,
  vala/valasizeofexpression.vala, vala/valatypecheck.vala,
  vala/valatypeofexpression.vala, vala/valaunaryexpression.vala: add
  is_pure method to Expression class

svn path=/trunk/; revision=739

24 files changed:
ChangeLog
vala/valaaddressofexpression.vala
vala/valaarraycreationexpression.vala
vala/valaassignment.vala
vala/valabaseaccess.vala
vala/valabinaryexpression.vala
vala/valacastexpression.vala
vala/valaconditionalexpression.vala
vala/valaelementaccess.vala
vala/valaexpression.vala
vala/valainitializerlist.vala
vala/valainvocationexpression.vala
vala/valalambdaexpression.vala
vala/valaliteralexpression.vala
vala/valamemberaccess.vala
vala/valaobjectcreationexpression.vala
vala/valaparenthesizedexpression.vala
vala/valapointerindirection.vala
vala/valapostfixexpression.vala
vala/valareferencetransferexpression.vala
vala/valasizeofexpression.vala
vala/valatypecheck.vala
vala/valatypeofexpression.vala
vala/valaunaryexpression.vala

index 9f9748b..e95b9b2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,22 @@
 2007-11-29  Jürg Billeter  <j@bitron.ch>
 
+       * vala/valaaddressofexpression.vala,
+         vala/valaarraycreationexpression.vala, vala/valaassignment.vala,
+         vala/valabaseaccess.vala, vala/valabinaryexpression.vala,
+         vala/valacastexpression.vala, vala/valaconditionalexpression.vala,
+         vala/valaelementaccess.vala, vala/valaexpression.vala,
+         vala/valainitializerlist.vala, vala/valainvocationexpression.vala,
+         vala/valalambdaexpression.vala, vala/valaliteralexpression.vala,
+         vala/valamemberaccess.vala, vala/valaobjectcreationexpression.vala,
+         vala/valaparenthesizedexpression.vala,
+         vala/valapointerindirection.vala, vala/valapostfixexpression.vala,
+         vala/valareferencetransferexpression.vala,
+         vala/valasizeofexpression.vala, vala/valatypecheck.vala,
+         vala/valatypeofexpression.vala, vala/valaunaryexpression.vala: add
+         is_pure method to Expression class
+
+2007-11-29  Jürg Billeter  <j@bitron.ch>
+
        * tests/: refactor tests to have more descriptive names
 
 2007-11-29  Jürg Billeter  <j@bitron.ch>
index adef279..4ddf9e8 100644 (file)
@@ -61,4 +61,8 @@ public class Vala.AddressofExpression : Expression {
                        inner = (Expression) new_node;
                }
        }
+
+       public override bool is_pure () {
+               return inner.is_pure ();
+       }
 }
index 18a5f46..b8b72c5 100644 (file)
@@ -82,4 +82,8 @@ public class Vala.ArrayCreationExpression : Expression {
        public override void accept (CodeVisitor! visitor) {
                visitor.visit_array_creation_expression (this);
        }
+
+       public override bool is_pure () {
+               return false;
+       }
 }
index eab4f26..07ecb6c 100644 (file)
@@ -87,6 +87,10 @@ public class Vala.Assignment : Expression {
                        right = (Expression) new_node;
                }
        }
+
+       public override bool is_pure () {
+               return false;
+       }
 }
        
 public enum Vala.AssignmentOperator {
index 5ad2dfd..3b310dd 100644 (file)
@@ -43,4 +43,8 @@ public class Vala.BaseAccess : Expression {
        public override string! to_string () {
                return "base";
        }
+
+       public override bool is_pure () {
+               return true;
+       }
 }
index 8351725..c189b34 100644 (file)
@@ -93,6 +93,10 @@ public class Vala.BinaryExpression : Expression {
                        right = (Expression) new_node;
                }
        }
+
+       public override bool is_pure () {
+               return left.is_pure () && right.is_pure ();
+       }
 }
 
 public enum Vala.BinaryOperator {
index b2c3bbf..4f0366e 100644 (file)
@@ -1,6 +1,6 @@
 /* valacastexpression.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
@@ -73,4 +73,8 @@ public class Vala.CastExpression : Expression {
                        inner = (Expression) new_node;
                }
        }
+
+       public override bool is_pure () {
+               return inner.is_pure ();
+       }
 }
index 867deb0..a4cd9c0 100644 (file)
@@ -63,4 +63,8 @@ public class Vala.ConditionalExpression : Expression {
 
                visitor.visit_conditional_expression (this);
        }
+
+       public override bool is_pure () {
+               return condition.is_pure () && true_expression.is_pure () && false_expression.is_pure ();
+       }
 }
index cbd8ff7..9b99727 100644 (file)
@@ -57,4 +57,13 @@ public class Vala.ElementAccess : Expression {
 
                visitor.visit_element_access (this);
        }
+
+       public override bool is_pure () {
+               foreach (Expression index in indices) {
+                       if (!index.is_pure ()) {
+                               return false;
+                       }
+               }
+               return container.is_pure ();
+       }
 }
index dfb7b88..f9ddb17 100644 (file)
@@ -79,4 +79,10 @@ public abstract class Vala.Expression : CodeNode {
         * The code generator sets and uses them for memory management.
         */
        public ArrayList<VariableDeclarator> temp_vars = new ArrayList<VariableDeclarator> ();
+
+       /**
+        * Returns whether this expression is pure, i.e. whether this expression
+        * is free of side-effects.
+        */
+       public abstract bool is_pure ();
 }
index 3ee61a5..cecec41 100644 (file)
@@ -73,4 +73,13 @@ public class Vala.InitializerList : Expression {
        public override void accept (CodeVisitor! visitor) {
                visitor.visit_initializer_list (this);
        }
+
+       public override bool is_pure () {
+               foreach (Expression initializer in initializers) {
+                       if (!initializer.is_pure ()) {
+                               return false;
+                       }
+               }
+               return true;
+       }
 }
index 57250a1..c26d120 100644 (file)
@@ -110,4 +110,8 @@ public class Vala.InvocationExpression : Expression {
                        new_node.parent_node = this;
                }
        }
+
+       public override bool is_pure () {
+               return false;
+       }
 }
index 202eb91..545c3be 100644 (file)
@@ -101,4 +101,8 @@ public class Vala.LambdaExpression : Expression {
                        method.accept (visitor);
                }
        }
+
+       public override bool is_pure () {
+               return false;
+       }
 }
index a184d25..25e5f20 100644 (file)
@@ -52,4 +52,8 @@ public class Vala.LiteralExpression : Expression {
        public override string! to_string () {
                return literal.to_string ();
        }
+
+       public override bool is_pure () {
+               return true;
+       }
 }
index d0b582c..60a1954 100644 (file)
@@ -113,4 +113,9 @@ public class Vala.MemberAccess : Expression {
                        inner = (Expression) new_node;
                }
        }
+
+       public override bool is_pure () {
+               // accessing property could have side-effects
+               return false;
+       }
 }
index 6ad10cc..f821c20 100644 (file)
@@ -125,4 +125,8 @@ public class Vala.ObjectCreationExpression : Expression {
                        new_node.parent_node = this;
                }
        }
+
+       public override bool is_pure () {
+               return false;
+       }
 }
index cd53c88..8eef1ea 100644 (file)
@@ -1,6 +1,6 @@
 /* valaparenthesizedexpression.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
@@ -64,4 +64,8 @@ public class Vala.ParenthesizedExpression : Expression {
                        inner = (Expression) new_node;
                }
        }
+
+       public override bool is_pure () {
+               return inner.is_pure ();
+       }
 }
index 580082b..ce92522 100644 (file)
@@ -61,4 +61,8 @@ public class Vala.PointerIndirection : Expression {
                        inner = (Expression) new_node;
                }
        }
+
+       public override bool is_pure () {
+               return inner.is_pure ();
+       }
 }
index 1602d4b..078301d 100644 (file)
@@ -1,6 +1,6 @@
 /* valapostfixexpression.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
@@ -55,4 +55,8 @@ public class Vala.PostfixExpression : Expression {
 
                visitor.visit_postfix_expression (this);
        }
+
+       public override bool is_pure () {
+               return false;
+       }
 }
index d7521c8..9bcb25c 100644 (file)
@@ -61,4 +61,8 @@ public class Vala.ReferenceTransferExpression : Expression {
                        inner = (Expression) new_node;
                }
        }
+
+       public override bool is_pure () {
+               return false;
+       }
 }
index 7bbcab5..387c604 100644 (file)
@@ -48,4 +48,8 @@ public class Vala.SizeofExpression : Expression {
        
                visitor.visit_sizeof_expression (this);
        }
+
+       public override bool is_pure () {
+               return true;
+       }
 }
index 17a131e..42c646c 100644 (file)
@@ -1,6 +1,6 @@
 /* valatypecheck.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
@@ -57,4 +57,8 @@ public class Vala.TypeCheck : Expression {
        
                visitor.visit_type_check (this);
        }
+
+       public override bool is_pure () {
+               return expression.is_pure ();
+       }
 }
index 96292de..1eab644 100644 (file)
@@ -1,6 +1,6 @@
 /* valatypeofexpression.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
@@ -48,4 +48,8 @@ public class Vala.TypeofExpression : Expression {
        
                visitor.visit_typeof_expression (this);
        }
+
+       public override bool is_pure () {
+               return true;
+       }
 }
index ec01f86..0dc297e 100644 (file)
@@ -1,6 +1,6 @@
 /* valaunaryexpression.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
@@ -94,6 +94,14 @@ public class Vala.UnaryExpression : Expression {
        public override string! to_string () {
                return operator_string + _inner.to_string ();
        }
+
+       public override bool is_pure () {
+               if (operator == UnaryOperator.INCREMENT || operator == UnaryOperator.DECREMENT) {
+                       return false;
+               }
+
+               return inner.is_pure ();
+       }
 }
 
 public enum Vala.UnaryOperator {