From 9020b84b9847563000a2ac610a9d7a235b843690 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sun, 18 Apr 2021 11:06:16 +0200 Subject: [PATCH] #2474 --- TestSuite/records22.pas | 15 +++++++++++++++ .../TreeConversion/compilation_context.cs | 9 ++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 TestSuite/records22.pas diff --git a/TestSuite/records22.pas b/TestSuite/records22.pas new file mode 100644 index 000000000..a84f25491 --- /dev/null +++ b/TestSuite/records22.pas @@ -0,0 +1,15 @@ +type + r1 = record + val: integer; + static function operator=(o1: r1; o2: integer) := o1.val = o2; + static function operator<>(o1: r1; o2: integer) := o1.val <> o2; + end; + +begin + var o: r1; + assert(o = o); + assert(o = 0); + assert(o <> 2); + o.val := 2; + assert(o = 2); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/compilation_context.cs b/TreeConverter/TreeConversion/compilation_context.cs index 92b60302d..ccc8dc2b3 100644 --- a/TreeConverter/TreeConversion/compilation_context.cs +++ b/TreeConverter/TreeConversion/compilation_context.cs @@ -1038,9 +1038,11 @@ namespace PascalABCCompiler.TreeConverter if (si2.sym_info is common_method_node) { cmn = si2.sym_info as common_method_node; - if (cmn.function_code != null) + if (cmn.function_code != null && cmn.parameters.Count == 2 && cmn.parameters[0].type == cmn.parameters[1].type) return; } + if (cmn != null && cmn.function_code != null) + cmn = null; SymbolInfo si = si_list[0]; SymbolTable.ClassMethodScope scope = convertion_data_and_alghoritms.symbol_table.CreateClassMethodScope(_ctn.scope, _cmn.scope, null, si.ToString()); if (cmn == null) @@ -1092,10 +1094,11 @@ namespace PascalABCCompiler.TreeConverter if (si2.sym_info is common_method_node) { cmn = si2.sym_info as common_method_node; - if (cmn.function_code != null) + if (cmn.function_code != null && cmn.parameters.Count == 2 && cmn.parameters[0].type == cmn.parameters[1].type) return; } - + if (cmn != null && cmn.function_code != null) + cmn = null; SymbolInfo si = si_list[0]; SymbolTable.ClassMethodScope scope = convertion_data_and_alghoritms.symbol_table.CreateClassMethodScope( _ctn.scope, _cmn.scope, null, si.ToString()); if (cmn == null)