NEW AUTO 3,1 *-------------------------------------- * Input : ZPLineBufPtr, Y,A = T/Q, X = SC * Output : Y,A = VarID *-------------------------------------- CC.SYM.New >STYA ZPPtr2 T/Q stx ZPPtr3 SC ldy ScopePtr lda (pData),y jsr CC.SYM.NewKey bcs .9 >STYA.G CC.SymID Y,A = KeyID stx ZPPtr3+1 X = KeyLen >LDYAI 256 >SYSCALL GetMem bcs .9 >STYA ZPSymBufPtr txa >STA.G CC.hSymBuf lda ZPPtr2 sta (ZPSymBufPtr) #SYM.T lda ZPPtr2+1 ldy #SYM.Q sta (ZPSymBufPtr),y lda ZPPtr3 iny #SYM.SC sta (ZPSymBufPtr),y iny lda #0 .1 sta (ZPSymBufPtr),y iny cpy #SYM.Def bne .1 sty ZPSymSize stz ZPSymSize+1 ldx ZPPtr3+1 Key Len jsr CC.SkipX jsr CC.GetCharNB bcs CC.SYM.SetAddr cmp #'(' bne CC.SYM.NewV jmp CC.F.Decl .9 rts *-------------------------------------- CC.SYM.NewV cmp #'[' bne CC.SYM.SetAddr jsr CC.GetNextCharNB Skip [ bcs .99 cmp #']' bne .3 .2 ldy #SYM.Q lda (ZPSymBufPtr),y bit #SYM.Q.PPPOINTER beq .99 and #SYM.Q.AAARRAY cmp #SYM.Q.AAARRAY bcs .99 * ldy #SYM.Q lda (ZPSymBufPtr),y * clc adc #SYM.Q.ARRAY sta (ZPSymBufPtr),y jsr CC.GetNextCharNB Skip ] bcs CC.SYM.SetAddr cmp #'[' beq .2 bra CC.SYM.SetAddr *-------------------------------------- .3 jsr CC.EXP.IntConst bcs .9 jsr CC.SYM.SetSizeOf jsr CC.GetCharNB bcs .99 cmp #']' bne .99 jsr CC.GetNextCharNB Skip ] bcs CC.SYM.SetAddr * cmp #'[' * bne CC.SYM.SetAddr bra CC.SYM.SetAddr .99 lda #E.CSYN sec .9 rts *-------------------------------------- CC.SYM.SetAddr ldy #SYM.Q lda (ZPSymBufPtr),y and #SYM.Q.FUNC bne .9 ldy #SYM.SC lda (ZPSymBufPtr),y beq CC.SYM.SetAddrG SYM.SC.STATIC cmp #SYM.SC.AUTO beq CC.SYM.SetAddrL .9 lda #E.TMISMATCH sec rts *-------------------------------------- CC.SYM.SetAddrG jsr CC.SYM.GetSymSizeOfInAXC jsr CC.SYM.SetSizeOf * clc / sec A,X=Size, CS if pointer ldy #SYM.Addr lda ZPCCData sta (ZPSymBufPtr),y adc ZPCCData sta ZPCCData iny lda ZPCCData+1 sta (ZPSymBufPtr),y txa adc ZPCCData+1 sta ZPCCData+1 clc rts *-------------------------------------- CC.SYM.SetAddrL jsr CC.SYM.GetSymSizeOfInAXC jsr CC.SYM.SetSizeOf ldy #SYM.SizeOf+1 lda (ZPSymBufPtr),y bne .9 dey SYM.SizeOf lda (ZPSymBufPtr),y * clc / sec A,X=Size, CS if pointer clc adc LocalPtr sta LocalPtr bcs .9 ldy #SYM.Addr sta (ZPSymBufPtr),y jsr CC.SYM.GetSymSizeOfInAXC jsr CODE.nAddLocal clc rts .9 lda #E.BUF sec rts *-------------------------------------- CC.SYM.NewKey >PUSHA >PUSHW ZPLineBufPtr bit bPass2 bpl .1 txa bne .1 >SYSCALL SListLookup * clc rts .1 >SYSCALL SListNewKey rts Y,A = KeyID, X = KeyLen *-------------------------------------- CC.SYM.Store ldy ScopePtr lda (pData),y >PUSHA >PUSHW.G CC.SymID >PUSHW ZPSymBufPtr >PUSHW ZPSymSize bit bPass2 bpl .1 bit ScopenCnt bmi .1 >SYSCALL SListSetData rts .1 >SYSCALL SListAddData rts *-------------------------------------- CC.SYM.Free >LDA.G CC.hSymBuf >SYSCALL FreeMem bcs .99 >STZ.G CC.hSymBuf rts .99 >DEBUG rts *-------------------------------------- CC.SYM.NewScope ldy ScopePtr cpy #CC.hSymbols+SCOPE.MAX bcs .9 >SYSCALL SListNew bcs .99 inc ScopePtr ldy ScopePtr sta (pData),y dec ScopenCnt clc rts .9 lda #E.OOH sec .99 rts *-------------------------------------- CC.SYM.FreeScope ldy ScopePtr cpy #CC.hSymbols beq * lda (pData),y >SYSCALL SListFree dec ScopePtr inc ScopenCnt rts *-------------------------------------- CC.SYM.Lookup >PUSHB ScopePtr .1 tay lda (pData),y jsr CC.SListLookup bcc .8 lda (pstack) cmp #CC.hSymbols beq .9 dec sta (pstack) bra .1 .9 inc pStack lda #E.NOKEY sec rts .8 inc pStack >STYA ZPLookupSymPtr .99 rts *-------------------------------------- CC.SYM.LookupFree >LDA.G CC.hLookupSymBuf >SYSCALL FreeMem bcs .99 >STZ.G CC.hLookupSymBuf rts .99 >DEBUG rts *-------------------------------------- * Y,A = value T/Q *-------------------------------------- CC.SYM.PushValue jsr CC.SYM.CheckTypeYA bcs .9 jsr CC.SYM.GetSymSizeOfInAXC tax jsr CODE.LDXI jsr CC.SYM.GetAddrInYA beq .1 jsr CODE.LDYAI jsr CODE.PushXFromYA clc rts .1 jsr CODE.GetLocal Y = local address jsr CODE.PushXFromYA clc .9 rts *-------------------------------------- CC.SYM.PopValue jsr CC.SYM.CheckTypeYA bcs .9 jsr CC.SYM.GetSymSizeOfInAXC tax jsr CODE.LDXI jsr CC.SYM.GetAddrInYA beq .1 jsr CODE.LDYAI jsr CODE.PopXToYA clc rts .1 jsr CODE.GetLocal Y = local address jsr CODE.PopXToYA clc .9 rts *-------------------------------------- CC.SYM.SetValue jsr CC.SYM.CheckTypeYA bcs .9 jsr CC.SYM.GetSymSizeOfInAXC tax jsr CODE.LDXI jsr CC.SYM.GetAddrInYA beq .1 jsr CODE.LDYAI jsr CODE.SetXToYA clc rts .1 jsr CODE.GetLocal Y = local address jsr CODE.SetXToYA clc .9 rts *-------------------------------------- * in : Y,A = T/Q * out : CC * CS, A = E.TMISMATCH *-------------------------------------- CC.SYM.CheckTypeYA pha tya cmp (ZPSymBufPtr) bne .9 pla phy ldy #SYM.Q cmp (ZPSymBufPtr),y bne .9 ply clc rts .9 pla lda #E.TMISMATCH sec rts *-------------------------------------- * out : Y,A = T/Q *-------------------------------------- CC.SYM.GetTypeInYA ldy #SYM.Q lda (ZPSymBufPtr),y pha lda (ZPSymBufPtr) tay pla rts *-------------------------------------- * in : Y,A = T/Q *-------------------------------------- CC.SYM.SetTypeYA phy ldy #SYM.Q sta (ZPSymBufPtr),y pla sta (ZPSymBufPtr) rts *-------------------------------------- * out : A,X,C = size *-------------------------------------- CC.SYM.GetSymSizeOfInAXC ldy #SYM.Q lda (ZPSymBufPtr),y pha lda (ZPSymBufPtr) SYM.T tay pla CC.SYM.GetYASizeOfInAXC bit #SYM.Q.PPPOINTER bne .1 lda CC.TYPESIZE-1,y ldx #0 clc rts .1 lda #2 pointer ldx #0 sec +1 for hMem Storage rts *-------------------------------------- * in/out : A,X,C = size *-------------------------------------- CC.SYM.SetSizeOf ldy #SYM.SizeOf sta (ZPSymBufPtr),y pha iny txa sta (ZPSymBufPtr),y pla rts *-------------------------------------- CC.SYM.GetAddrInYA ldy #SYM.Addr+1 lda (ZPSymBufPtr),y pha dey lda (ZPSymBufPtr),y tay pla Z if Local rts *-------------------------------------- CC.SYM.SetAddrYA phy ldy #SYM.Addr+1 sta (ZPSymBufPtr),y pla dey sta (ZPSymBufPtr),y rts *-------------------------------------- MAN SAVE usr/src/bin/cc.s.sym LOAD usr/src/bin/cc.s ASM