private void RunTest(string sourceFile, Address addr, string outputFile)
        {
            Program prog = AssembleFile(sourceFile, addr);

            using (FileUnitTester fut = new FileUnitTester(outputFile))
            {
                foreach (Procedure proc in prog.Procedures.Values)
                {
                    fut.TextWriter.WriteLine("= Before ==========");
                    proc.Write(true, fut.TextWriter);
                    if (proc.Frame.Escapes)
                    {
                        fut.TextWriter.WriteLine("The frame of procedure {0} escapes", proc.Name);
                        EscapedAccessRewriter ear = new EscapedAccessRewriter(proc);
                        ear.Transform();
                        fut.TextWriter.WriteLine("= After ==========");
                        proc.Write(true, fut.TextWriter);
                    }
                    else
                    {
                        fut.TextWriter.WriteLine("The frame of procedure {0} doesn't escape", proc.Name);
                    }
                    fut.TextWriter.WriteLine();
                }
                fut.AssertFilesEqual();
            }
        }
        public void EarInsertFrameReference()
        {
            Procedure proc = new Procedure(null, "foo", new Frame(PrimitiveType.Word32));
            Block     b    = new Block(proc, "foo_1");

            proc.ControlGraph.AddEdge(proc.EntryBlock, b);
            proc.ControlGraph.AddEdge(b, proc.ExitBlock);
            EscapedAccessRewriter ear = new EscapedAccessRewriter(proc);

            ear.InsertFramePointerAssignment(new Mocks.FakeArchitecture());
            Block x = proc.EntryBlock.Succ[0];

            Assert.AreEqual(1, x.Statements.Count);
            Assert.AreEqual("fp = &foo_frame", x.Statements[0].Instruction.ToString());
        }