From 0fa8ef9fa90ea20282a1e7ac828c69d49f1770e8 Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Wed, 29 Jul 2020 21:53:13 +0000 Subject: [PATCH] fcl-passrc: resolving (a as b)[] git-svn-id: trunk@45964 - --- packages/fcl-passrc/src/pasresolver.pp | 9 +++++---- packages/fcl-passrc/tests/tcresolver.pas | 18 ++++++++++++------ 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/packages/fcl-passrc/src/pasresolver.pp b/packages/fcl-passrc/src/pasresolver.pp index 726347b345..ff1c900829 100644 --- a/packages/fcl-passrc/src/pasresolver.pp +++ b/packages/fcl-passrc/src/pasresolver.pp @@ -11025,14 +11025,15 @@ begin ResolveBinaryExpr(TBinaryExpr(Params.Value),Access); if not (Value.CustomData is TResolvedReference) then RaiseNotYetImplemented(20190115144534,Params); - // already resolved + // already resolved via ResolveNameExpr, which calls ResolveArrayParamsExprName exit; end else begin - // ToDo: (a+b)[] - //ResolveBinaryExpr(TBinaryExpr(Params.Value),rraRead); - RaiseNotYetImplemented(20190115144539,Params); + // For example (a+b)[] or (a as b)[] + Value:=Params.Value; + ResolveBinaryExpr(TBinaryExpr(Value),rraRead); + ComputeElement(Value,ResolvedEl,[rcSetReferenceFlags]); end; end else diff --git a/packages/fcl-passrc/tests/tcresolver.pas b/packages/fcl-passrc/tests/tcresolver.pas index ac14e9b90b..938e3becb8 100644 --- a/packages/fcl-passrc/tests/tcresolver.pas +++ b/packages/fcl-passrc/tests/tcresolver.pas @@ -13146,23 +13146,29 @@ begin Add([ 'type', ' TObject = class', + ' end;', + ' TBird = class', ' function GetB(Index: longint): longint;', ' procedure SetB(Index: longint; Value: longint);', ' property B[Index: longint]: longint read GetB write SetB; default;', ' end;', - 'function TObject.GetB(Index: longint): longint;', + 'function TBird.GetB(Index: longint): longint;', 'begin', 'end;', - 'procedure TObject.SetB(Index: longint; Value: longint);', + 'procedure TBird.SetB(Index: longint; Value: longint);', 'begin', ' if Value=Self[Index] then ;', ' Self[Index]:=Value;', 'end;', - 'var o: TObject;', + 'var', + ' b: TBird;', + ' o: TObject;', 'begin', - ' o[3]:=4;', - ' if o[5]=6 then;', - ' if 7=o[8] then;']); + ' b[3]:=4;', + ' if b[5]=6 then;', + ' if 7=b[8] then;', + ' (o as TBird)[9]:=10;', + '']); ParseProgram; end;