This commit is contained in:
Mikhalkovich Stanislav 2024-03-11 20:33:13 +03:00
parent 90363ced45
commit 8f9dc7e5a0
10 changed files with 120 additions and 20 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3"; public const string Major = "3";
public const string Minor = "9"; public const string Minor = "9";
public const string Build = "0"; public const string Build = "0";
public const string Revision = "3427"; public const string Revision = "3430";
public const string MainVersion = Major + "." + Minor; public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=9
%REVISION%=3427
%COREVERSION%=0 %COREVERSION%=0
%REVISION%=3430
%MINOR%=9
%MAJOR%=3 %MAJOR%=3

View file

@ -1 +1 @@
3.9.0.3427 3.9.0.3430

View file

@ -1 +1 @@
!define VERSION '3.9.0.3427' !define VERSION '3.9.0.3430'

View file

@ -2357,10 +2357,9 @@ function DeleteObject(obj: IntPtr): integer; external 'Gdi32.dll' name 'DeleteOb
function CreateCompatibleDC(obj: IntPtr): IntPtr; external 'Gdi32.dll' name 'CreateCompatibleDC'; function CreateCompatibleDC(obj: IntPtr): IntPtr; external 'Gdi32.dll' name 'CreateCompatibleDC';
procedure Picture.FloodFill(x, y: integer; c: Color); procedure Picture.FloodFill(x, y: integer; c: Color);
var //var hdc, hBrush, hOldBrush: IntPtr;
hdc, hBrush, hOldBrush: IntPtr;
begin begin
var borderColor: Color := GetPixel(x, y); {var borderColor: Color := GetPixel(x, y);
var bc := ColorTranslator.ToWin32(borderColor); var bc := ColorTranslator.ToWin32(borderColor);
var cc := ColorTranslator.ToWin32(c); var cc := ColorTranslator.ToWin32(c);
@ -2380,7 +2379,24 @@ begin
DeleteObject(hdc); DeleteObject(hdc);
Monitor.Exit(f); Monitor.Exit(f);}
var st := new Stack<Point>();
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; end;
procedure Picture.Clear; procedure Picture.Clear;

View file

@ -2161,14 +2161,14 @@ function Copy(a: System.Array): System.Array;
/// Сортирует динамический массив по возрастанию /// Сортирует динамический массив по возрастанию
procedure Sort<T>(a: array of T); procedure Sort<T>(a: array of T);
/// Сортирует динамический массив по возрастанию
procedure Sort(a: array of string);
/// Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения cmp /// Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения cmp
procedure Sort<T>(a: array of T; cmp: (T,T)->integer); procedure Sort<T>(a: array of T; cmp: (T,T)->integer);
/// Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения less /// Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения less
procedure Sort<T>(a: array of T; less: (T,T)->boolean); procedure Sort<T>(a: array of T; less: (T,T)->boolean);
/// Сортирует динамический массив по ключу /// Сортирует динамический массив по ключу
procedure Sort<T,TKey>(a: array of T; keySelector: T->TKey); procedure Sort<T,TKey>(a: array of T; keySelector: T->TKey);
/// Сортирует динамический массив по возрастанию
procedure Sort(a: array of string);
/// Сортирует динамический массив по ключу /// Сортирует динамический массив по ключу
procedure Sort<T>(a: array of T; keySelector: T->string); procedure Sort<T>(a: array of T; keySelector: T->string);
@ -2184,10 +2184,15 @@ procedure Sort<T>(l: List<T>; less: (T,T)->boolean);
procedure Sort<T,T1>(var l: List<T>; keySelector: T->T1); procedure Sort<T,T1>(var l: List<T>; keySelector: T->T1);
/// Сортирует список по возрастанию по ключу /// Сортирует список по возрастанию по ключу
procedure Sort<T>(var l: List<T>; keySelector: T->string); procedure Sort<T>(var l: List<T>; keySelector: T->string);
/// Сортирует динамический массив по убыванию /// Сортирует динамический массив по убыванию
procedure SortDescending<T>(a: array of T); procedure SortDescending<T>(a: array of T);
/// Сортирует динамический массив по убыванию
procedure SortDescending(a: array of string);
/// Сортирует динамический массив по убыванию по ключу /// Сортирует динамический массив по убыванию по ключу
procedure SortDescending<T,T1>(var a: array of T; keySelector: T->T1); procedure SortDescending<T,T1>(var a: array of T; keySelector: T->T1);
/// Сортирует динамический массив по убыванию по ключу
procedure SortDescending<T>(var a: array of T; keySelector: T->string);
/// Сортирует список по убыванию /// Сортирует список по убыванию
procedure SortDescending<T>(l: List<T>); procedure SortDescending<T>(l: List<T>);
/// Сортирует список по убыванию /// Сортирует список по убыванию
@ -8865,11 +8870,22 @@ begin
Reverse(a); Reverse(a);
end; end;
procedure SortDescending(a: array of string);
begin
Sort(a);
Reverse(a);
end;
procedure SortDescending<T,T1>(var a: array of T; keySelector: T->T1); procedure SortDescending<T,T1>(var a: array of T; keySelector: T->T1);
begin begin
a := a.OrderByDescending(x->keySelector(x)).ToArray; a := a.OrderByDescending(x->keySelector(x)).ToArray;
end; end;
procedure SortDescending<T>(var a: array of T; keySelector: T->string);
begin
a := a.OrderByDescending(x->keySelector(x),System.StringComparer.Ordinal).ToArray;
end;
procedure SortDescending<T>(l: List<T>); procedure SortDescending<T>(l: List<T>);
begin begin
Sort(l); Sort(l);
@ -12142,6 +12158,12 @@ begin
System.Array.Sort(Self); System.Array.Sort(Self);
end; end;
/// Сортирует массив по возрастанию
procedure Sort(Self: array of string); extensionmethod;
begin
System.Array.Sort(Self,System.StringComparer.Ordinal);
end;
/// Сортирует массив по убыванию /// Сортирует массив по убыванию
procedure SortDescending<T>(Self: array of T); extensionmethod; procedure SortDescending<T>(Self: array of T); extensionmethod;
begin begin
@ -12149,6 +12171,13 @@ begin
Reverse(Self); Reverse(Self);
end; end;
/// Сортирует массив по убыванию
procedure SortDescending(Self: array of string); extensionmethod;
begin
System.Array.Sort(Self,System.StringComparer.Ordinal);
Reverse(Self);
end;
/// Сортирует массив по возрастанию, используя cmp в качестве функции сравнения элементов /// Сортирует массив по возрастанию, используя cmp в качестве функции сравнения элементов
procedure Sort<T>(Self: array of T; cmp: (T,T) ->integer); extensionmethod; procedure Sort<T>(Self: array of T; cmp: (T,T) ->integer); extensionmethod;
begin begin
@ -12162,6 +12191,13 @@ begin
System.Array.Copy(a,Self,a.Length); System.Array.Copy(a,Self,a.Length);
end; end;
/// Сортирует массив по возрастанию по ключу
procedure Sort<T>(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<T,T1>(Self: array of T; keySelector: T -> T1); extensionmethod; procedure SortDescending<T,T1>(Self: array of T; keySelector: T -> T1); extensionmethod;
begin begin
@ -12169,6 +12205,14 @@ begin
System.Array.Copy(a,Self,a.Length); System.Array.Copy(a,Self,a.Length);
end; end;
/// Сортирует массив по убыванию по ключу
procedure SortDescending<T>(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); function High(Self: System.Array); extensionmethod := High(Self);

View file

@ -3013,6 +3013,8 @@ namespace PascalABCCompiler.TreeConverter
// Теперь раз в list осталась одна функция, найти её в functions и только её и оставить // Теперь раз в list осталась одна функция, найти её в functions и только её и оставить
// Надо делать копию 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(); var functions1 = functions.Where(fun => fun.sym_info == list[0]).ToList();
if (functions1.Count == 0) if (functions1.Count == 0)
return AddError<function_node>(new NoFunctionWithSameArguments(FunctionName, loc, true)); // это не должно случиться, но вдруг return AddError<function_node>(new NoFunctionWithSameArguments(FunctionName, loc, true)); // это не должно случиться, но вдруг

View file

@ -2357,10 +2357,9 @@ function DeleteObject(obj: IntPtr): integer; external 'Gdi32.dll' name 'DeleteOb
function CreateCompatibleDC(obj: IntPtr): IntPtr; external 'Gdi32.dll' name 'CreateCompatibleDC'; function CreateCompatibleDC(obj: IntPtr): IntPtr; external 'Gdi32.dll' name 'CreateCompatibleDC';
procedure Picture.FloodFill(x, y: integer; c: Color); procedure Picture.FloodFill(x, y: integer; c: Color);
var //var hdc, hBrush, hOldBrush: IntPtr;
hdc, hBrush, hOldBrush: IntPtr;
begin begin
var borderColor: Color := GetPixel(x, y); {var borderColor: Color := GetPixel(x, y);
var bc := ColorTranslator.ToWin32(borderColor); var bc := ColorTranslator.ToWin32(borderColor);
var cc := ColorTranslator.ToWin32(c); var cc := ColorTranslator.ToWin32(c);
@ -2380,7 +2379,24 @@ begin
DeleteObject(hdc); DeleteObject(hdc);
Monitor.Exit(f); Monitor.Exit(f);}
var st := new Stack<Point>();
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; end;
procedure Picture.Clear; procedure Picture.Clear;

View file

@ -2161,14 +2161,14 @@ function Copy(a: System.Array): System.Array;
/// Сортирует динамический массив по возрастанию /// Сортирует динамический массив по возрастанию
procedure Sort<T>(a: array of T); procedure Sort<T>(a: array of T);
/// Сортирует динамический массив по возрастанию
procedure Sort(a: array of string);
/// Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения cmp /// Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения cmp
procedure Sort<T>(a: array of T; cmp: (T,T)->integer); procedure Sort<T>(a: array of T; cmp: (T,T)->integer);
/// Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения less /// Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения less
procedure Sort<T>(a: array of T; less: (T,T)->boolean); procedure Sort<T>(a: array of T; less: (T,T)->boolean);
/// Сортирует динамический массив по ключу /// Сортирует динамический массив по ключу
procedure Sort<T,TKey>(a: array of T; keySelector: T->TKey); procedure Sort<T,TKey>(a: array of T; keySelector: T->TKey);
/// Сортирует динамический массив по возрастанию
procedure Sort(a: array of string);
/// Сортирует динамический массив по ключу /// Сортирует динамический массив по ключу
procedure Sort<T>(a: array of T; keySelector: T->string); procedure Sort<T>(a: array of T; keySelector: T->string);
@ -2184,10 +2184,15 @@ procedure Sort<T>(l: List<T>; less: (T,T)->boolean);
procedure Sort<T,T1>(var l: List<T>; keySelector: T->T1); procedure Sort<T,T1>(var l: List<T>; keySelector: T->T1);
/// Сортирует список по возрастанию по ключу /// Сортирует список по возрастанию по ключу
procedure Sort<T>(var l: List<T>; keySelector: T->string); procedure Sort<T>(var l: List<T>; keySelector: T->string);
/// Сортирует динамический массив по убыванию /// Сортирует динамический массив по убыванию
procedure SortDescending<T>(a: array of T); procedure SortDescending<T>(a: array of T);
/// Сортирует динамический массив по убыванию
procedure SortDescending(a: array of string);
/// Сортирует динамический массив по убыванию по ключу /// Сортирует динамический массив по убыванию по ключу
procedure SortDescending<T,T1>(var a: array of T; keySelector: T->T1); procedure SortDescending<T,T1>(var a: array of T; keySelector: T->T1);
/// Сортирует динамический массив по убыванию по ключу
procedure SortDescending<T>(var a: array of T; keySelector: T->string);
/// Сортирует список по убыванию /// Сортирует список по убыванию
procedure SortDescending<T>(l: List<T>); procedure SortDescending<T>(l: List<T>);
/// Сортирует список по убыванию /// Сортирует список по убыванию
@ -8865,11 +8870,22 @@ begin
Reverse(a); Reverse(a);
end; end;
procedure SortDescending(a: array of string);
begin
Sort(a);
Reverse(a);
end;
procedure SortDescending<T,T1>(var a: array of T; keySelector: T->T1); procedure SortDescending<T,T1>(var a: array of T; keySelector: T->T1);
begin begin
a := a.OrderByDescending(x->keySelector(x)).ToArray; a := a.OrderByDescending(x->keySelector(x)).ToArray;
end; end;
procedure SortDescending<T>(var a: array of T; keySelector: T->string);
begin
a := a.OrderByDescending(x->keySelector(x),System.StringComparer.Ordinal).ToArray;
end;
procedure SortDescending<T>(l: List<T>); procedure SortDescending<T>(l: List<T>);
begin begin
Sort(l); Sort(l);

View file

@ -2127,6 +2127,9 @@
<member name="M:Sort``1(``0[])"> <member name="M:Sort``1(``0[])">
<summary>Сортирует динамический массив по возрастанию</summary> <summary>Сортирует динамический массив по возрастанию</summary>
</member> </member>
<member name="M:Sort(System.String[])">
<summary>Сортирует динамический массив по возрастанию</summary>
</member>
<member name="M:Sort``1(``0[],System.Func{``0,``0,System.Int32})"> <member name="M:Sort``1(``0[],System.Func{``0,``0,System.Int32})">
<summary>Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения cmp</summary> <summary>Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения cmp</summary>
</member> </member>
@ -2136,9 +2139,6 @@
<member name="M:Sort``2(``0[],System.Func{``0,``1})"> <member name="M:Sort``2(``0[],System.Func{``0,``1})">
<summary>Сортирует динамический массив по ключу</summary> <summary>Сортирует динамический массив по ключу</summary>
</member> </member>
<member name="M:Sort(System.String[])">
<summary>Сортирует динамический массив по возрастанию</summary>
</member>
<member name="M:Sort``1(``0[],System.Func{``0,System.String})"> <member name="M:Sort``1(``0[],System.Func{``0,System.String})">
<summary>Сортирует динамический массив по ключу</summary> <summary>Сортирует динамический массив по ключу</summary>
</member> </member>
@ -2163,9 +2163,15 @@
<member name="M:SortDescending``1(``0[])"> <member name="M:SortDescending``1(``0[])">
<summary>Сортирует динамический массив по убыванию</summary> <summary>Сортирует динамический массив по убыванию</summary>
</member> </member>
<member name="M:SortDescending(System.String[])">
<summary>Сортирует динамический массив по убыванию</summary>
</member>
<member name="M:SortDescending``2(``0[]@,System.Func{``0,``1})"> <member name="M:SortDescending``2(``0[]@,System.Func{``0,``1})">
<summary>Сортирует динамический массив по убыванию по ключу</summary> <summary>Сортирует динамический массив по убыванию по ключу</summary>
</member> </member>
<member name="M:SortDescending``1(``0[]@,System.Func{``0,System.String})">
<summary>Сортирует динамический массив по убыванию по ключу</summary>
</member>
<member name="M:SortDescending``1(System.Collections.Generic.List{``0})"> <member name="M:SortDescending``1(System.Collections.Generic.List{``0})">
<summary>Сортирует список по убыванию</summary> <summary>Сортирует список по убыванию</summary>
</member> </member>