private bool DoMatch(MethodCapture lhs, MethodCapture rhs) { if (lhs.Method.ReturnType.MetadataToken != rhs.Method.ReturnType.MetadataToken) { Log.DebugLine(this, " return type differs"); return(false); } if (lhs.Method.Parameters.Count != rhs.Method.Parameters.Count) { Log.DebugLine(this, " numParams differs"); return(false); } for (int i = 0; i < lhs.Method.Parameters.Count; ++i) { if (lhs.Method.Parameters[i].ParameterType.MetadataToken != rhs.Method.Parameters[i].ParameterType.MetadataToken) { Log.DebugLine(this, " param types differ"); return(false); } } if (lhs.Instructions.Length != rhs.Instructions.Length) { Log.DebugLine(this, " numInstructions differs"); return(false); } for (int i = 0; i < lhs.Instructions.Length; ++i) { TypedInstruction left = lhs.Instructions[i]; TypedInstruction right = rhs.Instructions[i]; if (!DoMatch(left, right)) { Log.DebugLine(this, " {0} != {1} at {2:X2} and {3:X2}", left, right, left.Untyped.Offset, right.Untyped.Offset); return(false); } } return(true); }
private bool DoMatch(MethodCapture lhs, MethodCapture rhs) { if (lhs.Method.ReturnType.MetadataToken != rhs.Method.ReturnType.MetadataToken) { Log.DebugLine(this, " return type differs"); return false; } if (lhs.Method.Parameters.Count != rhs.Method.Parameters.Count) { Log.DebugLine(this, " numParams differs"); return false; } for (int i = 0; i < lhs.Method.Parameters.Count; ++i) if (lhs.Method.Parameters[i].ParameterType.MetadataToken != rhs.Method.Parameters[i].ParameterType.MetadataToken) { Log.DebugLine(this, " param types differ"); return false; } if (lhs.Instructions.Length != rhs.Instructions.Length) { Log.DebugLine(this, " numInstructions differs"); return false; } for (int i = 0; i < lhs.Instructions.Length; ++i) { TypedInstruction left = lhs.Instructions[i]; TypedInstruction right = rhs.Instructions[i]; if (!DoMatch(left, right)) { Log.DebugLine(this, " {0} != {1} at {2:X2} and {3:X2}", left, right, left.Untyped.Offset, right.Untyped.Offset); return false; } } return true; }