|
@@ -2612,11 +2612,26 @@ Procedure TValue.CastIntegerToFloat(out aRes : Boolean; out ADest: TValue; aDest
|
|
var
|
|
var
|
|
Tmp : Int64;
|
|
Tmp : Int64;
|
|
Ti : PtypeInfo;
|
|
Ti : PtypeInfo;
|
|
-
|
|
|
|
|
|
+ DestFloatType: TFloatType;
|
|
|
|
+ S: Single;
|
|
|
|
+ D: Double;
|
|
|
|
+ E: Extended;
|
|
|
|
+ Co: Comp;
|
|
|
|
+ Cu: Currency;
|
|
begin
|
|
begin
|
|
Tmp:=AsInt64;
|
|
Tmp:=AsInt64;
|
|
- Ti:=FloatTypeToTypeInfo(GetTypeData(aDestType)^.FloatType);
|
|
|
|
- TValue.Make(@Tmp,Ti,aDest);
|
|
|
|
|
|
+ DestFloatType := GetTypeData(aDestType)^.FloatType;
|
|
|
|
+ Ti:=FloatTypeToTypeInfo(DestFloatType);
|
|
|
|
+ case DestFloatType of
|
|
|
|
+ ftSingle: begin S := Tmp; TValue.Make(@S, Ti,aDest); end;
|
|
|
|
+ ftDouble: begin D := Tmp; TValue.Make(@D, Ti,aDest); end;
|
|
|
|
+ ftExtended: begin E := Tmp; TValue.Make(@E, Ti,aDest); end;
|
|
|
|
+ ftComp: begin Co := Tmp; TValue.Make(@Co,Ti,aDest); end;
|
|
|
|
+ ftCurr: begin Cu := Tmp; TValue.Make(@Cu,Ti,aDest); end;
|
|
|
|
+ else
|
|
|
|
+ aRes := False;
|
|
|
|
+ Exit;
|
|
|
|
+ end;
|
|
aRes:=True;
|
|
aRes:=True;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -2758,35 +2773,66 @@ var
|
|
E : Extended;
|
|
E : Extended;
|
|
Co : Comp;
|
|
Co : Comp;
|
|
Cu : Currency;
|
|
Cu : Currency;
|
|
-
|
|
|
|
|
|
+ DestFloatType: TFloatType;
|
|
begin
|
|
begin
|
|
// Destination float type
|
|
// Destination float type
|
|
- ti:=FloatTypeToTypeInfo(GetTypeData(aDestType)^.FloatType);
|
|
|
|
|
|
+ DestFloatType := GetTypeData(aDestType)^.FloatType;
|
|
|
|
+ ti:=FloatTypeToTypeInfo(DestFloatType);
|
|
case TypeData^.FloatType of
|
|
case TypeData^.FloatType of
|
|
ftSingle:
|
|
ftSingle:
|
|
begin
|
|
begin
|
|
S:=AsSingle;
|
|
S:=AsSingle;
|
|
- TValue.Make(@S,Ti,aDest);
|
|
|
|
|
|
+ case DestFloatType of
|
|
|
|
+ ftSingle: begin TValue.Make(@S, Ti,aDest); end;
|
|
|
|
+ ftDouble: begin D := S; TValue.Make(@D, Ti,aDest); end;
|
|
|
|
+ ftExtended: begin E := S; TValue.Make(@E, Ti,aDest); end;
|
|
|
|
+ ftComp: begin Co := S; TValue.Make(@Co,Ti,aDest); end;
|
|
|
|
+ ftCurr: begin Cu := S; TValue.Make(@Cu,Ti,aDest); end;
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
ftDouble:
|
|
ftDouble:
|
|
begin
|
|
begin
|
|
D:=AsDouble;
|
|
D:=AsDouble;
|
|
- TValue.Make(@D,Ti,aDest);
|
|
|
|
|
|
+ case DestFloatType of
|
|
|
|
+ ftSingle: begin S := D; TValue.Make(@S, Ti,aDest); end;
|
|
|
|
+ ftDouble: begin TValue.Make(@D, Ti,aDest); end;
|
|
|
|
+ ftExtended: begin E := D; TValue.Make(@E, Ti,aDest); end;
|
|
|
|
+ ftComp: begin Co := D; TValue.Make(@Co,Ti,aDest); end;
|
|
|
|
+ ftCurr: begin Cu := D; TValue.Make(@Cu,Ti,aDest); end;
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
ftExtended:
|
|
ftExtended:
|
|
begin
|
|
begin
|
|
E:=AsExtended;
|
|
E:=AsExtended;
|
|
- TValue.Make(@E,Ti,aDest);
|
|
|
|
|
|
+ case DestFloatType of
|
|
|
|
+ ftSingle: begin S := E; TValue.Make(@S, Ti,aDest); end;
|
|
|
|
+ ftDouble: begin D := E; TValue.Make(@D, Ti,aDest); end;
|
|
|
|
+ ftExtended: begin TValue.Make(@E, Ti,aDest); end;
|
|
|
|
+ ftComp: begin Co := E; TValue.Make(@Co,Ti,aDest); end;
|
|
|
|
+ ftCurr: begin Cu := E; TValue.Make(@Cu,Ti,aDest); end;
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
ftComp:
|
|
ftComp:
|
|
begin
|
|
begin
|
|
Co:=FData.FAsComp;
|
|
Co:=FData.FAsComp;
|
|
- TValue.Make(@Co,Ti,aDest);
|
|
|
|
|
|
+ case DestFloatType of
|
|
|
|
+ ftSingle: begin S := Co; TValue.Make(@S, Ti,aDest); end;
|
|
|
|
+ ftDouble: begin D := Co; TValue.Make(@D, Ti,aDest); end;
|
|
|
|
+ ftExtended: begin E := Co; TValue.Make(@E, Ti,aDest); end;
|
|
|
|
+ ftComp: begin TValue.Make(@Co,Ti,aDest); end;
|
|
|
|
+ ftCurr: begin Cu := Co; TValue.Make(@Cu,Ti,aDest); end;
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
ftCurr:
|
|
ftCurr:
|
|
begin
|
|
begin
|
|
Cu:=AsCurrency;
|
|
Cu:=AsCurrency;
|
|
- TValue.Make(@Cu,Ti,aDest);
|
|
|
|
|
|
+ case DestFloatType of
|
|
|
|
+ ftSingle: begin S := Cu; TValue.Make(@S, Ti,aDest); end;
|
|
|
|
+ ftDouble: begin D := Cu; TValue.Make(@D, Ti,aDest); end;
|
|
|
|
+ ftExtended: begin E := Cu; TValue.Make(@E, Ti,aDest); end;
|
|
|
|
+ ftComp: begin Co := Cu; TValue.Make(@Co,Ti,aDest); end;
|
|
|
|
+ ftCurr: begin TValue.Make(@Cu,Ti,aDest); end;
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
aRes:=True;
|
|
aRes:=True;
|
|
@@ -7853,4 +7899,4 @@ initialization
|
|
{$ifdef SYSTEM_HAS_INVOKE}
|
|
{$ifdef SYSTEM_HAS_INVOKE}
|
|
InitSystemFunctionCallManager;
|
|
InitSystemFunctionCallManager;
|
|
{$endif}
|
|
{$endif}
|
|
-end.
|
|
|
|
|
|
+end.
|