This commit is contained in:
Ivan Bondarev 2021-04-25 12:36:35 +02:00
parent 8329da7aed
commit 3932a53f77
13 changed files with 121 additions and 1 deletions

View file

@ -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; j<prms.Length; j++)
@ -853,10 +852,17 @@ namespace PascalABCCompiler.PCU
}
}
else
{
if (prms[j].ParameterType.Name != param_types[j].name)
{
eq = false; break;
}
if (prms[j].ParameterType.IsGenericType && !prms[j].ParameterType.GetGenericArguments()[0].IsGenericParameter)
{
eq = false; break;
}
}
if (eq && mi.DeclaringType == t) res_mi = mi;
}
return res_mi;

View file

@ -0,0 +1,6 @@
unit u_generics10;
begin
var d := Dict(KV(1,2),KV(3,4));
assert(d[3] = 4);
end.

View file

@ -0,0 +1,12 @@
unit u_generics5;
function f: byte;
begin
var f: ()->byte := ()->byte(2);
var t := System.Threading.Tasks.Task&<byte>.Run(f);
t.Wait;
Result := t.Result;
end;
end.

View file

@ -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<T>(a: T); where T: System.ICloneable;
begin
System.ICloneable(a).Clone;
end;
end.

View file

@ -0,0 +1,15 @@
unit u_generics7;
procedure test;
begin
var s: sequence of integer := Arr(3,2,1).AsEnumerable();
var e: IEnumerator<integer> := s.OrderBy(b->b).GetEnumerator;
e.MoveNext();
assert(e.Current = 1);
var e2: IEnumerator<integer> := s.OrderBy(b->b).GetEnumerator();
e2.MoveNext();
assert(e2.Current = 1);
end;
begin
end.

View file

@ -0,0 +1,22 @@
unit u_generics8;
var i: integer;
procedure p1<T>(a: array of T);
begin
i := 1;
end;
procedure p1<T>(a: T);
begin
i := 2;
end;
procedure p2<T>(a: array[,] of T);
begin
i := 1;
end;
procedure p2<T>(a: T);
begin
i := 2;
end;
end.

View file

@ -0,0 +1,6 @@
unit u_generics9;
begin
var s := '1234';
assert(s.All(char.IsDigit));
end.

View file

@ -0,0 +1,5 @@
uses u_generics10;
begin
end.

View file

@ -0,0 +1,5 @@
uses u_generics5;
begin
assert(f = 2);
end.

View file

@ -0,0 +1,6 @@
uses u_generics6;
begin
p1(new r1);
assert(i = 1);
end.

View file

@ -0,0 +1,5 @@
uses u_generics7;
begin
test;
end.

View file

@ -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.

View file

@ -0,0 +1,5 @@
uses u_generics9;
begin
end.