* fixed exit with ansistring return from function call, no_fast_exit

should be set in det_resulttype instead of pass_1
This commit is contained in:
peter 2001-05-20 12:09:31 +00:00
parent 1bfc8ffbce
commit 2b8091365e

View File

@ -1278,6 +1278,22 @@ implementation
{ ensure that the result type is set }
resulttype:=procdefinition.rettype;
{ get a register for the return value }
if (not is_void(resulttype.def)) then
begin
if ret_in_acc(resulttype.def) then
begin
{ wide- and ansistrings are returned in EAX }
{ but they are imm. moved to a memory location }
if is_widestring(resulttype.def) or
is_ansistring(resulttype.def) then
begin
{ we use ansistrings so no fast exit here }
procinfo^.no_fast_exit:=true;
end;
end;
end;
{ constructors return their current class type, not the type where the
constructor is declared, this can be different because of inheritance }
if (procdefinition.proctypeoption=potype_constructor) then
@ -1428,13 +1444,9 @@ implementation
{ wide- and ansistrings are returned in EAX }
{ but they are imm. moved to a memory location }
if is_widestring(resulttype.def) or
is_ansistring(resulttype.def) then
is_ansistring(resulttype.def) then
begin
location.loc:=LOC_MEM;
{ this is wrong we still need one register PM
registers32:=0; }
{ we use ansistrings so no fast exit here }
procinfo^.no_fast_exit:=true;
registers32:=1;
end;
end
@ -1610,7 +1622,11 @@ begin
end.
{
$Log$
Revision 1.32 2001-04-26 21:55:05 peter
Revision 1.33 2001-05-20 12:09:31 peter
* fixed exit with ansistring return from function call, no_fast_exit
should be set in det_resulttype instead of pass_1
Revision 1.32 2001/04/26 21:55:05 peter
* defcoll must be assigned in insert_typeconv
Revision 1.31 2001/04/21 12:03:11 peter