NEW AUTO 3,1 *-------------------------------------- STMT.Get jsr CC.GetCharNB jsr CC.IsLetter ldx #$ff bcc .20 >LDYA L.CC.PREOPS ++var ? jsr CC.LookupOP bcs .9 .20 stx StmtPreOp jsr SYM.Lookup var or func() ? bcs .99 ldy #SYM.SC lda (ZPLookupSymPtr),y cmp #SYM.SC.TYPEDEF bne .60 *-------------------------------------- jsr CORE.GetNCharNB bcs .9 ldy #SYM.Q lda (ZPLookupSymPtr),y pha lda (ZPLookupSymPtr) pha jsr SYM.LookupFree ply pla sec Reset Buffer jmp DECL.YAC *-------------------------------------- .60 ldy #SYM.Q lda (ZPLookupSymPtr),y bit #SYM.Q.FUNC beq .61 bit StmtPreOp bpl .9 ++func ???????? jsr F.CallNoRetV func( ... ); bcs .99 jmp SYM.LookupFree *-------------------------------------- .61 jsr STMT.SetVar bcs .99 jmp SYM.LookupFree .9 lda #E.CSYN sec .99 rts *-------------------------------------- STMT.SetVar stz ExpState jsr EXP.POSTOPS var++, var[0]... ? bcs .99 ldx StmtPreOp jsr EXP.PREOPS apply ++var, .... bcs .99 jsr CC.GetCharNB bcs .90 jsr CC.IsEndArg var++; or ++var; ? bcc .8 jsr CC.LookupAOP var=, var+= ... ? bcs .90 cpx #0 TOTO : all AOPS bne * lda ExpState bmi .90 VonStack asl bmi .7 AinPTR asl bmi .6 AonStack jsr EXP.GetAddr1 bcc .7 rts .6 >LDYA L.PCC.PopAddr1 jsr CODE.EmitPCC bcs .99 .7 ldy #SYM.Q lda (ZPLookupSymPtr),y pha lda (ZPLookupSymPtr) tay pla get expected T/Q jsr EXP.Eval bcs .99 jmp SYM.PopValue .8 clc rts .90 lda #E.CSYN sec .99 rts *-------------------------------------- *-------------------------------------- STMT.Stmt.END ldy CStackPtr beq .8 iny CPS.TERM lda (ZPCCStack),y cmp #'}' beq .8 cmp #';' must be ';' on stack.... bra STMT.POP .8 clc rts *-------------------------------------- * X = KW.ID *-------------------------------------- STMT.CPStmt.NEW >LDA.G CC.CPSID+1 jsr CC.Push bcs .99 >LDA.G CC.CPSID jsr CC.Push bcs .99 lda LocalPtr Locals jsr CC.Push bcs .99 lda #0 bState jsr CC.Push bcs .99 lda #'}' jsr CC.Push bcs .99 txa jmp CC.Push .99 rts *-------------------------------------- STMT.CPStmt.END ldy CStackPtr beq STMT.POP.9 iny lda (ZPCCStack),y cmp #'}' must be '}' on stack.... STMT.POP bne .9 dey CPS.KW lda (ZPCCStack),y jsr STMT.CLOSE bcs .99 bvs .1 DONT POP reused context (ELSE....) ldy #CPS.LOCAL lda (ZPCCStack),y sta LocalPtr lda CStackPtr * clc adc #CPS sta CStackPtr .1 clc .99 rts .9 STMT.POP.9 lda #E.STACKERROR sec rts *-------------------------------------- STMT.CLOSE tax bmi .8 jmp (J.CC.KW.END,x) .8 jmp F.Def.END .98 lda #E.CSYN sec .99 rts *-------------------------------------- STMT.NewCPS00 lda #0 jsr CC.Push no T/Q bcs STMT.NewCPS.RTS jsr CC.Push bcs STMT.NewCPS.RTS STMT.NewCPS jsr STMT.NewCPSID bcs .99 lda #'*' >SYSCALL putchar >LEA.G CC.CPSPFX+2 >SYSCALL puts * >DEBUG >LDA.G CC.CPSPFX+3 jsr CC.Push bcs .99 >LDA.G CC.CPSPFX+2 jsr CC.Push bcs .99 lda LocalPtr Locals jsr CC.Push bcs .99 lda #0 bState jsr CC.Push bcs .99 lda #';' CPS.TERM jsr CC.Push bcs .99 >LDA.G CC.CmdSave jmp CC.Push .99 STMT.NewCPS.RTS rts *-------------------------------------- STMT.SetCPSType jsr CORE.GetNCharNBNL bcs .9 ldx #';' cmp #'{' bne .1 jsr CORE.GetNCharNB skip '{' bcs .99 ldx #'}' .1 txa ldy CStackPtr iny CPS.TERM sta (ZPCCStack),y .8 clc rts .9 lda #E.CSYN sec .99 rts *-------------------------------------- STMT.NewLabelA pha lda CStackPtr jsr STMT.GetCPSIDA * lda #'+' * >SYSCALL putchar * pla * pha * >SYSCALL putchar * >LEA.G CC.CPSPFX+1 * >SYSCALL puts * >DEBUG pla jmp SYM.NewA *-------------------------------------- STMT.GetLabelA pha lda CStackPtr jsr STMT.GetCPSIDA * lda #'?' * >SYSCALL putchar * pla * pha * >SYSCALL putchar * >LEA.G CC.CPSPFX+1 * >SYSCALL puts * >DEBUG pla jmp SYM.LookupA *-------------------------------------- STMT.LookupLabelA pha ldy CStackPtr sty ArgIndex lda ArgIndex beq .9 .1 jsr STMT.GetCPSIDA * lda #'!' * >SYSCALL putchar * pla * pha * >SYSCALL putchar * >LEA.G CC.CPSPFX+1 * >SYSCALL puts * >DEBUG pla pha jsr SYM.LookupA bcc .8 lda ArgIndex clc adc #CPS sta ArgIndex bne .1 .9 lda #E.NOKEY plx * sec rts .8 pla * clc rts *-------------------------------------- STMT.GetCPSIDA clc adc #CPS.CPSID tay lda (ZPCCStack),y pha iny lda (ZPCCStack),y ply >STYA.G CC.CPSPFX+2 rts *-------------------------------------- STMT.NewCPSID >LDYA.G CC.CPSID >STYA.G CC.CPSPFX+2 >LDA.G CC.CPSID+1 inc cmp #'Z'+1 bne .1 dey CC.CPSID lda (pData),y inc cmp #'Z'+1 beq .9 sta (pData),y lda #'A' iny CC.CPSID+1 .1 sta (pData),y clc rts .9 lda #E.OOH * sec rts *-------------------------------------- MAN SAVE usr/src/bin/cc.s.stmt LOAD usr/src/bin/cc.s ASM