mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-16 10:19:30 +02:00
compiler: handle other places where we check current_procdef for self node
git-svn-id: trunk@25281 -
This commit is contained in:
parent
4b76782691
commit
dc95ba5b07
@ -924,15 +924,17 @@ implementation
|
||||
begin
|
||||
{ Escape nested procedures }
|
||||
if assigned(current_procinfo) then
|
||||
pd:=current_procinfo.get_normal_proc.procdef
|
||||
else
|
||||
pd:=nil;
|
||||
{ We are calling from the static class method which has no self node }
|
||||
if assigned(pd) and pd.no_self_node then
|
||||
if st.symtabletype=recordsymtable then
|
||||
p1:=ctypenode.create(pd.struct)
|
||||
else
|
||||
p1:=cloadvmtaddrnode.create(ctypenode.create(pd.struct))
|
||||
begin
|
||||
pd:=current_procinfo.get_normal_proc.procdef;
|
||||
{ We are calling from the static class method which has no self node }
|
||||
if assigned(pd) and pd.no_self_node then
|
||||
if st.symtabletype=recordsymtable then
|
||||
p1:=ctypenode.create(pd.struct)
|
||||
else
|
||||
p1:=cloadvmtaddrnode.create(ctypenode.create(pd.struct))
|
||||
else
|
||||
p1:=load_self_node;
|
||||
end
|
||||
else
|
||||
p1:=load_self_node;
|
||||
{ We are calling a member }
|
||||
@ -1295,7 +1297,7 @@ implementation
|
||||
if assigned(p1) and
|
||||
(
|
||||
is_self_node(p1) or
|
||||
(assigned(current_procinfo) and (current_procinfo.procdef.no_self_node) and
|
||||
(assigned(current_procinfo) and (current_procinfo.get_normal_proc.procdef.no_self_node) and
|
||||
(current_procinfo.procdef.struct=structh))) then
|
||||
Message(parser_e_only_class_members)
|
||||
else
|
||||
@ -2411,11 +2413,12 @@ implementation
|
||||
end;
|
||||
|
||||
var
|
||||
srsym : tsym;
|
||||
srsymtable : TSymtable;
|
||||
hdef : tdef;
|
||||
srsym: tsym;
|
||||
srsymtable: TSymtable;
|
||||
hdef: tdef;
|
||||
pd: tprocdef;
|
||||
orgstoredpattern,
|
||||
storedpattern : string;
|
||||
storedpattern: string;
|
||||
callflags: tcallnodeflags;
|
||||
t : ttoken;
|
||||
unit_found : boolean;
|
||||
@ -2573,10 +2576,18 @@ implementation
|
||||
else
|
||||
p1:=cloadvmtaddrnode.create(ctypenode.create(hdef))
|
||||
else
|
||||
if assigned(current_procinfo) and current_procinfo.procdef.no_self_node then
|
||||
p1:=cloadvmtaddrnode.create(ctypenode.create(current_procinfo.procdef.struct))
|
||||
else
|
||||
p1:=load_self_node;
|
||||
begin
|
||||
if assigned(current_procinfo) then
|
||||
begin
|
||||
pd:=current_procinfo.get_normal_proc.procdef;
|
||||
if assigned(pd) and pd.no_self_node then
|
||||
p1:=cloadvmtaddrnode.create(ctypenode.create(pd.struct))
|
||||
else
|
||||
p1:=load_self_node;
|
||||
end
|
||||
else
|
||||
p1:=load_self_node;
|
||||
end;
|
||||
{ now, if the field itself is part of an objectsymtab }
|
||||
{ (it can be even if it was found in a withsymtable, }
|
||||
{ e.g., "with classinstance do field := 5"), then }
|
||||
|
Loading…
Reference in New Issue
Block a user