mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 20:29:32 +02:00
* fixed passing of array of record or shortstring to open array
This commit is contained in:
parent
2e6d63bfdb
commit
62cccdebb5
@ -916,11 +916,7 @@ implementation
|
||||
if dovariant then
|
||||
elesize:=8
|
||||
else
|
||||
begin
|
||||
elesize:=tarraydef(resulttype.def).elesize;
|
||||
if elesize>4 then
|
||||
internalerror(8765678);
|
||||
end;
|
||||
elesize:=tarraydef(resulttype.def).elesize;
|
||||
if not(nf_cargs in flags) then
|
||||
begin
|
||||
reset_reference(location.reference);
|
||||
@ -1053,8 +1049,26 @@ implementation
|
||||
emit_mov_loc_ref(hp.left.location,href,S_W,freetemp);
|
||||
4 :
|
||||
emit_mov_loc_ref(hp.left.location,href,S_L,freetemp);
|
||||
8 :
|
||||
begin
|
||||
if hp.left.location.loc in [LOC_REGISTER,LOC_CREGISTER] then
|
||||
begin
|
||||
emit_reg_ref(A_MOV,S_L,hp.left.location.registerlow,newreference(href));
|
||||
{ update href to the high bytes and write it }
|
||||
inc(href.offset,4);
|
||||
emit_reg_ref(A_MOV,S_L,hp.left.location.registerhigh,newreference(href));
|
||||
dec(href.offset,4)
|
||||
end
|
||||
else
|
||||
concatcopy(hp.left.location.reference,href,elesize,freetemp,false);
|
||||
end;
|
||||
else
|
||||
internalerror(87656781);
|
||||
begin
|
||||
{ concatcopy only supports reference }
|
||||
if not(hp.left.location.loc in [LOC_MEM,LOC_REFERENCE]) then
|
||||
internalerror(200108012);
|
||||
concatcopy(hp.left.location.reference,href,elesize,freetemp,false);
|
||||
end;
|
||||
end;
|
||||
inc(href.offset,elesize);
|
||||
end;
|
||||
@ -1072,7 +1086,10 @@ begin
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.15 2001-07-28 15:13:17 peter
|
||||
Revision 1.16 2001-08-01 21:47:48 peter
|
||||
* fixed passing of array of record or shortstring to open array
|
||||
|
||||
Revision 1.15 2001/07/28 15:13:17 peter
|
||||
* fixed opsize for assignment with LOC_JUMP
|
||||
|
||||
Revision 1.14 2001/05/27 14:30:56 florian
|
||||
|
@ -2639,23 +2639,7 @@ implementation
|
||||
|
||||
function tarraydef.elesize : longint;
|
||||
begin
|
||||
if ((lowrange=0) and
|
||||
(highrange=-1) and
|
||||
(not IsArrayOfConst) and
|
||||
(not IsVariant) and
|
||||
(not IsDynamicArray)) or
|
||||
IsConstructor then
|
||||
begin
|
||||
{ strings are stored by address only }
|
||||
case elementtype.def.deftype of
|
||||
stringdef :
|
||||
elesize:=4;
|
||||
else
|
||||
elesize:=elementtype.def.size;
|
||||
end;
|
||||
end
|
||||
else
|
||||
elesize:=elementtype.def.size;
|
||||
elesize:=elementtype.def.size;
|
||||
end;
|
||||
|
||||
|
||||
@ -5523,7 +5507,10 @@ Const local_symtable_index : longint = $8001;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.38 2001-07-30 20:59:27 peter
|
||||
Revision 1.39 2001-08-01 21:47:48 peter
|
||||
* fixed passing of array of record or shortstring to open array
|
||||
|
||||
Revision 1.38 2001/07/30 20:59:27 peter
|
||||
* m68k updates from v10 merged
|
||||
|
||||
Revision 1.37 2001/07/30 11:52:57 jonas
|
||||
|
Loading…
Reference in New Issue
Block a user