summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Clément Pit--Claudel <clement.pitclaudel@live.com>2015-07-13 11:51:04 -0700
committerGravatar Clément Pit--Claudel <clement.pitclaudel@live.com>2015-07-13 11:51:04 -0700
commite4cefb56b4312d7c2bf88d9ba3c3bfd2e00940e9 (patch)
tree421049d979a73859b13bca1172eab1d62a89f674
parente90a947a54044487e8ccf984033b1113eac0d49e (diff)
Register the trigger generator as a a rewriter in the Resolver.
-rw-r--r--Source/Dafny/DafnyPipeline.csproj5
-rw-r--r--Source/Dafny/Rewriter.cs29
2 files changed, 32 insertions, 2 deletions
diff --git a/Source/Dafny/DafnyPipeline.csproj b/Source/Dafny/DafnyPipeline.csproj
index f9540aa0..a1452b8a 100644
--- a/Source/Dafny/DafnyPipeline.csproj
+++ b/Source/Dafny/DafnyPipeline.csproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -143,6 +143,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Cloner.cs" />
+ <Compile Include="TriggerGenerator.cs" />
<Compile Include="Util.cs" />
<Compile Include="Compiler.cs" />
<Compile Include="BigIntegerParser.cs" />
@@ -192,4 +193,4 @@
<Target Name="AfterBuild">
</Target>
-->
-</Project>
+</Project> \ No newline at end of file
diff --git a/Source/Dafny/Rewriter.cs b/Source/Dafny/Rewriter.cs
index c0a25a82..480b3f61 100644
--- a/Source/Dafny/Rewriter.cs
+++ b/Source/Dafny/Rewriter.cs
@@ -36,6 +36,35 @@ namespace Microsoft.Dafny
}
}
+ public class TriggersRewriter : IRewriter {
+ Resolver Resolver;
+
+ internal TriggersRewriter(Resolver resolver) {
+ Contract.Requires(Resolver != null);
+ this.Resolver = resolver;
+ }
+
+ public void PreResolve(ModuleDefinition m) { }
+
+ public void PostResolve(ModuleDefinition m) {
+ foreach (var decl in ModuleDefinition.AllCallables(m.TopLevelDecls)) {
+ if (decl is Function) {
+ var function = (Function)decl;
+ TriggerGenerator.AddTriggers(function.Ens, Resolver);
+ TriggerGenerator.AddTriggers(function.Req, Resolver);
+ TriggerGenerator.AddTriggers(function.Body, Resolver);
+ } else if (decl is Method) {
+ var method = (Method)decl;
+ TriggerGenerator.AddTriggers(method.Ens, Resolver);
+ TriggerGenerator.AddTriggers(method.Req, Resolver);
+ TriggerGenerator.AddTriggers(method.Body, Resolver);
+ }
+ }
+ }
+
+ public void PostCyclicityResolve(ModuleDefinition m) { }
+ }
+
/// <summary>
/// AutoContracts is an experimental feature that will fill much of the dynamic-frames boilerplate
/// into a class. From the user's perspective, what needs to be done is simply: