From: Juerg Billeter Date: Thu, 29 Nov 2007 19:35:24 +0000 (+0000) Subject: add is_pure method to Expression class X-Git-Tag: VALA_0_1_6~128 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=32f3f561b84c41bc59f73161be10b05c6f39aad1;p=platform%2Fupstream%2Fvala.git add is_pure method to Expression class 2007-11-29 Juerg Billeter * 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 --- diff --git a/ChangeLog b/ChangeLog index 9f9748b..e95b9b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,22 @@ 2007-11-29 Jürg Billeter + * 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 + * tests/: refactor tests to have more descriptive names 2007-11-29 Jürg Billeter diff --git a/vala/valaaddressofexpression.vala b/vala/valaaddressofexpression.vala index adef279..4ddf9e8 100644 --- a/vala/valaaddressofexpression.vala +++ b/vala/valaaddressofexpression.vala @@ -61,4 +61,8 @@ public class Vala.AddressofExpression : Expression { inner = (Expression) new_node; } } + + public override bool is_pure () { + return inner.is_pure (); + } } diff --git a/vala/valaarraycreationexpression.vala b/vala/valaarraycreationexpression.vala index 18a5f46..b8b72c5 100644 --- a/vala/valaarraycreationexpression.vala +++ b/vala/valaarraycreationexpression.vala @@ -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; + } } diff --git a/vala/valaassignment.vala b/vala/valaassignment.vala index eab4f26..07ecb6c 100644 --- a/vala/valaassignment.vala +++ b/vala/valaassignment.vala @@ -87,6 +87,10 @@ public class Vala.Assignment : Expression { right = (Expression) new_node; } } + + public override bool is_pure () { + return false; + } } public enum Vala.AssignmentOperator { diff --git a/vala/valabaseaccess.vala b/vala/valabaseaccess.vala index 5ad2dfd..3b310dd 100644 --- a/vala/valabaseaccess.vala +++ b/vala/valabaseaccess.vala @@ -43,4 +43,8 @@ public class Vala.BaseAccess : Expression { public override string! to_string () { return "base"; } + + public override bool is_pure () { + return true; + } } diff --git a/vala/valabinaryexpression.vala b/vala/valabinaryexpression.vala index 8351725..c189b34 100644 --- a/vala/valabinaryexpression.vala +++ b/vala/valabinaryexpression.vala @@ -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 { diff --git a/vala/valacastexpression.vala b/vala/valacastexpression.vala index b2c3bbf..4f0366e 100644 --- a/vala/valacastexpression.vala +++ b/vala/valacastexpression.vala @@ -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 (); + } } diff --git a/vala/valaconditionalexpression.vala b/vala/valaconditionalexpression.vala index 867deb0..a4cd9c0 100644 --- a/vala/valaconditionalexpression.vala +++ b/vala/valaconditionalexpression.vala @@ -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 (); + } } diff --git a/vala/valaelementaccess.vala b/vala/valaelementaccess.vala index cbd8ff7..9b99727 100644 --- a/vala/valaelementaccess.vala +++ b/vala/valaelementaccess.vala @@ -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 (); + } } diff --git a/vala/valaexpression.vala b/vala/valaexpression.vala index dfb7b88..f9ddb17 100644 --- a/vala/valaexpression.vala +++ b/vala/valaexpression.vala @@ -79,4 +79,10 @@ public abstract class Vala.Expression : CodeNode { * The code generator sets and uses them for memory management. */ public ArrayList temp_vars = new ArrayList (); + + /** + * Returns whether this expression is pure, i.e. whether this expression + * is free of side-effects. + */ + public abstract bool is_pure (); } diff --git a/vala/valainitializerlist.vala b/vala/valainitializerlist.vala index 3ee61a5..cecec41 100644 --- a/vala/valainitializerlist.vala +++ b/vala/valainitializerlist.vala @@ -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; + } } diff --git a/vala/valainvocationexpression.vala b/vala/valainvocationexpression.vala index 57250a1..c26d120 100644 --- a/vala/valainvocationexpression.vala +++ b/vala/valainvocationexpression.vala @@ -110,4 +110,8 @@ public class Vala.InvocationExpression : Expression { new_node.parent_node = this; } } + + public override bool is_pure () { + return false; + } } diff --git a/vala/valalambdaexpression.vala b/vala/valalambdaexpression.vala index 202eb91..545c3be 100644 --- a/vala/valalambdaexpression.vala +++ b/vala/valalambdaexpression.vala @@ -101,4 +101,8 @@ public class Vala.LambdaExpression : Expression { method.accept (visitor); } } + + public override bool is_pure () { + return false; + } } diff --git a/vala/valaliteralexpression.vala b/vala/valaliteralexpression.vala index a184d25..25e5f20 100644 --- a/vala/valaliteralexpression.vala +++ b/vala/valaliteralexpression.vala @@ -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; + } } diff --git a/vala/valamemberaccess.vala b/vala/valamemberaccess.vala index d0b582c..60a1954 100644 --- a/vala/valamemberaccess.vala +++ b/vala/valamemberaccess.vala @@ -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; + } } diff --git a/vala/valaobjectcreationexpression.vala b/vala/valaobjectcreationexpression.vala index 6ad10cc..f821c20 100644 --- a/vala/valaobjectcreationexpression.vala +++ b/vala/valaobjectcreationexpression.vala @@ -125,4 +125,8 @@ public class Vala.ObjectCreationExpression : Expression { new_node.parent_node = this; } } + + public override bool is_pure () { + return false; + } } diff --git a/vala/valaparenthesizedexpression.vala b/vala/valaparenthesizedexpression.vala index cd53c88..8eef1ea 100644 --- a/vala/valaparenthesizedexpression.vala +++ b/vala/valaparenthesizedexpression.vala @@ -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 (); + } } diff --git a/vala/valapointerindirection.vala b/vala/valapointerindirection.vala index 580082b..ce92522 100644 --- a/vala/valapointerindirection.vala +++ b/vala/valapointerindirection.vala @@ -61,4 +61,8 @@ public class Vala.PointerIndirection : Expression { inner = (Expression) new_node; } } + + public override bool is_pure () { + return inner.is_pure (); + } } diff --git a/vala/valapostfixexpression.vala b/vala/valapostfixexpression.vala index 1602d4b..078301d 100644 --- a/vala/valapostfixexpression.vala +++ b/vala/valapostfixexpression.vala @@ -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; + } } diff --git a/vala/valareferencetransferexpression.vala b/vala/valareferencetransferexpression.vala index d7521c8..9bcb25c 100644 --- a/vala/valareferencetransferexpression.vala +++ b/vala/valareferencetransferexpression.vala @@ -61,4 +61,8 @@ public class Vala.ReferenceTransferExpression : Expression { inner = (Expression) new_node; } } + + public override bool is_pure () { + return false; + } } diff --git a/vala/valasizeofexpression.vala b/vala/valasizeofexpression.vala index 7bbcab5..387c604 100644 --- a/vala/valasizeofexpression.vala +++ b/vala/valasizeofexpression.vala @@ -48,4 +48,8 @@ public class Vala.SizeofExpression : Expression { visitor.visit_sizeof_expression (this); } + + public override bool is_pure () { + return true; + } } diff --git a/vala/valatypecheck.vala b/vala/valatypecheck.vala index 17a131e..42c646c 100644 --- a/vala/valatypecheck.vala +++ b/vala/valatypecheck.vala @@ -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 (); + } } diff --git a/vala/valatypeofexpression.vala b/vala/valatypeofexpression.vala index 96292de..1eab644 100644 --- a/vala/valatypeofexpression.vala +++ b/vala/valatypeofexpression.vala @@ -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; + } } diff --git a/vala/valaunaryexpression.vala b/vala/valaunaryexpression.vala index ec01f86..0dc297e 100644 --- a/vala/valaunaryexpression.vala +++ b/vala/valaunaryexpression.vala @@ -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 {