mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-13 13:29:27 +02:00
compiler: allow nested objects to refence owner class in method arguments (issue #0017986)
git-svn-id: trunk@16440 -
This commit is contained in:
parent
0c23029d8f
commit
8aef216f21
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -10761,6 +10761,7 @@ tests/webtbs/tw17950.pp svneol=native#text/pascal
|
||||
tests/webtbs/tw17952a.pp svneol=native#text/pascal
|
||||
tests/webtbs/tw17952b.pp svneol=native#text/pascal
|
||||
tests/webtbs/tw1798.pp svneol=native#text/plain
|
||||
tests/webtbs/tw17986.pp svneol=native#text/pascal
|
||||
tests/webtbs/tw17998.pp svneol=native#text/plain
|
||||
tests/webtbs/tw18013.pp svneol=native#text/plain
|
||||
tests/webtbs/tw1820.pp svneol=native#text/plain
|
||||
|
@ -351,6 +351,7 @@ implementation
|
||||
srsymtable : TSymtable;
|
||||
s,sorg : TIDString;
|
||||
t : ttoken;
|
||||
objdef : tobjectdef;
|
||||
begin
|
||||
s:=pattern;
|
||||
sorg:=orgpattern;
|
||||
@ -358,16 +359,20 @@ implementation
|
||||
{ use of current parsed object:
|
||||
- classes can be used also in classes
|
||||
- objects can be parameters }
|
||||
if assigned(current_objectdef) and
|
||||
(current_objectdef.objname^=pattern) and
|
||||
(
|
||||
(testcurobject=2) or
|
||||
is_class_or_interface_or_objc(current_objectdef)
|
||||
)then
|
||||
objdef:=current_objectdef;
|
||||
while Assigned(objdef) and (objdef.typ=objectdef) do
|
||||
begin
|
||||
consume(_ID);
|
||||
def:=current_objectdef;
|
||||
exit;
|
||||
if (tobjectdef(objdef).objname^=pattern) and
|
||||
(
|
||||
(testcurobject=2) or
|
||||
is_class_or_interface_or_objc(objdef)
|
||||
) then
|
||||
begin
|
||||
consume(_ID);
|
||||
def:=objdef;
|
||||
exit;
|
||||
end;
|
||||
objdef:=tobjectdef(tobjectdef(objdef).owner.defowner);
|
||||
end;
|
||||
{ Use the special searchsym_type that ignores records,objects and
|
||||
parameters }
|
||||
|
20
tests/webtbs/tw17986.pp
Normal file
20
tests/webtbs/tw17986.pp
Normal file
@ -0,0 +1,20 @@
|
||||
program tw17986;
|
||||
|
||||
{$mode delphi}
|
||||
|
||||
type
|
||||
TFoo1 = class
|
||||
public
|
||||
type
|
||||
TFoo2 = class
|
||||
procedure Proc(value: TFoo1); // was error: Type "TFoo1" is not completely defined
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFoo1.TFoo2.Proc(value: TFoo1);
|
||||
begin
|
||||
end;
|
||||
|
||||
begin
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user