示例#1
0
        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);
        }
示例#2
0
		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;
		}