mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-23 14:29:23 +02:00
* fixed copy(dyn. array,...);
This commit is contained in:
parent
3ad334f7cb
commit
eeaded577a
@ -1120,7 +1120,7 @@ type_e_wrong_math_argument=04027_E_Unzul
|
|||||||
type_e_no_addr_of_constant=04028_E_Von Konstanten kann keine Adresse bestimmt werden
|
type_e_no_addr_of_constant=04028_E_Von Konstanten kann keine Adresse bestimmt werden
|
||||||
% It's not possible to get the address of a constant, because they
|
% It's not possible to get the address of a constant, because they
|
||||||
% aren't stored in memory, you can try making it a typed constant.
|
% aren't stored in memory, you can try making it a typed constant.
|
||||||
type_e_argument_cant_be_assigned=04029_E_Auf das Argument kann nichts zugewiesen werden
|
type_e_argument_cant_be_assigned=04029_E_An das Argument kann nichts zugewiesen werden
|
||||||
% Only expressions which can be on the left side of an
|
% Only expressions which can be on the left side of an
|
||||||
% assignment can be passed as call by reference argument
|
% assignment can be passed as call by reference argument
|
||||||
% Remark: Properties can be only
|
% Remark: Properties can be only
|
||||||
|
@ -1782,6 +1782,7 @@ begin
|
|||||||
def_system_macro('SHORTSTRCOMPAREINREG');
|
def_system_macro('SHORTSTRCOMPAREINREG');
|
||||||
def_system_macro('HASGETHEAPSTATUS');
|
def_system_macro('HASGETHEAPSTATUS');
|
||||||
def_system_macro('HASGETFPCHEAPSTATUS');
|
def_system_macro('HASGETFPCHEAPSTATUS');
|
||||||
|
def_system_macro('HASFUNCTIONCOPYDYNARR');
|
||||||
|
|
||||||
{ using a case is pretty useless here (FK) }
|
{ using a case is pretty useless here (FK) }
|
||||||
{ some stuff for TP compatibility }
|
{ some stuff for TP compatibility }
|
||||||
@ -2102,7 +2103,10 @@ finalization
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.169 2005-03-04 16:49:22 peter
|
Revision 1.170 2005-03-05 16:37:42 florian
|
||||||
|
* fixed copy(dyn. array,...);
|
||||||
|
|
||||||
|
Revision 1.169 2005/03/04 16:49:22 peter
|
||||||
* getheapstatus fixes
|
* getheapstatus fixes
|
||||||
|
|
||||||
Revision 1.168 2005/02/26 15:43:09 florian
|
Revision 1.168 2005/02/26 15:43:09 florian
|
||||||
|
@ -1575,6 +1575,7 @@ implementation
|
|||||||
begin
|
begin
|
||||||
{ we need the resulttype }
|
{ we need the resulttype }
|
||||||
do_resulttypepass(p1);
|
do_resulttypepass(p1);
|
||||||
|
|
||||||
if codegenerror then
|
if codegenerror then
|
||||||
begin
|
begin
|
||||||
recoverconsume_postfixops;
|
recoverconsume_postfixops;
|
||||||
@ -2535,7 +2536,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.184 2005-03-04 09:56:35 jonas
|
Revision 1.185 2005-03-05 16:37:42 florian
|
||||||
|
* fixed copy(dyn. array,...);
|
||||||
|
|
||||||
|
Revision 1.184 2005/03/04 09:56:35 jonas
|
||||||
* fixed Lazarus compilation
|
* fixed Lazarus compilation
|
||||||
|
|
||||||
Revision 1.183 2005/03/04 07:46:36 jonas
|
Revision 1.183 2005/03/04 07:46:36 jonas
|
||||||
|
@ -704,7 +704,6 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
{ create statements with call }
|
{ create statements with call }
|
||||||
copynode:=internalstatements(newstatement);
|
|
||||||
|
|
||||||
if (counter=3) then
|
if (counter=3) then
|
||||||
begin
|
begin
|
||||||
@ -718,25 +717,14 @@ implementation
|
|||||||
lowppn:=cordconstnode.create(-1,s32inttype,false);
|
lowppn:=cordconstnode.create(-1,s32inttype,false);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ create typed temp for result so the temp is finalized }
|
|
||||||
temp := ctempcreatenode.create(ppn.left.resulttype,ppn.left.resulttype.def.size,tt_persistent,false);
|
|
||||||
addstatement(newstatement,temp);
|
|
||||||
|
|
||||||
{ create call to fpc_dynarray_copy }
|
{ create call to fpc_dynarray_copy }
|
||||||
npara:=ccallparanode.create(highppn,
|
npara:=ccallparanode.create(highppn,
|
||||||
ccallparanode.create(lowppn,
|
ccallparanode.create(lowppn,
|
||||||
ccallparanode.create(caddrnode.create_internal
|
ccallparanode.create(caddrnode.create_internal
|
||||||
(crttinode.create(tstoreddef(ppn.left.resulttype.def),initrtti)),
|
(crttinode.create(tstoreddef(ppn.left.resulttype.def),initrtti)),
|
||||||
ccallparanode.create
|
ccallparanode.create
|
||||||
(ctypeconvnode.create_internal(ppn.left,voidpointertype),
|
(ctypeconvnode.create_internal(ppn.left,voidpointertype),nil))));
|
||||||
ccallparanode.create
|
copynode:=ccallnode.createinternres('fpc_dynarray_copy',npara,ppn.left.resulttype);
|
||||||
(ctypeconvnode.create_internal(ctemprefnode.create(temp),voidpointertype),nil)))));
|
|
||||||
addstatement(newstatement,ccallnode.createintern('fpc_dynarray_copy',npara));
|
|
||||||
|
|
||||||
{ convert the temp to normal and return the reference to the
|
|
||||||
created temp, and convert the type of the temp to the dynarray type }
|
|
||||||
addstatement(newstatement,ctempdeletenode.create_normal_temp(temp));
|
|
||||||
addstatement(newstatement,ctemprefnode.create(temp));
|
|
||||||
|
|
||||||
ppn.left:=nil;
|
ppn.left:=nil;
|
||||||
paras.free;
|
paras.free;
|
||||||
@ -755,7 +743,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.40 2005-03-03 19:36:42 jonas
|
Revision 1.41 2005-03-05 16:37:42 florian
|
||||||
|
* fixed copy(dyn. array,...);
|
||||||
|
|
||||||
|
Revision 1.40 2005/03/03 19:36:42 jonas
|
||||||
* fixed web bug 3740
|
* fixed web bug 3740
|
||||||
|
|
||||||
Revision 1.39 2005/02/14 17:13:07 peter
|
Revision 1.39 2005/02/14 17:13:07 peter
|
||||||
|
@ -58,7 +58,12 @@ Function fpc_shortstr_Copy(const s:shortstring;index:SizeInt;count:SizeInt):sho
|
|||||||
Function fpc_ansistr_Copy (Const S : AnsiString; Index,Size : SizeInt) : AnsiString;compilerproc;
|
Function fpc_ansistr_Copy (Const S : AnsiString; Index,Size : SizeInt) : AnsiString;compilerproc;
|
||||||
Function fpc_widestr_Copy (Const S : WideString; Index,Size : SizeInt) : WideString;compilerproc;
|
Function fpc_widestr_Copy (Const S : WideString; Index,Size : SizeInt) : WideString;compilerproc;
|
||||||
function fpc_char_copy(c:char;index : SizeInt;count : SizeInt): shortstring;compilerproc;
|
function fpc_char_copy(c:char;index : SizeInt;count : SizeInt): shortstring;compilerproc;
|
||||||
|
{$ifdef HASFUNCTIONCOPYDYNARR}
|
||||||
|
function fpc_dynarray_copy(psrc : pointer;ti : pointer;
|
||||||
|
lowidx,count:tdynarrayindex) : pointer;compilerproc;
|
||||||
|
{$else HASFUNCTIONCOPYDYNARR}
|
||||||
procedure fpc_dynarray_copy(var pdest : pointer;psrc : pointer;ti : pointer;lowidx,count:tdynarrayindex);compilerproc;
|
procedure fpc_dynarray_copy(var pdest : pointer;psrc : pointer;ti : pointer;lowidx,count:tdynarrayindex);compilerproc;
|
||||||
|
{$endif HASFUNCTIONCOPYDYNARR}
|
||||||
|
|
||||||
function fpc_dynarray_length(p : pointer) : tdynarrayindex; compilerproc;
|
function fpc_dynarray_length(p : pointer) : tdynarrayindex; compilerproc;
|
||||||
function fpc_dynarray_high(p : pointer) : tdynarrayindex; compilerproc;
|
function fpc_dynarray_high(p : pointer) : tdynarrayindex; compilerproc;
|
||||||
@ -358,7 +363,10 @@ function fpc_qword_to_double(q: qword): double; compilerproc;
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.65 2005-02-14 17:13:22 peter
|
Revision 1.66 2005-03-05 16:37:28 florian
|
||||||
|
* fixed copy(dyn. array,...);
|
||||||
|
|
||||||
|
Revision 1.65 2005/02/14 17:13:22 peter
|
||||||
* truncate log
|
* truncate log
|
||||||
|
|
||||||
Revision 1.64 2005/01/07 21:15:46 florian
|
Revision 1.64 2005/01/07 21:15:46 florian
|
||||||
|
@ -297,12 +297,20 @@ procedure fpc_dynarray_setlength(var p : pointer;pti : pointer;
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
{$ifdef HASFUNCTIONCOPYDYNARR}
|
||||||
{ provide local access to dynarr_copy }
|
{ provide local access to dynarr_copy }
|
||||||
|
function int_dynarray_copy(psrc : pointer;ti : pointer;
|
||||||
|
lowidx,count:tdynarrayindex) : pointer;[external name 'FPC_DYNARR_COPY'];
|
||||||
|
|
||||||
|
function fpc_dynarray_copy(psrc : pointer;ti : pointer;
|
||||||
|
lowidx,count:tdynarrayindex) : pointer;[Public,Alias:'FPC_DYNARR_COPY'];{$ifdef hascompilerproc} compilerproc; {$endif}
|
||||||
|
{$else HASFUNCTIONCOPYDYNARR}
|
||||||
procedure int_dynarray_copy(var pdest : pointer;psrc : pointer;ti : pointer;
|
procedure int_dynarray_copy(var pdest : pointer;psrc : pointer;ti : pointer;
|
||||||
lowidx,count:tdynarrayindex);[external name 'FPC_DYNARR_COPY'];
|
lowidx,count:tdynarrayindex);[external name 'FPC_DYNARR_COPY'];
|
||||||
|
|
||||||
procedure fpc_dynarray_copy(var pdest : pointer;psrc : pointer;ti : pointer;
|
procedure fpc_dynarray_copy(var pdest : pointer;psrc : pointer;ti : pointer;
|
||||||
lowidx,count:tdynarrayindex);[Public,Alias:'FPC_DYNARR_COPY'];{$ifdef hascompilerproc} compilerproc; {$endif}
|
lowidx,count:tdynarrayindex);[Public,Alias:'FPC_DYNARR_COPY'];{$ifdef hascompilerproc} compilerproc; {$endif}
|
||||||
|
{$endif HASFUNCTIONCOPYDYNARR}
|
||||||
var
|
var
|
||||||
realpdest,
|
realpdest,
|
||||||
realpsrc : pdynarray;
|
realpsrc : pdynarray;
|
||||||
@ -311,9 +319,15 @@ procedure fpc_dynarray_copy(var pdest : pointer;psrc : pointer;ti : pointer;
|
|||||||
highidx : tdynarrayindex;
|
highidx : tdynarrayindex;
|
||||||
elesize : sizeint;
|
elesize : sizeint;
|
||||||
eletype : pdynarraytypeinfo;
|
eletype : pdynarraytypeinfo;
|
||||||
|
{$ifdef HASFUNCTIONCOPYDYNARR}
|
||||||
|
pdest : pointer;
|
||||||
|
{$endif HASFUNCTIONCOPYDYNARR}
|
||||||
begin
|
begin
|
||||||
highidx:=lowidx+count-1;
|
highidx:=lowidx+count-1;
|
||||||
pdest:=nil;
|
pdest:=nil;
|
||||||
|
{$ifdef HASFUNCTIONCOPYDYNARR}
|
||||||
|
result:=pdest;
|
||||||
|
{$endif HASFUNCTIONCOPYDYNARR}
|
||||||
if psrc=nil then
|
if psrc=nil then
|
||||||
exit;
|
exit;
|
||||||
realpsrc:=pdynarray(psrc-sizeof(tdynarray));
|
realpsrc:=pdynarray(psrc-sizeof(tdynarray));
|
||||||
@ -350,12 +364,18 @@ procedure fpc_dynarray_copy(var pdest : pointer;psrc : pointer;ti : pointer;
|
|||||||
{ increment ref. count of members }
|
{ increment ref. count of members }
|
||||||
for i:= 0 to cnt-1 do
|
for i:= 0 to cnt-1 do
|
||||||
int_addref(pointer(pdest+elesize*i),eletype);
|
int_addref(pointer(pdest+elesize*i),eletype);
|
||||||
|
{$ifdef HASFUNCTIONCOPYDYNARR}
|
||||||
|
result:=pdest;
|
||||||
|
{$endif HASFUNCTIONCOPYDYNARR}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.36 2005-02-14 17:13:22 peter
|
Revision 1.37 2005-03-05 16:37:28 florian
|
||||||
|
* fixed copy(dyn. array,...);
|
||||||
|
|
||||||
|
Revision 1.36 2005/02/14 17:13:22 peter
|
||||||
* truncate log
|
* truncate log
|
||||||
|
|
||||||
Revision 1.35 2005/01/24 21:32:48 florian
|
Revision 1.35 2005/01/24 21:32:48 florian
|
||||||
|
Loading…
Reference in New Issue
Block a user