コード例 #1
0
        // Return a new copy of the program
        public override Program getProgram()
        {
            var     startTime = DateTime.Now;
            Program ret;

            if (unresolved_program != null)
            {
                FixedDuplicator dup = new FixedDuplicator();
                ret = dup.VisitProgram(unresolved_program);
            }
            else
            {
                var progStr = "";
                if (programStream is FileStream || programStream is MemoryStream)
                {
                    var stream = programStream as Stream;
                    stream.Seek(0, SeekOrigin.Begin);
                    progStr = ParserHelper.Fill(stream, new List <string>());
                }
                else
                {
                    Debug.Assert(programStream is string);
                    progStr = (string)programStream;
                }

                var v = Parser.Parse(progStr, "PersistentProgram", out ret);

                if (v != 0)
                {
                    writeToFile("error.bpl");
                    throw new InternalError("Illegal program given to PersistentProgram");
                }

                if (PersistentProgram.clearTokens)
                {
                    PersistentProgram.ClearTokens(ret);
                }

                // TODO: use this always (sometimes .NET-2-Boogie programs crash)
                if (useDuplicator)
                {
                    FixedDuplicator dup = new FixedDuplicator();
                    unresolved_program = dup.VisitProgram(ret);
                }
            }

            if (ret.Resolve() != 0)
            {
                writeToFile("error.bpl");
                throw new InternalError("Illegal program given to PersistentProgram");
            }

            persistenceCost += (DateTime.Now - startTime);
            return(ret);
        }