mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-30 20:11:29 +01:00
* properly inherit interface types, resolves #6690
git-svn-id: trunk@7102 -
This commit is contained in:
parent
f87e96dfb0
commit
2a244b25fc
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -8045,6 +8045,7 @@ tests/webtbs/tw6641.pp svneol=native#text/plain
|
|||||||
tests/webtbs/tw6684.pp svneol=native#text/plain
|
tests/webtbs/tw6684.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw6686.pp svneol=native#text/plain
|
tests/webtbs/tw6686.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw6687.pp svneol=native#text/plain
|
tests/webtbs/tw6687.pp svneol=native#text/plain
|
||||||
|
tests/webtbs/tw6690.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw6700.pp svneol=native#text/plain
|
tests/webtbs/tw6700.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw6735.pp svneol=native#text/plain
|
tests/webtbs/tw6735.pp svneol=native#text/plain
|
||||||
tests/webtbs/tw6742.pp svneol=native#text/plain
|
tests/webtbs/tw6742.pp svneol=native#text/plain
|
||||||
|
|||||||
@ -420,8 +420,12 @@ implementation
|
|||||||
end;
|
end;
|
||||||
odt_interfacecorba,
|
odt_interfacecorba,
|
||||||
odt_interfacecom:
|
odt_interfacecom:
|
||||||
if not(is_interface(childof)) then
|
begin
|
||||||
Message(parser_e_mix_of_classes_and_objects);
|
if not(is_interface(childof)) then
|
||||||
|
Message(parser_e_mix_of_classes_and_objects);
|
||||||
|
classtype:=childof.objecttype;
|
||||||
|
aktobjectdef.objecttype:=classtype;
|
||||||
|
end;
|
||||||
odt_cppclass:
|
odt_cppclass:
|
||||||
if not(is_cppclass(childof)) then
|
if not(is_cppclass(childof)) then
|
||||||
Message(parser_e_mix_of_classes_and_objects);
|
Message(parser_e_mix_of_classes_and_objects);
|
||||||
|
|||||||
76
tests/webtbs/tw6690.pp
Normal file
76
tests/webtbs/tw6690.pp
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
program inheritedcorba;
|
||||||
|
{$mode objfpc}{$h+}
|
||||||
|
uses
|
||||||
|
typinfo;
|
||||||
|
|
||||||
|
type
|
||||||
|
{$interfaces corba}
|
||||||
|
iinterface1 = interface
|
||||||
|
procedure proc1;
|
||||||
|
end;
|
||||||
|
{$interfaces com}
|
||||||
|
iinterface2 = interface
|
||||||
|
procedure proc2;
|
||||||
|
end;
|
||||||
|
|
||||||
|
iinterface3 = interface(iinterface1)
|
||||||
|
procedure proc3;
|
||||||
|
end;
|
||||||
|
iinterface4 = interface(iinterface2)
|
||||||
|
procedure proc4;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{$interfaces corba}
|
||||||
|
iinterface5 = interface(iinterface1)
|
||||||
|
procedure proc5;
|
||||||
|
end;
|
||||||
|
iinterface6 = interface(iinterface2)
|
||||||
|
procedure proc6;
|
||||||
|
end;
|
||||||
|
|
||||||
|
tclass1 = class(iinterface1)
|
||||||
|
public
|
||||||
|
procedure proc1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{tclass6 = class(iinterface6)
|
||||||
|
public
|
||||||
|
procedure proc6;
|
||||||
|
end;
|
||||||
|
}
|
||||||
|
{ does not compile because it is com style interface:
|
||||||
|
inheritedcorba.pas(36,12) Error: No matching implementation for
|
||||||
|
interface method "IUnknown.QueryInterface(const TGuid,out <Formal type>):
|
||||||
|
LongInt;StdCall" found ...
|
||||||
|
}
|
||||||
|
procedure writeinterfacetype(po: ptypeinfo);
|
||||||
|
begin
|
||||||
|
case po^.kind of
|
||||||
|
tkinterfaceraw: if (po^.name<>'iinterface1') and
|
||||||
|
(po^.name<>'iinterface3') and
|
||||||
|
(po^.name<>'iinterface5') then
|
||||||
|
halt(1);
|
||||||
|
tkinterface: if (po^.name<>'iinterface2') and
|
||||||
|
(po^.name<>'iinterface4') and
|
||||||
|
(po^.name<>'iinterface6') then
|
||||||
|
halt(1);
|
||||||
|
else
|
||||||
|
halt(1);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ tclass1 }
|
||||||
|
|
||||||
|
procedure tclass1.proc1;
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
writeinterfacetype(typeinfo(iinterface1));
|
||||||
|
writeinterfacetype(typeinfo(iinterface2));
|
||||||
|
writeinterfacetype(typeinfo(iinterface3));
|
||||||
|
writeinterfacetype(typeinfo(iinterface4));
|
||||||
|
writeinterfacetype(typeinfo(iinterface5));
|
||||||
|
writeinterfacetype(typeinfo(iinterface6));
|
||||||
|
writeln('ok');
|
||||||
|
end.
|
||||||
Loading…
Reference in New Issue
Block a user