// TRN4 GET "TRNHDR" LET LOAD(X) BE $(1 IF X=0 DO $( TRANSREPORT(148, CURRENTBRANCH) LOADZERO() RETURN $) $( LET OP = H1!X SWITCHON OP INTO $( DEFAULT: TRANSREPORT(147, CURRENTBRANCH) LOADZERO() RETURN CASE S.BYTEAP: OP := S.GETBYTE CASE S.DIV: CASE S.REM: CASE S.MINUS: CASE S.LS: CASE S.GR: CASE S.LE: CASE S.GE: CASE S.LSHIFT: CASE S.RSHIFT: LOAD(H2!X) LOAD(H3!X) OUT1(OP) SSP := SSP - 1 RETURN CASE S.VECAP: CASE S.MULT: CASE S.PLUS: CASE S.EQ: CASE S.NE: CASE S.LOGAND: CASE S.LOGOR: CASE S.EQV: CASE S.NEQV: $( LET A, B = H2!X, H3!X IF H1!A=S.NAME LOGOR H1!A=S.NUMBER DO A, B := H3!X, H2!X LOAD(A) LOAD(B) IF OP=S.VECAP DO $( OUT1(S.PLUS); OP := S.RV $) OUT1(OP) SSP := SSP - 1 RETURN $) CASE S.NEG: CASE S.NOT: CASE S.RV: CASE S.ABS: LOAD(H2!X) OUT1(OP) RETURN CASE S.TRUE: CASE S.FALSE: CASE S.QUERY: OUT1(OP) SSP := SSP + 1 RETURN CASE S.LV: LOADLV(H2!X) RETURN CASE S.NUMBER: OUT2(S.LN, H2!X) SSP := SSP + 1 RETURN CASE S.STRING: $( LET S = @H2!X OUT2(S.LSTR, GETBYTE(S, 0)) FOR I = 1 TO GETBYTE(S, 0) DO OUTN1(GETBYTE(S, I)) WRC('*S') SSP := SSP + 1 RETURN $) CASE S.NAME: TRANSNAME(X, S.LP, S.LG, S.LL, S.LN) SSP := SSP + 1 RETURN CASE S.VALOF: $( LET RL = RESULTLABEL LET A, B = DVECS, DVECE DECLLABELS(H2!X) RESULTLABEL := NEXTPARAM() TRANS(H2!X) COMPLAB(RESULTLABEL) OUT2(S.RSTACK, SSP) SSP := SSP + 1 DVECS, DVECE := A, B RESULTLABEL := RL RETURN $) CASE S.FNAP: $( LET S = SSP SSP := SSP + SAVESPACESIZE OUT2(S.STACK, SSP) LOADLIST(H3!X) LOAD(H2!X) OUT2(S.FNAP, S) SSP := S + 1 RETURN $) CASE S.COND: $( LET L, M = NEXTPARAM(), NEXTPARAM() LET S = SSP JUMPCOND(H2!X, FALSE, M) LOAD(H3!X) COMPJUMP(L) SSP := S; OUT2(S.STACK, SSP) COMPLAB(M) LOAD(H4!X) COMPLAB(L) RETURN $) CASE S.TABLE: $( LET M = NEXTPARAM() COMPDATALAB(M) X := H2!X WHILE H1!X=S.COMMA DO $( OUT2(S.ITEMN, EVALCONST(H2!X)) X := H3!X $) OUT2(S.ITEMN, EVALCONST(X)) OUT2P(S.LLL, M) SSP := SSP + 1 RETURN $) $)1 AND LOADLV(X) BE $(1 IF X=0 GOTO ERR SWITCHON H1!X INTO $( DEFAULT: ERR: TRANSREPORT(113, CURRENTBRANCH) LOADZERO() RETURN CASE S.NAME: TRANSNAME(X, S.LLP, S.LLG, S.LLL, 0) SSP := SSP + 1 RETURN CASE S.RV: LOAD(H2!X) RETURN CASE S.VECAP: $( LET A, B = H2!X, H3!X IF H1!A=S.NAME DO A, B := H3!X, H2!X LOAD(A) LOAD(B) OUT1(S.PLUS) SSP := SSP - 1 RETURN $) $)1 AND LOADZERO() BE $( OUT2(S.LN, 0) SSP := SSP + 1 $) AND LOADLIST(X) BE UNLESS X=0 DO $( UNLESS H1!X=S.COMMA DO $( LOAD(X); RETURN $) LOADLIST(H2!X) LOADLIST(H3!X) $) .