mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-02 11:13:40 +02:00
* delphi/tp mode fixes for dup id checking (tbs319,tbf320)
This commit is contained in:
parent
50e29f4d77
commit
aa7cb6bde2
@ -203,7 +203,7 @@ unit symtable;
|
||||
procedure clear;
|
||||
function rename(const olds,news : stringid):psym;
|
||||
procedure foreach(proc2call : tnamedindexcallback);
|
||||
function insert(sym : psym):psym;
|
||||
procedure insert(sym : psym);
|
||||
function search(const s : stringid) : psym;
|
||||
function speedsearch(const s : stringid;speedvalue : longint) : psym;
|
||||
procedure registerdef(p : pdef);
|
||||
@ -1818,7 +1818,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
function tsymtable.insert(sym:psym):psym;
|
||||
procedure tsymtable.insert(sym:psym);
|
||||
var
|
||||
hp : psymtable;
|
||||
hsym : psym;
|
||||
@ -1851,7 +1851,19 @@ implementation
|
||||
{ check the current symtable }
|
||||
hsym:=search(sym^.name);
|
||||
if assigned(hsym) then
|
||||
DuplicateSym(hsym);
|
||||
begin
|
||||
{ in TP and Delphi you can have a local with the
|
||||
same name as the function, the function is then hidden for
|
||||
the user. (Under delphi it can still be accessed using result) (PFV) }
|
||||
if (hsym^.typ=funcretsym) and
|
||||
(m_tp in aktmodeswitches) then
|
||||
hsym^.setname('hidden'+hsym^.name)
|
||||
else
|
||||
begin
|
||||
DuplicateSym(hsym);
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
{ check for duplicate id in local and parasymtable symtable }
|
||||
if (symtabletype=localsymtable) then
|
||||
{ to be on the save side: }
|
||||
@ -1859,18 +1871,19 @@ implementation
|
||||
if assigned(next) and
|
||||
(next^.symtabletype=parasymtable) then
|
||||
begin
|
||||
hsym:=next^.search(sym^.name);
|
||||
{ a parameter and the function can have the same }
|
||||
{ name in TP and Delphi }
|
||||
if assigned(hsym) then
|
||||
begin
|
||||
if (sym^.typ<>funcretsym) then
|
||||
DuplicateSym(hsym)
|
||||
else
|
||||
begin
|
||||
sym^.setname('hidden'+sym^.name);
|
||||
end;
|
||||
end;
|
||||
hsym:=next^.search(sym^.name);
|
||||
if assigned(hsym) then
|
||||
begin
|
||||
{ a parameter and the function can have the same
|
||||
name in TP and Delphi }
|
||||
if (sym^.typ=funcretsym) then
|
||||
sym^.setname('hidden'+sym^.name)
|
||||
else
|
||||
begin
|
||||
DuplicateSym(hsym);
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
end
|
||||
else if (current_module^.flags and uf_local_browser)=0 then
|
||||
internalerror(43789);
|
||||
@ -1890,11 +1903,14 @@ implementation
|
||||
(not(sp_private in hsym^.symoptions) or
|
||||
(hsym^.owner^.defowner^.owner^.symtabletype<>unitsymtable)) then
|
||||
begin
|
||||
{ delphi allows to reuse the names of properties }
|
||||
{ in procedures }
|
||||
if not((hsym^.typ=propertysym) and
|
||||
(m_delphi in aktmodeswitches)) then
|
||||
DuplicateSym(hsym);
|
||||
{ delphi allows to reuse the names in a class, but not
|
||||
in object (tp7 compatible) }
|
||||
if not((m_delphi in aktmodeswitches) and
|
||||
(pobjectdef(next^.next^.defowner)^.is_class)) then
|
||||
begin
|
||||
DuplicateSym(hsym);
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
{ check for duplicate id in para symtable of methods }
|
||||
@ -1918,7 +1934,10 @@ implementation
|
||||
{ in parameter lists of methods }
|
||||
if not((hsym^.typ=propertysym) and
|
||||
(m_delphi in aktmodeswitches)) then
|
||||
DuplicateSym(hsym);
|
||||
begin
|
||||
DuplicateSym(hsym);
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
{ check for duplicate field id in inherited classes }
|
||||
@ -1931,7 +1950,10 @@ implementation
|
||||
if assigned(hsym) and
|
||||
(not(sp_private in hsym^.symoptions) or
|
||||
(hsym^.owner^.defowner^.owner^.symtabletype<>unitsymtable)) then
|
||||
DuplicateSym(hsym);
|
||||
begin
|
||||
DuplicateSym(hsym);
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
{ register definition of typesym }
|
||||
if (sym^.typ = typesym) and
|
||||
@ -1952,7 +1974,6 @@ implementation
|
||||
{ insert in index and search hash }
|
||||
symindex^.insert(sym);
|
||||
symsearch^.insert(sym);
|
||||
insert:=sym;
|
||||
end;
|
||||
|
||||
|
||||
@ -2904,7 +2925,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.92 2000-05-23 14:15:44 pierre
|
||||
Revision 1.93 2000-06-01 19:07:52 peter
|
||||
* delphi/tp mode fixes for dup id checking (tbs319,tbf320)
|
||||
|
||||
Revision 1.92 2000/05/23 14:15:44 pierre
|
||||
* fix for bug 959
|
||||
|
||||
Revision 1.91 2000/05/12 05:59:57 pierre
|
||||
@ -3039,4 +3063,4 @@ end.
|
||||
Revision 1.56 1999/11/04 23:13:25 peter
|
||||
* moved unit alias support into ifdef
|
||||
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user