Example #1
0
        public Microsoft.Dafny.Program ResolveProgram()
        {
            //  _tacnyProgram.PrintBoogieProgram();
            if (!_tacnyProgram.HasTacticApplications())
            {
                return(_tacnyProgram.ParseProgram());
            }
            foreach (var @class in _tacnyProgram.TopLevelClasses)
            {
                _tacnyProgram.CurrentTopLevelClass = @class;
                if (_tacnyProgram.CurrentTopLevelClass.Tactics.Count < 1)
                {
                    continue;
                }
                Parallel.ForEach(_tacnyProgram.Members, (member) => {
                    var res = LazyScanMemberBody(member.Value);
                    if (res == null)
                    {
                        return;
                    }
                    lock (_solutionList) {
                        _solutionList.Add(res);
                        _solutionList.Fin();
                    }
                });
                //foreach (var member in _tacnyProgram.Members) {
                //  var res = LazyScanMemberBody(member.Value);
                //  if (res == null) continue;
                //  _solutionList.Add(res);
                //  _solutionList.Fin();
                //}
            }
            // temp hack
            List <Solution> final = new List <Solution>();

            lock (_solutionList)
            {
                foreach (var solution in _solutionList.GetFinal())
                {
                    final.Add(solution[0]);
                }
            }

            Microsoft.Dafny.Program prog = _tacnyProgram.ParseProgram();
            foreach (var solution in final)
            {
                solution.GenerateProgram(ref prog);
            }
            _tacnyProgram.DafnyProgram = prog;

            return(prog);
        }