A2osX/BIN/CC.S.STMT.txt

263 lines
4.2 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 Global context
lda (ZPCCStack),y
bmi STMT.POP.8 local F context
* in an istruction ...
iny CPS.TERM
lda (ZPCCStack),y
cmp #'}'
beq STMT.POP.8 in a CPS...
cmp #';' must be ';' on stack....
beq STMT.End
STMT.POP.9 lda #E.STACKERROR
sec
rts
STMT.POP.8 clc
STMT.POP.99 rts
*--------------------------------------
STMT.CPStmt.END ldy CStackPtr
beq STMT.POP.9
lda (ZPCCStack),y
bpl .1
jmp F.Def.END local F context
.1 iny
lda (ZPCCStack),y CPS.TERM
cmp #'}' must be '}' on stack....
bne STMT.POP.9
*--------------------------------------
STMT.End ldy CStackPtr CPS.KW
lda (ZPCCStack),y
tax
jmp (J.CC.KW.END,x)
*--------------------------------------
STMT.NewCPS00 lda #0
jsr CC.Push CPS.hMEM
bcs STMT.NewCPS.RTS
jsr CC.Push CPS.MemPtr
bcs STMT.NewCPS.RTS
STMT.NewCPS lda LocalFrame
jsr CC.Push
bcs .99
lda LocalPtr
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
lda #'F'
jsr SYM.LookupLabelA
bcs .99
txa
jsr CODE.nAddLocal
bcs .99
ldx #'}'
.1 txa
ldy CStackPtr
iny CPS.TERM
sta (ZPCCStack),y
.8 clc
rts
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
STMT.Close ldy CStackPtr CPS.KW
iny CPS.TERM
lda (ZPCCStack),y
cmp #'}'
bne .1
lda #'F' define FRAME SIZE
jsr SYM.NewLabelA
bcs .99
lda CStackPtr
clc
adc #CPS.LocalPtr
tay
lda (ZPCCStack),y
sta LocalPtr
iny CPS.LocalFrame
lda (ZPCCStack),y
sta LocalFrame
jsr SCOPE.Close
bcs .99
.1 lda CStackPtr
clc
adc #CPS
sta CStackPtr
.8 clc
.99 rts
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.stmt
LOAD usr/src/bin/cc.s
ASM