Exemple #1
0
 public void Structure()
 {
     var ccc = new CompoundConditionCoalescer(proc);
     ccc.Transform();
     var cfgc = new ControlFlowGraphCleaner(proc);
     cfgc.Transform();
     var reg = Execute();
     //$REVIEW: yeecch. Should return the statements, and 
     // caller decides what to do with'em. Probably 
     // return an abstract Procedure, rather than overloading
     // the IR procedure.
     proc.Body.AddRange(reg.Statements);
 }
		private void RunTest(string sourceFile, string testFile)
		{
			using (FileUnitTester fut = new FileUnitTester(testFile))
			{
				this.RewriteProgramMsdos(sourceFile, Address.SegPtr(0xC00, 0));
				program.Procedures.Values[0].Write(false, fut.TextWriter);
                fut.TextWriter.WriteLine();
				var cfgc = new ControlFlowGraphCleaner(program.Procedures.Values[0]);
				cfgc.Transform();
				program.Procedures.Values[0].Write(false, fut.TextWriter);

				fut.AssertFilesEqual();
			}
		}
 private void RunTest(string sExp, Procedure proc)
 {
     var cfgc = new ControlFlowGraphCleaner(proc);
     cfgc.Transform();
     var ps = new StructureAnalysis(new FakeDecompilerEventListener(), new Program(), proc);
     var reg = ps.Execute();
     var sb = new StringWriter();
     reg.Write(sb);
     sb.GetStringBuilder().Replace("\t", "    ");
     var s = sb.ToString();
     if (sExp != s)
     {
         Debug.WriteLine(s);
         Assert.AreEqual(sExp, s);
     }
 }
        private void RunTest(ProcedureBuilder mock, string outFilename)
        {
            Procedure proc = mock.Procedure;
            using (FileUnitTester fut = new FileUnitTester(outFilename))
            {
                ControlFlowGraphCleaner cfgc = new ControlFlowGraphCleaner(proc);
                cfgc.Transform();
                proc.Write(false, fut.TextWriter);
                fut.TextWriter.WriteLine();

                var sa = new Reko.Structure.Schwartz.ProcedureStructurer(proc);
                sa.Structure();
                CodeFormatter fmt = new CodeFormatter(new TextFormatter(fut.TextWriter));
                fmt.Write(proc);
                fut.TextWriter.WriteLine("===========================");

                fut.AssertFilesEqual();
            }
        }
        private void RunTest(ProcedureBuilder mock, string outFilename)
        {
            Procedure proc = mock.Procedure;
            using (FileUnitTester fut = new FileUnitTester(outFilename))
            {
                ControlFlowGraphCleaner cfgc = new ControlFlowGraphCleaner(proc);
                cfgc.Transform();
                proc.Write(false, fut.TextWriter);
                fut.TextWriter.WriteLine();

                var sa = new StructureAnalysis(new FakeDecompilerEventListener(), program, proc);
                sa.Structure();
                CodeFormatter fmt = new CodeFormatter(new TextFormatter(fut.TextWriter));
                fmt.Write(proc);
                fut.TextWriter.WriteLine("===========================");

                fut.AssertFilesEqual();
            }
        }
        private void RunTest16(string sourceFilename, string outFilename, Address addrBase)
        {
            using (FileUnitTester fut = new FileUnitTester(outFilename))
            {
                RewriteProgramMsdos(sourceFilename, addrBase);
                foreach (Procedure proc in program.Procedures.Values)
                {
                    var cfgc = new ControlFlowGraphCleaner(program.Procedures.Values[0]);
                    cfgc.Transform();
                    proc.Write(false, fut.TextWriter);
                    fut.TextWriter.WriteLine();

                    var sa = new Reko.Structure.Schwartz.ProcedureStructurer(proc);
                    sa.Structure();
                    var fmt = new CodeFormatter(new TextFormatter(fut.TextWriter));
                    fmt.Write(proc);
                    fut.TextWriter.WriteLine("===========================");
                }
                fut.AssertFilesEqual();
            }
        }
 private void RunTest32(string expected, Program program)
 {
     var sw = new StringWriter();
     foreach (var proc in program.Procedures.Values)
     {
         var cfgc = new ControlFlowGraphCleaner(proc);
         cfgc.Transform();
         var sa = new Reko.Structure.Schwartz.ProcedureStructurer(proc);
         sa.Structure();
         var fmt = new CodeFormatter(new TextFormatter(sw));
         fmt.Write(proc);
         sw.WriteLine("===");
     }
     Console.WriteLine(sw);
     Assert.AreEqual(expected, sw.ToString());
 }
        private void RunTest32(string sourceFilename, string outFilename, Address addrBase)
        {
            var program = RewriteProgram32(sourceFilename, addrBase);
            using (FileUnitTester fut = new FileUnitTester(outFilename))
            {
                foreach (Procedure proc in program.Procedures.Values)
                {
                    var cfgc = new ControlFlowGraphCleaner(program.Procedures.Values[0]);
                    cfgc.Transform();
                    proc.Write(false, fut.TextWriter);
                    fut.TextWriter.WriteLine();

                    var sa = new StructureAnalysis(new FakeDecompilerEventListener(), program, proc);
                    sa.Structure();
                    var fmt = new CodeFormatter(new TextFormatter(fut.TextWriter));
                    fmt.Write(proc);
                    fut.TextWriter.WriteLine("===========================");
                }
                fut.AssertFilesEqual();
            }
        }
 private void RunTest(string expected, Program program)
 {
     var sw = new StringWriter();
     foreach (var proc in program.Procedures.Values)
     {
         var cfgc = new ControlFlowGraphCleaner(proc);
         cfgc.Transform();
         var sa = new StructureAnalysis(new FakeDecompilerEventListener(), program, proc);
         sa.Structure();
         var fmt = new CodeFormatter(new TextFormatter(sw));
         fmt.Write(proc);
         sw.WriteLine("===");
     }
     Console.WriteLine(sw);
     Assert.AreEqual(expected, sw.ToString());
 }