pgenutil.pas, parse_generic_parameters:

* no longer create the type symbol and the defs as registered
pdecl.pas, types_dec:
  * register the syms and defs of the parsed generic parameters

git-svn-id: trunk@31758 -
This commit is contained in:
svenbarth 2015-09-18 13:16:25 +00:00
parent 040786e5bb
commit e8c68a09c1
2 changed files with 13 additions and 5 deletions

View File

@ -444,6 +444,7 @@ implementation
p:tnode;
gendef : tstoreddef;
s : shortstring;
i : longint;
{$ifdef x86}
segment_register: string;
{$endif x86}
@ -482,6 +483,13 @@ implementation
generictypelist:=parse_generic_parameters(true);
consume(_RSHARPBRACKET);
{ we are not freeing the type parameters, so register them }
for i:=0 to generictypelist.count-1 do
begin
ttypesym(generictypelist[i]).register_sym;
tstoreddef(ttypesym(generictypelist[i]).typedef).register_def;
end;
str(generictypelist.Count,s);
gentypename:=typename+'$'+s;
genorgtypename:=orgtypename+'$'+s;

View File

@ -1080,7 +1080,7 @@ uses
repeat
if token=_ID then
begin
generictype:=ctypesym.create(orgpattern,cundefinedtype,true);
generictype:=ctypesym.create(orgpattern,cundefinedtype,false);
{ type parameters need to be added as strict private }
generictype.visibility:=vis_strictprivate;
include(generictype.symoptions,sp_generic_para);
@ -1188,7 +1188,7 @@ uses
if (basedef.typ<>objectdef) or
not (tobjectdef(basedef).objecttype in [odt_javaclass,odt_class]) then
internalerror(2012101101);
basedef:=cobjectdef.create(tobjectdef(basedef).objecttype,defname,tobjectdef(basedef),true);
basedef:=cobjectdef.create(tobjectdef(basedef).objecttype,defname,tobjectdef(basedef),false);
for i:=0 to constraintdata.interfaces.count-1 do
tobjectdef(basedef).implementedinterfaces.add(
timplementedinterface.create(tobjectdef(constraintdata.interfaces[i])));
@ -1199,7 +1199,7 @@ uses
if basedef.typ<>errordef then
internalerror(2013021601);
def:=tdef(constraintdata.interfaces[0]);
basedef:=cobjectdef.create(tobjectdef(def).objecttype,defname,tobjectdef(def),true);
basedef:=cobjectdef.create(tobjectdef(def).objecttype,defname,tobjectdef(def),false);
constraintdata.interfaces.delete(0);
end;
if basedef.typ<>errordef then
@ -1228,7 +1228,7 @@ uses
{ two different typeless parameters are considered as incompatible }
for i:=firstidx to result.count-1 do
begin
ttypesym(result[i]).typedef:=cundefineddef.create(true);
ttypesym(result[i]).typedef:=cundefineddef.create(false);
ttypesym(result[i]).typedef.typesym:=ttypesym(result[i]);
end;
{ a semicolon terminates a type parameter group }
@ -1239,7 +1239,7 @@ uses
{ two different typeless parameters are considered as incompatible }
for i:=firstidx to result.count-1 do
begin
ttypesym(result[i]).typedef:=cundefineddef.create(true);
ttypesym(result[i]).typedef:=cundefineddef.create(false);
ttypesym(result[i]).typedef.typesym:=ttypesym(result[i]);
end;
block_type:=old_block_type;