This commit is contained in:
Ivan Bondarev 2021-01-08 12:52:09 +01:00
parent 2593ba23ce
commit 969d463b01
5 changed files with 76 additions and 2 deletions

View file

@ -1,3 +1,3 @@
begin
var a := 1;
var a := 1
end.

View file

@ -0,0 +1,18 @@
var i: integer;
type
I1<T>=interface
procedure p1;
end;
C1<T>=class(I1<T>)
public procedure I1<T>.p1(i: integer);
begin
i := 1;
end;
end;
begin
end.

View file

@ -0,0 +1,27 @@
var i: integer;
type
I1<T>=interface
procedure p1;
end;
C1<T>=class(I1<T>)//Класс C1<T> не реализует метод p1 интерфейса I1<T>
public procedure I1<T>.p1;
begin
i := 1;
end;
public procedure p1;
begin
i := 2;
end;
end;
begin
var ii: I1<integer> := new C1<integer>;
var o := new C1<integer>;
ii.p1;
assert(i = 1);
o.p1;
assert(i = 2);
end.

View file

@ -0,0 +1,23 @@
uses System;
var i: integer;
type
C1<T>=class(IComparable<T>)//Класс C1<T> не реализует метод p1 интерфейса I1<T>
public function IComparable<T>.CompareTo(item: T): integer;
begin
Result := 1;
end;
public function CompareTo(item: T): integer;
begin
Result := -1;
end;
end;
begin
var ii: IComparable<integer> := new C1<integer>;
var o := new C1<integer>;
assert(ii.CompareTo(1) = 1);
assert(o.CompareTo(1) = -1);
end.

View file

@ -2758,7 +2758,13 @@ namespace PascalABCCompiler.TreeConverter
if (meth is compiled_function_node)
tmp_si = cnode.find_in_type((meth as compiled_function_node).cont_type.BaseFullName + "." + meth.name, cnode.Scope);
else if (meth is common_method_node)
tmp_si = cnode.find_in_type((meth as common_method_node).cont_type.BaseFullName + "." + meth.name, cnode.Scope);
{
string base_type_name = (meth as common_method_node).cont_type.BaseFullName;
if (base_type_name != null && (meth as common_method_node).cont_type.original_generic != null && base_type_name.IndexOf('<') != -1)
base_type_name = (meth as common_method_node).cont_type.original_generic.BaseFullName;
tmp_si = cnode.find_in_type(base_type_name + "." + meth.name, cnode.Scope);
}
if (tmp_si != null)
{
/*Зачем это?