mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 08:09:18 +02:00
* fix SetToString/StringToSet for 8/16-bit platforms
git-svn-id: trunk@42244 -
This commit is contained in:
parent
25878f9eb2
commit
15d0deff81
@ -1058,16 +1058,16 @@ end;
|
|||||||
|
|
||||||
function SetToString(TypeInfo: PTypeInfo; Value: Pointer; Brackets: Boolean): String;
|
function SetToString(TypeInfo: PTypeInfo; Value: Pointer; Brackets: Boolean): String;
|
||||||
type
|
type
|
||||||
tsetarr = bitpacked array[0..SizeOf(Integer)*8-1] of 0..1;
|
tsetarr = bitpacked array[0..SizeOf(LongInt)*8-1] of 0..1;
|
||||||
Var
|
Var
|
||||||
I,El,Els,Rem,V,Max : Integer;
|
I,El,Els,Rem,V,Max : Integer;
|
||||||
PTI : PTypeInfo;
|
PTI : PTypeInfo;
|
||||||
PTD : PTypeData;
|
PTD : PTypeData;
|
||||||
ValueArr : PLongWord;
|
ValueArr : PLongInt;
|
||||||
begin
|
begin
|
||||||
PTD := GetTypeData(TypeInfo);
|
PTD := GetTypeData(TypeInfo);
|
||||||
PTI:=PTD^.CompType;
|
PTI:=PTD^.CompType;
|
||||||
ValueArr := PLongWord(Value);
|
ValueArr := PLongInt(Value);
|
||||||
Result:='';
|
Result:='';
|
||||||
{$ifdef ver3_0}
|
{$ifdef ver3_0}
|
||||||
case PTD^.OrdType of
|
case PTD^.OrdType of
|
||||||
@ -1085,25 +1085,25 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
{$else}
|
{$else}
|
||||||
Els := PTD^.SetSize div SizeOf(Integer);
|
Els := PTD^.SetSize div SizeOf(LongInt);
|
||||||
Rem := PTD^.SetSize mod SizeOf(Integer);
|
Rem := PTD^.SetSize mod SizeOf(LongInt);
|
||||||
{$endif}
|
{$endif}
|
||||||
|
|
||||||
{$ifdef ver3_0}
|
{$ifdef ver3_0}
|
||||||
El := 0;
|
El := 0;
|
||||||
{$else}
|
{$else}
|
||||||
for El := 0 to (PTD^.SetSize - 1) div SizeOf(Integer) do
|
for El := 0 to (PTD^.SetSize - 1) div SizeOf(LongInt) do
|
||||||
{$endif}
|
{$endif}
|
||||||
begin
|
begin
|
||||||
if El = Els then
|
if El = Els then
|
||||||
Max := Rem
|
Max := Rem
|
||||||
else
|
else
|
||||||
Max := SizeOf(Integer);
|
Max := SizeOf(LongInt);
|
||||||
For I:=0 to Max*8-1 do
|
For I:=0 to Max*8-1 do
|
||||||
begin
|
begin
|
||||||
if (tsetarr(ValueArr[El])[i]<>0) then
|
if (tsetarr(ValueArr[El])[i]<>0) then
|
||||||
begin
|
begin
|
||||||
V := I + SizeOf(Integer) * 8 * El;
|
V := I + SizeOf(LongInt) * 8 * El;
|
||||||
If Result='' then
|
If Result='' then
|
||||||
Result:=GetEnumName(PTI,V)
|
Result:=GetEnumName(PTI,V)
|
||||||
else
|
else
|
||||||
@ -1195,7 +1195,7 @@ begin
|
|||||||
to reverse the shift }
|
to reverse the shift }
|
||||||
BitOfs := 31 - BitOfs;
|
BitOfs := 31 - BitOfs;
|
||||||
{$endif}
|
{$endif}
|
||||||
ResArr[ElOfs] := ResArr[ElOfs] or (1 shl BitOfs);
|
ResArr[ElOfs] := ResArr[ElOfs] or (LongInt(1) shl BitOfs);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user