diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index ee6b9501..80f9b4e2 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/CC.S.F.txt b/BIN/CC.S.F.txt index 24eb38f4..9c328379 100644 --- a/BIN/CC.S.F.txt +++ b/BIN/CC.S.F.txt @@ -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 diff --git a/BIN/CC.S.KW.txt b/BIN/CC.S.KW.txt index ad4b29c2..4e918752 100644 --- a/BIN/CC.S.KW.txt +++ b/BIN/CC.S.KW.txt @@ -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 diff --git a/BIN/CC.S.SCOPE.txt b/BIN/CC.S.SCOPE.txt index 8e34ca77..d725487b 100644 --- a/BIN/CC.S.SCOPE.txt +++ b/BIN/CC.S.SCOPE.txt @@ -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 diff --git a/BIN/CC.S.STMT.txt b/BIN/CC.S.STMT.txt index fda36279..e162a1be 100644 --- a/BIN/CC.S.STMT.txt +++ b/BIN/CC.S.STMT.txt @@ -224,7 +224,7 @@ STMT.Close lda StmtPtr cmp #'}' bne .2 - jsr SCOPE.Close + jsr SCOPE.Close {}; bcs .99 .2 lda StmtPtr diff --git a/BIN/CC.S.SYM.txt b/BIN/CC.S.SYM.txt index a0d9a5c2..66a57b89 100644 --- a/BIN/CC.S.SYM.txt +++ b/BIN/CC.S.SYM.txt @@ -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