diff --git a/compiler/ncgcal.pas b/compiler/ncgcal.pas index cd4fe97dee..dafbfcbe6d 100644 --- a/compiler/ncgcal.pas +++ b/compiler/ncgcal.pas @@ -685,7 +685,7 @@ implementation not paramanager.ret_in_param(resulttype.def,procdefinition.proccalloption) and not assigned(funcretnode) then begin - tg.gettemptyped(exprasmlist,resulttype.def,tt_persistent,refcountedtemp); + tg.gettemptyped(exprasmlist,resulttype.def,tt_normal,refcountedtemp); cg.g_decrrefcount(exprasmlist,resulttype.def,refcountedtemp,false); end; @@ -1008,7 +1008,7 @@ implementation if resulttype.def.needs_inittable and not paramanager.ret_in_param(resulttype.def,procdefinition.proccalloption) then begin - tg.gettemptyped(exprasmlist,resulttype.def,tt_persistent,refcountedtemp); + tg.gettemptyped(exprasmlist,resulttype.def,tt_normal,refcountedtemp); cg.g_decrrefcount(exprasmlist,resulttype.def,refcountedtemp,false); end; @@ -1133,7 +1133,10 @@ begin end. { $Log$ - Revision 1.136 2003-11-04 15:35:13 peter + Revision 1.137 2003-11-04 19:03:54 peter + * fixes for temp type patch + + Revision 1.136 2003/11/04 15:35:13 peter * fix for referencecounted temps Revision 1.135 2003/10/30 17:12:49 peter diff --git a/compiler/ncgutil.pas b/compiler/ncgutil.pas index b57b6ef49a..5432dbef3e 100644 --- a/compiler/ncgutil.pas +++ b/compiler/ncgutil.pas @@ -903,7 +903,8 @@ implementation hp:=tg.templist; while assigned(hp) do begin - if assigned(hp^.def) then + if assigned(hp^.def) and + hp^.def.needs_inittable then begin if (cs_implicit_exceptions in aktmoduleswitches) then include(current_procinfo.flags,pi_needs_implicit_finally); @@ -925,7 +926,8 @@ implementation hp:=tg.templist; while assigned(hp) do begin - if assigned(hp^.def) then + if assigned(hp^.def) and + hp^.def.needs_inittable then begin reference_reset_base(href,current_procinfo.framepointer,hp^.pos); cg.g_finalize(list,hp^.def,href,false); @@ -1943,7 +1945,10 @@ implementation end. { $Log$ - Revision 1.163 2003-11-04 15:35:13 peter + Revision 1.164 2003-11-04 19:03:50 peter + * fixes for temp type patch + + Revision 1.163 2003/11/04 15:35:13 peter * fix for referencecounted temps Revision 1.162 2003/10/25 11:34:02 florian diff --git a/compiler/tgobj.pas b/compiler/tgobj.pas index 8bcb6f1175..571e0fd4fd 100644 --- a/compiler/tgobj.pas +++ b/compiler/tgobj.pas @@ -380,10 +380,13 @@ unit tgobj; { Update tempfreelist } if assigned(hprevfree) then begin - { Connect With previous tt_free block? } + { Concat blocks when the previous block is free and + there is no block assigned for a tdef } if assigned(hprev) and (hp^.temptype=tt_free) and - (hprev^.temptype=tt_free) then + not assigned(hp^.def) and + (hprev^.temptype=tt_free) and + not assigned(hprev^.def) then begin inc(hprev^.size,hp^.size); if direction=1 then @@ -401,11 +404,14 @@ unit tgobj; tempfreelist:=hp; end; - { Next block tt_free ? Yes, then concat } + { Concat blocks when the next block is free and + there is no block assigned for a tdef } hnext:=hp^.next; if assigned(hnext) and (hp^.temptype=tt_free) and - (hnext^.temptype=tt_free) then + not assigned(hp^.def) and + (hnext^.temptype=tt_free) and + not assigned(hnext^.def) then begin inc(hp^.size,hnext^.size); if direction=1 then @@ -557,7 +563,10 @@ unit tgobj; end. { $Log$ - Revision 1.41 2003-11-04 15:35:13 peter + Revision 1.42 2003-11-04 19:03:54 peter + * fixes for temp type patch + + Revision 1.41 2003/11/04 15:35:13 peter * fix for referencecounted temps Revision 1.40 2003/10/01 20:34:49 peter