Browse Source

fcl-passrc: resolver: TResExprEvaluator.OrdValue cna return UInt

git-svn-id: trunk@37579 -
Mattias Gaertner 7 years ago
parent
commit
c96f19339f

+ 4 - 2
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)

+ 7 - 0
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