diff --git a/TestSuite/overloads8.pas b/TestSuite/overloads8.pas new file mode 100644 index 000000000..51a0e7852 --- /dev/null +++ b/TestSuite/overloads8.pas @@ -0,0 +1,19 @@ +type Point = auto class + x,y: integer; +end; + +var i := 1; + +function RandomPoint: Point; +begin + Result := new Point(i, i); + Inc(i); +end; + +var a: array of Point; + +begin + a := ArrGen(10,i->RandomPoint); + assert(a.Min(p->p.x) = 1); + assert(a.Max(p->p.x) = 10); +end. \ No newline at end of file diff --git a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs index eddecea3b..6fbcc4885 100644 --- a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs +++ b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs @@ -2235,8 +2235,7 @@ namespace PascalABCCompiler.TreeConverter // выбрать либо функцию из оставшихся с ровно совпадающим типом лямбды либо с ближайшим // (остались только те, к которым можно преобразовать) // Некоторая проблема будет если лямбд останется несколько и расстояния до результата будут разными и ненулевыми везде - - if (funcs.Count == 2) // SSM - это ужасный способ устранения бага #236 Range(1,10).Sum(e -> e); Для хорошего способа весь код выбора версий функций для делегатов надо переписывать + if (funcs.Count >= 2) // SSM - это ужасный способ устранения бага #236 Range(1,10).Sum(e -> e); Для хорошего способа весь код выбора версий функций для делегатов надо переписывать { var f1 = funcs[0]; var f2 = funcs[1];