/ / / f13 -- dimension and array declarator / / dimension / / .globl sdime .globl sdime1 .globl getsym .globl error .globl geti .globl dimu sdime: jsr r5,getsym tst r0 bne 3f / junk error mov r3,-(sp) jsr r5,getsym mov (sp)+,r3 cmp r0,$32. / ( beq 2f jsr r5,error; 4. / no ( in dimension rts r5 2: jsr r5,sdime1 jsr r5,getsym cmp r0,$36. / , beq sdime cmp r0,$40. beq 1f 3: jsr r5,error; 5. 1: rts r5 / get dimension info and store in / symbol table entry / r3 points at symbol table / r1 points just beyond ( sdime1: bit $70,symtab(r3) / class beq 1f jsr r5,error; 6. / already classed 1: mov r3,-(sp) bic $70,symtab(r3) bis $20,symtab(r3) / set as array clr -(sp) / marker 1: jsr r5,getsym cmp r0,$2 / constant bne 2f cmp r3,$intcon / integer*4 bne 3f jsr r5,geti tst r0 ble 3f mov r0,-(sp) br 4f 2: tst r0 bne 3f / identifer tstb symtab(r3) bge 3f / not parameter neg r3 mov r3,-(sp) mov sp,r0 2: tst (r0)+ bne 2b mov (r0),r0 tstb symtab(r0) bge 3f / array not a param 4: jsr r5,getsym cmp r0,$36. / , beq 1b cmp r0,$34. / ) beq 1f 3: jsr r5,error; 7. 1: mov esymp,r0 clr r2 mov dimu,-(r0) inc dimu / unique number 1: inc r2 mov (sp)+,-(r0) bne 1b dec r2 mov r2,(r0) mov r0,esymp mov (sp)+,r3 mov r0,symtab+2(r3) rts r5