mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-13 12:29:14 +02:00
Removed the remaining traces of the type overloads and increased PPU version to differ from trunk.
git-svn-id: branches/svenbarth/generics@17998 -
This commit is contained in:
parent
6a60f9d42a
commit
b0eb13cc3f
@ -43,7 +43,7 @@ type
|
|||||||
{$endif Test_Double_checksum}
|
{$endif Test_Double_checksum}
|
||||||
|
|
||||||
const
|
const
|
||||||
CurrentPPUVersion = 130;
|
CurrentPPUVersion = 131;
|
||||||
|
|
||||||
{ buffer sizes }
|
{ buffer sizes }
|
||||||
maxentrysize = 1024;
|
maxentrysize = 1024;
|
||||||
|
@ -261,9 +261,10 @@ implementation
|
|||||||
table as forwarddef are not resolved directly }
|
table as forwarddef are not resolved directly }
|
||||||
if assigned(srsym) and
|
if assigned(srsym) and
|
||||||
(srsym.typ=typesym) and
|
(srsym.typ=typesym) and
|
||||||
(ttypesym(srsym).typedef.typ=errordef) and
|
((ttypesym(srsym).typedef.typ=errordef) or
|
||||||
(not allowgenericsyms or
|
(not allowgenericsyms and
|
||||||
(ttypesym(srsym).gendeflist.Count=0)) then
|
(ttypesym(srsym).typedef.typ=undefineddef) and
|
||||||
|
not (sp_generic_para in srsym.symoptions))) then
|
||||||
begin
|
begin
|
||||||
Message1(type_e_type_is_not_completly_defined,ttypesym(srsym).realname);
|
Message1(type_e_type_is_not_completly_defined,ttypesym(srsym).realname);
|
||||||
def:=generrordef;
|
def:=generrordef;
|
||||||
@ -292,9 +293,7 @@ implementation
|
|||||||
end;
|
end;
|
||||||
{ Give an error when referring to an errordef that does not have
|
{ Give an error when referring to an errordef that does not have
|
||||||
generic overloads }
|
generic overloads }
|
||||||
if (ttypesym(srsym).typedef.typ=errordef) and
|
if (ttypesym(srsym).typedef.typ=errordef) then
|
||||||
(not allowgenericsyms or
|
|
||||||
(ttypesym(srsym).gendeflist.Count=0)) then
|
|
||||||
begin
|
begin
|
||||||
Message(sym_e_error_in_type_def);
|
Message(sym_e_error_in_type_def);
|
||||||
def:=generrordef;
|
def:=generrordef;
|
||||||
|
@ -110,9 +110,6 @@ interface
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
ttypesym = class(Tstoredsym)
|
ttypesym = class(Tstoredsym)
|
||||||
protected
|
|
||||||
fgendeflist : TFPObjectList;
|
|
||||||
fgendefdereflist : TFPList;
|
|
||||||
public
|
public
|
||||||
typedef : tdef;
|
typedef : tdef;
|
||||||
typedefderef : tderef;
|
typedefderef : tderef;
|
||||||
@ -122,7 +119,6 @@ interface
|
|||||||
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
||||||
procedure buildderef;override;
|
procedure buildderef;override;
|
||||||
procedure deref;override;
|
procedure deref;override;
|
||||||
property gendeflist: TFPObjectList read fgendeflist;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
tabstractvarsym = class(tstoredsym)
|
tabstractvarsym = class(tstoredsym)
|
||||||
@ -1849,95 +1845,37 @@ implementation
|
|||||||
(typedef.typ<>errordef) and
|
(typedef.typ<>errordef) and
|
||||||
not(assigned(typedef.typesym)) then
|
not(assigned(typedef.typesym)) then
|
||||||
typedef.typesym:=self;
|
typedef.typesym:=self;
|
||||||
fgendeflist:=TFPObjectList.Create(false);
|
|
||||||
fgendefdereflist:=nil;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor ttypesym.destroy;
|
destructor ttypesym.destroy;
|
||||||
begin
|
begin
|
||||||
fgendeflist.free;
|
|
||||||
if assigned(fgendefdereflist) then
|
|
||||||
fgendefdereflist.free;
|
|
||||||
inherited destroy;
|
inherited destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
constructor ttypesym.ppuload(ppufile:tcompilerppufile);
|
constructor ttypesym.ppuload(ppufile:tcompilerppufile);
|
||||||
var
|
|
||||||
gdderef : tderef;
|
|
||||||
i,
|
|
||||||
gdcnt : longint;
|
|
||||||
begin
|
begin
|
||||||
inherited ppuload(typesym,ppufile);
|
inherited ppuload(typesym,ppufile);
|
||||||
ppufile.getderef(typedefderef);
|
ppufile.getderef(typedefderef);
|
||||||
fgendeflist:=TFPObjectList.Create(false);
|
|
||||||
fgendefdereflist:=TFPList.Create;
|
|
||||||
gdcnt:=ppufile.getword;
|
|
||||||
for i:=1 to gdcnt do
|
|
||||||
begin
|
|
||||||
ppufile.getderef(gdderef);
|
|
||||||
fgendefdereflist.Add(Pointer(PtrInt(gdderef.dataidx)));
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure ttypesym.buildderef;
|
procedure ttypesym.buildderef;
|
||||||
var
|
|
||||||
i : longint;
|
|
||||||
d : tderef;
|
|
||||||
gd : tdef;
|
|
||||||
begin
|
begin
|
||||||
typedefderef.build(typedef);
|
typedefderef.build(typedef);
|
||||||
if not assigned(fgendefdereflist) then
|
|
||||||
fgendefdereflist:=TFPList.Create
|
|
||||||
else
|
|
||||||
fgendefdereflist.Clear;
|
|
||||||
for i:=0 to fgendeflist.Count-1 do
|
|
||||||
begin
|
|
||||||
gd:=tdef(fgendeflist[i]);
|
|
||||||
{ only write the type definitions that belong to this typesym }
|
|
||||||
if gd.owner=owner then
|
|
||||||
begin
|
|
||||||
d.build(gd);
|
|
||||||
fgendefdereflist.Add(Pointer(PtrInt(d.dataidx)));
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure ttypesym.deref;
|
procedure ttypesym.deref;
|
||||||
var
|
|
||||||
i : longint;
|
|
||||||
gd : tdef;
|
|
||||||
d : tderef;
|
|
||||||
begin
|
begin
|
||||||
typedef:=tdef(typedefderef.resolve);
|
typedef:=tdef(typedefderef.resolve);
|
||||||
{ Clear all typedefs }
|
|
||||||
fgendeflist.Clear;
|
|
||||||
if not assigned(fgendefdereflist) then
|
|
||||||
internalerror(201104211);
|
|
||||||
for i:=0 to fgendefdereflist.Count-1 do
|
|
||||||
begin
|
|
||||||
d.dataidx:=PtrInt(fgendefdereflist[i]);
|
|
||||||
gd:=tdef(d.resolve);
|
|
||||||
fgendeflist.Add(gd);
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure ttypesym.ppuwrite(ppufile:tcompilerppufile);
|
procedure ttypesym.ppuwrite(ppufile:tcompilerppufile);
|
||||||
var
|
|
||||||
i : longint;
|
|
||||||
d : tderef;
|
|
||||||
begin
|
begin
|
||||||
inherited ppuwrite(ppufile);
|
inherited ppuwrite(ppufile);
|
||||||
ppufile.putderef(typedefderef);
|
ppufile.putderef(typedefderef);
|
||||||
ppufile.putword(fgendefdereflist.Count);
|
|
||||||
for i:=0 to fgendefdereflist.Count-1 do
|
|
||||||
begin
|
|
||||||
d.dataidx:=PtrInt(fgendefdereflist[i]);
|
|
||||||
ppufile.putderef(d);
|
|
||||||
end;
|
|
||||||
ppufile.writeentry(ibtypesym);
|
ppufile.writeentry(ibtypesym);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user