diff --git a/SyntaxTree/tree/TreeHelper.cs b/SyntaxTree/tree/TreeHelper.cs index 0f19434bd..873cdee35 100644 --- a/SyntaxTree/tree/TreeHelper.cs +++ b/SyntaxTree/tree/TreeHelper.cs @@ -769,6 +769,11 @@ namespace PascalABCCompiler.SyntaxTree sb.Append(" " + pa.ToString() + " "); return sb.ToString(); } + + bool is_extension() + { + return proc_attributes.proc_attributes.FindIndex(attr => attr.attribute_type == proc_attribute.attr_extension) >=0; + } } public partial class function_header diff --git a/TestSuite/ExtPropAssignTuple.pas b/TestSuite/ExtPropAssignTuple.pas new file mode 100644 index 000000000..12367ba53 --- /dev/null +++ b/TestSuite/ExtPropAssignTuple.pas @@ -0,0 +1,14 @@ +type + TClass = class + private + fX, fY: integer; + + public + property X: integer write (fX, fY) := (3, 4); + end; + +begin + var d := TClass.Create; + d.X := 55; + Assert(d.fX=3); +end. \ No newline at end of file diff --git a/TestSuite/foreach_arr_seq.pas b/TestSuite/foreach_arr_seq.pas new file mode 100644 index 000000000..728217cc9 --- /dev/null +++ b/TestSuite/foreach_arr_seq.pas @@ -0,0 +1,8 @@ +begin + var a: array of sequence of byte; + SetLength(a,1); + a[0] := Seq(byte(1),byte(2)); + + foreach var b in a do + Assert(b.GetType.Name='Byte[]'); +end. \ No newline at end of file diff --git a/bin/Lib/GraphWPF.pas b/bin/Lib/GraphWPF.pas index 6936226ba..efd518ec2 100644 --- a/bin/Lib/GraphWPF.pas +++ b/bin/Lib/GraphWPF.pas @@ -459,6 +459,8 @@ var OnKeyDown: procedure(k: Key); /// Событие отжатия клавиши OnKeyUp: procedure(k: Key); + /// Событие нажатия символьной клавиши + OnKeyPress: procedure(ch: char); /// Событие изменения размера графического окна OnResize: procedure; @@ -1391,16 +1393,20 @@ begin end; /// --- SystemKeyEvents -procedure SystemOnKeyDown(sender: Object; e: KeyEventArgs); -begin +procedure SystemOnKeyDown(sender: Object; e: KeyEventArgs) := if OnKeyDown<>nil then OnKeyDown(e.Key); -end; procedure SystemOnKeyUp(sender: Object; e: KeyEventArgs) := if OnKeyUp<>nil then OnKeyUp(e.Key); +procedure SystemOnKeyPress(sender: Object; e: TextCompositionEventArgs) := +begin + if (OnKeyPress<>nil) and (e.Text<>nil) and (e.Text.Length>0) then + OnKeyPress(e.Text[1]); +end; + procedure SystemOnResize(sender: Object; e: SizeChangedEventArgs) := if OnResize<>nil then OnResize(); @@ -1521,6 +1527,7 @@ public MouseMove += SystemOnMouseMove; KeyDown += SystemOnKeyDown; KeyUp += SystemOnKeyUp; + Self.TextInput += SystemOnKeyPress; SizeChanged += SystemOnResize; CompositionTarget.Rendering += RenderFrame;