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; procedure EmitRangeCheckConst(id: int64; const aValue: String;
MinVal, MaxVal: MaxPrecInt; PosEl: TPasElement; MsgType: TMessageType = mtWarning); MinVal, MaxVal: MaxPrecInt; PosEl: TPasElement; MsgType: TMessageType = mtWarning);
function ChrValue(Value: TResEvalValue; ErrorEl: TPasElement): TResEvalValue; virtual; 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 PredValue(Value: TResEvalValue; ErrorEl: TPasElement); virtual;
procedure SuccValue(Value: TResEvalValue; ErrorEl: TPasElement); virtual; procedure SuccValue(Value: TResEvalValue; ErrorEl: TPasElement); virtual;
function EvalStrFunc(Params: TParamsExpr; Flags: TResEvalFlags): TResEvalValue; virtual; function EvalStrFunc(Params: TParamsExpr; Flags: TResEvalFlags): TResEvalValue; virtual;
@ -3829,7 +3829,7 @@ begin
end; end;
function TResExprEvaluator.OrdValue(Value: TResEvalValue; ErrorEl: TPasElement function TResExprEvaluator.OrdValue(Value: TResEvalValue; ErrorEl: TPasElement
): TResEvalInt; ): TResEvalValue;
begin begin
case Value.Kind of case Value.Kind of
revkBool: revkBool:
@ -3837,6 +3837,8 @@ begin
Result:=TResEvalInt.CreateValue(1) Result:=TResEvalInt.CreateValue(1)
else else
Result:=TResEvalInt.CreateValue(0); Result:=TResEvalInt.CreateValue(0);
revkInt,revkUInt:
Result:=Value;
revkString: revkString:
if length(TResEvalString(Value).S)<>1 then if length(TResEvalString(Value).S)<>1 then
RaiseRangeCheck(20170624160128,ErrorEl) RaiseRangeCheck(20170624160128,ErrorEl)

View File

@ -158,9 +158,16 @@ Works:
- enum: low(), high(), pred(), succ(), ord(), rg(int), int(rg), enum:=rg, - enum: low(), high(), pred(), succ(), ord(), rg(int), int(rg), enum:=rg,
rg:=rg, rg1:=rg2, rg:=enum, =, <>, in rg:=rg, rg1:=rg2, rg:=enum, =, <>, in
array[rg], low(array), high(array) 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: ToDo:
- for..in..do - for..in..do
- array
- operator
- class
- range checking: - range checking:
- indexedprop[param] - indexedprop[param]
- case-of unique - case-of unique