From 3932a53f77fd0f8d7e39cd3791eec17131912146 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Sun, 25 Apr 2021 12:36:35 +0200 Subject: [PATCH] #2048 --- Compiler/PCU/PCUReader.cs | 8 +++++++- TestSuite/units/u_generics10.pas | 6 ++++++ TestSuite/units/u_generics5.pas | 12 ++++++++++++ TestSuite/units/u_generics6.pas | 17 +++++++++++++++++ TestSuite/units/u_generics7.pas | 15 +++++++++++++++ TestSuite/units/u_generics8.pas | 22 ++++++++++++++++++++++ TestSuite/units/u_generics9.pas | 6 ++++++ TestSuite/usesunits/use_generics10.pas | 5 +++++ TestSuite/usesunits/use_generics5.pas | 5 +++++ TestSuite/usesunits/use_generics6.pas | 6 ++++++ TestSuite/usesunits/use_generics7.pas | 5 +++++ TestSuite/usesunits/use_generics8.pas | 10 ++++++++++ TestSuite/usesunits/use_generics9.pas | 5 +++++ 13 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 TestSuite/units/u_generics10.pas create mode 100644 TestSuite/units/u_generics5.pas create mode 100644 TestSuite/units/u_generics6.pas create mode 100644 TestSuite/units/u_generics7.pas create mode 100644 TestSuite/units/u_generics8.pas create mode 100644 TestSuite/units/u_generics9.pas create mode 100644 TestSuite/usesunits/use_generics10.pas create mode 100644 TestSuite/usesunits/use_generics5.pas create mode 100644 TestSuite/usesunits/use_generics6.pas create mode 100644 TestSuite/usesunits/use_generics7.pas create mode 100644 TestSuite/usesunits/use_generics8.pas create mode 100644 TestSuite/usesunits/use_generics9.pas diff --git a/Compiler/PCU/PCUReader.cs b/Compiler/PCU/PCUReader.cs index d2bec29fb..4a99a7f26 100644 --- a/Compiler/PCU/PCUReader.cs +++ b/Compiler/PCU/PCUReader.cs @@ -841,7 +841,6 @@ namespace PascalABCCompiler.PCU MethodInfo mi = mis[i] as MethodInfo; if (mi == null) continue; ParameterInfo[] prms = mi.GetParameters(); - bool eq = true; if (prms.Length != param_types.Length) continue; for (int j=0; jbyte := ()->byte(2); + var t := System.Threading.Tasks.Task&.Run(f); + t.Wait; + Result := t.Result; +end; + +end. \ No newline at end of file diff --git a/TestSuite/units/u_generics6.pas b/TestSuite/units/u_generics6.pas new file mode 100644 index 000000000..462684727 --- /dev/null +++ b/TestSuite/units/u_generics6.pas @@ -0,0 +1,17 @@ +unit u_generics6; + +var i: integer; +type + r1 = record(System.ICloneable) + public function Clone: object; + begin + i := 1; + end; + end; + +procedure p1(a: T); where T: System.ICloneable; +begin + System.ICloneable(a).Clone; +end; + +end. \ No newline at end of file diff --git a/TestSuite/units/u_generics7.pas b/TestSuite/units/u_generics7.pas new file mode 100644 index 000000000..adad8ab3d --- /dev/null +++ b/TestSuite/units/u_generics7.pas @@ -0,0 +1,15 @@ +unit u_generics7; + +procedure test; +begin + var s: sequence of integer := Arr(3,2,1).AsEnumerable(); + var e: IEnumerator := s.OrderBy(b->b).GetEnumerator; + e.MoveNext(); + assert(e.Current = 1); + var e2: IEnumerator := s.OrderBy(b->b).GetEnumerator(); + e2.MoveNext(); + assert(e2.Current = 1); +end; +begin + +end. \ No newline at end of file diff --git a/TestSuite/units/u_generics8.pas b/TestSuite/units/u_generics8.pas new file mode 100644 index 000000000..11f872ef0 --- /dev/null +++ b/TestSuite/units/u_generics8.pas @@ -0,0 +1,22 @@ +unit u_generics8; + +var i: integer; +procedure p1(a: array of T); +begin + i := 1; +end; +procedure p1(a: T); +begin + i := 2; +end; + +procedure p2(a: array[,] of T); +begin + i := 1; +end; +procedure p2(a: T); +begin + i := 2; +end; + +end. \ No newline at end of file diff --git a/TestSuite/units/u_generics9.pas b/TestSuite/units/u_generics9.pas new file mode 100644 index 000000000..21ef2eade --- /dev/null +++ b/TestSuite/units/u_generics9.pas @@ -0,0 +1,6 @@ +unit u_generics9; + +begin + var s := '1234'; + assert(s.All(char.IsDigit)); +end. \ No newline at end of file diff --git a/TestSuite/usesunits/use_generics10.pas b/TestSuite/usesunits/use_generics10.pas new file mode 100644 index 000000000..37a3e4d7b --- /dev/null +++ b/TestSuite/usesunits/use_generics10.pas @@ -0,0 +1,5 @@ +uses u_generics10; + +begin + +end. \ No newline at end of file diff --git a/TestSuite/usesunits/use_generics5.pas b/TestSuite/usesunits/use_generics5.pas new file mode 100644 index 000000000..f6bc3bc81 --- /dev/null +++ b/TestSuite/usesunits/use_generics5.pas @@ -0,0 +1,5 @@ +uses u_generics5; + +begin + assert(f = 2); +end. \ No newline at end of file diff --git a/TestSuite/usesunits/use_generics6.pas b/TestSuite/usesunits/use_generics6.pas new file mode 100644 index 000000000..ca416c41e --- /dev/null +++ b/TestSuite/usesunits/use_generics6.pas @@ -0,0 +1,6 @@ +uses u_generics6; + +begin + p1(new r1); + assert(i = 1); +end. \ No newline at end of file diff --git a/TestSuite/usesunits/use_generics7.pas b/TestSuite/usesunits/use_generics7.pas new file mode 100644 index 000000000..8a29402f4 --- /dev/null +++ b/TestSuite/usesunits/use_generics7.pas @@ -0,0 +1,5 @@ +uses u_generics7; + +begin + test; +end. \ No newline at end of file diff --git a/TestSuite/usesunits/use_generics8.pas b/TestSuite/usesunits/use_generics8.pas new file mode 100644 index 000000000..4002dafd4 --- /dev/null +++ b/TestSuite/usesunits/use_generics8.pas @@ -0,0 +1,10 @@ +uses u_generics8; + +begin + var a := new byte[5]; + p1(a); + assert(i = 1); + i := 0; + p2(a); + assert(i = 2); +end. \ No newline at end of file diff --git a/TestSuite/usesunits/use_generics9.pas b/TestSuite/usesunits/use_generics9.pas new file mode 100644 index 000000000..96e749b54 --- /dev/null +++ b/TestSuite/usesunits/use_generics9.pas @@ -0,0 +1,5 @@ +uses u_generics9; + +begin + +end. \ No newline at end of file