diff --git a/packages/fcl-passrc/src/pastree.pp b/packages/fcl-passrc/src/pastree.pp index c915f50b39..720fc3d317 100644 --- a/packages/fcl-passrc/src/pastree.pp +++ b/packages/fcl-passrc/src/pastree.pp @@ -877,7 +877,7 @@ type function AddCommands: TPasImplCommands; // used by mkxmlrpc, not by pparser function AddBeginBlock: TPasImplBeginBlock; function AddRepeatUntil: TPasImplRepeatUntil; - function AddIfElse(const ACondition: string): TPasImplIfElse; + function AddIfElse(const ACondition: TPasExpr): TPasImplIfElse; function AddWhileDo(const ACondition: string): TPasImplWhileDo; function AddWithDo(const Expression: string): TPasImplWithDo; function AddCaseOf(const Expression: string): TPasImplCaseOf; @@ -933,9 +933,10 @@ type procedure AddElement(Element: TPasImplElement); override; function CloseOnSemicolon: boolean; override; public - Condition: string; + ConditionExpr : TPasExpr; IfBranch: TPasImplElement; ElseBranch: TPasImplElement; // can be nil + Function Condition: string; end; { TPasImplWhileDo } @@ -1812,6 +1813,7 @@ end; destructor TPasImplIfElse.Destroy; begin + FreeAndNil(ConditionExpr); if Assigned(IfBranch) then IfBranch.Release; if Assigned(ElseBranch) then @@ -1841,6 +1843,12 @@ begin Result:=ElseBranch<>nil; end; +function TPasImplIfElse.Condition: string; +begin + If Assigned(ConditionExpr) then + Result:=ConditionExpr.GetDeclaration(True); +end; + destructor TPasImplForLoop.Destroy; begin if Assigned(Variable) then @@ -1908,10 +1916,10 @@ begin AddElement(Result); end; -function TPasImplBlock.AddIfElse(const ACondition: string): TPasImplIfElse; +function TPasImplBlock.AddIfElse(const ACondition: TPasExpr): TPasImplIfElse; begin Result := TPasImplIfElse.Create('', Self); - Result.Condition := ACondition; + Result.ConditionExpr := ACondition; AddElement(Result); end; diff --git a/packages/fcl-passrc/src/pparser.pp b/packages/fcl-passrc/src/pparser.pp index c8ba19952e..6f7c3d666d 100644 --- a/packages/fcl-passrc/src/pparser.pp +++ b/packages/fcl-passrc/src/pparser.pp @@ -3061,9 +3061,11 @@ begin end; tkIf: begin - Condition:=ParseExpression(CurBlock); + NextToken; + Left:=DoParseExpression(CurBlock); + UNgettoken; el:=TPasImplIfElse(CreateElement(TPasImplIfElse,'',CurBlock)); - TPasImplIfElse(el).Condition:=Condition; + TPasImplIfElse(el).ConditionExpr:=Left; //WriteLn(i,'IF Condition="',Condition,'" Token=',CurTokenText); CreateBlock(TPasImplIfElse(el)); ExpectToken(tkthen);