From 13c677e66e28b719537e12bed187172636075bb4 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Mon, 5 Apr 2021 15:33:16 +0200 Subject: [PATCH] #880 --- TestSuite/extensionoperators5.pas | 16 ++++++++++++++++ TreeConverter/TreeRealization/generics.cs | 9 ++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 TestSuite/extensionoperators5.pas diff --git a/TestSuite/extensionoperators5.pas b/TestSuite/extensionoperators5.pas new file mode 100644 index 000000000..9552771ce --- /dev/null +++ b/TestSuite/extensionoperators5.pas @@ -0,0 +1,16 @@ +function operator=(x,y: Stack): boolean; extensionmethod; +begin + Result := True +end; + +function operator<>(x,y: Stack): boolean; extensionmethod; +begin + Result := not(x = y); +end; + +begin + var a1 := new Stack; + var a2 := new Stack; + assert(a1 = a2); + assert(not (a1 <> a2)); +end. \ No newline at end of file diff --git a/TreeConverter/TreeRealization/generics.cs b/TreeConverter/TreeRealization/generics.cs index 13e886df4..0c3ea82a5 100644 --- a/TreeConverter/TreeRealization/generics.cs +++ b/TreeConverter/TreeRealization/generics.cs @@ -2091,7 +2091,14 @@ namespace PascalABCCompiler.TreeRealization private void conform_basic_function(string name, int base_func_num) { - SymbolInfo si1 = _original_generic.find_first_in_type(name, true); + SymbolInfo si1 = null; + List sil = _original_generic.find_in_type(name, true); + foreach (SymbolInfo si in sil) + if (si.sym_info is function_node && !(si.sym_info as function_node).is_extension_method) + { + si1 = si; + break; + } AddMember(si1.sym_info, temp_names[base_func_num].sym_info); }