A2osX/BIN/CC.S.KW.txt
2022-06-12 22:42:22 +02:00

402 lines
6.3 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
*--------------------------------------
* Built in Keywords
*--------------------------------------
CC.KW.JMP txa
>STA.G CC.CmdSave
jmp (J.CC.KW,x)
*--------------------------------------
CC.KW.WHILE jsr CC.PushCS push cont: for WHILE loop
bcs CC.KW.IF.RTS
*--------------------------------------
CC.KW.IF jsr CC.GetCharNB
bcs .9
cmp #'('
bne .9
jsr CC.GetNextCharNB
bcs .9
jsr CC.EXP.Eval00 Any var type
bcs .99
jsr CC.KW.TestZero
jsr CC.PushCS push place to set JMP false
bcs .99
jsr CC.KW.ZPCCCodeAdd2
jsr CC.GetCharNB
bcs .99
cmp #')'
bne .9
jmp CC.KW.BEGIN
.9 lda #E.CSYN
sec
.99
CC.KW.IF.RTS rts
*--------------------------------------
CC.KW.IF.END jsr CC.PopYA
bcs .9
>STYA ZPPtr1 set JMP false
lda ZPCCCode
* sta (ZPPtr1)
ldy #1
lda ZPCCCode+1
* sta (ZPPtr1),y
* clc
.9 rts
*--------------------------------------
CC.KW.ELSE
clc
rts
*--------------------------------------
CC.KW.ELSE.END
clc
rts
*--------------------------------------
CC.KW.WHILE.END jsr CC.PopYA Get JMP false location
bcs .9
>STYA ZPPtr1
jsr CC.PopYA Get cont: address
bcs .9
phy
tay HI byte
plx
lda #$4C JMP cont:
jsr CODE.TOABSYX
lda ZPCCCode
* sta (ZPPtr1)
ldy #1
lda ZPCCCode+1
* sta (ZPPtr1),y
clc
.9 rts
*--------------------------------------
CC.KW.DO
lda #E.CSYN
sec
rts
*--------------------------------------
CC.KW.DO.END
clc
rts
*--------------------------------------
* for (e1;e2;e3) s;
*
* { <- new scope : allows for(int i=1; ....)
* e1;
* loop:
* while (e2)
* {
* s;
* cont:
* e3;
* }
* break:
* }
*--------------------------------------
CC.KW.FOR jsr CC.GetCharNB
bcs .9
cmp #'('
bne .9
jsr CC.GetNextCharNB
bcs .9
jsr CC.EXP.Eval00 get e1
bcs .9
jsr CC.KW.StackDiscard
jsr CC.GetCharNB
bcs .9
cmp #';'
bne .9
jsr CC.GetNextCharNB skip ';'
bcs .9
*--------------------------------------
>LDYA ZPCCCode
>STYA ZPPtr2 save LOOP address
jsr CC.EXP.Eval00 get e2
.29 bcs .99
jsr CC.KW.TestZero
jsr CC.PushCS push place to set JMP break:
bcs .99
jsr CC.KW.ZPCCCodeAdd2
lda #$20 emit JSR s;
jsr CODE.EmitByte
>LDYA ZPCCCode
>STYA ZPPtr3 save place to set JSR s
jsr CC.KW.ZPCCCodeAdd2 space for 2-bytes address
jsr CC.GetCharNB
bcs .9
cmp #';'
bne .9
jsr CC.GetNextCharNB skip ';'
bcs .9
*--------------------------------------
jsr CC.PushCS push cont: address
jsr CC.EXP.Eval00 get e3
bcs .99
jsr CC.KW.StackDiscard
jsr CC.GetCharNB
bcs .9
cmp #')'
bne .9
lda #$4C
ldx ZPPtr2
ldy ZPPtr2+1
jsr CODE.TOABSYX JMP e2
lda ZPCCCode setup JSR s;
* sta (ZPPtr3)
lda ZPCCCode+1
ldy #1
* sta (ZPPtr3),y
jmp CC.KW.BEGIN
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
CC.KW.FOR.END lda #$60
jsr CODE.EmitByte set RTS for JSR s;
jsr CC.Pop
bcs .9
jsr CC.Pop discard cont: location
bcs .9
jsr CC.PopYA
bcs .9
>STYA ZPPtr1 get JMP break: location
lda ZPCCCode
* sta (ZPPtr1)
ldy #1
lda ZPCCCode+1
* sta (ZPPtr1),y
clc
.9 rts
*--------------------------------------
CC.KW.SWITCH
CC.KW.CASE
lda #E.CSYN
sec
rts
*--------------------------------------
CC.KW.BREAK
lda #E.CSYN
sec
rts
*--------------------------------------
CC.KW.CONTINUE
lda #E.CSYN
sec
rts
*--------------------------------------
CC.KW.RETURN ldy CStackPtr
beq .9
.1 iny skip ; or }
beq .9
lda (ZPCCStack),y
bmi .7 f()
tya
clc
adc #3 skip CPStmt (4 bytes)
tay
bcc .1
.9 lda #E.STACKERROR
sec
.99 rts
.7 iny skip bState
iny skip Locals
iny get SYM.T
lda (ZPCCStack),y
pha
iny get SYM.Q
lda (ZPCCStack),y
ply
jsr CC.EXP.Eval
bcs .99
jsr CC.SYM.GetYASizeOfInAXC Y,A=T/Q
tax X = sizeof
jsr CODE.SetRetValue
jsr CODE.Leave
clc
rts
*--------------------------------------
CC.KW.SIZEOF
lda #E.CSYN
sec
rts
*--------------------------------------
CC.KW.STRUCT >ENTER 4
jsr CC.GetCharNB
bcs .99
ldx #SYM.SC.TAG
>LDA.G CC.hTags
jsr CC.SYM.NewKey
bcs .99
sta (pStack) Y,A = KeyID
tya
ldy #1
sta (pStack),y
jsr CC.SkipX
jsr CC.GetNextCharNB
bcs .99
cmp #'{'
bne .99
.1 jsr CC.GetNextCharNB
bcs .99
cmp #'}'
bne .1
jsr CC.GetNextCharNB skip }
clc
.99 >LEAVE
rts
*--------------------------------------
CC.KW.BEGIN jsr CC.GetNextCharNB
bcs .9
cmp #'{'
bne .7
>LDA.G CC.CmdSave
tax
jmp CC.STMT.CPStmt
.7 >LDA.G CC.CmdSave
jsr CC.Push
bcs .99
lda #';'
jmp CC.Push
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
* Input : Value on Stack, Y,A = Type/Qual
* Output : CC = true, CS = false
*--------------------------------------
CC.KW.TestZero jsr CC.SYM.GetYASizeOfInAXC
tax
.6 lda #$A2 LDX #imm
jsr CODE.EmitByte
txa
jsr CODE.EmitByte
ldx #PCC.Test0X.L
ldy #0
.7 lda PCC.Test0X,y
jsr CODE.EmitByte
iny
dex
bne .7
clc
rts
*--------------------------------------
CC.KW.ZPCCCodeAdd2
lda ZPCCCode
clc
adc #2
sta ZPCCCode
bcc .8
inc ZPCCCode+1
.8 rts
*--------------------------------------
* Input : Value on Stack, Y,A = Type/Qual
*--------------------------------------
CC.KW.StackDiscard
jsr CC.TYPE.SizeOf
txa
beq .8 void
jsr CODE.AddLocal
.8 clc
.9 rts
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.kw
LOAD usr/src/bin/cc.s
ASM