From dd2306239a090f28fb9be414cf72308b1f6ad55f Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sun, 10 Apr 2022 10:40:44 +0200 Subject: [PATCH] #2643 --- NETGenerator/NETGenerator.cs | 15 ++++++++++++--- TestSuite/generics63.pas | 7 +++++++ 2 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 TestSuite/generics63.pas diff --git a/NETGenerator/NETGenerator.cs b/NETGenerator/NETGenerator.cs index b0bbf7259..fffe3615f 100644 --- a/NETGenerator/NETGenerator.cs +++ b/NETGenerator/NETGenerator.cs @@ -8964,14 +8964,23 @@ namespace PascalABCCompiler.NETGenerator t1 = helper.GetTypeReference(real_parameters[0].type).tp; if (real_parameters[1].type is ICompiledGenericTypeInstance) t2 = helper.GetTypeReference(real_parameters[1].type).tp; - MethodInfo mi = ctn1.compiled_type.GetMethod("Equals"); + MemberInfo[] eq_members = ctn1.compiled_type.GetMember("Equals", BindingFlags.Public | BindingFlags.Instance); + MethodInfo mi = null; + foreach (MemberInfo member in eq_members) + if (member is MethodInfo) + { + mi = member as MethodInfo; + break; + } if (mi != null) { real_parameters[0].visit(this); - il.Emit(OpCodes.Box, t1); + var lb = il.DeclareLocal(t1); + il.Emit(OpCodes.Stloc, lb); + il.Emit(OpCodes.Ldloca, lb); real_parameters[1].visit(this); il.Emit(OpCodes.Box, t2); - il.Emit(OpCodes.Callvirt, mi); + il.Emit(OpCodes.Call, mi); if (ft == basic_function_type.objnoteq) { il.Emit(OpCodes.Ldc_I4_0); diff --git a/TestSuite/generics63.pas b/TestSuite/generics63.pas new file mode 100644 index 000000000..79b978dea --- /dev/null +++ b/TestSuite/generics63.pas @@ -0,0 +1,7 @@ +uses System; + +begin + var t1 := new ValueTuple(1); + var t2 := new ValueTuple(1); + assert(t1 = t2); +end. \ No newline at end of file