diff --git a/packages/fcl-passrc/src/pastree.pp b/packages/fcl-passrc/src/pastree.pp index 6a4c209044..f930ef35d0 100644 --- a/packages/fcl-passrc/src/pastree.pp +++ b/packages/fcl-passrc/src/pastree.pp @@ -1292,6 +1292,7 @@ begin end; procedure TPasElement.Release; + begin if FRefCount = 0 then Free @@ -1808,7 +1809,10 @@ procedure TPasImplForLoop.AddElement(Element: TPasImplElement); begin inherited AddElement(Element); if Body=nil then - Body:=Element + begin + Body:=Element; + Body.AddRef; + end else raise Exception.Create('TPasImplForLoop.AddElement body already set - please report this bug'); end; diff --git a/packages/fcl-passrc/src/pparser.pp b/packages/fcl-passrc/src/pparser.pp index 28f13b056c..8ef7fa6f1f 100644 --- a/packages/fcl-passrc/src/pparser.pp +++ b/packages/fcl-passrc/src/pparser.pp @@ -3038,7 +3038,7 @@ begin end; tkIf: begin - Condition:=ParseExpression(Parent); + Condition:=ParseExpression(CurBlock); el:=TPasImplIfElse(CreateElement(TPasImplIfElse,'',CurBlock)); TPasImplIfElse(el).Condition:=Condition; //WriteLn(i,'IF Condition="',Condition,'" Token=',CurTokenText); @@ -3241,7 +3241,7 @@ begin //writeln(i,'EXCEPT'); el:=TPasImplTryExcept(CreateElement(TPasImplTryExcept,'',CurBlock)); TPasImplTry(CurBlock).FinallyExcept:=TPasImplTryExcept(el); - CurBlock.AddElement(el); +// CurBlock.AddElement(el); CurBlock:=TPasImplTryExcept(el); end else ParseExc(SParserSyntaxError);