mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-13 08:19:27 +02:00
* fixed alignment issues
This commit is contained in:
parent
a7f1878fc9
commit
1d209e605e
@ -91,6 +91,10 @@ Var Temp : PByte;
|
|||||||
I : longint;
|
I : longint;
|
||||||
Size,Count : longint;
|
Size,Count : longint;
|
||||||
TInfo : Pointer;
|
TInfo : Pointer;
|
||||||
|
{$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
|
ArrayRec : TArrayRec;
|
||||||
|
RecElem : TRecElem;
|
||||||
|
{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
begin
|
begin
|
||||||
Temp:=PByte(TypeInfo);
|
Temp:=PByte(TypeInfo);
|
||||||
case temp^ of
|
case temp^ of
|
||||||
@ -101,11 +105,17 @@ begin
|
|||||||
inc(temp);
|
inc(temp);
|
||||||
I:=temp^;
|
I:=temp^;
|
||||||
inc(temp,(I+1)); // skip name string;
|
inc(temp,(I+1)); // skip name string;
|
||||||
|
{$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
|
move(PArrayRec(Temp)^,ArrayRec,sizeof(ArrayRec));
|
||||||
|
for I:=0 to ArrayRec.Count-1 do
|
||||||
|
int_Initialize (Data+(I*ArrayRec.size),ArrayRec.Info);
|
||||||
|
{$else FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
Size:=PArrayRec(Temp)^.Size; // get element size
|
Size:=PArrayRec(Temp)^.Size; // get element size
|
||||||
Count:=PArrayRec(Temp)^.Count; // get element Count
|
Count:=PArrayRec(Temp)^.Count; // get element Count
|
||||||
TInfo:=PArrayRec(Temp)^.Info; // Get element info
|
TInfo:=PArrayRec(Temp)^.Info; // Get element info
|
||||||
For I:=0 to Count-1 do
|
For I:=0 to Count-1 do
|
||||||
int_Initialize (Data+(I*size),TInfo);
|
int_Initialize (Data+(I*size),TInfo);
|
||||||
|
{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
end;
|
end;
|
||||||
tkObject,
|
tkObject,
|
||||||
tkRecord:
|
tkRecord:
|
||||||
@ -113,10 +123,19 @@ begin
|
|||||||
inc(Temp);
|
inc(Temp);
|
||||||
I:=Temp^;
|
I:=Temp^;
|
||||||
inc(temp,I+1); // skip name string;
|
inc(temp,I+1); // skip name string;
|
||||||
|
{$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
|
move(PRecRec(Temp)^.Count,Count,sizeof(Count)); // get element Count
|
||||||
|
For I:=1 to count Do
|
||||||
|
begin
|
||||||
|
move(PRecRec(Temp)^.elements[I],RecElem,sizeof(TRecElem));
|
||||||
|
int_Initialize (Data+RecElem.Offset,RecElem.Info);
|
||||||
|
end;
|
||||||
|
{$else FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
Count:=PRecRec(Temp)^.Count; // get element Count
|
Count:=PRecRec(Temp)^.Count; // get element Count
|
||||||
For I:=1 to count Do
|
For I:=1 to count Do
|
||||||
With PRecRec(Temp)^.elements[I] do
|
With PRecRec(Temp)^.elements[I] do
|
||||||
int_Initialize (Data+Offset,Info);
|
int_Initialize (Data+Offset,Info);
|
||||||
|
{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
end;
|
end;
|
||||||
{$ifdef HASVARIANT}
|
{$ifdef HASVARIANT}
|
||||||
tkVariant:
|
tkVariant:
|
||||||
@ -133,6 +152,10 @@ Var Temp : PByte;
|
|||||||
I : longint;
|
I : longint;
|
||||||
Size,Count : longint;
|
Size,Count : longint;
|
||||||
TInfo : Pointer;
|
TInfo : Pointer;
|
||||||
|
{$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
|
ArrayRec : TArrayRec;
|
||||||
|
RecElem : TRecElem;
|
||||||
|
{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
begin
|
begin
|
||||||
Temp:=PByte(TypeInfo);
|
Temp:=PByte(TypeInfo);
|
||||||
case temp^ of
|
case temp^ of
|
||||||
@ -147,11 +170,17 @@ begin
|
|||||||
inc(Temp);
|
inc(Temp);
|
||||||
I:=temp^;
|
I:=temp^;
|
||||||
inc(temp,I+1); // skip name string;
|
inc(temp,I+1); // skip name string;
|
||||||
|
{$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
|
move(PArrayRec(Temp)^,ArrayRec,sizeof(ArrayRec));
|
||||||
|
for I:=0 to ArrayRec.Count-1 do
|
||||||
|
int_Finalize (Data+(I*ArrayRec.size),ArrayRec.Info);
|
||||||
|
{$else FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
Size:=PArrayRec(Temp)^.Size; // get element size
|
Size:=PArrayRec(Temp)^.Size; // get element size
|
||||||
Count:=PArrayRec(Temp)^.Count; // get element Count
|
Count:=PArrayRec(Temp)^.Count; // get element Count
|
||||||
TInfo:=PArrayRec(Temp)^.Info; // Get element info
|
TInfo:=PArrayRec(Temp)^.Info; // Get element info
|
||||||
For I:=0 to Count-1 do
|
For I:=0 to Count-1 do
|
||||||
int_Finalize (Data+(I*size),TInfo);
|
int_Finalize (Data+(I*size),TInfo);
|
||||||
|
{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
end;
|
end;
|
||||||
tkObject,
|
tkObject,
|
||||||
tkRecord:
|
tkRecord:
|
||||||
@ -159,10 +188,19 @@ begin
|
|||||||
inc(Temp);
|
inc(Temp);
|
||||||
I:=Temp^;
|
I:=Temp^;
|
||||||
inc(temp,I+1); // skip name string;
|
inc(temp,I+1); // skip name string;
|
||||||
|
{$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
|
move(PRecRec(Temp)^.Count,Count,sizeof(Count)); // get element Count
|
||||||
|
For I:=1 to count Do
|
||||||
|
begin
|
||||||
|
move(PRecRec(Temp)^.elements[I],RecElem,sizeof(TRecElem));
|
||||||
|
int_Finalize (Data+RecElem.Offset,RecElem.Info);
|
||||||
|
end;
|
||||||
|
{$else FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
Count:=PRecRec(Temp)^.Count; // get element Count
|
Count:=PRecRec(Temp)^.Count; // get element Count
|
||||||
For I:=1 to count do
|
For I:=1 to count do
|
||||||
With PRecRec(Temp)^.elements[I] do
|
With PRecRec(Temp)^.elements[I] do
|
||||||
int_Finalize (Data+Offset,Info);
|
int_Finalize (Data+Offset,Info);
|
||||||
|
{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
end;
|
end;
|
||||||
{$ifdef HASINTF}
|
{$ifdef HASINTF}
|
||||||
tkInterface:
|
tkInterface:
|
||||||
@ -186,6 +224,10 @@ Var Temp : PByte;
|
|||||||
I : longint;
|
I : longint;
|
||||||
Size,Count : longint;
|
Size,Count : longint;
|
||||||
TInfo : Pointer;
|
TInfo : Pointer;
|
||||||
|
{$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
|
ArrayRec : TArrayRec;
|
||||||
|
RecElem : TRecElem;
|
||||||
|
{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
begin
|
begin
|
||||||
Temp:=PByte(TypeInfo);
|
Temp:=PByte(TypeInfo);
|
||||||
case temp^ of
|
case temp^ of
|
||||||
@ -200,11 +242,17 @@ begin
|
|||||||
Inc(Temp);
|
Inc(Temp);
|
||||||
I:=temp^;
|
I:=temp^;
|
||||||
inc(temp,I+1); // skip name string;
|
inc(temp,I+1); // skip name string;
|
||||||
|
{$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
|
move(PArrayRec(Temp)^,ArrayRec,sizeof(ArrayRec));
|
||||||
|
for I:=0 to ArrayRec.Count-1 do
|
||||||
|
int_AddRef (Data+(I*ArrayRec.size),ArrayRec.Info);
|
||||||
|
{$else FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
Size:=PArrayRec(Temp)^.Size; // get element size
|
Size:=PArrayRec(Temp)^.Size; // get element size
|
||||||
Count:=PArrayRec(Temp)^.Count; // get element Count
|
Count:=PArrayRec(Temp)^.Count; // get element Count
|
||||||
TInfo:=PArrayRec(Temp)^.Info; // Get element info
|
TInfo:=PArrayRec(Temp)^.Info; // Get element info
|
||||||
For I:=0 to Count-1 do
|
For I:=0 to Count-1 do
|
||||||
int_AddRef (Data+(I*size),TInfo);
|
int_AddRef (Data+(I*size),TInfo);
|
||||||
|
{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
end;
|
end;
|
||||||
tkobject,
|
tkobject,
|
||||||
tkrecord :
|
tkrecord :
|
||||||
@ -212,10 +260,19 @@ begin
|
|||||||
Inc(Temp);
|
Inc(Temp);
|
||||||
I:=Temp^;
|
I:=Temp^;
|
||||||
temp:=temp+(I+1); // skip name string;
|
temp:=temp+(I+1); // skip name string;
|
||||||
|
{$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
|
move(PRecRec(Temp)^.Count,Count,sizeof(Count)); // get element Count
|
||||||
|
For I:=1 to count Do
|
||||||
|
begin
|
||||||
|
move(PRecRec(Temp)^.elements[I],RecElem,sizeof(TRecElem));
|
||||||
|
int_AddRef (Data+RecElem.Offset,RecElem.Info);
|
||||||
|
end;
|
||||||
|
{$else FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
Count:=PRecRec(Temp)^.Count; // get element Count
|
Count:=PRecRec(Temp)^.Count; // get element Count
|
||||||
For I:=1 to count do
|
For I:=1 to count do
|
||||||
With PRecRec(Temp)^.elements[I] do
|
With PRecRec(Temp)^.elements[I] do
|
||||||
int_AddRef (Data+Offset,Info);
|
int_AddRef (Data+Offset,Info);
|
||||||
|
{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
end;
|
end;
|
||||||
tkDynArray:
|
tkDynArray:
|
||||||
fpc_dynarray_incr_ref(PPointer(Data)^);
|
fpc_dynarray_incr_ref(PPointer(Data)^);
|
||||||
@ -238,6 +295,10 @@ Var Temp : PByte;
|
|||||||
I : longint;
|
I : longint;
|
||||||
Size,Count : longint;
|
Size,Count : longint;
|
||||||
TInfo : Pointer;
|
TInfo : Pointer;
|
||||||
|
{$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
|
ArrayRec : TArrayRec;
|
||||||
|
RecElem : TRecElem;
|
||||||
|
{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
begin
|
begin
|
||||||
Temp:=PByte(TypeInfo);
|
Temp:=PByte(TypeInfo);
|
||||||
case temp^ of
|
case temp^ of
|
||||||
@ -253,11 +314,17 @@ begin
|
|||||||
inc(Temp);
|
inc(Temp);
|
||||||
I:=temp^;
|
I:=temp^;
|
||||||
inc(temp,I+1); // skip name string;
|
inc(temp,I+1); // skip name string;
|
||||||
|
{$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
|
move(PArrayRec(Temp)^,ArrayRec,sizeof(ArrayRec));
|
||||||
|
for I:=0 to ArrayRec.Count-1 do
|
||||||
|
fpc_systemDecRef (Data+(I*ArrayRec.size),ArrayRec.Info);
|
||||||
|
{$else FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
Size:=PArrayRec(Temp)^.Size; // get element size
|
Size:=PArrayRec(Temp)^.Size; // get element size
|
||||||
Count:=PArrayRec(Temp)^.Count; // get element Count
|
Count:=PArrayRec(Temp)^.Count; // get element Count
|
||||||
TInfo:=PArrayRec(Temp)^.Info; // Get element info
|
TInfo:=PArrayRec(Temp)^.Info; // Get element info
|
||||||
For I:=0 to Count-1 do
|
For I:=0 to Count-1 do
|
||||||
fpc_systemDecRef (Data+(I*size),TInfo);
|
fpc_systemDecRef (Data+(I*size),TInfo);
|
||||||
|
{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
end;
|
end;
|
||||||
tkobject,
|
tkobject,
|
||||||
tkrecord:
|
tkrecord:
|
||||||
@ -265,10 +332,19 @@ begin
|
|||||||
inc(Temp);
|
inc(Temp);
|
||||||
I:=temp^;
|
I:=temp^;
|
||||||
inc(temp,I+1); // skip name string;
|
inc(temp,I+1); // skip name string;
|
||||||
|
{$ifdef FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
|
move(PRecRec(Temp)^.Count,Count,sizeof(Count)); // get element Count
|
||||||
|
For I:=1 to count Do
|
||||||
|
begin
|
||||||
|
move(PRecRec(Temp)^.elements[I],RecElem,sizeof(TRecElem));
|
||||||
|
fpc_systemDecRef (Data+RecElem.Offset,RecElem.Info);
|
||||||
|
end;
|
||||||
|
{$else FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
Count:=PRecRec(Temp)^.Count; // get element Count
|
Count:=PRecRec(Temp)^.Count; // get element Count
|
||||||
For I:=1 to count do
|
For I:=1 to count do
|
||||||
With PRecRec(Temp)^.elements[I] do
|
With PRecRec(Temp)^.elements[I] do
|
||||||
fpc_systemDecRef (Data+Offset,Info);
|
fpc_systemDecRef (Data+Offset,Info);
|
||||||
|
{$endif FPC_REQUIRES_PROPER_ALIGNMENT}
|
||||||
end;
|
end;
|
||||||
tkDynArray:
|
tkDynArray:
|
||||||
fpc_dynarray_decr_ref(PPointer(Data)^,TypeInfo);
|
fpc_dynarray_decr_ref(PPointer(Data)^,TypeInfo);
|
||||||
@ -292,7 +368,10 @@ procedure fpc_finalize_array(data,typeinfo : pointer;count,size : longint); [Pub
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.10 2004-02-26 16:19:01 peter
|
Revision 1.11 2004-03-27 23:22:38 florian
|
||||||
|
* fixed alignment issues
|
||||||
|
|
||||||
|
Revision 1.10 2004/02/26 16:19:01 peter
|
||||||
* tkclass removed from finalize()
|
* tkclass removed from finalize()
|
||||||
* cleanupinstance now parses the tkclass rtti entry itself and
|
* cleanupinstance now parses the tkclass rtti entry itself and
|
||||||
calls finalize() for the rtti members
|
calls finalize() for the rtti members
|
||||||
|
Loading…
Reference in New Issue
Block a user