private void RunClassifyTest( string sExp, string sidName, Action <SsaProcedureBuilder> gen, Func <Procedure, ProcedureFlow> mkFlow) { var m = new SsaProcedureBuilder(); gen(m); var ssa = m.Ssa; pf.ProcedureFlows[ssa.Procedure] = mkFlow(ssa.Procedure); var urf = new UsedRegisterFinder( pf, new Procedure[] { ssa.Procedure }, NullDecompilerEventListener.Instance); var sid = ssa.Identifiers.Single(s => s.Identifier.Name == sidName); var flow = urf.Classify(ssa, sid, sid.Identifier.Storage, true); var sw = new StringWriter(); sw.Write("Used: "); sw.Write(string.Join(",", flow)); var sActual = sw.ToString(); if (sActual != sExp) { ssa.Procedure.Dump(true); Debug.WriteLine(sActual); Assert.AreEqual(sExp, sActual); } }
private Procedure RunTest(string sExp, SsaState ssa) { pf.ProcedureFlows[ssa.Procedure] = new ProcedureFlow(ssa.Procedure); var urf = new UsedRegisterFinder( pf, new Procedure[] { ssa.Procedure }, NullDecompilerEventListener.Instance); var flow = urf.ComputeLiveIn(ssa, true); var sw = new StringWriter(); sw.Write("Used: "); sw.Write(string.Join(",", flow.BitsUsed.OrderBy(p => p.Key.ToString()))); var sActual = sw.ToString(); if (sActual != sExp) { ssa.Procedure.Dump(true); Debug.WriteLine(sActual); Assert.AreEqual(sExp, sActual); } return(ssa.Procedure); }