mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-22 04:29:22 +02:00
* fixed several range check errors inside variant helpers in case the
rtl is compiled with range checking on (Delphi doesn't give range errors there either) git-svn-id: trunk@7513 -
This commit is contained in:
parent
4ce4742bc8
commit
480af93606
@ -87,18 +87,18 @@ begin
|
||||
varEmpty : Result := 0;
|
||||
varSmallInt : Result := vSmallInt;
|
||||
varShortInt : Result := vShortInt;
|
||||
varInteger : Result := vInteger;
|
||||
varSingle : Result := Round(vSingle);
|
||||
varDouble : Result := Round(vDouble);
|
||||
varCurrency : Result := Round(vCurrency);
|
||||
varDate : Result := Round(vDate);
|
||||
varBoolean : Result := SmallInt(vBoolean);
|
||||
varInteger : Result := smallint(vInteger);
|
||||
varSingle : Result := smallint(Round(vSingle));
|
||||
varDouble : Result := smallint(Round(vDouble));
|
||||
varCurrency : Result := smallint(Round(vCurrency));
|
||||
varDate : Result := smallint(Round(vDate));
|
||||
varBoolean : Result := smallint(SmallInt(vBoolean));
|
||||
varVariant : Result := VariantToSmallInt(PVarData(vPointer)^);
|
||||
varByte : Result := vByte;
|
||||
varWord : Result := vWord;
|
||||
varLongWord : Result := vLongWord;
|
||||
varInt64 : Result := vInt64;
|
||||
varQword : Result := vQWord;
|
||||
varWord : Result := smallint(vWord);
|
||||
varLongWord : Result := smallint(vLongWord);
|
||||
varInt64 : Result := smallint(vInt64);
|
||||
varQword : Result := smallint(vQWord);
|
||||
varOleStr : Result := WStrToSmallInt(vOleStr);
|
||||
varString : Result := LStrToSmallInt(vString);
|
||||
else
|
||||
@ -107,18 +107,18 @@ begin
|
||||
varByRef: if Assigned(vPointer) then case vType of
|
||||
varSmallInt : Result := PSmallInt(vPointer)^;
|
||||
varShortInt : Result := PShortInt(vPointer)^;
|
||||
varInteger : Result := PInteger(vPointer)^;
|
||||
varSingle : Result := Round(PSingle(vPointer)^);
|
||||
varDouble : Result := Round(PDouble(vPointer)^);
|
||||
varCurrency : Result := Round(PCurrency(vPointer)^);
|
||||
varDate : Result := Round(PDate(vPointer)^);
|
||||
varInteger : Result := smallint(PInteger(vPointer)^);
|
||||
varSingle : Result := smallint(Round(PSingle(vPointer)^));
|
||||
varDouble : Result := smallint(Round(PDouble(vPointer)^));
|
||||
varCurrency : Result := smallint(Round(PCurrency(vPointer)^));
|
||||
varDate : Result := smallint(Round(PDate(vPointer)^));
|
||||
varBoolean : Result := SmallInt(PWordBool(vPointer)^);
|
||||
varVariant : Result := VariantToSmallInt(PVarData(vPointer)^);
|
||||
varByte : Result := PByte(vPointer)^;
|
||||
varWord : Result := PWord(vPointer)^;
|
||||
varLongWord : Result := PLongWord(vPointer)^;
|
||||
varInt64 : Result := PInt64(vPointer)^;
|
||||
varQword : Result := PQWord(vPointer)^;
|
||||
varWord : Result := smallint(PWord(vPointer)^);
|
||||
varLongWord : Result := smallint(PLongWord(vPointer)^);
|
||||
varInt64 : Result := smallint(PInt64(vPointer)^);
|
||||
varQword : Result := smallint(PQWord(vPointer)^);
|
||||
varOleStr : Result := WStrToSmallInt(PPointer(vPointer)^);
|
||||
varString : Result := LStrToSmallInt(PPointer(vPointer)^);
|
||||
else { other vtype }
|
||||
@ -164,40 +164,40 @@ begin
|
||||
case vType and not varTypeMask of
|
||||
0: case vType of
|
||||
varEmpty : Result := 0;
|
||||
varSmallInt : Result := vSmallInt;
|
||||
varSmallInt : Result := shortint(vSmallInt);
|
||||
varShortInt : Result := vShortInt;
|
||||
varInteger : Result := vInteger;
|
||||
varSingle : Result := Round(vSingle);
|
||||
varDouble : Result := Round(vDouble);
|
||||
varCurrency : Result := Round(vCurrency);
|
||||
varDate : Result := Round(vDate);
|
||||
varInteger : Result := shortint(vInteger);
|
||||
varSingle : Result := shortint(Round(vSingle));
|
||||
varDouble : Result := shortint(Round(vDouble));
|
||||
varCurrency : Result := shortint(Round(vCurrency));
|
||||
varDate : Result := shortint(Round(vDate));
|
||||
varBoolean : Result := SmallInt(vBoolean);
|
||||
varVariant : Result := VariantToShortInt(PVarData(vPointer)^);
|
||||
varByte : Result := vByte;
|
||||
varWord : Result := vWord;
|
||||
varLongWord : Result := vLongWord;
|
||||
varInt64 : Result := vInt64;
|
||||
varQword : Result := vQWord;
|
||||
varByte : Result := shortint(vByte);
|
||||
varWord : Result := shortint(vWord);
|
||||
varLongWord : Result := shortint(vLongWord);
|
||||
varInt64 : Result := shortint(vInt64);
|
||||
varQword : Result := shortint(vQWord);
|
||||
varOleStr : Result := WStrToShortInt(vOleStr);
|
||||
varString : Result := LStrToShortInt(vString);
|
||||
else
|
||||
VariantTypeMismatch(vType, varShortInt);
|
||||
end;
|
||||
varByRef: if Assigned(vPointer) then case vType of
|
||||
varSmallInt : Result := PSmallInt(vPointer)^;
|
||||
varSmallInt : Result := shortint(PSmallInt(vPointer)^);
|
||||
varShortInt : Result := PShortInt(vPointer)^;
|
||||
varInteger : Result := PInteger(vPointer)^;
|
||||
varSingle : Result := Round(PSingle(vPointer)^);
|
||||
varDouble : Result := Round(PDouble(vPointer)^);
|
||||
varCurrency : Result := Round(PCurrency(vPointer)^);
|
||||
varDate : Result := Round(PDate(vPointer)^);
|
||||
varInteger : Result := shortint(PInteger(vPointer)^);
|
||||
varSingle : Result := shortint(Round(PSingle(vPointer)^));
|
||||
varDouble : Result := shortint(Round(PDouble(vPointer)^));
|
||||
varCurrency : Result := shortint(Round(PCurrency(vPointer)^));
|
||||
varDate : Result := shortint(Round(PDate(vPointer)^));
|
||||
varBoolean : Result := SmallInt(PWordBool(vPointer)^);
|
||||
varVariant : Result := VariantToShortInt(PVarData(vPointer)^);
|
||||
varByte : Result := PByte(vPointer)^;
|
||||
varWord : Result := PWord(vPointer)^;
|
||||
varLongWord : Result := PLongWord(vPointer)^;
|
||||
varInt64 : Result := PInt64(vPointer)^;
|
||||
varQword : Result := PQWord(vPointer)^;
|
||||
varByte : Result := shortint(PByte(vPointer)^);
|
||||
varWord : Result := shortint(PWord(vPointer)^);
|
||||
varLongWord : Result := shortint(PLongWord(vPointer)^);
|
||||
varInt64 : Result := shortint(PInt64(vPointer)^);
|
||||
varQword : Result := shortint(PQWord(vPointer)^);
|
||||
varOleStr : Result := WStrToShortInt(PPointer(vPointer)^);
|
||||
varString : Result := LStrToShortInt(PPointer(vPointer)^);
|
||||
else { other vtype }
|
||||
@ -246,17 +246,17 @@ begin
|
||||
varSmallInt : Result := vSmallInt;
|
||||
varShortInt : Result := vShortInt;
|
||||
varInteger : Result := vInteger;
|
||||
varSingle : Result := Round(vSingle);
|
||||
varDouble : Result := Round(vDouble);
|
||||
varCurrency : Result := Round(vCurrency);
|
||||
varDate : Result := Round(vDate);
|
||||
varSingle : Result := longint(Round(vSingle));
|
||||
varDouble : Result := longint(Round(vDouble));
|
||||
varCurrency : Result := longint(Round(vCurrency));
|
||||
varDate : Result := longint(Round(vDate));
|
||||
varBoolean : Result := SmallInt(vBoolean);
|
||||
varVariant : Result := VariantToLongInt(PVarData(vPointer)^);
|
||||
varByte : Result := vByte;
|
||||
varWord : Result := vWord;
|
||||
varLongWord : Result := vLongWord;
|
||||
varInt64 : Result := vInt64;
|
||||
varQword : Result := vQWord;
|
||||
varLongWord : Result := longint(vLongWord);
|
||||
varInt64 : Result := longint(vInt64);
|
||||
varQword : Result := longint(vQWord);
|
||||
varOleStr : Result := WStrToLongInt(vOleStr);
|
||||
varString : Result := LStrToLongInt(vString);
|
||||
else
|
||||
@ -266,17 +266,17 @@ begin
|
||||
varSmallInt : Result := PSmallInt(vPointer)^;
|
||||
varShortInt : Result := PShortInt(vPointer)^;
|
||||
varInteger : Result := PInteger(vPointer)^;
|
||||
varSingle : Result := Round(PSingle(vPointer)^);
|
||||
varDouble : Result := Round(PDouble(vPointer)^);
|
||||
varCurrency : Result := Round(PCurrency(vPointer)^);
|
||||
varDate : Result := Round(PDate(vPointer)^);
|
||||
varSingle : Result := longint(Round(PSingle(vPointer)^));
|
||||
varDouble : Result := longint(Round(PDouble(vPointer)^));
|
||||
varCurrency : Result := longint(Round(PCurrency(vPointer)^));
|
||||
varDate : Result := longint(Round(PDate(vPointer)^));
|
||||
varBoolean : Result := SmallInt(PWordBool(vPointer)^);
|
||||
varVariant : Result := VariantToLongInt(PVarData(vPointer)^);
|
||||
varByte : Result := PByte(vPointer)^;
|
||||
varWord : Result := PWord(vPointer)^;
|
||||
varLongWord : Result := PLongWord(vPointer)^;
|
||||
varInt64 : Result := PInt64(vPointer)^;
|
||||
varQword : Result := PQWord(vPointer)^;
|
||||
varLongWord : Result := longint(PLongWord(vPointer)^);
|
||||
varInt64 : Result := longint(PInt64(vPointer)^);
|
||||
varQword : Result := longint(PQWord(vPointer)^);
|
||||
varOleStr : Result := WStrToLongInt(PPointer(vPointer)^);
|
||||
varString : Result := LStrToLongInt(PPointer(vPointer)^);
|
||||
else { other vtype }
|
||||
@ -324,38 +324,38 @@ begin
|
||||
varEmpty : Result := 0;
|
||||
varSmallInt : Result := vSmallInt;
|
||||
varShortInt : Result := vShortInt;
|
||||
varInteger : Result := vInteger;
|
||||
varSingle : Result := Round(vSingle);
|
||||
varDouble : Result := Round(vDouble);
|
||||
varCurrency : Result := Round(vCurrency);
|
||||
varDate : Result := Round(vDate);
|
||||
varInteger : Result := cardinal(vInteger);
|
||||
varSingle : Result := cardinal(Round(vSingle));
|
||||
varDouble : Result := cardinal(Round(vDouble));
|
||||
varCurrency : Result := cardinal(Round(vCurrency));
|
||||
varDate : Result := cardinal(Round(vDate));
|
||||
varBoolean : Result := SmallInt(vBoolean);
|
||||
varVariant : Result := VariantToCardinal(PVarData(vPointer)^);
|
||||
varByte : Result := vByte;
|
||||
varWord : Result := vWord;
|
||||
varLongWord : Result := vLongWord;
|
||||
varInt64 : Result := vInt64;
|
||||
varQword : Result := vQWord;
|
||||
varInt64 : Result := cardinal(vInt64);
|
||||
varQword : Result := cardinal(vQWord);
|
||||
varOleStr : Result := WStrToCardinal(vOleStr);
|
||||
varString : Result := LStrToCardinal(vString);
|
||||
else
|
||||
VariantTypeMismatch(vType, varLongWord);
|
||||
end;
|
||||
varByRef: if Assigned(vPointer) then case vType of
|
||||
varSmallInt : Result := PSmallInt(vPointer)^;
|
||||
varShortInt : Result := PShortInt(vPointer)^;
|
||||
varInteger : Result := PInteger(vPointer)^;
|
||||
varSingle : Result := Round(PSingle(vPointer)^);
|
||||
varDouble : Result := Round(PDouble(vPointer)^);
|
||||
varCurrency : Result := Round(PCurrency(vPointer)^);
|
||||
varDate : Result := Round(PDate(vPointer)^);
|
||||
varSmallInt : Result := cardinal(PSmallInt(vPointer)^);
|
||||
varShortInt : Result := cardinal(PShortInt(vPointer)^);
|
||||
varInteger : Result := cardinal(PInteger(vPointer)^);
|
||||
varSingle : Result := cardinal(Round(PSingle(vPointer)^));
|
||||
varDouble : Result := cardinal(Round(PDouble(vPointer)^));
|
||||
varCurrency : Result := cardinal(Round(PCurrency(vPointer)^));
|
||||
varDate : Result := cardinal(Round(PDate(vPointer)^));
|
||||
varBoolean : Result := SmallInt(PWordBool(vPointer)^);
|
||||
varVariant : Result := VariantToCardinal(PVarData(vPointer)^);
|
||||
varByte : Result := PByte(vPointer)^;
|
||||
varWord : Result := PWord(vPointer)^;
|
||||
varLongWord : Result := PLongWord(vPointer)^;
|
||||
varInt64 : Result := PInt64(vPointer)^;
|
||||
varQword : Result := PQWord(vPointer)^;
|
||||
varInt64 : Result := cardinal(PInt64(vPointer)^);
|
||||
varQword : Result := cardinal(PQWord(vPointer)^);
|
||||
varOleStr : Result := WStrToCardinal(PPointer(vPointer)^);
|
||||
varString : Result := LStrToCardinal(PPointer(vPointer)^);
|
||||
else { other vtype }
|
||||
@ -660,7 +660,7 @@ begin
|
||||
varWord : Result := vWord;
|
||||
varLongWord : Result := vLongWord;
|
||||
varInt64 : Result := vInt64;
|
||||
varQword : Result := vQWord;
|
||||
varQword : Result := currency(vQWord);
|
||||
varOleStr : Result := WStrToCurrency(vOleStr);
|
||||
varString : Result := LStrToCurrency(vString);
|
||||
else
|
||||
@ -692,7 +692,7 @@ begin
|
||||
varWord : Result := PWord(vPointer)^;
|
||||
varLongWord : Result := PLongWord(vPointer)^;
|
||||
varInt64 : Result := PInt64(vPointer)^;
|
||||
varQword : Result := PQWord(vPointer)^;
|
||||
varQword : Result := currency(PQWord(vPointer)^);
|
||||
varOleStr : Result := WStrToCurrency(PPointer(vPointer)^);
|
||||
varString : Result := LStrToCurrency(PPointer(vPointer)^);
|
||||
else { other vtype }
|
||||
@ -894,40 +894,40 @@ begin
|
||||
case vType and not varTypeMask of
|
||||
0: case vType of
|
||||
varEmpty : Result := 0;
|
||||
varSmallInt : Result := vSmallInt;
|
||||
varShortInt : Result := vShortInt;
|
||||
varInteger : Result := vInteger;
|
||||
varSingle : Result := Round(vSingle);
|
||||
varDouble : Result := Round(vDouble);
|
||||
varCurrency : Result := Round(vCurrency);
|
||||
varDate : Result := Round(vDate);
|
||||
varSmallInt : Result := byte(vSmallInt);
|
||||
varShortInt : Result := byte(vShortInt);
|
||||
varInteger : Result := byte(vInteger);
|
||||
varSingle : Result := byte(Round(vSingle));
|
||||
varDouble : Result := byte(Round(vDouble));
|
||||
varCurrency : Result := byte(Round(vCurrency));
|
||||
varDate : Result := byte(Round(vDate));
|
||||
varBoolean : Result := SmallInt(vBoolean);
|
||||
varVariant : Result := VariantToByte(PVarData(vPointer)^);
|
||||
varByte : Result := vByte;
|
||||
varWord : Result := vWord;
|
||||
varLongWord : Result := vLongWord;
|
||||
varInt64 : Result := vInt64;
|
||||
varQword : Result := vQWord;
|
||||
varWord : Result := byte(vWord);
|
||||
varLongWord : Result := byte(vLongWord);
|
||||
varInt64 : Result := byte(vInt64);
|
||||
varQword : Result := byte(vQWord);
|
||||
varOleStr : Result := WStrToByte(vOleStr);
|
||||
varString : Result := LStrToByte(vString);
|
||||
else
|
||||
VariantTypeMismatch(vType, varByte);
|
||||
end;
|
||||
varByRef: if Assigned(vPointer) then case vType of
|
||||
varSmallInt : Result := PSmallInt(vPointer)^;
|
||||
varShortInt : Result := PShortInt(vPointer)^;
|
||||
varInteger : Result := PInteger(vPointer)^;
|
||||
varSingle : Result := Round(PSingle(vPointer)^);
|
||||
varDouble : Result := Round(PDouble(vPointer)^);
|
||||
varCurrency : Result := Round(PCurrency(vPointer)^);
|
||||
varDate : Result := Round(PDate(vPointer)^);
|
||||
varBoolean : Result := SmallInt(PWordBool(vPointer)^);
|
||||
varVariant : Result := VariantToByte(PVarData(vPointer)^);
|
||||
varSmallInt : Result := byte(PSmallInt(vPointer)^);
|
||||
varShortInt : Result := byte(PShortInt(vPointer)^);
|
||||
varInteger : Result := byte(PInteger(vPointer)^);
|
||||
varSingle : Result := byte(Round(PSingle(vPointer)^));
|
||||
varDouble : Result := byte(Round(PDouble(vPointer)^));
|
||||
varCurrency : Result := byte(Round(PCurrency(vPointer)^));
|
||||
varDate : Result := byte(Round(PDate(vPointer)^));
|
||||
varBoolean : Result := byte(SmallInt(PWordBool(vPointer)^));
|
||||
varVariant : Result := byte(VariantToByte(PVarData(vPointer)^));
|
||||
varByte : Result := PByte(vPointer)^;
|
||||
varWord : Result := PWord(vPointer)^;
|
||||
varLongWord : Result := PLongWord(vPointer)^;
|
||||
varInt64 : Result := PInt64(vPointer)^;
|
||||
varQword : Result := PQWord(vPointer)^;
|
||||
varWord : Result := byte(PWord(vPointer)^);
|
||||
varLongWord : Result := byte(PLongWord(vPointer)^);
|
||||
varInt64 : Result := byte(PInt64(vPointer)^);
|
||||
varQword : Result := byte(PQWord(vPointer)^);
|
||||
varOleStr : Result := WStrToByte(PPointer(vPointer)^);
|
||||
varString : Result := LStrToByte(PPointer(vPointer)^);
|
||||
else { other vtype }
|
||||
@ -986,7 +986,7 @@ begin
|
||||
varWord : Result := vWord;
|
||||
varLongWord : Result := vLongWord;
|
||||
varInt64 : Result := vInt64;
|
||||
varQword : Result := vQWord;
|
||||
varQword : Result := int64(vQWord);
|
||||
varOleStr : Result := WStrToInt64(vOleStr);
|
||||
varString : Result := LStrToInt64(vString);
|
||||
else
|
||||
@ -1052,19 +1052,19 @@ begin
|
||||
case vType and not varTypeMask of
|
||||
0: case vType of
|
||||
varEmpty : Result := 0;
|
||||
varSmallInt : Result := vSmallInt;
|
||||
varShortInt : Result := vShortInt;
|
||||
varInteger : Result := vInteger;
|
||||
varSingle : Result := Round(vSingle);
|
||||
varDouble : Result := Round(vDouble);
|
||||
varCurrency : Result := Round(vCurrency);
|
||||
varDate : Result := Round(vDate);
|
||||
varSmallInt : Result := qword(vSmallInt);
|
||||
varShortInt : Result := qword(vShortInt);
|
||||
varInteger : Result := qword(vInteger);
|
||||
varSingle : Result := qword(Round(vSingle));
|
||||
varDouble : Result := qword(Round(vDouble));
|
||||
varCurrency : Result := qword(Round(vCurrency));
|
||||
varDate : Result := qword(Round(vDate));
|
||||
varBoolean : Result := SmallInt(vBoolean);
|
||||
varVariant : Result := VariantToQWord(PVarData(vPointer)^);
|
||||
varByte : Result := vByte;
|
||||
varWord : Result := vWord;
|
||||
varLongWord : Result := vLongWord;
|
||||
varInt64 : Result := vInt64;
|
||||
varInt64 : Result := qword(vInt64);
|
||||
varQword : Result := vQWord;
|
||||
varOleStr : Result := WStrToQWord(vOleStr);
|
||||
varString : Result := LStrToQWord(vString);
|
||||
@ -1072,19 +1072,19 @@ begin
|
||||
VariantTypeMismatch(vType, varQWord);
|
||||
end;
|
||||
varByRef: if Assigned(vPointer) then case vType of
|
||||
varSmallInt : Result := PSmallInt(vPointer)^;
|
||||
varShortInt : Result := PShortInt(vPointer)^;
|
||||
varInteger : Result := PInteger(vPointer)^;
|
||||
varSingle : Result := Round(PSingle(vPointer)^);
|
||||
varDouble : Result := Round(PDouble(vPointer)^);
|
||||
varCurrency : Result := Round(PCurrency(vPointer)^);
|
||||
varDate : Result := Round(PDate(vPointer)^);
|
||||
varSmallInt : Result := qword(PSmallInt(vPointer)^);
|
||||
varShortInt : Result := qword(PShortInt(vPointer)^);
|
||||
varInteger : Result := qword(PInteger(vPointer)^);
|
||||
varSingle : Result := qword(Round(PSingle(vPointer)^));
|
||||
varDouble : Result := qword(Round(PDouble(vPointer)^));
|
||||
varCurrency : Result := qword(Round(PCurrency(vPointer)^));
|
||||
varDate : Result := qword(Round(PDate(vPointer)^));
|
||||
varBoolean : Result := SmallInt(PWordBool(vPointer)^);
|
||||
varVariant : Result := VariantToQWord(PVarData(vPointer)^);
|
||||
varByte : Result := PByte(vPointer)^;
|
||||
varWord : Result := PWord(vPointer)^;
|
||||
varLongWord : Result := PLongWord(vPointer)^;
|
||||
varInt64 : Result := PInt64(vPointer)^;
|
||||
varInt64 : Result := qword(PInt64(vPointer)^);
|
||||
varQword : Result := PQWord(vPointer)^;
|
||||
varOleStr : Result := WStrToQWord(PPointer(vPointer)^);
|
||||
varString : Result := LStrToQWord(PPointer(vPointer)^);
|
||||
|
Loading…
Reference in New Issue
Block a user