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); }