// TRN3 GET "TRNHDR" LET JUMPCOND(X, B, L) BE $(JC LET SW = B SWITCHON H1!X INTO $( CASE S.FALSE: B := NOT B CASE S.TRUE: IF B DO COMPJUMP(L) RETURN CASE S.NOT: JUMPCOND(H2!X, NOT B, L) RETURN CASE S.LOGAND: SW := NOT SW CASE S.LOGOR: TEST SW THEN $( JUMPCOND(H2!X, B, L) JUMPCOND(H3!X, B, L) $) OR $( LET M = NEXTPARAM() JUMPCOND(H2!X, NOT B, M) JUMPCOND(H3!X, B, L) COMPLAB(M) $) RETURN DEFAULT: LOAD(X) OUT2P(B -> S.JT, S.JF, L) SSP := SSP - 1 RETURN $)JC AND TRANSSWITCH(X) BE $(1 LET P, B, DL = CASEP, CASEB, DEFAULTLABEL AND ECL = ENDCASELABEL LET L = NEXTPARAM() ENDCASELABEL := NEXTPARAM() CASEB := CASEP COMPJUMP(L) DEFAULTLABEL := 0 TRANS(H3!X) COMPJUMP(ENDCASELABEL) COMPLAB(L) LOAD(H2!X) IF DEFAULTLABEL=0 DO DEFAULTLABEL := ENDCASELABEL OUT3P(S.SWITCHON, CASEP-P, DEFAULTLABEL) FOR I = CASEB TO CASEP-1 DO $( OUTN(CASEK!I) OUTL(CASEL!I) $) SSP := SSP - 1 COMPLAB(ENDCASELABEL) ENDCASELABEL := ECL CASEP, CASEB, DEFAULTLABEL := P, B, DL $)1 AND TRANSFOR(X) BE $( LET A, B = DVECE, DVECS LET L, M = NEXTPARAM(), NEXTPARAM() LET BL, LL = BREAKLABEL, LOOPLABEL LET K, N = 0, 0 LET STEP = 1 LET S = SSP BREAKLABEL, LOOPLABEL := 0, 0 ADDNAME(H2!X, S.LOCAL, S) DVECE := DVECS LOAD(H3!X) TEST H1!(H4!X)=S.NUMBER THEN K, N := S.LN, H2!(H4!X) OR $( K, N := S.LP, SSP LOAD(H4!X) $) UNLESS H5!X=0 DO STEP := EVALCONST(H5!X) OUT1(S.STORE) COMPJUMP(L) DECLLABELS(H6!X) COMPLAB(M) TRANS(H6!X) UNLESS LOOPLABEL=0 DO COMPLAB(LOOPLABEL) OUT2(S.LP, S); OUT2(S.LN, STEP); OUT1(S.PLUS); OUT2(S.SP, S) COMPLAB(L) OUT2(S.LP, S); OUT2(K, N); OUT1(STEP<0 -> S.GE, S.LE) OUT2P(S.JT, M) UNLESS BREAKLABEL=0 DO COMPLAB(BREAKLABEL) BREAKLABEL, LOOPLABEL, SSP := BL, LL, S OUT2(S.STACK, SSP) DVECE, DVECS := A, B $) .