Google
 

Trailing-Edge - PDP-10 Archives - AP-4172F-BM - 3a-sources/lx1n.bli
There are 18 other files named lx1n.bli in the archive. Click here to see a list.
!THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
!  OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
!
!COPYRIGHT (C) 1972,1973,1974,1977,1978 DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. 01754
!FILENAME:	H1LEXA.BLI
!DATE:		1 MAR 73	MGM

%3.2%	GLOBAL BIND H1LEV=1;	!MODULE VERSION NUMBER




%3.1%	GLOBAL ROUTINE BLOCKPURGE(BLK)=
    BEGIN LOCAL L1,L2,L3,L4,FLDI;
	EXTERNAL XREFERASE;
%5.200.12%	LOCAL REALFSH,REALFSJ;
       EXTERNAL DUMPMACRO,IDERROR;
      !
      !  THIS ROUTINE PURGES THE SYMBOL TABLE OF ENTRIES MADE
      !  AT THE CURRENT BLOCKLEVEL, RELEASING SPACE AS IT DOES
      !  SO.  THE FOLLOWING SPECIAL CASES OCCUR:
      !        (1) MACRO ENTRIES: ALSO DELETE THE MT ENTRY
      !        (2) FORWARD ENTRIES: DELETE FROM ST, DON'T RELEASE SPACE
      !        (3) DECLARED REGISTERS: RELEASE THE REGISTERS TOO
      !        (4) MAPPED SYMBOLS: RELEASE THE INCARNATION ACTUALS
      !

      FLDI_.REALFS;
%5.200.12%	REALFSJ_0;	!REALFS STE NOT ENCOUNTERED
      INCR I FROM 0 TO 124 DO
        BEGIN
          L1_.HT[.I];
          IF .L1 NEQ 0 THEN
	WHILE
%5.200.12%	.L1 NEQ 0 AND
           .(L2_ST[.L1,0])<BLF> GTR .BLK DO
            BEGIN
%5.200.31%      IF .XREFLG THEN (IF .L1 EQL .FLDI THEN XREFERASE_1; XEOB(.L1));
	      L4_.ST[.L1,0]<LINKF>;
              IF (L2_.(@L2)<TYPEF>) EQL MACROT THEN
               DUMPMACRO(.L1);   !DELETE MACRO DEFINITION
		IF .L2 EQL REGT THEN
		  (L3_.ST[.L1,1]; RELREG(GETLITVAL(.L3<ADDRESSF>)<LINKF>,
		             .L3<NRF>));
		IF .L1 EQL .FLDI THEN
		    IF .ST[.L1,0]<TYPEF> EQL MACROT THEN PUNT(#775) ELSE
			BEGIN
			HT[.I]_.L4; FUTSYM_0;
%5.200.12%		REALFSH_.L4;	!REMEMBER WHERE WE PUT HT[.I]
			 ACCUM_.ST[.L1,2]; (ACCUM+1)_.ST[.L1,3];
			IDFIXER(-1,0);
%5.200.12%		REALFSJ_.HT[.I];	!SEE IF HT[.I] CHANGED
%5.200.12%		FLDI_.REALFS		!WE COULD DO THIS RATHER OFTEN
			END;
	     IF .L2 EQL FORWT THEN IDERROR(0,.L1);

             % MUST RELEASE LEXEME STREAMS FOR STRUCTURES. %
             IF .L2 EQL STRT THEN
               (IF .ST[.L1,1]<SIMBITAF> THEN
                   RELSTRLIST(.ST[.L1,1]<LXTEAF>);
                IF .ST[.L1,1]<SIMBITSF> THEN
                   RELSTRLIST(.ST[.L1,1]<LXTESF>)
               );
             IF MAPPABLE(.L2) AND (.ST[.L1,1]<STRF> NEQ 0) THEN RELINCA((.ST[.L1,1]<STRF>));
             IF NOT(((1^MACROT+1^EXTRNT+1^GLOBALT+1^GROUTINET+1^ROUTINET+
                 1^GABSOLUTET+1^FUNCT+1^GPLITT)^(-.L2))  OR
%2.27%                (.L2 EQL STRT AND NOT .ST[.L1,1]<SIMBITAF>))
                   THEN (GTUPDATE(0,LSM OR .L1);RELEASESPACE(.L1,2));
	        L1_.L4;
            END;
%5.200.12%	IF .REALFSJ NEQ 0
%5.200.12%	THEN ( IF .REALFSH NEQ .REALFSJ
%5.200.12%		THEN ST[.REALFSJ,0]<LINKF>_.L1
%5.200.12%		ELSE HT[.I]_.L1;
%5.200.12%		REALFSJ_0)	! RE-INITIALIZE
%5.200.12%	ELSE 
          HT[.I]_.L1;
        END;
    END;

FORWARD SETUPOFF,FIXUPOFF,PLITSCAN,FIXPLITOFF;
GLOBAL ROUTINE GOFFSET(X)=
!  5.200.33 ......  MOVED FROM CN1 TO BE WITH ITS NEW FRIENDS IN A SHORTER MODULE
	BEGIN
	LOCAL L;
	EXTERNAL EXTFOROFF,BLKFOROFF,SETUPOFF,JNKFOROFF;
	IF NOT NAMP(.X)
	THEN RETURN (
		WARNEM(.NSYM,ERSMBSVNAME);ZERO
		);
	IF (.ST[.X<STEF>,0]<TYPEF> EQL LOCALT)
	THEN RETURN (
		IF .BLKFOROFF NEQ .TRBLEVEL THEN SETUPOFF();
			L_GETSP