A2osX/BIN/CC.S.KW.txt

340 lines
5.1 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
.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