! File: TNLOW.BLI ! ! This work was supported by the Advanced Research ! Projects Agency of the Office of the Secretary of ! Defense (F44620-73-C-0074) and is monitored by the ! Air Force Office of Scientific Research. ! Module TNLOW= Begin ! ! THIS MODULE CONTAINS ROUTINES RELATING TO TEMPORARY ! NAMES THAT ARE USED BY OTHER PARTS OF THE COMPILER. ! Require 'Bliss'; Global Routine TNREP(TN)= Begin Local T : Ref TNREPR; T = GETSPACE(SZ_TNREP); T[tnr_ptr] = .TN; T[itm_rlink] = .T; T[itm_llink] = .T; Return .T End; Global Routine RELTNREPLST(LST : Ref TNREPR) : Novalue = Begin Until EMPTY(.LST) Do RELEASESPACE(DELINK(.LST[itm_rlink]),SZ_TNREP) End; Global Routine GETTN = Begin Local T : Ref GT; T = GETSPACE(SZ_TEMPNAME); T[tn_depth] = -1; T[gt_type] = S_TEMPNAME; T[tn_lon_fu] = ETERNITY; T[tn_fon_fu] = ETERNITY; LINK(TNREP(.T),TNCHAIN); Return .T End; Global Routine RELALLTNS : Novalue = Begin Macro RELEASESTK(STK)= Decr I From .STK[stk_max] To 0 Do RELTNREPLST(STK[stk_item(.I)]); RELEASESPACE(.STK,STKSIZE+2) %; Local L : Ref TNREPR; ! release all TN's attached to registers Decr I From 5 To 0 Do RELTNREPLST(REGS[.I]); ! release all TN's attached to static temps RELEASESTK(STEMPS); ! release all TN's attached to dynamic temps RELEASESTK(DTEMPS); ! release everything on TNCHAIN Until EMPTY(TNCHAIN) Do Begin L = .TNCHAIN[itm_rlink]; RELEASESPACE(.L[tnr_ptr],SZ_TEMPNAME); RELEASESPACE(DELINK(.L),SZ_TNREP) End; ! unbind all the registers PCREG[gt_reg] = 0; SPREG[gt_reg] = 0; VVREG[gt_reg] = 0; RR0[gt_reg] = 0; RR1[gt_reg] = 0; RR2[gt_reg] = 0; RR3[gt_reg] = 0; RR4[gt_reg] = 0; RR5[gt_reg] = 0 End; End Eludom