A2osX/BIN/CC.S.STMT.txt
2022-12-07 17:09:29 +01:00

235 lines
3.7 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 STMT.POP.8
iny CPS.TERM
lda (ZPCCStack),y
cmp #'}'
beq STMT.POP.8
cmp #';' must be ';' on stack....
beq STMT.POP
STMT.POP.9 lda #E.STACKERROR
sec
rts
STMT.POP.8 clc
rts
*--------------------------------------
STMT.CPStmt.END ldy CStackPtr
beq STMT.POP.9
iny
lda (ZPCCStack),y
cmp #'}' must be '}' on stack....
bne STMT.POP.9
STMT.POP dey CPS.KW
lda (ZPCCStack),y
jsr STMT.End
bcs .99
bvs .8 DONT POP reused context (ELSE....)
ldy #CPS.LOCAL
lda (ZPCCStack),y
sta LocalPtr
lda CStackPtr
* clc
adc #CPS
sta CStackPtr
.8 clc
.99 rts
*--------------------------------------
STMT.End tax
bmi .8
jmp (J.CC.KW.END,x)
.8 jmp F.Def.END
*--------------------------------------
STMT.NewCPS00 lda #0
jsr CC.Push no T/Q
bcs STMT.NewCPS.RTS
jsr CC.Push
bcs STMT.NewCPS.RTS
STMT.NewCPS 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
jsr SCOPE.New
bcs .99
ldx #'}'
.1 txa
ldy CStackPtr
iny CPS.TERM
sta (ZPCCStack),y
.8 clc
rts
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.stmt
LOAD usr/src/bin/cc.s
ASM