compiler: allow nested objects to refence owner class in method arguments (issue #0017986)

git-svn-id: trunk@16440 -
This commit is contained in:
paul 2010-11-26 07:55:55 +00:00
parent 0c23029d8f
commit 8aef216f21
3 changed files with 35 additions and 9 deletions

1
.gitattributes vendored
View File

@ -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

View File

@ -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
View 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.