Ancestry.QueryProcessor.Compile.Emitter.EmitTupleEquals C# (CSharp) Method

EmitTupleEquals() private static method

private static EmitTupleEquals ( TypeBuilder typeBuilder, MethodBuilder equalityMethod ) : MethodBuilder
typeBuilder System.Reflection.Emit.TypeBuilder
equalityMethod System.Reflection.Emit.MethodBuilder
return System.Reflection.Emit.MethodBuilder
        private static MethodBuilder EmitTupleEquals(TypeBuilder typeBuilder, MethodBuilder equalityMethod)
        {
            var equalsMethod = typeBuilder.DefineMethod("Equals", MethodAttributes.Virtual | MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.NewSlot, CallingConventions.HasThis, typeof(bool), new System.Type[] { typeof(object) });
            var il = equalsMethod.GetILGenerator();
            var baseLabel = il.DefineLabel();
            var theEnd = il.DefineLabel();
            il.Emit(OpCodes.Ldarg_1);
            il.Emit(OpCodes.Isinst, typeBuilder);
            il.Emit(OpCodes.Brfalse, baseLabel);
            il.Emit(OpCodes.Ldarg_1);
            il.Emit(OpCodes.Unbox_Any, typeBuilder);
            il.Emit(OpCodes.Ldarg_0);
            il.Emit(OpCodes.Ldobj, typeBuilder);
            il.EmitCall(OpCodes.Call, equalityMethod, null);
            il.Emit(OpCodes.Br_S, theEnd);
            il.MarkLabel(baseLabel);
            il.Emit(OpCodes.Ldarg_0);
            il.Emit(OpCodes.Ldobj, typeBuilder);
            il.Emit(OpCodes.Box, typeBuilder);
            il.Emit(OpCodes.Ldarg_1);
            il.EmitCall(OpCodes.Call, ReflectionUtility.ObjectEquals, null);
            il.MarkLabel(theEnd);
            il.Emit(OpCodes.Ret);
            typeBuilder.DefineMethodOverride(equalsMethod, ReflectionUtility.ObjectEquals);
            return equalsMethod;
        }