From e8c68a09c1f4fe8e9cdb0a8d4d4e382cadebf5b7 Mon Sep 17 00:00:00 2001 From: svenbarth Date: Fri, 18 Sep 2015 13:16:25 +0000 Subject: [PATCH] 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 - --- compiler/pdecl.pas | 8 ++++++++ compiler/pgenutil.pas | 10 +++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/compiler/pdecl.pas b/compiler/pdecl.pas index 08b129b69d..6854d4f91f 100644 --- a/compiler/pdecl.pas +++ b/compiler/pdecl.pas @@ -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; diff --git a/compiler/pgenutil.pas b/compiler/pgenutil.pas index 78f0e4b242..d966487ccb 100644 --- a/compiler/pgenutil.pas +++ b/compiler/pgenutil.pas @@ -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;