summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorGravatar Dan Liew <daniel.liew@imperial.ac.uk>2015-01-25 20:51:44 +0000
committerGravatar Dan Liew <daniel.liew@imperial.ac.uk>2015-01-25 20:51:44 +0000
commitffcf2c27da335ff452a0c2388c33195ff59c8550 (patch)
tree7814f6a96e0ff07557d6a45a16354eadc37c2e22 /Source
parent75a170c34ad60fda22961045cfcdb89fda3f4571 (diff)
Change the return type of StandardVisitor.VisitExistsExpr() from
ExistsExpr to Expr. Enforcing the return type be ExistsExpr is too restrictive. For example it prevents anyone from implementing a visitor that does constant folding of an Expr tree. There is precedence for this. For example VisitNAryExpr() returns an Expr not an NAryExpr. Unfortunately this a breaking API change so anyone who subclasses the StandardVisitor (or one of its sub classes) and overrides this method will get compilation errors until they change the return type. a visitor that does constant folding of an Expr tree
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Duplicator.cs2
-rw-r--r--Source/Core/StandardVisitor.cs4
-rw-r--r--Source/VCExpr/Boogie2VCExpr.cs2
3 files changed, 4 insertions, 4 deletions
diff --git a/Source/Core/Duplicator.cs b/Source/Core/Duplicator.cs
index 6164c23b..759077b5 100644
--- a/Source/Core/Duplicator.cs
+++ b/Source/Core/Duplicator.cs
@@ -204,7 +204,7 @@ namespace Microsoft.Boogie {
Contract.Ensures(Contract.Result<List<Ensures>>() != null);
return base.VisitEnsuresSeq(new List<Ensures>(ensuresSeq));
}
- public override ExistsExpr VisitExistsExpr(ExistsExpr node) {
+ public override Expr VisitExistsExpr(ExistsExpr node) {
//Contract.Requires(node != null);
Contract.Ensures(Contract.Result<ExistsExpr>() != null);
return base.VisitExistsExpr((ExistsExpr)node.Clone());
diff --git a/Source/Core/StandardVisitor.cs b/Source/Core/StandardVisitor.cs
index a19bf78b..963f3ec6 100644
--- a/Source/Core/StandardVisitor.cs
+++ b/Source/Core/StandardVisitor.cs
@@ -239,7 +239,7 @@ namespace Microsoft.Boogie {
node.OutParams = this.VisitVariableSeq(node.OutParams);
return node;
}
- public virtual ExistsExpr VisitExistsExpr(ExistsExpr node) {
+ public virtual Expr VisitExistsExpr(ExistsExpr node) {
Contract.Requires(node != null);
Contract.Ensures(Contract.Result<ExistsExpr>() != null);
node = (ExistsExpr)this.VisitQuantifierExpr(node);
@@ -805,7 +805,7 @@ namespace Microsoft.Boogie {
this.VisitVariableSeq(node.OutParams);
return node;
}
- public override ExistsExpr VisitExistsExpr(ExistsExpr node)
+ public override Expr VisitExistsExpr(ExistsExpr node)
{
Contract.Ensures(Contract.Result<ExistsExpr>() == node);
return (ExistsExpr)this.VisitQuantifierExpr(node);
diff --git a/Source/VCExpr/Boogie2VCExpr.cs b/Source/VCExpr/Boogie2VCExpr.cs
index f261553b..7cd3d240 100644
--- a/Source/VCExpr/Boogie2VCExpr.cs
+++ b/Source/VCExpr/Boogie2VCExpr.cs
@@ -454,7 +454,7 @@ namespace Microsoft.Boogie.VCExprAST {
return node;
}
- public override ExistsExpr VisitExistsExpr(ExistsExpr node) {
+ public override Expr VisitExistsExpr(ExistsExpr node) {
//Contract.Requires(node != null);
Contract.Ensures(Contract.Result<ExistsExpr>() != null);
node = (ExistsExpr)this.VisitQuantifierExpr(node);