diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 2604838ad..177122bc7 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 = "4"; public const string Build = "2"; - public const string Revision = "1890"; + public const string Revision = "1893"; 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 abe919bfe..d9bd602e0 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%MINOR%=4 -%REVISION%=1890 %COREVERSION%=2 +%REVISION%=1893 +%MINOR%=4 %MAJOR%=3 diff --git a/InstallerSamples/Graphics/WPFObjects/gr_MovingObjectsWPF.pas b/InstallerSamples/Graphics/WPFObjects/gr_MovingObjectsWPF.pas index abd97bbbd..163999bc7 100644 --- a/InstallerSamples/Graphics/WPFObjects/gr_MovingObjectsWPF.pas +++ b/InstallerSamples/Graphics/WPFObjects/gr_MovingObjectsWPF.pas @@ -2,15 +2,18 @@ const /// Количество графических объектов - Count = 300; + Count = 1000; /// Возвращает случайный графический объект + +var w := 50; + function NewRandomABC: ObjectWPF; begin case Random(3) of -0: Result := new CircleWPF(Random(Window.Width.Round-30)+10,Random(Window.Height.Round-30)+10,Random(10)+5,RandomColor); -1: Result := new RectangleWPF(Random(Window.Width.Round-30)+10,Random(Window.Height.Round-30)+10,Random(20)+10,Random(20)+10,RandomColor); -2: Result := new StarWPF(Random(Window.Width.Round-30)+10,Random(Window.Height.Round-30)+10,Random(20)+10,Random(10)+5,Random(4)+4,RandomColor); +0: Result := new CircleWPF(Random(Window.Width.Round-w)+w/2,Random(Window.Height.Round-w)+w/2,Random(w/2),RandomColor); +1: Result := new RectangleWPF(Random(Window.Width.Round-w)+w/2,Random(Window.Height.Round-w)+w/2,Random(w),Random(w),RandomColor); +2: Result := new StarWPF(Random(Window.Width.Round-w)+w/2,Random(Window.Height.Round-w)+w/2,Random(w/2),Random(w/2),Random(4)+4,RandomColor); end; end; @@ -24,8 +27,8 @@ begin o.dy := -o.dy; end; +procedure CreateAll; begin - Window.Title := 'Движущиеся объекты'; for var i:=1 to Count do begin var m: ObjectWPF := NewRandomABC; @@ -34,11 +37,21 @@ begin m.dy := Random(-3,3); until (m.dx<>0) and (m.dy<>0); end; +end; + +procedure MoveAll; +begin + for var i:=0 to Objects.Count-1 do + Move(Objects[i]); +end; + +begin + Window.Title := 'Движущиеся объекты'; + Invoke(CreateAll); var k := 1; while True do begin - for var i:=0 to Objects.Count-1 do - Move(Objects[i]); + Invoke(MoveAll); k += 1; Window.Title := Format('{0,5:f2}',k/Milliseconds*1000)+' кадров в секунду'; end; diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 70bd25bbd..5dc3c5a00 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.4.2.1890' +!define VERSION '3.4.2.1893' diff --git a/TestSuite/CompilationSamples/PABCSystem.pas b/TestSuite/CompilationSamples/PABCSystem.pas index cbb30b432..8b584ae3f 100644 --- a/TestSuite/CompilationSamples/PABCSystem.pas +++ b/TestSuite/CompilationSamples/PABCSystem.pas @@ -8581,6 +8581,22 @@ begin end; end; +/// Возвращает произведение элементов последовательности +function Product(Self: sequence of real): real; extensionmethod; +begin + Result := 1.0; + foreach var x in Self do + Result *= x; +end; + +/// Возвращает произведение элементов последовательности +function Product(Self: sequence of integer): integer; extensionmethod; +begin + Result := 1; + foreach var x in Self do + Result *= x; +end; + /// Возвращает отсортированную по возрастанию последовательность function Sorted(Self: sequence of T): sequence of T; extensionmethod; begin @@ -9602,6 +9618,22 @@ begin Self[i, j] := f(i, j); end; +/// Применяет действие к каждому элементу двумерного массива +procedure &ForEach(Self: array [,] of T; act: T -> ()); extensionmethod; +begin + for var i := 0 to Self.RowCount - 1 do + for var j := 0 to Self.ColCount - 1 do + act(Self[i, j]); +end; + +/// Применяет действие к каждому элементу двумерного массива +procedure &ForEach(Self: array [,] of T; act: (T,integer,integer) -> ()); extensionmethod; +begin + for var i := 0 to Self.RowCount - 1 do + for var j := 0 to Self.ColCount - 1 do + act(Self[i, j],i,j); +end; + // ----------------------------------------------------- //>> Фиктивная секция YYY - не удалять! # YYY // ----------------------------------------------------- @@ -9730,7 +9762,7 @@ begin end;} /// Возвращает минимальный элемент -function Min(Self: array of T): T; extensionmethod;where T: System.IComparable; +function Min(Self: array of T): T; extensionmethod; where T: System.IComparable; begin Result := Self[0]; for var i := 1 to Self.Length - 1 do @@ -9739,7 +9771,7 @@ begin end; /// Возвращает максимальный элемент -function Max(Self: array of T): T; extensionmethod;where T: System.IComparable; +function Max(Self: array of T): T; extensionmethod; where T: System.IComparable; begin Result := Self[0]; for var i := 1 to Self.Length - 1 do diff --git a/TestSuite/CompilationSamples/WPFObjects.pas b/TestSuite/CompilationSamples/WPFObjects.pas index d359b1eff..3e207ce82 100644 --- a/TestSuite/CompilationSamples/WPFObjects.pas +++ b/TestSuite/CompilationSamples/WPFObjects.pas @@ -77,6 +77,8 @@ function Rect(x,y,w,h: real): GRect; function ColorBrush(c: Color): GBrush; //{{{--doc: Конец секции 1 }}} +procedure Invoke(p: ()->()); + //{{{doc: Начало секции 2 }}} type // ----------------------------------------------------- @@ -927,6 +929,8 @@ function Pnt(x,y: real) := new Point(x,y); function Rect(x,y,w,h: real) := new System.Windows.Rect(x,y,w,h); function ColorBrush(c: Color) := new SolidColorBrush(c); +procedure Invoke(p: ()->()) := GraphWPFBase.Invoke(p); + procedure SetLeft(Self: UIElement; l: integer) := Self.SetLeft(l); procedure SetTop(Self: UIElement; t: integer) := Self.SetTop(t); diff --git a/TreeConverter/SymbolTable/DSST/SymbolTable.cs b/TreeConverter/SymbolTable/DSST/SymbolTable.cs index 36de9cc88..6471f309d 100644 --- a/TreeConverter/SymbolTable/DSST/SymbolTable.cs +++ b/TreeConverter/SymbolTable/DSST/SymbolTable.cs @@ -900,7 +900,8 @@ namespace SymbolTable ((to.symbol_kind == symbol_kind.sk_overload_function) && (add.symbol_kind == symbol_kind.sk_overload_function)) || ((to.symbol_kind == symbol_kind.sk_overload_procedure) && (add.symbol_kind == symbol_kind.sk_overload_procedure)) - || to.sym_info != add.sym_info && to.sym_info is PascalABCCompiler.TreeRealization.function_node && add.sym_info is PascalABCCompiler.TreeRealization.function_node /*&& (to.sym_info as PascalABCCompiler.TreeRealization.function_node).is_extension_method*/ && (add.sym_info as PascalABCCompiler.TreeRealization.function_node).is_extension_method + || to.sym_info != add.sym_info && to.sym_info is PascalABCCompiler.TreeRealization.function_node && add.sym_info is PascalABCCompiler.TreeRealization.function_node + /*&& (to.sym_info as PascalABCCompiler.TreeRealization.function_node).is_extension_method*/ && (add.sym_info as PascalABCCompiler.TreeRealization.function_node).is_extension_method ); } diff --git a/bin/Lib/Graph3D.pas b/bin/Lib/Graph3D.pas index df688d086..8008b90d3 100644 --- a/bin/Lib/Graph3D.pas +++ b/bin/Lib/Graph3D.pas @@ -75,6 +75,8 @@ var //>> Короткие функции модуля Graph3D # Graph3D short functions // ----------------------------------------------------- +procedure Invoke(p: ()->()); + /// Возвращает цвет по красной, зеленой и синей составляющей (в диапазоне 0..255) function RGB(r, g, b: byte): Color; /// Возвращает цвет по красной, зеленой и синей составляющей и параметру прозрачности (в диапазоне 0..255) @@ -1373,8 +1375,8 @@ type protected function CreateObject: Object3D; override := new SphereT(X, Y, Z, Radius, Material.Clone); constructor := CreateBase(NewVisualObject(1), 0, 0, 0, Materialhelper.CreateMaterial(Colors.Blue)); - constructor(x, y, z, r: real; m: Gmaterial) := CreateBase(NewVisualObject(r), x, y, z, m); public + constructor(x, y, z, r: real; m: Gmaterial) := CreateBase(NewVisualObject(r), x, y, z, m); /// Радиус сферы property Radius: real read GetR write SetR; /// Возвращает клон сферы @@ -2567,6 +2569,8 @@ procedure __FinalizeModule__; implementation +procedure Invoke(p: ()->()) := GraphWPFBase.Invoke(p); + function RGB(r, g, b: byte) := Color.Fromrgb(r, g, b); function ARGB(a, r, g, b: byte) := Color.FromArgb(a, r, g, b); function P3D(x, y, z: real) := new Point3D(x, y, z); diff --git a/bin/Lib/WPFObjects.pas b/bin/Lib/WPFObjects.pas index d359b1eff..3e207ce82 100644 --- a/bin/Lib/WPFObjects.pas +++ b/bin/Lib/WPFObjects.pas @@ -77,6 +77,8 @@ function Rect(x,y,w,h: real): GRect; function ColorBrush(c: Color): GBrush; //{{{--doc: Конец секции 1 }}} +procedure Invoke(p: ()->()); + //{{{doc: Начало секции 2 }}} type // ----------------------------------------------------- @@ -927,6 +929,8 @@ function Pnt(x,y: real) := new Point(x,y); function Rect(x,y,w,h: real) := new System.Windows.Rect(x,y,w,h); function ColorBrush(c: Color) := new SolidColorBrush(c); +procedure Invoke(p: ()->()) := GraphWPFBase.Invoke(p); + procedure SetLeft(Self: UIElement; l: integer) := Self.SetLeft(l); procedure SetTop(Self: UIElement; t: integer) := Self.SetTop(t);