// TRN1 GET "TRNHDR" LET TRANS(X) BE $(TR NEXT: $( LET SW = FALSE IF X=0 RETURN CURRENTBRANCH := X SWITCHON H1!X INTO $( DEFAULT: TRANSREPORT(100, X); RETURN CASE S.LET: $( LET A, B, S, S1 = DVECE, DVECS, SSP, 0 LET V = VECSSP DECLNAMES(H2!X) CHECKDISTINCT(B, DVECS) DVECE := DVECS VECSSP, S1 := SSP, SSP SSP := S TRANSDEF(H2!X) UNLESS SSP=S1 DO TRANSREPORT(110, X) UNLESS SSP=VECSSP DO $( SSP := VECSSP OUT2(S.STACK, SSP) $) OUT1(S.STORE) DECLLABELS(H3!X) TRANS(H3!X) VECSSP := V UNLESS SSP=S DO OUT2(S.STACK, S) DVECE, DVECS, SSP := A, B, S RETURN $) CASE S.STATIC: CASE S.GLOBAL: CASE S.MANIFEST: $(1 LET A, B, S = DVECE, DVECS, SSP AND OP = H1!X AND Y = H2!X IF OP=S.MANIFEST DO OP := S.NUMBER UNTIL Y=0 DO $( TEST OP=S.STATIC THEN $( LET M = NEXTPARAM() ADDNAME(H3!Y, S.LABEL, M) COMPDATALAB(M) OUT2(S.ITEMN, EVALCONST(H4!Y)) $) OR ADDNAME(H3!Y, OP, EVALCONST(H4!Y)) Y := H2!Y DVECE := DVECS $) DECLLABELS(H3!X) TRANS(H3!X) DVECE, DVECS, SSP := A, B, S RETURN $)1 CASE S.ASS: ASSIGN(H2!X, H3!X) RETURN CASE S.RTAP: $( LET S = SSP SSP := SSP+SAVESPACESIZE OUT2(S.STACK, SSP) LOADLIST(H3!X) LOAD(H2!X) OUT2(S.RTAP, S) SSP := S RETURN $) CASE S.GOTO: LOAD(H2!X) OUT1(S.GOTO) SSP := SSP-1 RETURN CASE S.COLON: COMPLAB(H4!X) TRANS(H3!X) RETURN CASE S.UNLESS: SW := TRUE CASE S.IF: $( LET L = NEXTPARAM() JUMPCOND(H2!X, SW, L) TRANS(H3!X) COMPLAB(L) RETURN $) CASE S.TEST: $( LET L, M = NEXTPARAM(), NEXTPARAM() JUMPCOND(H2!X, FALSE, L) TRANS(H3!X) COMPJUMP(M) COMPLAB(L) TRANS(H4!X) COMPLAB(M) RETURN $) CASE S.LOOP: IF LOOPLABEL<0 DO TRANSREPORT(104, X) IF LOOPLABEL=0 DO LOOPLABEL := NEXTPARAM() COMPJUMP(LOOPLABEL) RETURN CASE S.BREAK: IF BREAKLABEL<0 DO TRANSREPORT(104, X) IF BREAKLABEL=0 DO BREAKLABEL := NEXTPARAM() COMPJUMP(BREAKLABEL) RETURN CASE S.RETURN: OUT1(S.RTRN) RETURN CASE S.FINISH: OUT1(S.FINISH) RETURN CASE S.RESULTIS: IF RESULTLABEL<0 DO TRANSREPORT(104, X) LOAD(H2!X) OUT2P(S.RES, RESULTLABEL) SSP := SSP - 1 RETURN CASE S.WHILE: SW := TRUE CASE S.UNTIL: $( LET L, M = NEXTPARAM(), NEXTPARAM() LET BL, LL = BREAKLABEL, LOOPLABEL BREAKLABEL, LOOPLABEL := 0, M COMPJUMP(M) COMPLAB(L) TRANS(H3!X) COMPLAB(M) JUMPCOND(H2!X, SW, L) UNLESS BREAKLABEL=0 DO COMPLAB(BREAKLABEL) BREAKLABEL, LOOPLABEL := BL, LL RETURN $) CASE S.REPEATWHILE: SW := TRUE CASE S.REPEATUNTIL: CASE S.REPEAT: $( LET L, BL, LL = NEXTPARAM(), BREAKLABEL, LOOPLABEL BREAKLABEL, LOOPLABEL := 0, 0 COMPLAB(L) TEST H1!X=S.REPEAT THEN $( LOOPLABEL := L TRANS(H2!X) COMPJUMP(L) $) OR $( TRANS(H2!X) UNLESS LOOPLABEL=0 DO COMPLAB(LOOPLABEL) JUMPCOND(H3!X, SW, L) $) UNLESS BREAKLABEL=0 DO COMPLAB(BREAKLABEL) BREAKLABEL, LOOPLABEL := BL, LL RETURN $) CASE S.CASE: $( LET L, K = NEXTPARAM(), EVALCONST(H2!X) IF CASEP>=CASET DO TRANSREPORT(141, X) IF CASEB<0 DO TRANSREPORT(105, X) FOR I = CASEB TO CASEP-1 DO IF CASEK!I=K DO TRANSREPORT(106, X) CASEK!CASEP := K CASEL!CASEP := L CASEP := CASEP + 1 COMPLAB(L) TRANS(H3!X) RETURN $) CASE S.DEFAULT: IF CASEB<0 DO TRANSREPORT(105, X) UNLESS DEFAULTLABEL=0 DO TRANSREPORT(101, X) DEFAULTLABEL := NEXTPARAM() COMPLAB(DEFAULTLABEL) TRANS(H2!X) RETURN CASE S.ENDCASE: IF CASEB<0 DO TRANSREPORT(105, X) COMPJUMP(ENDCASELABEL) RETURN CASE S.SWITCHON: TRANSSWITCH(X) RETURN CASE S.FOR: TRANSFOR(X) RETURN CASE S.SEQ: TRANS(H2!X) COMCOUNT := COMCOUNT + 1 X := H3!X GOTO NEXT $)TR .