mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-16 01:39:27 +02:00
* made safecall working, handling not consistent yet though
git-svn-id: trunk@3418 -
This commit is contained in:
parent
acc016c9ec
commit
a5dfe315ec
@ -99,25 +99,31 @@ unit cpupara;
|
||||
case target_info.system of
|
||||
system_i386_win32 :
|
||||
begin
|
||||
case def.deftype of
|
||||
recorddef :
|
||||
begin
|
||||
{ Win32 GCC returns small records in the FUNCTION_RETURN_REG.
|
||||
For stdcall we follow delphi instead of GCC }
|
||||
if (calloption in [pocall_cdecl,pocall_cppdecl]) and
|
||||
(def.size>0) and
|
||||
(def.size<=8) then
|
||||
begin
|
||||
result:=false;
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
if calloption=pocall_safecall then
|
||||
begin
|
||||
result:=true;
|
||||
exit;
|
||||
end
|
||||
else
|
||||
case def.deftype of
|
||||
recorddef :
|
||||
begin
|
||||
{ Win32 GCC returns small records in the FUNCTION_RETURN_REG.
|
||||
For stdcall we follow delphi instead of GCC }
|
||||
if (calloption in [pocall_cdecl,pocall_cppdecl]) and
|
||||
(def.size>0) and
|
||||
(def.size<=8) then
|
||||
begin
|
||||
result:=false;
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
system_i386_darwin :
|
||||
begin
|
||||
case def.deftype of
|
||||
recorddef :
|
||||
recorddef :
|
||||
begin
|
||||
size := def.size;
|
||||
if (size > 0) and
|
||||
|
@ -101,7 +101,7 @@ implementation
|
||||
akttokenpos:=tprocdef(pd).fileinfo;
|
||||
|
||||
{ For left to right add it at the end to be delphi compatible }
|
||||
if pd.proccalloption in pushleftright_pocalls then
|
||||
if pd.proccalloption in (pushleftright_pocalls+[pocall_safecall]) then
|
||||
paranr:=paranr_result_leftright
|
||||
else
|
||||
paranr:=paranr_result;
|
||||
|
Loading…
Reference in New Issue
Block a user