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

git-svn-id: trunk@37579 -
This commit is contained in:
Mattias Gaertner 2017-11-12 14:15:12 +00:00
parent 2a57480fff
commit c96f19339f
2 changed files with 11 additions and 2 deletions

View File

@ -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)

View File

@ -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