* always generate RTTI patch from peter

This commit is contained in:
marco 2003-12-12 12:09:40 +00:00
parent 69dbf59679
commit 9b3b94883b
3 changed files with 25 additions and 29 deletions

View File

@ -526,6 +526,10 @@ implementation
tt.def.needs_inittable) then
generate_inittable(newtype);
{ Always generate RTTI info for all types. This is to have typeinfo() return
the same pointer }
generate_rtti(newtype);
{ for objects we should write the vmt and interfaces.
This need to be done after the rtti has been written, because
it can contain a reference to that data (PFV)
@ -537,9 +541,6 @@ implementation
{ generate and check virtual methods, must be done
before RTTI is written }
ch.genvmt;
{ generate rtti info if published items are available }
if (oo_can_have_published in tobjectdef(tt.def).objectoptions) then
generate_rtti(newtype);
if is_interface(tobjectdef(tt.def)) then
ch.writeinterfaceids;
if (oo_has_vmt in tobjectdef(tt.def).objectoptions) then
@ -655,7 +656,10 @@ implementation
end.
{
$Log$
Revision 1.73 2003-12-10 16:37:01 peter
Revision 1.74 2003-12-12 12:09:40 marco
* always generate RTTI patch from peter
Revision 1.73 2003/12/10 16:37:01 peter
* global property support for fpc modes
Revision 1.72 2003/11/12 15:48:48 peter

View File

@ -5569,10 +5569,11 @@ implementation
end;
fullrtti :
begin
if objecttype in [odt_interfacecom,odt_interfacecorba] then
rttiList.concat(Tai_const.Create_32bit(0))
if (oo_has_vmt in objectoptions) and
not(objecttype in [odt_interfacecom,odt_interfacecorba]) then
rttiList.concat(Tai_const_symbol.Createname(vmt_mangledname))
else
rttiList.concat(Tai_const_symbol.Createname(vmt_mangledname));
rttiList.concat(Tai_const.Create_32bit(0));
{ write owner typeinfo }
if assigned(childof) and (oo_can_have_published in childof.objectoptions) then
@ -6117,7 +6118,10 @@ implementation
end.
{
$Log$
Revision 1.191 2003-12-08 22:34:24 peter
Revision 1.192 2003-12-12 12:09:40 marco
* always generate RTTI patch from peter
Revision 1.191 2003/12/08 22:34:24 peter
* tai_const.create_32bit changed to cardinal
Revision 1.190 2003/11/10 22:02:52 peter

View File

@ -1511,15 +1511,15 @@ implementation
ref:=_ref;
end;
destructor tabsolutesym.destroy;
begin
if assigned(ref) then
ref.free;
inherited destroy;
inherited destroy;
end;
constructor tabsolutesym.ppuload(ppufile:tcompilerppufile);
begin
{ Note: This needs to load everything of tvarsym.write }
@ -1583,9 +1583,6 @@ implementation
procedure tabsolutesym.deref;
var
srsym : tsym;
srsymtable : tsymtable;
begin
{ inheritance of varsym.deref ! }
vartype.resolve;
@ -2596,20 +2593,8 @@ implementation
function trttisym.mangledname : string;
const
prefix : array[trttitype] of string[5]=('RTTI_','INIT_');
var
s : string;
p : tsymtable;
begin
s:='';
p:=owner;
while assigned(p) and (p.symtabletype=localsymtable) do
begin
s:=s+'_'+p.defowner.name;
p:=p.defowner.owner;
end;
if not(p.symtabletype in [globalsymtable,staticsymtable]) then
internalerror(200108265);
mangledname:=prefix[rttityp]+p.name^+s+'$_'+Copy(name,5,255);
result:=make_mangledname(prefix[rttityp],owner,Copy(name,5,255));
end;
@ -2699,7 +2684,10 @@ implementation
end.
{
$Log$
Revision 1.137 2003-12-01 18:44:15 peter
Revision 1.138 2003-12-12 12:09:40 marco
* always generate RTTI patch from peter
Revision 1.137 2003/12/01 18:44:15 peter
* fixed some crashes
* fixed varargs and register calling probs