A2osX/BIN/CC.S.KW.txt

644 lines
9.9 KiB
Plaintext
Raw Normal View History

NEW
AUTO 3,1
*--------------------------------------
* Built in Keywords
*--------------------------------------
2022-08-20 14:37:37 +00:00
CC.KW.IF jsr CC.KW.BEGIN
bcs .99
jsr CC.GetCharNB
bcs .9
cmp #'('
bne .9
jsr CC.GetNextCharNB
bcs .9
2022-01-30 21:47:08 +00:00
jsr CC.EXP.Eval00 Any var type
bcs .99
2022-08-20 14:37:37 +00:00
jsr CC.KW.TestZero Y,A=T/Q
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
lda #'E'
jsr CC.SYM.LookupA
bcs .99
2022-08-20 14:37:37 +00:00
lda #$4C emit JMP else
jsr CODE.TOABSYX
bcs .99
jsr CC.GetCharNB
bcs .99
cmp #')'
bne .9
2022-08-20 14:37:37 +00:00
jmp CC.KW.STMT
.9 lda #E.CSYN
sec
2022-08-20 14:37:37 +00:00
.99 rts
*--------------------------------------
2022-08-20 14:37:37 +00:00
CC.KW.IF.END jsr CC.GetCharNBNL
bcs .1
2022-08-20 14:37:37 +00:00
cmp #';'
beq .1
2022-08-20 14:37:37 +00:00
>LDYA L.CC.KW2.IF Check allowed KW for IF....
jsr CC.LookupID
bcc .2
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
.1 lda #'E' define ELSE Label
jsr CC.KW.NewLabel
bcs .99
clv pop context
rts
*--------------------------------------
.2 lda #'X'
jsr CC.SYM.LookupA
bcs .99
2022-08-20 14:37:37 +00:00
lda #$4C emit JMP exit
jsr CODE.TOABSYX
bcs .99
2022-08-20 14:37:37 +00:00
lda #'E' define ELSE Label
jsr CC.KW.NewLabel
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
inc CStackPtr pop ; or }
lda #4 replace IF by ELSE keyword
ldy CStackPtr
sta (ZPCCStack),y
jsr CC.KW.STMT
bcs .99
bit .99 set V : DONT pop context
2022-01-30 21:47:08 +00:00
rts
2022-08-20 14:37:37 +00:00
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
CC.KW.ELSE lda #E.CSYN illegal
sec
rts
*--------------------------------------
2022-08-20 14:37:37 +00:00
CC.KW.ELSE.END lda #'X' define EXIT Label
jsr CC.KW.NewLabel
bcs .99
clv pop context
.99 rts
*--------------------------------------
CC.KW.WHILE jsr CC.KW.BEGIN
bcs .99
lda #'C' define CONT Label
jsr CC.SYM.NewA
bcs .99
jsr CC.GetCharNB
bcs .9
2022-08-20 14:37:37 +00:00
cmp #'('
bne .9
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
jsr CC.GetNextCharNB
bcs .9
2022-06-22 06:26:44 +00:00
2022-08-20 14:37:37 +00:00
jsr CC.EXP.Eval00 Any var type
bcs .99
jsr CC.KW.TestZero
lda #'B'
jsr CC.SYM.LookupA
bcs .99
2022-06-22 06:26:44 +00:00
2022-08-20 14:37:37 +00:00
lda #$4C emit JMP break:
2022-01-30 21:47:08 +00:00
jsr CODE.TOABSYX
2022-08-20 14:37:37 +00:00
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
jsr CC.GetCharNB
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
cmp #')'
bne .9
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
jmp CC.KW.STMT
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
.9 lda #E.CSYN
2022-01-30 21:47:08 +00:00
sec
2022-08-20 14:37:37 +00:00
.99 rts
2022-01-30 21:47:08 +00:00
*--------------------------------------
2022-08-20 14:37:37 +00:00
CC.KW.WHILE.END lda #'C'
jsr CC.KW.GetLabel
bcs .99
lda #$4C
jsr CODE.TOABSYX emit JMP cont:
bcs .99
lda #'B' define BREAK Label
jsr CC.KW.NewLabel
bcs .99
clv pop context
.99 rts
*--------------------------------------
CC.KW.DO jsr CC.KW.BEGIN
bcs .99
lda #'C' define CONT Label
jsr CC.SYM.NewA
bcs .99
jmp CC.KW.STMT
.99 rts
*--------------------------------------
CC.KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO....
jsr CC.LookupID
bcs .9
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.TestnZero
lda #'C'
jsr CC.KW.GetLabel
bcs .99
lda #$4C emit JMP cont
jsr CODE.TOABSYX
bcs .99
lda #'B' define BREAK Label
jsr CC.KW.NewLabel
bcs .99
jsr CC.GetCharNB
bcs .99
cmp #')'
bne .9
jsr CC.GetNextCharNB
bcs .9
clv pop context
2022-01-30 21:47:08 +00:00
clc
rts
2022-08-20 14:37:37 +00:00
.9 lda #E.CSYN
sec
.99 rts
2022-01-30 21:47:08 +00:00
*--------------------------------------
2022-08-20 14:37:37 +00:00
* for (s1;e2;s3) s;
2022-01-30 21:47:08 +00:00
*
2022-06-12 20:42:22 +00:00
* { <- new scope : allows for(int i=1; ....)
2022-08-20 14:37:37 +00:00
* s1;
2022-06-12 20:42:22 +00:00
* loop:
2022-08-20 14:37:37 +00:00
* while (e2) jmp break:
2022-06-12 20:42:22 +00:00
* {
2022-08-20 14:37:37 +00:00
* s; jsr s:
2022-06-12 20:42:22 +00:00
* cont:
2022-08-20 14:37:37 +00:00
* s3; jmp loop:
2022-06-12 20:42:22 +00:00
* }
2022-08-20 14:37:37 +00:00
* s:
* <s>;
* break:
2022-01-30 21:47:08 +00:00
* }
*--------------------------------------
CC.KW.FOR jsr CC.GetCharNB
2022-08-20 14:37:37 +00:00
bcs .29
2022-01-30 21:47:08 +00:00
cmp #'('
2022-08-20 14:37:37 +00:00
bne .29
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
jsr CC.KW.BEGIN
bcs .29
2022-08-20 14:37:37 +00:00
jsr CC.GetNextCharNB skip '('
bcs .29
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
>LDYA L.CC.TYPEQUAL
jsr CC.LookupID
bcs .1
2022-06-22 06:26:44 +00:00
2022-08-20 14:37:37 +00:00
jsr CC.DECL
bcc .2
.19 rts
.1 jsr CC.STMT get s1
bcs .19
* jsr CC.KW.StackDiscard
.2 jsr CC.GetCharNB
2022-06-12 20:42:22 +00:00
bcs .9
2022-01-30 21:47:08 +00:00
cmp #';'
2022-06-12 20:42:22 +00:00
bne .9
2022-01-30 21:47:08 +00:00
jsr CC.GetNextCharNB skip ';'
2022-06-12 20:42:22 +00:00
bcs .9
2022-01-30 21:47:08 +00:00
*--------------------------------------
2022-08-20 14:37:37 +00:00
lda #'L' LOOP Label
jsr CC.SYM.NewA
bcs .99
2022-01-30 21:47:08 +00:00
jsr CC.EXP.Eval00 get e2
.29 bcs .99
jsr CC.KW.TestZero
bcs .99
2022-08-20 14:37:37 +00:00
lda #'B'
jsr CC.SYM.LookupA
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
lda #$4C emit JMP break:
jsr CODE.TOABSYX
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
lda #'S'
jsr CC.SYM.LookupA
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
lda #$20 emit JSR s:
jsr CODE.TOABSYX
2022-01-30 21:47:08 +00:00
jsr CC.GetCharNB
bcs .9
2022-01-30 21:47:08 +00:00
cmp #';'
bne .9
jsr CC.GetNextCharNB skip ';'
bcs .9
*--------------------------------------
2022-08-20 14:37:37 +00:00
lda #'C' CONT Label
jsr CC.SYM.NewA
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
jsr CC.STMT get s3
2022-01-30 21:47:08 +00:00
bcs .99
2022-08-20 14:37:37 +00:00
* jsr CC.KW.StackDiscard
2022-01-30 21:47:08 +00:00
jsr CC.GetCharNB
bcs .9
cmp #')'
bne .9
2022-08-20 14:37:37 +00:00
lda #'L'
jsr CC.SYM.LookupA
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
lda #$4C
jsr CODE.TOABSYX emit JMP loop
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
lda #'S' S Label
jsr CC.SYM.NewA
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
jmp CC.KW.STMT
2022-01-30 21:47:08 +00:00
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
CC.KW.FOR.END lda #$60
2022-08-20 14:37:37 +00:00
jsr CODE.EmitByte set RTS for JSR code;
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
lda #'B' define BREAK Label
jsr CC.KW.NewLabel
bcs .99
2022-08-20 14:37:37 +00:00
clv pop context
2022-08-20 14:37:37 +00:00
.99 rts
*--------------------------------------
2022-01-30 21:47:08 +00:00
CC.KW.SWITCH
CC.KW.CASE
2022-08-20 14:37:37 +00:00
CC.KW.DEFAULT
2022-06-12 20:42:22 +00:00
lda #E.CSYN
sec
rts
*--------------------------------------
2022-08-20 14:37:37 +00:00
CC.KW.BREAK lda #'B'
jsr CC.KW.LookupLabel
bcs .9
lda #$4C emit JMP break
jmp CODE.TOABSYX
.9 lda #E.CSYN
2022-06-12 20:42:22 +00:00
sec
rts
*--------------------------------------
2022-08-20 14:37:37 +00:00
CC.KW.CONTINUE lda #'C'
jsr CC.KW.LookupLabel
bcs .9
lda #$4C emit JMP cont
jmp CODE.TOABSYX
.9 lda #E.CSYN
2022-01-30 21:47:08 +00:00
sec
rts
*--------------------------------------
CC.KW.RETURN ldy CStackPtr
beq .9
.1 iny skip ; or }
beq .9
2022-06-22 06:26:44 +00:00
2022-01-30 21:47:08 +00:00
lda (ZPCCStack),y
bmi .7 f()
tya
clc
2022-08-20 14:37:37 +00:00
adc #5 skip CPStmt (6 bytes)
2022-01-30 21:47:08 +00:00
tay
bcc .1
.9 lda #E.STACKERROR
sec
.99 rts
.7 iny skip bState
iny skip Locals
2022-06-22 06:26:44 +00:00
2022-08-20 14:37:37 +00:00
iny
iny skip CPSID
2022-01-30 21:47:08 +00:00
iny get SYM.T
lda (ZPCCStack),y
2022-06-22 06:26:44 +00:00
2022-01-30 21:47:08 +00:00
pha
iny get SYM.Q
lda (ZPCCStack),y
2022-06-22 06:26:44 +00:00
2022-01-30 21:47:08 +00:00
ply
jsr CC.EXP.Eval
bcs .99
jsr CC.SYM.GetYASizeOfInAXC Y,A=T/Q
tax X = sizeof
jsr CODE.SetRetValue
2022-08-20 14:37:37 +00:00
bcs .99
2022-06-22 06:26:44 +00:00
2022-08-20 14:37:37 +00:00
>LDYA L.PCC.LEAVE
jmp CODE.EmitPCC
2022-01-30 21:47:08 +00:00
*--------------------------------------
CC.KW.SIZEOF
2022-02-04 14:57:17 +00:00
lda #E.CSYN
sec
rts
*--------------------------------------
2022-01-30 21:47:08 +00:00
CC.KW.STRUCT >ENTER 4
jsr CC.GetCharNB
bcs .99
2022-06-12 20:42:22 +00:00
ldx #SYM.SC.TAG
>LDA.G CC.hTags
2022-01-30 21:47:08 +00:00
jsr CC.SYM.NewKey
bcs .99
sta (pStack) Y,A = KeyID
tya
ldy #1
sta (pStack),y
2022-06-22 06:26:44 +00:00
2022-02-04 14:57:17 +00:00
jsr CC.SkipX
jsr CC.GetNextCharNB
bcs .99
cmp #'{'
bne .99
.1 jsr CC.GetNextCharNB
bcs .99
cmp #'}'
bne .1
2022-08-20 14:37:37 +00:00
jsr CC.GetNextCharNB skip '}'
clc
.99 >LEAVE
rts
*--------------------------------------
2022-08-20 14:37:37 +00:00
CC.KW.BEGIN jsr CC.SYM.NewCPSID
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
>LDA.G CC.CPSPFX+3
jsr CC.Push
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
>LDA.G CC.CPSPFX+2
jsr CC.Push
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
lda LocalPtr Locals
2022-01-30 21:47:08 +00:00
jsr CC.Push
bcs .99
2022-06-22 06:26:44 +00:00
2022-08-20 14:37:37 +00:00
lda #0 bState
jsr CC.Push
bcs .99
>LDA.G CC.CmdSave
jmp CC.Push
.99 rts
*--------------------------------------
CC.KW.STMT jsr CC.GetNextCharNBNL
bcs .9
cmp #'{'
bne .1
jsr CC.GetNextCharNB skip '{'
bcs .99
lda #'}'
jmp CC.Push
.1 lda #';'
2022-01-30 21:47:08 +00:00
jmp CC.Push
2022-06-22 06:26:44 +00:00
2022-01-30 21:47:08 +00:00
.9 lda #E.CSYN
sec
2022-06-22 06:26:44 +00:00
.99 rts
*--------------------------------------
2022-08-20 14:37:37 +00:00
CC.KW.NewLabel pha
lda CStackPtr
clc
adc #4
tay
lda (ZPCCStack),y
pha
iny
lda (ZPCCStack),y
ply
>STYA.G CC.CPSPFX+2
pla
jmp CC.SYM.NewA
*--------------------------------------
CC.KW.GetLabel pha
lda CStackPtr
clc
adc #4
tay
lda (ZPCCStack),y
pha
iny
lda (ZPCCStack),y
ply
>STYA.G CC.CPSPFX+2
pla
jmp CC.SYM.LookupA
*--------------------------------------
CC.KW.LookupLabel
pha
ldy CStackPtr
sty ArgIndex
.1 ldy ArgIndex
beq .9
iny skip ; or }
lda (ZPCCStack),y
bmi .9 f()
iny
iny
iny
lda (ZPCCStack),y
pha
iny
lda (ZPCCStack),y
iny
sty ArgIndex
ply
>STYA.G CC.CPSPFX+2
pla
pha
jsr CC.SYM.LookupA
bcs .1
pla
.8 rts
.9 pla
lda #E.CSYN
sec
.99 rts
*--------------------------------------
2022-01-30 21:47:08 +00:00
* Input : Value on Stack, Y,A = Type/Qual
*--------------------------------------
2022-08-20 14:37:37 +00:00
CC.KW.TestZero jsr CC.EXP.GetYASizeOfInAXC
2022-01-30 21:47:08 +00:00
tax
2022-08-20 14:37:37 +00:00
cpx #1
bne .1
2022-08-20 14:37:37 +00:00
>LDYA L.PCC.TestZero1
jmp CODE.EmitPCC
2022-08-20 14:37:37 +00:00
.1 cpx #2
bne .2
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
>LDYA L.PCC.TestZero2
jmp CODE.EmitPCC
2022-08-20 14:37:37 +00:00
.2 jsr CODE.LDXI
bcs .9
>LDYA L.PCC.TestZeroX
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
2022-08-20 14:37:37 +00:00
* Input : Value on Stack, Y,A = Type/Qual
*--------------------------------------
CC.KW.TestnZero jsr CC.EXP.GetYASizeOfInAXC
tax
cpx #1
bne .1
2022-08-20 14:37:37 +00:00
>LDYA L.PCC.TestnZero1
jmp CODE.EmitPCC
2022-08-20 14:37:37 +00:00
.1 cpx #2
bne .2
>LDYA L.PCC.TestnZero2
jmp CODE.EmitPCC
.2 jsr CODE.LDXI
bcs .9
>LDYA L.PCC.TestnZeroX
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
2022-01-30 21:47:08 +00:00
* Input : Value on Stack, Y,A = Type/Qual
*--------------------------------------
2022-01-30 21:47:08 +00:00
CC.KW.StackDiscard
2022-01-30 21:47:08 +00:00
jsr CC.TYPE.SizeOf
txa
beq .8 void
2022-01-30 21:47:08 +00:00
jsr CODE.AddLocal
.8 clc
2022-01-30 21:47:08 +00:00
.9 rts
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.kw
LOAD usr/src/bin/cc.s
ASM