diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index ce03dc116..8c8d44371 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "9"; public const string Build = "0"; - public const string Revision = "3427"; + public const string Revision = "3430"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index e7c670b57..8fbd450a7 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%MINOR%=9 -%REVISION%=3427 %COREVERSION%=0 +%REVISION%=3430 +%MINOR%=9 %MAJOR%=3 diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index f95afe0a3..982cc1ce6 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.9.0.3427 +3.9.0.3430 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 095841646..8e2e84c3f 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.9.0.3427' +!define VERSION '3.9.0.3430' diff --git a/TestSuite/CompilationSamples/GraphABC.pas b/TestSuite/CompilationSamples/GraphABC.pas index 13db483ad..b9b068e89 100644 --- a/TestSuite/CompilationSamples/GraphABC.pas +++ b/TestSuite/CompilationSamples/GraphABC.pas @@ -2357,10 +2357,9 @@ function DeleteObject(obj: IntPtr): integer; external 'Gdi32.dll' name 'DeleteOb function CreateCompatibleDC(obj: IntPtr): IntPtr; external 'Gdi32.dll' name 'CreateCompatibleDC'; procedure Picture.FloodFill(x, y: integer; c: Color); -var - hdc, hBrush, hOldBrush: IntPtr; +//var hdc, hBrush, hOldBrush: IntPtr; begin - var borderColor: Color := GetPixel(x, y); + {var borderColor: Color := GetPixel(x, y); var bc := ColorTranslator.ToWin32(borderColor); var cc := ColorTranslator.ToWin32(c); @@ -2380,7 +2379,24 @@ begin DeleteObject(hdc); - Monitor.Exit(f); + Monitor.Exit(f);} + var st := new Stack(); + var targetColor := bmp.GetPixel(x,y); + st.Push(Pnt(x,y)); + while st.Count > 0 do + begin + var p := st.Pop; + if (p.x < 0) or (p.x >= WindowWidth) or (p.y < 0) or (p.y >= WindowHeight) then + continue; + if bmp.GetPixel(p.x,p.y) = targetColor then + begin + bmp.SetPixel(p.x,p.y,c); + st.Push(Pnt(p.x,p.y-1)); + st.Push(Pnt(p.x,p.y+1)); + st.Push(Pnt(p.x-1,p.y)); + st.Push(Pnt(p.x+1,p.y)); + end; + end; end; procedure Picture.Clear; diff --git a/TestSuite/CompilationSamples/PABCSystem.pas b/TestSuite/CompilationSamples/PABCSystem.pas index 4be74b492..c1385b92e 100644 --- a/TestSuite/CompilationSamples/PABCSystem.pas +++ b/TestSuite/CompilationSamples/PABCSystem.pas @@ -2161,14 +2161,14 @@ function Copy(a: System.Array): System.Array; /// Сортирует динамический массив по возрастанию procedure Sort(a: array of T); +/// Сортирует динамический массив по возрастанию +procedure Sort(a: array of string); /// Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения cmp procedure Sort(a: array of T; cmp: (T,T)->integer); /// Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения less procedure Sort(a: array of T; less: (T,T)->boolean); /// Сортирует динамический массив по ключу procedure Sort(a: array of T; keySelector: T->TKey); -/// Сортирует динамический массив по возрастанию -procedure Sort(a: array of string); /// Сортирует динамический массив по ключу procedure Sort(a: array of T; keySelector: T->string); @@ -2184,10 +2184,15 @@ procedure Sort(l: List; less: (T,T)->boolean); procedure Sort(var l: List; keySelector: T->T1); /// Сортирует список по возрастанию по ключу procedure Sort(var l: List; keySelector: T->string); + /// Сортирует динамический массив по убыванию procedure SortDescending(a: array of T); +/// Сортирует динамический массив по убыванию +procedure SortDescending(a: array of string); /// Сортирует динамический массив по убыванию по ключу procedure SortDescending(var a: array of T; keySelector: T->T1); +/// Сортирует динамический массив по убыванию по ключу +procedure SortDescending(var a: array of T; keySelector: T->string); /// Сортирует список по убыванию procedure SortDescending(l: List); /// Сортирует список по убыванию @@ -8865,11 +8870,22 @@ begin Reverse(a); end; +procedure SortDescending(a: array of string); +begin + Sort(a); + Reverse(a); +end; + procedure SortDescending(var a: array of T; keySelector: T->T1); begin a := a.OrderByDescending(x->keySelector(x)).ToArray; end; +procedure SortDescending(var a: array of T; keySelector: T->string); +begin + a := a.OrderByDescending(x->keySelector(x),System.StringComparer.Ordinal).ToArray; +end; + procedure SortDescending(l: List); begin Sort(l); @@ -12142,6 +12158,12 @@ begin System.Array.Sort(Self); end; +/// Сортирует массив по возрастанию +procedure Sort(Self: array of string); extensionmethod; +begin + System.Array.Sort(Self,System.StringComparer.Ordinal); +end; + /// Сортирует массив по убыванию procedure SortDescending(Self: array of T); extensionmethod; begin @@ -12149,6 +12171,13 @@ begin Reverse(Self); end; +/// Сортирует массив по убыванию +procedure SortDescending(Self: array of string); extensionmethod; +begin + System.Array.Sort(Self,System.StringComparer.Ordinal); + Reverse(Self); +end; + /// Сортирует массив по возрастанию, используя cmp в качестве функции сравнения элементов procedure Sort(Self: array of T; cmp: (T,T) ->integer); extensionmethod; begin @@ -12162,6 +12191,13 @@ begin System.Array.Copy(a,Self,a.Length); end; +/// Сортирует массив по возрастанию по ключу +procedure Sort(Self: array of T; keySelector: T -> string); extensionmethod; +begin + var a := Self.OrderBy(keySelector,System.StringComparer.Ordinal).ToArray; + System.Array.Copy(a,Self,a.Length); +end; + /// Сортирует массив по убыванию по ключу procedure SortDescending(Self: array of T; keySelector: T -> T1); extensionmethod; begin @@ -12169,6 +12205,14 @@ begin System.Array.Copy(a,Self,a.Length); end; +/// Сортирует массив по убыванию по ключу +procedure SortDescending(Self: array of T; keySelector: T -> string); extensionmethod; +begin + var a := Self.OrderByDescending(keySelector,System.StringComparer.Ordinal).ToArray; + System.Array.Copy(a,Self,a.Length); +end; + + /// Возвращает индекс последнего элемента массива function High(Self: System.Array); extensionmethod := High(Self); diff --git a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs index d1d9cdc48..1d9731df6 100644 --- a/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs +++ b/TreeConverter/TreeConversion/convertion_data_and_alghoritms.cs @@ -3013,6 +3013,8 @@ namespace PascalABCCompiler.TreeConverter // Теперь раз в list осталась одна функция, найти её в functions и только её и оставить // Надо делать копию functions иначе это влияет на следующий код + if (list[0].is_generic_function_instance) + list[0] = list[0].original_function; var functions1 = functions.Where(fun => fun.sym_info == list[0]).ToList(); if (functions1.Count == 0) return AddError(new NoFunctionWithSameArguments(FunctionName, loc, true)); // это не должно случиться, но вдруг diff --git a/bin/Lib/GraphABC.pas b/bin/Lib/GraphABC.pas index 13db483ad..b9b068e89 100644 --- a/bin/Lib/GraphABC.pas +++ b/bin/Lib/GraphABC.pas @@ -2357,10 +2357,9 @@ function DeleteObject(obj: IntPtr): integer; external 'Gdi32.dll' name 'DeleteOb function CreateCompatibleDC(obj: IntPtr): IntPtr; external 'Gdi32.dll' name 'CreateCompatibleDC'; procedure Picture.FloodFill(x, y: integer; c: Color); -var - hdc, hBrush, hOldBrush: IntPtr; +//var hdc, hBrush, hOldBrush: IntPtr; begin - var borderColor: Color := GetPixel(x, y); + {var borderColor: Color := GetPixel(x, y); var bc := ColorTranslator.ToWin32(borderColor); var cc := ColorTranslator.ToWin32(c); @@ -2380,7 +2379,24 @@ begin DeleteObject(hdc); - Monitor.Exit(f); + Monitor.Exit(f);} + var st := new Stack(); + var targetColor := bmp.GetPixel(x,y); + st.Push(Pnt(x,y)); + while st.Count > 0 do + begin + var p := st.Pop; + if (p.x < 0) or (p.x >= WindowWidth) or (p.y < 0) or (p.y >= WindowHeight) then + continue; + if bmp.GetPixel(p.x,p.y) = targetColor then + begin + bmp.SetPixel(p.x,p.y,c); + st.Push(Pnt(p.x,p.y-1)); + st.Push(Pnt(p.x,p.y+1)); + st.Push(Pnt(p.x-1,p.y)); + st.Push(Pnt(p.x+1,p.y)); + end; + end; end; procedure Picture.Clear; diff --git a/bin/Lib/PABCSystem.pas b/bin/Lib/PABCSystem.pas index 83807891b..c1385b92e 100644 --- a/bin/Lib/PABCSystem.pas +++ b/bin/Lib/PABCSystem.pas @@ -2161,14 +2161,14 @@ function Copy(a: System.Array): System.Array; /// Сортирует динамический массив по возрастанию procedure Sort(a: array of T); +/// Сортирует динамический массив по возрастанию +procedure Sort(a: array of string); /// Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения cmp procedure Sort(a: array of T; cmp: (T,T)->integer); /// Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения less procedure Sort(a: array of T; less: (T,T)->boolean); /// Сортирует динамический массив по ключу procedure Sort(a: array of T; keySelector: T->TKey); -/// Сортирует динамический массив по возрастанию -procedure Sort(a: array of string); /// Сортирует динамический массив по ключу procedure Sort(a: array of T; keySelector: T->string); @@ -2184,10 +2184,15 @@ procedure Sort(l: List; less: (T,T)->boolean); procedure Sort(var l: List; keySelector: T->T1); /// Сортирует список по возрастанию по ключу procedure Sort(var l: List; keySelector: T->string); + /// Сортирует динамический массив по убыванию procedure SortDescending(a: array of T); +/// Сортирует динамический массив по убыванию +procedure SortDescending(a: array of string); /// Сортирует динамический массив по убыванию по ключу procedure SortDescending(var a: array of T; keySelector: T->T1); +/// Сортирует динамический массив по убыванию по ключу +procedure SortDescending(var a: array of T; keySelector: T->string); /// Сортирует список по убыванию procedure SortDescending(l: List); /// Сортирует список по убыванию @@ -8865,11 +8870,22 @@ begin Reverse(a); end; +procedure SortDescending(a: array of string); +begin + Sort(a); + Reverse(a); +end; + procedure SortDescending(var a: array of T; keySelector: T->T1); begin a := a.OrderByDescending(x->keySelector(x)).ToArray; end; +procedure SortDescending(var a: array of T; keySelector: T->string); +begin + a := a.OrderByDescending(x->keySelector(x),System.StringComparer.Ordinal).ToArray; +end; + procedure SortDescending(l: List); begin Sort(l); diff --git a/bin/Lib/PABCSystem.xml b/bin/Lib/PABCSystem.xml index 377976cb0..940ba640c 100644 --- a/bin/Lib/PABCSystem.xml +++ b/bin/Lib/PABCSystem.xml @@ -2127,6 +2127,9 @@ Сортирует динамический массив по возрастанию + + Сортирует динамический массив по возрастанию + Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения cmp @@ -2136,9 +2139,6 @@ Сортирует динамический массив по ключу - - Сортирует динамический массив по возрастанию - Сортирует динамический массив по ключу @@ -2163,9 +2163,15 @@ Сортирует динамический массив по убыванию + + Сортирует динамический массив по убыванию + Сортирует динамический массив по убыванию по ключу + + Сортирует динамический массив по убыванию по ключу + Сортирует список по убыванию