diff --git a/packages/fcl-passrc/src/pasresolveeval.pas b/packages/fcl-passrc/src/pasresolveeval.pas index 9eb70951bd..4f7acb4144 100644 --- a/packages/fcl-passrc/src/pasresolveeval.pas +++ b/packages/fcl-passrc/src/pasresolveeval.pas @@ -566,7 +566,7 @@ type procedure EmitRangeCheckConst(id: int64; const aValue: String; MinVal, MaxVal: MaxPrecInt; PosEl: TPasElement; MsgType: TMessageType = mtWarning); function ChrValue(Value: TResEvalValue; ErrorEl: TPasElement): TResEvalValue; virtual; - function OrdValue(Value: TResEvalValue; ErrorEl: TPasElement): TResEvalInt; virtual; + function OrdValue(Value: TResEvalValue; ErrorEl: TPasElement): TResEvalValue; virtual; procedure PredValue(Value: TResEvalValue; ErrorEl: TPasElement); virtual; procedure SuccValue(Value: TResEvalValue; ErrorEl: TPasElement); virtual; function EvalStrFunc(Params: TParamsExpr; Flags: TResEvalFlags): TResEvalValue; virtual; @@ -3829,7 +3829,7 @@ begin end; function TResExprEvaluator.OrdValue(Value: TResEvalValue; ErrorEl: TPasElement - ): TResEvalInt; + ): TResEvalValue; begin case Value.Kind of revkBool: @@ -3837,6 +3837,8 @@ begin Result:=TResEvalInt.CreateValue(1) else Result:=TResEvalInt.CreateValue(0); + revkInt,revkUInt: + Result:=Value; revkString: if length(TResEvalString(Value).S)<>1 then RaiseRangeCheck(20170624160128,ErrorEl) diff --git a/packages/fcl-passrc/src/pasresolver.pp b/packages/fcl-passrc/src/pasresolver.pp index 212479cc4c..3587174df2 100644 --- a/packages/fcl-passrc/src/pasresolver.pp +++ b/packages/fcl-passrc/src/pasresolver.pp @@ -158,9 +158,16 @@ Works: - enum: low(), high(), pred(), succ(), ord(), rg(int), int(rg), enum:=rg, rg:=rg, rg1:=rg2, rg:=enum, =, <>, in array[rg], low(array), high(array) +- for..in..do : + - boolean, char, byte, shortint, word, smallint, longword, longint + - enum range, char range, integer range + - set of enum, enum range, integer, integer range, char, char range ToDo: - for..in..do + - array + - operator + - class - range checking: - indexedprop[param] - case-of unique