+ tsym.prettyname

* don't complain about unused compiler generated type symbols of generic specializations, resolves #13405

git-svn-id: trunk@13523 -
This commit is contained in:
florian 2009-08-12 18:46:32 +00:00
parent 65690b9eee
commit a1179733a7
3 changed files with 60 additions and 50 deletions

View File

@ -583,11 +583,11 @@ implementation
MessagePos(tsym(sym).fileinfo,sym_w_function_result_not_set) MessagePos(tsym(sym).fileinfo,sym_w_function_result_not_set)
end end
else if (tsym(sym).owner.symtabletype=parasymtable) then else if (tsym(sym).owner.symtabletype=parasymtable) then
MessagePos1(tsym(sym).fileinfo,sym_h_para_identifier_not_used,tsym(sym).realname) MessagePos1(tsym(sym).fileinfo,sym_h_para_identifier_not_used,tsym(sym).prettyname)
else if (tsym(sym).owner.symtabletype=ObjectSymtable) then else if (tsym(sym).owner.symtabletype=ObjectSymtable) then
MessagePos2(tsym(sym).fileinfo,sym_n_private_identifier_not_used,tsym(sym).owner.realname^,tsym(sym).realname) MessagePos2(tsym(sym).fileinfo,sym_n_private_identifier_not_used,tsym(sym).owner.realname^,tsym(sym).prettyname)
else else
MessagePos1(tsym(sym).fileinfo,sym_n_local_identifier_not_used,tsym(sym).realname); MessagePos1(tsym(sym).fileinfo,sym_n_local_identifier_not_used,tsym(sym).prettyname);
end end
else if tabstractvarsym(sym).varstate in [vs_written,vs_initialised] then else if tabstractvarsym(sym).varstate in [vs_written,vs_initialised] then
begin begin
@ -595,16 +595,16 @@ implementation
begin begin
if not(tabstractvarsym(sym).varspez in [vs_var,vs_out]) and if not(tabstractvarsym(sym).varspez in [vs_var,vs_out]) and
not(vo_is_funcret in tabstractvarsym(sym).varoptions) then not(vo_is_funcret in tabstractvarsym(sym).varoptions) then
MessagePos1(tsym(sym).fileinfo,sym_h_para_identifier_only_set,tsym(sym).realname) MessagePos1(tsym(sym).fileinfo,sym_h_para_identifier_only_set,tsym(sym).prettyname)
end end
else if (tsym(sym).owner.symtabletype=ObjectSymtable) then else if (tsym(sym).owner.symtabletype=ObjectSymtable) then
MessagePos2(tsym(sym).fileinfo,sym_n_private_identifier_only_set,tsym(sym).owner.realname^,tsym(sym).realname) MessagePos2(tsym(sym).fileinfo,sym_n_private_identifier_only_set,tsym(sym).owner.realname^,tsym(sym).prettyname)
else if tabstractvarsym(sym).varoptions*[vo_is_funcret,vo_is_public,vo_is_external]=[] then else if tabstractvarsym(sym).varoptions*[vo_is_funcret,vo_is_public,vo_is_external]=[] then
MessagePos1(tsym(sym).fileinfo,sym_n_local_identifier_only_set,tsym(sym).realname); MessagePos1(tsym(sym).fileinfo,sym_n_local_identifier_only_set,tsym(sym).prettyname);
end end
else if (tabstractvarsym(sym).varstate = vs_read_not_warned) and else if (tabstractvarsym(sym).varstate = vs_read_not_warned) and
([vo_is_public,vo_is_external] * tabstractvarsym(sym).varoptions = []) then ([vo_is_public,vo_is_external] * tabstractvarsym(sym).varoptions = []) then
MessagePos1(tsym(sym).fileinfo,sym_w_identifier_only_read,tsym(sym).realname) MessagePos1(tsym(sym).fileinfo,sym_w_identifier_only_read,tsym(sym).prettyname)
end end
else if ((tsym(sym).owner.symtabletype in else if ((tsym(sym).owner.symtabletype in
[ObjectSymtable,parasymtable,localsymtable,staticsymtable])) then [ObjectSymtable,parasymtable,localsymtable,staticsymtable])) then
@ -613,20 +613,23 @@ implementation
(sp_internal in tsym(sym).symoptions) then (sp_internal in tsym(sym).symoptions) then
exit; exit;
{ do not claim for inherited private fields !! } { do not claim for inherited private fields !! }
if (Tsym(sym).refs=0) and (tsym(sym).owner.symtabletype=ObjectSymtable) then if (tsym(sym).refs=0) and (tsym(sym).owner.symtabletype=ObjectSymtable) then
MessagePos2(tsym(sym).fileinfo,sym_n_private_method_not_used,tsym(sym).owner.realname^,tsym(sym).realname) MessagePos2(tsym(sym).fileinfo,sym_n_private_method_not_used,tsym(sym).owner.realname^,tsym(sym).prettyname)
{ units references are problematic } { units references are problematic }
else else
begin begin
if (Tsym(sym).refs=0) and if (tsym(sym).refs=0) and
not(tsym(sym).typ in [enumsym,unitsym]) and not(tsym(sym).typ in [enumsym,unitsym]) and
not(is_funcret_sym(tsym(sym))) and not(is_funcret_sym(tsym(sym))) and
{ don't complain about compiler generated syms for specializations, see also #13405 }
not((tsym(sym).typ=typesym) and (df_specialization in ttypesym(sym).typedef.defoptions) and
(pos('$',ttypesym(sym).Realname)<>0)) and
( (
(tsym(sym).typ<>procsym) or (tsym(sym).typ<>procsym) or
((tsym(sym).owner.symtabletype=staticsymtable) and ((tsym(sym).owner.symtabletype=staticsymtable) and
not current_module.is_unit) not current_module.is_unit)
) then ) then
MessagePos2(tsym(sym).fileinfo,sym_h_local_symbol_not_used,SymTypeName[tsym(sym).typ],tsym(sym).realname); MessagePos2(tsym(sym).fileinfo,sym_h_local_symbol_not_used,SymTypeName[tsym(sym).typ],tsym(sym).prettyname);
end; end;
end; end;
end; end;

View File

@ -105,6 +105,7 @@ interface
constructor create(st:tsymtyp;const aname:string); constructor create(st:tsymtyp;const aname:string);
destructor destroy;override; destructor destroy;override;
function mangledname:string; virtual; function mangledname:string; virtual;
function prettyname:string; virtual;
procedure buildderef;virtual; procedure buildderef;virtual;
procedure deref;virtual; procedure deref;virtual;
procedure ChangeOwner(st:TSymtable); procedure ChangeOwner(st:TSymtable);
@ -388,6 +389,12 @@ implementation
end; end;
function tsym.prettyname : string;
begin
result:=realname;
end;
procedure tsym.ChangeOwner(st:TSymtable); procedure tsym.ChangeOwner(st:TSymtable);
begin begin
Owner:=st; Owner:=st;