MiniUnix/usr/source/fort/f3/f32.s
/
/
/ f32 -- expression to tree
.globl e1
.globl e2
.globl e11
.globl error
.globl getsym
.globl blockp
.globl blocks
.globl declimpl
.globl conu
.globl ptemp
.globl functn
.globl funimpl
/ e1: e2[,e1]
/ e2: e2[.or.e3]
/ e3: e3[.and.e4]
/ e4: [.not.]e5
/ e5: e6[.rel.e6]
/ e6: [+-]e7[+-e6]
/ e7: e7[*/e8]
/ e8: e9[**e9]
/ e9: constant
/ name[(e1)]
/ (e2)
e1:
jsr r5,e2
cmp r0,$36. / ,
bne 1f
jsr r5,block; e1
rts r5
e2:
jsr r5,e3
2:
cmp r0,$30. / or
bne 1f
jsr r5,block; e3
br 2b
e3:
jsr r5,e4
2:
cmp r0,$28. / and
bne 1f
jsr r5,block; e4
br 2b
e4:
jsr r5,getsym
cmp r0,$26. / not
bne e5
clr r2
jsr r5,block; e5a
rts r5
e5a:
jsr r5,getsym
e5:
jsr r5,e6
cmp r0,$14. / .lt.
blo 1f
cmp r0,$24. / .ge.
bhi 1f
jsr r5,block; e6a
rts r5
e6a:
jsr r5,getsym
e6:
cmp r0,$12. / +
beq e6a
cmp r0,$10. / -
bne 2f
clr r2
jsr r5,block; e7a
br 3f
2:
jsr r5,e7
3:
cmp r0,$10. / -
blo 1f
cmp r0,$12. / +
bhi 1f
jsr r5,block; e7a
br 3b
e7a:
jsr r5,getsym
e7:
jsr r5,e8
2:
cmp r0,$6. / /
blo 1f
cmp r0,$8. / *
bhi 1f
jsr r5,block; e8a
br 2b
e8a:
jsr r5,getsym
e8:
jsr r5,e9
cmp r0,$4 / **
bne 1f
jsr r5,block; e9a
1:
rts r5
e9a:
jsr r5,getsym
e9:
cmp r0,$2 / constant
beq 3f
/ (e2)
cmp r0,$32. / (
bne 1f
jsr r5,e2
br 2f
e10:
jsr r5,e1
2:
cmp r0,$34. / )
beq 2f
jsr r5,error; 29.
rts r5
2:
jsr r5,getsym
rts r5
1:
tst r0
beq e11
/ unknown
jsr r5,error; 30.
rts r5
/ name
e11:
mov r3,r2
jsr r5,getsym
cmp r0,$32. / (
bne 1f
jsr r5,appl
jsr r5,block; e10
rts r5
1:
mov r2,r3
mov r0,-(sp)
jsr r5,declimpl
mov symtab(r3),r0
bic $!70,r0
cmp r0,$30 / class =| funct
bne 1f
jsr r5,appl
mov $42.,r3 / just function name
br 2f
1:
clr r3
2:
mov (sp)+,r0
mov r2,-(sp)
mov blockp,r2
add $6,blockp
mov r3,(r2)
mov (sp)+,2(r2)
clr 4(r2)
rts r5
/ number
3:
mov blockp,r2
add $6,blockp
mov r0,(r2)
mov r3,2(r2)
cmpb 2(r2),$5 / const->int
bne 4f
movb $1,2(r2)
4:
mov r3,temp
mov conu,4(r2)
inc conu
jsr r5,ptemp; 'c; temp; symbuf
jsr r5,getsym
rts r5
appl:
clr functn
bit $70,symtab(r2) / class
bne 1f
bis $30,symtab(r2)
jsr r5,funimpl
1:
mov r2,r3
jsr r5,declimpl
mov symtab(r2),r0
bic $!70,r0 / class again
cmp r0,$20 / array
beq 1f
cmp r0,$30 / funct
beq 2f
jsr r5,error; 33.
bic $70,symtab(r2)
br appl
1:
mov $32.,r0
rts r5
2:
mov $34.,r0
rts r5
block:
mov blockp,r3
add $6,blockp
mov r0,(r3)+
mov r2,(r3)+
mov r3,-(sp)
jsr r5,*(r5)+
mov r2,*(sp)
mov (sp)+,r2
sub $4,r2
rts r5