bool CheckDupTargets(ILEntry expr) { bool ret = false; if (expr != null && expr.Targets != null) { foreach (var target in expr.Targets) { if (target != null) { if (CallInstruction(target.Instr.OpCode.Code) || target.Instr.OpCode.Code == Code.Ret) { return(true); } } } } return(ret); }
bool CheckDupSources(ILEntry expr, List <ILEntry> path) { bool ret = false; bool flag = path.Contains(expr) || path.Count() > 10; if (!flag) { path.Add(expr); } if (!flag && expr != null && expr.Sources != null) { foreach (var source in expr.Sources) { if (source != null) { if (source.Instr.OpCode.Code == Code.Dup) { ret = CheckDupTargets(source); } else { ret = CheckDupSources(source, path); } if (ret == true) { break; } } } } if (!flag) { path.RemoveRange(path.Count - 1, 1); } return(ret); }