From ec3c050ac7ab4987ea300e983ea3c3c1b76ff42b Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Wed, 26 Jun 2019 19:32:34 +0000 Subject: [PATCH] fcl-passrc: clean up git-svn-id: trunk@42291 - --- packages/fcl-passrc/src/pasresolver.pp | 16 ++++++++++++++-- packages/fcl-passrc/src/pparser.pp | 3 ++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/fcl-passrc/src/pasresolver.pp b/packages/fcl-passrc/src/pasresolver.pp index fd65c506fc..a9af90a464 100644 --- a/packages/fcl-passrc/src/pasresolver.pp +++ b/packages/fcl-passrc/src/pasresolver.pp @@ -14369,6 +14369,19 @@ end; procedure TPasResolver.BI_LowHigh_OnEval(Proc: TResElDataBuiltInProc; Params: TParamsExpr; Flags: TResEvalFlags; out Evaluated: TResEvalValue); + + function IsDynArrayConstExpr(IdentEl: TPasElement): boolean; + begin + Result:=false; + if not (IdentEl is TPasVariable) then exit; + if not (TPasVariable(IdentEl).Expr is TPasExpr) then exit; + + if (IdentEl.ClassType=TPasConst) and TPasConst(IdentEl).IsConst then + exit(true); + if fExprEvaluator.IsConst(Params) then + exit(true); // a const refers an initial value + end; + var Param: TPasExpr; ParamResolved: TPasResolverResult; @@ -14398,8 +14411,7 @@ begin // dyn or open array if Proc.BuiltIn=bfLow then Evaluated:=TResEvalInt.CreateValue(0) - else if (ParamResolved.IdentEl is TPasVariable) - and (TPasVariable(ParamResolved.IdentEl).Expr is TPasExpr) then + else if IsDynArrayConstExpr(ParamResolved.IdentEl) then begin Expr:=TPasVariable(ParamResolved.IdentEl).Expr; if Expr is TArrayValues then diff --git a/packages/fcl-passrc/src/pparser.pp b/packages/fcl-passrc/src/pparser.pp index 54a97dcabf..f2c1324846 100644 --- a/packages/fcl-passrc/src/pparser.pp +++ b/packages/fcl-passrc/src/pparser.pp @@ -511,7 +511,9 @@ Function TokenToAssignKind( tk : TToken) : TAssignKind; implementation +{$IF FPC_FULLVERSION>=30301} uses strutils; +{$ENDIF} const WhitespaceTokensToIgnore = [tkWhitespace, tkComment, tkLineEnding, tkTab]; @@ -711,7 +713,6 @@ function ParseSource(AEngine: TPasTreeContainer; var FileResolver: TBaseFileResolver; Parser: TPasParser; - Start, CurPos: integer; // in FPCCommandLine Filename: String; Scanner: TPascalScanner;