        $MACRO all VAR
        JSR PC,$$RES
        RES.STR #@{1} @#$$RES1
        $ENDM
;
        $MACRO fre
        MOV (SP),R0
        ADD R0,SP
        $ENDM
        $MACRO RES.STR ;  NAME,SIZE
        SUB #@2,SP
        SUB #10.,SP
        MOV #1,-(SP)
        MOV #@2,-(SP)
        ADD #8.,(SP)
        MOV SP,#@1
        MOV #@1,-(SP)
        JSR PC,INI
        ADD #6.,(SP)
        JSR PC,$$$STK
        $ENDM
/
        PROGRAM LET1
        optimize with r2
        SETLAB LT
x1:     .asciz 'C #@1 = #@2[<#@*(3"9)>]'
x1a:    .asciz 'LET #@1 = #@*(2_Z)'
x2:     .asciz '	mov #@2,#@1'
y1:     .asciz '#@1 #@2,#@3'
y2:     .asciz 'CL <#@*(3"Z)>'
y3:     .asciz '#@1 #@2,r0'
        .even


;-
; let part two
; handles some of functions (recognition only) and arrays/structure-
; member
;+
        AUTO pm lab n t s
FUNCTION let1[es,s.pm,t.pm,n.pm,lab.pm]
        all s
        all t
        . instr[t,#20.]
        . expand[es,s,&s.pm]
        LET n = toks[s,t]
        clr lab(r5)
        IF n GT #3
            fre
            fre
            LET r4 = isexp[t,#4]
            IF r4 = #0
                . exstat[#x1,&s,#0]
            ELSE
                . exstat[#x1a,&s,#0]
            FI
        ELSE
            mov #-1,xx.switch+6
            all r4
            . mvstr[s,t,#3] ;s=t(3)
            . toks[s,r4]
            . copy[t,#3,r4,#1]
            fre
            . exstat[#x2,&s,#0]
            clr xx.switch+6
            fre
            fre
        FI
        RET


;-
; Let part 2a   more function and array determination
;
;
;+


        AUTO pm lab n t s
FUNCTION let2[es,s.pm,t.pm,n.pm,lab.pm]
        all t
        all s
        clr lab(r5)
        . instr[t,#20.]
        . expand[es,s,&s.pm]
        LET n = toks[s,t]
        fre
        IF n LT #5
            mov #-1,xx.switch+6	;/sw 14
            . exstat[#y1,&s,#0]
            clr xx.switch+6
        ELSE
            all r4
            . exstat[#y2,&s,r4]
            . exstat[#y3,&s,r4]
            fre
        FI
        fre
        RET

        .end
