Google
 

Trailing-Edge - PDP-10 Archives - BB-L014E-BM - autopatch/graph.c05
There are no other files named graph.c05 in the archive.
 REP 5/1	;05C1
	!COPYRIGHT (C) 1972,1981 BY DIGITAL EQUIPMENT CORPORATION
	!AUTHOR NORMA ABEL/DCE/SJW/JNG/AHM
 WIT
	!COPYRIGHT (C) 1972,1981,1982 BY DIGITAL EQUIPMENT CORPORATION
	!AUTHOR NORMA ABEL/DCE/SJW/JNG/AHM/HAS
 REP 13/1	;05C2
	GLOBAL BIND GRAPHV = 6^24 + 0^18 + 138;	! Version Date:	21-Oct-81
 WIT
	GLOBAL BIND GRAPHV = 6^24 + 0^18 + #1164;	! Version Date:	12-Jul-82
 INS 105/1	;05C3
	***** End V6 Development *****

	139	1150	DCE	16-Feb-82	20-17292
		Handle programs with ASSIGN statements properly.
		Avoid unjustified error messages.

	1164	HAS	12-Jul-82
		Prevent loop in (the) SWAMP caused by incorrect information being
		setup for LOKEXIT. In particular, for certain nested loops, allow
		LOKEXIT to correctly determine it has a branch back into an inner
		loop, instead of thinking it has an exit. This change brings the
		code in line with the comments at the end of GRAPH.

 INS 791/1	;05C4
	%[1164]% !ALSO UPDATE THE SNEXTND FIELD OF THE LABEL
	%[1164]% !TABLE ENTRIES FOR ANY INNER LOOPS TO POINT TO
	%[1164]% !THE OUTER-MORE LOOP WE ARE NOW COLLAPSING.
 INS 832/1	;05C5
	%[1164]%	!Now walk any inner DOs
	%[1164]%	IF .P[SRCID] EQL DOID THEN
	%[1164]%	BEGIN
	%[1164]%		PB_.P[DOLBL];	!Get terminus node of inner loop
	%[1164]%		PB_.PB[SNHDR];
	%[1164]%		WHILE .P NEQ .PB DO	!Until end of this inner loop
	%[1164]%		BEGIN			!Graph elements discarded
	%[1164]%					! during earlier collapse
	%[1164]%			IF .P[SRCLBL] NEQ 0	!If labeled, point
	%[1164]%			THEN			!label at this loop
	%[1164]%			BEGIN
	%[1164]%				PA_.P[SRCLBL];
	%[1164]%				PA[SNEXTND]_.LOOP
	%[1164]%			END;
	%[1164]%			PREV_.P;	!Keep track of one node back
	%[1164]%			P_.P[SRCLINK]	!Next node in inner loop
	%[1164]%		END;
	%[1164]%		!Include the inner terminus label
	%[1164]%		PA_.P[SRCLBL];
	%[1164]%		PA[SNEXTND]_.LOOP;
	%[1164]%		P_.PREV			!Drop back a node to allow
	%[1164]%					!outer loop to clean up graph
	%[1164]%					!elements for inner terminus
	%[1164]%	END;
 INS 902/1	;05C6
	%[1150]%			IF NOT .PA[SNASSIGNED] THEN
 REP 1033/1	;05C7
			!THAT ARE DEFINED WITHIN IT. BUT WE WANT TO
			!UPDATE THE SNEXTND FIELD OF THE LABEL TABLE ENTRIES
			!FOR THEM TO POINT TO THE OUTER-MORE LOOP WE ARE
			!NOW PROCESSING. ALSO BE CAREFUL THAT THIS IS NOT
			!THE MAIN PROGRAM.
 WIT
	%[1164]%	!THAT ARE DEFINED WITHIN IT.
 REP 1041/1	;05C8
				PB_.P[DOLBL];
				!UNTIL WE ARE OUT OF THIS INNER MORE LOOP
				WHILE .P[SRCLBL] NEQ .PB DO
				BEGIN
					IF .P[SRCLBL] NEQ 0 AND .LOOP NEQ 0  THEN
					BEGIN
						!GET THE LABEL TABLE POINTER
						PA_.P[SRCLBL];
						PA[SNEXTND]_.LOOP;
					END;
					!LOOK AT NEXT ENTRY
					P_.P[SRCLINK];
				END;
				!INCLUDE THE LABEL TERMINATING THE LOOP!
	%[1052]%		IF .LOOP NEQ 0 THEN
	%[1052]%		BEGIN
	%[1052]%			PA_.P[SRCLBL];
	%[1052]%			PA[SNEXTND]_.LOOP
	%[1052]%		END;
 WIT
				P_.P[DOLBL];
	%[1164]%		P_.P[SNHDR]
 SUM 195588