A2osX/BIN/CC.S.STMT.txt

398 lines
5.9 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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