A2osX/BIN/CC.S.KW.txt

340 lines
5.1 KiB
Plaintext
Raw Normal View History

NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
* Built in Keywords
*--------------------------------------
CC.KW.JMP txa
>STA.G CC.CmdSave
jmp (J.CC.KW,x)
*--------------------------------------
CC.WHILE jsr CC.PushCS push Test location for WHILE loop
bcc CC.IF
rts
*--------------------------------------
CC.IF jsr CC.GetCharNB
bcs .9
cmp #'('
bne .9
jsr CC.GetNextCharNB
bcs .9
ldy #0 Any var type
lda #0
jsr CC.ExpEval
bcs .99
jsr CC.IsValue0
jsr CC.GetCharNB
bcs .99
cmp #')'
bne .9
jsr CC.GetNextCharNB skip ')'
bcs .9
jsr CC.PushCS push place to set JMP if false
bcs .99
lda ZPCCCode
clc
adc #2
sta ZPCCCode
bcc .5
inc ZPCCCode+1
.5 >LDA.G CC.CmdSave
jsr CC.Push push IF / WHILE
bcs .99
lda #'}' end block expected
jmp CC.Push
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
CC.IF.END jsr CC.Pop
bcs .9
sta ZPPtr1
jsr CC.Pop
bcs .9
sta ZPPtr1+1
lda ZPCCCode
sta (ZPPtr1)
ldy #1
lda ZPCCCode+1
sta (ZPPtr1),y
* clc
.9 rts
*--------------------------------------
CC.ELSE
clc
rts
*--------------------------------------
CC.WHILE.END jsr CC.Pop
bcs .9
sta ZPPtr1
jsr CC.Pop
bcs .9
sta ZPPtr1+1
jsr CC.Pop
bcs .9
pha
jsr CC.Pop
bcs .9
tax
ply
jsr CODE.JMPYX
lda ZPCCCode
sta (ZPPtr1)
ldy #1
lda ZPCCCode+1
sta (ZPPtr1),y
clc
.9 rts
*--------------------------------------
CC.DO
CC.FOR
CC.SWITCH
CC.CASE
CC.BREAK
CC.CONTINUE
CC.SIZEOF
*--------------------------------------
CC.TYPEDEF lda #E.CSYN
sec
rts
*--------------------------------------
CC.STRUCT >ENTER 4
jsr CC.GetCharNB
bcs .99
>LDA.G CC.hTags
jsr CC.NewKey
bcs .99
sta (pStack) Y,A = KeyID
tya
ldy #1
sta (pStack),y
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
*--------------------------------------
* Input : Value on Stack, Y,A = Type/Qual
* Output : CC = true, CS = false
*--------------------------------------
CC.IsValue0 and #CC.Q.PPPOINTER
beq .2
ldx #2
bra .6
.2 cpy #CC.T.FLOAT
bcc .5 char,int,long
ldx #5
*--------------------------------------
.5 jsr CC.GetVarSize
.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
*--------------------------------------
* Type Declaration keywords
*--------------------------------------
CC.CONST ldy #1
lda (pStack),y
ora #CC.Q.CONST
sta (pStack),y
jsr CC.CheckSpace
bcs .9
>LDYA L.CC.TMODS2
jsr CC.LookupID
bcs .9
jmp (J.CC.TMODS2,x)
.9 lda #E.CSYN
sec
rts
*--------------------------------------
CC.SIGNED sec
.HS 90 BCC
*--------------------------------------
CC.UNSIGNED clc
php
jsr CC.CheckSpace
bcs .9
>LDYA L.CC.TYPES
jsr CC.LookupID
bcs .9
cpx #CC.T.UCHAR
bcc .9 void
cpx #CC.T.SLONG+1 only char int long allowed
bcs .9
plp
bcs .8
jmp (J.CC.UTYPES-2,x)
.8 jmp (J.CC.STYPES-2,x)
.9 plp
lda #E.CSYN
sec
rts
*--------------------------------------
CC.SHORT jsr CC.CheckSpace
bcs .9
>LDYA L.CC.TYPES
jsr CC.LookupID
bcs CC.UCHAR
cpx #4 only int allowed
beq CC.SCHAR
.9 lda #E.CSYN
sec
rts
*--------------------------------------
CC.VOID lda #CC.T.VOID
bra CC.TYPE
CC.CHAR
CC.UCHAR lda #CC.T.UCHAR
bra CC.TYPE
CC.SCHAR lda #CC.T.SCHAR
bra CC.TYPE
CC.UINT lda #CC.T.UINT
bra CC.TYPE
CC.INT
CC.SINT lda #CC.T.SINT
bra CC.TYPE
CC.ULONG lda #CC.T.ULONG
bra CC.TYPE
CC.LONG
CC.SLONG lda #CC.T.SLONG
bra CC.TYPE
CC.FLOAT lda #CC.T.FLOAT
CC.TYPE sta (pStack)
jsr CC.GetCharNB
bcs .9
ldy #1
.1 cmp #'*'
bne .10
lda (pStack),y
clc
adc #CC.Q.POINTER
bcs .9 more than ***
sta (pStack),y
jsr CC.GetNextCharNB
bcc .1
.9 lda #E.CSYN
sec
.99 rts
.10 jsr CC.IsLetter
bcs .8
>LDYA L.CC.FTYPES
jsr CC.LookupID
bcs .8 next char is an identifier
ldy #1
lda (pStack),y
ora #CC.Q.FUNC+CC.Q.FASTCALL
sta (pStack),y
jsr CC.GetNextCharNB
bcs .9 next char is an identifier, ",", "(",")"
.8 clc
rts
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.kw
LOAD usr/src/bin/cc.s
ASM