This commit is contained in:
parent
2593ba23ce
commit
969d463b01
|
|
@ -1,3 +1,3 @@
|
||||||
begin
|
begin
|
||||||
var a := 1;
|
var a := 1
|
||||||
end.
|
end.
|
||||||
18
TestSuite/errors/err0398.pas
Normal file
18
TestSuite/errors/err0398.pas
Normal 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.
|
||||||
27
TestSuite/explicitinterface7.pas
Normal file
27
TestSuite/explicitinterface7.pas
Normal 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.
|
||||||
23
TestSuite/explicitinterface8.pas
Normal file
23
TestSuite/explicitinterface8.pas
Normal 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.
|
||||||
|
|
@ -2758,7 +2758,13 @@ namespace PascalABCCompiler.TreeConverter
|
||||||
if (meth is compiled_function_node)
|
if (meth is compiled_function_node)
|
||||||
tmp_si = cnode.find_in_type((meth as compiled_function_node).cont_type.BaseFullName + "." + meth.name, cnode.Scope);
|
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)
|
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)
|
if (tmp_si != null)
|
||||||
{
|
{
|
||||||
/*Зачем это?
|
/*Зачем это?
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue