diff options
author | Clément Pit--Claudel <clement.pitclaudel@live.com> | 2015-07-13 11:51:04 -0700 |
---|---|---|
committer | Clément Pit--Claudel <clement.pitclaudel@live.com> | 2015-07-13 11:51:04 -0700 |
commit | e4cefb56b4312d7c2bf88d9ba3c3bfd2e00940e9 (patch) | |
tree | 421049d979a73859b13bca1172eab1d62a89f674 | |
parent | e90a947a54044487e8ccf984033b1113eac0d49e (diff) |
Register the trigger generator as a a rewriter in the Resolver.
-rw-r--r-- | Source/Dafny/DafnyPipeline.csproj | 5 | ||||
-rw-r--r-- | Source/Dafny/Rewriter.cs | 29 |
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:
|