static ExitValue ProcessFile(IList <string> valeFileName, Dafny.ModuleDecl module, Dafny.BuiltIns builtIns, Dafny.ErrorReporter reporter, string programId = null) { Contract.Requires(valeFileName.Count == 1); Contract.Requires(cce.NonNullElements(valeFileName)); ExitValue exitValue = ExitValue.VERIFIED; Dafny.Program dafnyProgram; string programName = valeFileName[0]; string err = Parse(valeFileName, programName, module, builtIns, reporter, out dafnyProgram); if (err == null) { err = Dafny.Main.Resolve(dafnyProgram, reporter); } if (err != null) { exitValue = ExitValue.DAFNY_ERROR; ExecutionEngine.printer.ErrorWriteLine(Console.Out, err); } else if (dafnyProgram != null && !CommandLineOptions.Clo.NoResolve && !CommandLineOptions.Clo.NoTypecheck && Dafny.DafnyOptions.O.DafnyVerify) { var boogiePrograms = Dafny.DafnyDriver.Translate(dafnyProgram); Dictionary <string, PipelineStatistics> statss; PipelineOutcome oc; string baseName = cce.NonNull(Path.GetFileName(valeFileName[valeFileName.Count - 1])); var verified = Dafny.DafnyDriver.Boogie(baseName, boogiePrograms, programId, out statss, out oc); var compiled = Dafny.DafnyDriver.Compile(valeFileName[0], new List <string>().AsReadOnly(), dafnyProgram, oc, statss, verified); exitValue = verified && compiled ? ExitValue.VERIFIED : !verified ? ExitValue.NOT_VERIFIED : ExitValue.COMPILE_ERROR; } if (err == null && dafnyProgram != null && Dafny.DafnyOptions.O.PrintStats) { Dafny.Util.PrintStats(dafnyProgram); } if (err == null && dafnyProgram != null && Dafny.DafnyOptions.O.PrintFunctionCallGraph) { Dafny.Util.PrintFunctionCallGraph(dafnyProgram); } return(exitValue); }
public static int ThreadMain(string[] args, Dafny.ModuleDecl module, Dafny.BuiltIns builtIns) { Contract.Requires(cce.NonNullElements(args)); Contract.Requires(module != null); Contract.Requires(builtIns != null); Dafny.ErrorReporter reporter = new Dafny.ConsoleErrorReporter(); ExecutionEngine.printer = new DafnyConsolePrinter(); // For boogie errors Dafny.DafnyOptions.Install(new Dafny.DafnyOptions(reporter)); // Temporarily change .vad to .dfy var valeFileName = args[args.Length - 1]; args[args.Length - 1] = valeFileName.Replace(".vad", ".dfy"); List <Microsoft.Dafny.DafnyFile> valeFile; List <string> otherFiles; ExitValue exitValue = Dafny.DafnyDriver.ProcessCommandLineArguments(args, out valeFile, out otherFiles); // Replace .dfy with .vad var fileNames = valeFile.ConvertAll(f => f.FilePath); fileNames[0] = valeFileName; if (exitValue == ExitValue.VERIFIED) { exitValue = ProcessFile(fileNames, module, builtIns, reporter); } if (CommandLineOptions.Clo.XmlSink != null) { CommandLineOptions.Clo.XmlSink.Close(); } if (CommandLineOptions.Clo.Wait) { Console.WriteLine("Press Enter to exit."); Console.ReadLine(); } if (!Dafny.DafnyOptions.O.CountVerificationErrors && exitValue != ExitValue.PREPROCESSING_ERROR) { return(0); } return((int)exitValue); }