CC:more bugfix, small optimization that reduces code by ...20% :-)

This commit is contained in:
burniouf 2023-01-22 15:38:20 +01:00
parent 07172d7359
commit dfe8d13304
6 changed files with 71 additions and 47 deletions

Binary file not shown.

View File

@ -1,7 +1,7 @@
NEW
AUTO 3,1
*--------------------------------------
F.Decl jsr SCOPE.New
F.Decl jsr SCOPE.New function (
bcs .99
lda (ZPSymBufPtr) #SYM.T
@ -79,15 +79,11 @@ F.Decl jsr SCOPE.New
cmp #';'
bne .7
jsr SCOPE.Close discard local scope
jsr SCOPE.Close function ();
bcs .99
jsr SYM.Update Store this declaration & exit
bcs .99
jmp SYM.Update Store this declaration & exit
* jsr CORE.GetNCharNBNL Skip ';'
clc no error even if EOF
rts
*--------------------------------------
.7 cmp #'{'
@ -137,9 +133,10 @@ F.Def >LDA.G CC.bInitCode
jsr STMT.New00
bcs .99
jsr STMT.SetTypeCP
jsr STMT.SetTypeCP type = {}
bcs .99
jmp SCOPE.AddLocal function () {
.99 rts
*--------------------------------------
@ -147,6 +144,9 @@ F.Def.END lda #'X' define EXIT Label
jsr SYM.NewLabelA
bcs .9
jsr SCOPE.RemLocal function () {}
bcs .9
jsr STMT.Close
bcs .9
@ -154,7 +154,7 @@ F.Def.END lda #'X' define EXIT Label
jsr CODE.EmitPCC
bcs .9
jsr SCOPE.Close
jsr SCOPE.Close function () {};
bcs .9
.9 rts
@ -228,7 +228,8 @@ F.NewArg >LDYA.G CC.SymID
>LDYA.G CC.SymIDSave
>STYA.G CC.SymID
.9 rts
.9
F.NewArg.RTS rts
*--------------------------------------
* in : ZPSymPtr
* Y,A = Expected T/Q
@ -255,11 +256,9 @@ F.CallRetV sec
bpl .1
jsr EXP.GetYASizeOfInAX
txa
jsr CODE.AddLocal
bcc .1
rts
jsr CODE.AddLocal add room for return value
bcs F.NewArg.RTS
.1 jsr CORE.GetNCharNB skip '('
bcs .90

View File

@ -3,7 +3,7 @@ NEW
*--------------------------------------
* Built in Keywords
*--------------------------------------
KW.IF jsr SCOPE.New IF {
KW.IF jsr SCOPE.New IF (
bcs .99
jsr CC.GetCharNB
@ -54,7 +54,7 @@ KW.IF.END jsr STMT.Close
jsr SYM.NewLabelA
bcs .99
jmp SCOPE.Close } IF
jmp SCOPE.Close IF )
*--------------------------------------
.2 lda #'X'
jsr SYM.LookupLabelA
@ -91,11 +91,11 @@ KW.ELSE.END jsr STMT.Close
jsr SYM.NewLabelA
bcs .99
jmp SCOPE.Close } IF
jmp SCOPE.Close IF }
.99 rts
*--------------------------------------
KW.WHILE jsr SCOPE.New
KW.WHILE jsr SCOPE.New WHILE (
bcs .99
lda #'C' define CONT Label
@ -157,11 +157,11 @@ KW.WHILE.END jsr STMT.Close
lda #'B' define BREAK Label
jsr SYM.NewLabelA
jmp SCOPE.Close
jmp SCOPE.Close WHILE )
.99 rts
*--------------------------------------
KW.DO jsr SCOPE.New
KW.DO jsr SCOPE.New DO {
bcs .99
lda #'C' define CONT Label
@ -171,7 +171,7 @@ KW.DO jsr SCOPE.New
>LDYA L.PCC.SLEEP
jsr CODE.EmitPCC
bcs .99
jsr STMT.New00
bcs .99
@ -221,7 +221,7 @@ KW.DO.END jsr STMT.Close
jsr SYM.NewLabelA
bcs .99
jmp SCOPE.Close
jmp SCOPE.Close D0 )
.9 lda #E.CSYN
sec
@ -243,7 +243,13 @@ KW.DO.END jsr STMT.Close
* break:
* }
*--------------------------------------
KW.FOR jsr CC.GetCharNB
KW.FOR jsr SCOPE.New FOR (
bcs .19
jsr SCOPE.AddLocal FOR (int...
bcs .19
jsr CC.GetCharNB
bcs .19
cmp #'('
@ -252,9 +258,6 @@ KW.FOR jsr CC.GetCharNB
jsr CORE.GetNCharNB skip '('
bcs .29
jsr SCOPE.New for (
bcs .19
>LDYA L.CC.TYPEQUAL
jsr CC.LookupID
bcs .1
@ -349,7 +352,7 @@ KW.FOR jsr CC.GetCharNB
KW.FOR.END >LDYA L.PCC.SLEEP
jsr CODE.EmitPCC
bcs .99
lda #$60
jsr CODE.EmitByte set RTS for JSR code;
@ -362,6 +365,9 @@ KW.FOR.END >LDYA L.PCC.SLEEP
jsr SYM.NewLabelA
bcs .99
jsr SCOPE.RemLocal FOR (int...) {};
bcs .99
jmp SCOPE.Close FOR )
.99 rts
@ -629,11 +635,9 @@ KW.CONTINUE lda #'C'
.99 rts
*--------------------------------------
KW.RETURN lda #'R'
jsr SYM.LookupLabelA
jsr SYM.LookupLabelA Y,A=T/Q
bcs .99
txa
jsr EXP.Eval
bcs .99

View File

@ -41,15 +41,6 @@ SCOPE.New lda ScopePtr
lda #0
sta (ScopeStk),y #SCOPE.FrameSize
lda #'F'
jsr SYM.LookupLabelA
bcs .99
txa
jsr CODE.AddLocal
bcs .99
.DO _DBG_SCOPE=1
>PUSHW L.MSG.DEBUG.SCIN
jsr SCOPE.Push
@ -77,7 +68,15 @@ SCOPE.New lda ScopePtr
.99
SCOPE.New.RTS rts
*--------------------------------------
SCOPE.Close lda #'F' define FRAME SIZE
SCOPE.AddLocal lda #'F'
jsr SYM.LookupLabelA
bcs SCOPE.New.RTS
txa
jmp CODE.AddLocal
*--------------------------------------
SCOPE.RemLocal lda #'F' define FRAME SIZE
jsr SYM.NewLabelA
bcs SCOPE.New.RTS
@ -87,10 +86,9 @@ SCOPE.Close lda #'F' define FRAME SIZE
iny
lda (ScopeStk),y #SCOPE.FrameSize
jsr CODE.RemLocal
bcs SCOPE.New.RTS
.DO _DBG_SCOPE=1
jmp CODE.RemLocal
*--------------------------------------
SCOPE.Close .DO _DBG_SCOPE=1
>PUSHW L.MSG.DEBUG.SCOUT
jsr SCOPE.Push
lda ScopePtr

View File

@ -224,7 +224,7 @@ STMT.Close lda StmtPtr
cmp #'}'
bne .2
jsr SCOPE.Close
jsr SCOPE.Close {};
bcs .99
.2 lda StmtPtr

View File

@ -717,6 +717,9 @@ SYM.NewLabelR ldy #SYM.Q
sta (pData),y
rts
*--------------------------------------
* _R : Y,A = T/Q
* others : X,Y = SYM.Addr
*--------------------------------------
SYM.LookupLabelA
cmp #'R'
beq .1
@ -778,13 +781,12 @@ SYM.LookupLabelA
plx
>LDA.G CC.Label+1
ldy #SYM.T return T/Q
cmp #'R'
beq .4
ldy #SYM.Addr
.4 lda (ZPLookupPtr),y
lda (ZPLookupPtr),y
pha
@ -800,6 +802,27 @@ SYM.LookupLabelA
* clc
rts
.4 ldy #SYM.T return T/Q
lda (ZPLookupPtr),y
pha
iny #SYM.Q
lda (ZPLookupPtr),y
pha
txa
>SYSCALL FreeMem
pla
ply
* clc
.99 rts
*--------------------------------------
SYM.LookupFree >LDA.G CC.LookupIdx