mirror of
https://github.com/A2osX/A2osX.git
synced 2025-02-16 18:30:26 +00:00
398 lines
5.9 KiB
Plaintext
398 lines
5.9 KiB
Plaintext
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
|