From 88e9937ffb90d195a5aff9aa348a2c3966b1420f Mon Sep 17 00:00:00 2001 From: miks1965 Date: Sun, 10 Jul 2016 00:14:30 +0300 Subject: [PATCH] =?UTF-8?q?Yield=20-=20=D0=B2=20=D0=B8=D0=BD=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=BB=D0=BB=D1=8F=D1=82=D0=BE=D1=80=D0=B5!!!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Configuration/GlobalAssemblyInfo.cs | 2 +- Configuration/Version.defs | 4 +-- ReleaseGenerators/PascalABCNET_version.nsh | 2 +- ReleaseGenerators/sect_Core.nsh | 6 +++- TestSuite/yield1.pas | 31 ++++++++++++++++++++ TestSuite/yieldcapture1.pas | 21 ++++++++++++++ TestSuite/yieldcase.pas | 20 +++++++++++++ TestSuite/yieldcasediap.pas | 28 ++++++++++++++++++ TestSuite/yieldfor1.pas | 32 +++++++++++++++++++++ TestSuite/yieldforfor.pas | 13 +++++++++ TestSuite/yieldif.pas | 22 ++++++++++++++ TestSuite/yieldquerytwice.pas | 13 +++++++++ TestSuite/yieldwhilerepeat.pas | 18 ++++++++++++ bin/Lib/PABCRtl.dll | Bin 507904 -> 507904 bytes 14 files changed, 207 insertions(+), 5 deletions(-) create mode 100644 TestSuite/yield1.pas create mode 100644 TestSuite/yieldcapture1.pas create mode 100644 TestSuite/yieldcase.pas create mode 100644 TestSuite/yieldcasediap.pas create mode 100644 TestSuite/yieldfor1.pas create mode 100644 TestSuite/yieldforfor.pas create mode 100644 TestSuite/yieldif.pas create mode 100644 TestSuite/yieldquerytwice.pas create mode 100644 TestSuite/yieldwhilerepeat.pas diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 87cab46b1..bc18dc8b9 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 = "1"; public const string Build = "0"; - public const string Revision = "1263"; + public const string Revision = "1266"; 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 2ec784ed9..69000ff71 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%COREVERSION%=0 -%REVISION%=1263 %MINOR%=1 +%REVISION%=1266 +%COREVERSION%=0 %MAJOR%=3 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index bf1a16190..6f73c4f46 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.1.0.1263' +!define VERSION '3.1.0.1266' diff --git a/ReleaseGenerators/sect_Core.nsh b/ReleaseGenerators/sect_Core.nsh index c4942cbc6..bd5a29edf 100644 --- a/ReleaseGenerators/sect_Core.nsh +++ b/ReleaseGenerators/sect_Core.nsh @@ -1,4 +1,4 @@ -Section $(DESC_Core) Core + Section $(DESC_Core) Core SectionIn 1 2 RO SetOutPath "$INSTDIR" File ExecHide.exe @@ -11,6 +11,8 @@ File "..\bin\SemanticTree.dll" File "..\bin\SyntaxTree.dll" File "..\bin\SyntaxTreeConverters.dll" + File "..\bin\SyntaxVisitors.dll" + File "..\bin\YieldConversionSyntax.dll" File "..\bin\YieldHelpers.dll" File "..\bin\ICSharpCode.NRefactory.dll" File "..\bin\TreeConverter.dll" @@ -47,6 +49,8 @@ ${AddFile} "SyntaxTree.dll" ${AddFile} "SyntaxTreeConverters.dll" ${AddFile} "YieldHelpers.dll" + ${AddFile} "SyntaxVisitors.dll" + ${AddFile} "YieldConversionSyntax.dll" ${AddFile} "ICSharpCode.NRefactory.dll" ${AddFile} "TreeConverter.dll" ${AddFile} "OptimizerConversion.dll" diff --git a/TestSuite/yield1.pas b/TestSuite/yield1.pas new file mode 100644 index 000000000..151c2ef6d --- /dev/null +++ b/TestSuite/yield1.pas @@ -0,0 +1,31 @@ +function Sq1: sequence of integer; +begin + yield 1; + yield 5; +end; + +function Squares(n: integer): sequence of integer; +begin + for var i:=1 to n do + yield i*i; + yield 666; + begin + yield 777; + end; +end; + +function Sq2(n: integer): sequence of integer; +begin + for var i:=1 to n do + begin + yield i; + yield i; + end; +end; + + +begin + Assert(Sq1.SequenceEqual(Seq(1,5))); + Assert(Squares(5).SequenceEqual(Seq(1,4,9,16,25,666,777)),'not Squares(5).SequenceEqual(Seq(1,4,9,16,25))'); + Assert(Sq2(5).SequenceEqual(Seq(1,1,2,2,3,3,4,4,5,5))); +end. \ No newline at end of file diff --git a/TestSuite/yieldcapture1.pas b/TestSuite/yieldcapture1.pas new file mode 100644 index 000000000..2dce9fe34 --- /dev/null +++ b/TestSuite/yieldcapture1.pas @@ -0,0 +1,21 @@ +var z:=1; + +type AAA = class + y: integer := 1; + function f(a: sequence of integer): sequence of integer; + begin + var k: integer = 1; + foreach var x in a do + yield x+y+z+k; + end; +end; + +begin + var a1 := new AAA(); + + var q := a1.f(Range(1,4)); + + var sq := Seq(4,5,6,7); + Assert(q.Println.SequenceEqual(sq)); + Assert(q.Println.SequenceEqual(sq)); +end. \ No newline at end of file diff --git a/TestSuite/yieldcase.pas b/TestSuite/yieldcase.pas new file mode 100644 index 000000000..a83c89010 --- /dev/null +++ b/TestSuite/yieldcase.pas @@ -0,0 +1,20 @@ +function Sq(n: integer): sequence of integer; +begin + for var i:=1 to n do + case i mod 3 of + 0: yield 22; + 1: yield 33; + 2: yield 44; + end; + yield 55; +end; + +procedure AssertSeq(q,correct: sequence of T); +begin + Assert(q.SequenceEqual(correct),q.JoinIntoString); +end; + + +begin + AssertSeq(Sq(5).Println,Seq(33,44,22,33,44,55)); +end. \ No newline at end of file diff --git a/TestSuite/yieldcasediap.pas b/TestSuite/yieldcasediap.pas new file mode 100644 index 000000000..d441ab838 --- /dev/null +++ b/TestSuite/yieldcasediap.pas @@ -0,0 +1,28 @@ +function f(n: integer): sequence of integer; +begin + var m := n; + case m of + 1: begin + yield 3; + for var i:=1 to 5 do + yield i; + end; + 2: for var i:=1 to 5 do + case i of + 1,2,3: yield 4; + 4..20: yield -1 + end; + else yield 5; + end; +end; + +procedure AssertSeq(q,correct: sequence of T); +begin + Assert(q.SequenceEqual(correct),q.JoinIntoString); +end; + +begin + AssertSeq(f(1).Println,Seq(3,1,2,3,4,5)); + AssertSeq(f(2).Println,Seq(4,4,4,-1,-1)); + AssertSeq(f(3).Println,Seq(5)); +end. \ No newline at end of file diff --git a/TestSuite/yieldfor1.pas b/TestSuite/yieldfor1.pas new file mode 100644 index 000000000..188d5d3f1 --- /dev/null +++ b/TestSuite/yieldfor1.pas @@ -0,0 +1,32 @@ +function Sq1: sequence of integer; +begin + yield 1; + yield 5; +end; + +function Squares(n: integer): sequence of integer; +begin + for var i:=1 to n do + yield i*i; + yield 666; + begin + yield 777; + end; +end; + +function Sq2(n: integer): sequence of integer; +begin + yield(555); + for var i:=1 to n do + begin + yield i; + yield i; + end; +end; + + +begin + Assert(Sq1.SequenceEqual(Seq(1,5)),'1'); + Assert(Squares(5).SequenceEqual(Seq(1,4,9,16,25,666,777)),'not Squares(5).SequenceEqual(Seq(1,4,9,16,25))'); + Assert(Sq2(5).SequenceEqual(Seq(555,1,1,2,2,3,3,4,4,5,5)),'3'); +end. \ No newline at end of file diff --git a/TestSuite/yieldforfor.pas b/TestSuite/yieldforfor.pas new file mode 100644 index 000000000..efcd142be --- /dev/null +++ b/TestSuite/yieldforfor.pas @@ -0,0 +1,13 @@ +function Sq(n: integer): sequence of integer; +begin + for var i:=1 to n do + for var j:=1 to n do + begin + yield i*j; + end; +end; + + +begin + Assert(Sq(3).SequenceEqual(Seq(1,2,3,2,4,6,3,6,9)),Sq(3).JoinIntoString); +end. \ No newline at end of file diff --git a/TestSuite/yieldif.pas b/TestSuite/yieldif.pas new file mode 100644 index 000000000..d492eab50 --- /dev/null +++ b/TestSuite/yieldif.pas @@ -0,0 +1,22 @@ +function Sq(n: integer): sequence of integer; +begin + if n mod 2 = 0 then + yield 555 + else yield 444; +end; + +function Where1(s: sequence of T; p: T->boolean): sequence of T; +begin + foreach var x in s do + //if p(x) then + yield x; +end; + +begin + Assert(Sq(2).SequenceEqual(Seq(555)),Sq(2).JoinIntoString); + Assert(Sq(1).SequenceEqual(Seq(444)),Sq(2).JoinIntoString); + var q := Where1(Arr(1,2,3,4),x->x mod 2 <>0); + q.Println; + //q.Println; + //Assert(q.SequenceEqual(Seq(444)),q.JoinIntoString); +end. \ No newline at end of file diff --git a/TestSuite/yieldquerytwice.pas b/TestSuite/yieldquerytwice.pas new file mode 100644 index 000000000..500f301a3 --- /dev/null +++ b/TestSuite/yieldquerytwice.pas @@ -0,0 +1,13 @@ +function f(a: sequence of T): sequence of T; +begin + foreach var x in a do + yield x; +end; + +begin + var q := f(Range(1,4)); + + var sq := Seq(1,2,3,4); + Assert(q.Println.SequenceEqual(sq)); + Assert(q.Println.SequenceEqual(sq)); +end. \ No newline at end of file diff --git a/TestSuite/yieldwhilerepeat.pas b/TestSuite/yieldwhilerepeat.pas new file mode 100644 index 000000000..3a7ed4646 --- /dev/null +++ b/TestSuite/yieldwhilerepeat.pas @@ -0,0 +1,18 @@ +function Sq(n: integer): sequence of integer; +begin + var i:=1; + while i<=n do + begin + yield i; + i += 1; + end; + repeat + yield i; + i -= 1; + until i<=0; +end; + + +begin + Assert(Sq(3).SequenceEqual(Seq(1,2,3,4,3,2,1)),Sq(3).JoinIntoString); +end. \ No newline at end of file diff --git a/bin/Lib/PABCRtl.dll b/bin/Lib/PABCRtl.dll index b9bb24429705faf9fd9c76f2bd5823cb428ea0bb..1380f8427111c26be190023a1c049daf59b1c71c 100644 GIT binary patch delta 254 zcmZo@kZ)*^pU}bVsNXoT+n3q=4SVD5*4vD&x0$xyW?nP9o^4xqb9F#HSiDKP4H9+S%ta12GE_vuL5S-b~&JYyr68v`m9RF!~lU)|8osSfqZZl*1gWc>3ECAGd BXsiGL delta 254 zcmZo@kZ)*^pU}a4|7ZQgZeM2YJdVcOt+yFlZ!>MZ&AeuIy^-oYmCuuo$-Fxgudrd+ z!+5FVjk`h?PunwpAupF?+?xlDy?iWTPVD?f?qxT2FYq#V6<=r8Rek9gS7^(1v&y%( zpFU_VTCm;F`P2ayo9gp7pZ>fi*Ya3vAJgmS*JKuGwN}??vCI(@tGy_$czAKB>)*~4 zu6GxctGgUJPMWH(pU}_P+s;0h8Hibcm~}h*T(*PR0$yz%Yu5OicsEV(_OP1}V7L7S z2m75(IzTUkGXMb-5UYR~KyYR^J3~;gOR(qCpR=E;{`1?kYo2eo$?}lx4|cOFumAvL Ca&D6V