mirror of
https://github.com/RevCurtisP/C02.git
synced 2024-11-25 06:31:25 +00:00
Modifed break to exit out of case statement
This commit is contained in:
parent
68aa3c1a8f
commit
88043edb25
11
label.c
11
label.c
@ -13,20 +13,21 @@
|
||||
#include "parse.h"
|
||||
#include "label.h"
|
||||
|
||||
const char lblflg[] = {LFNONE, LFNONE, LFBGN, LFEND, LFBGN, LFEND, LFEND, LFNONE, LFNONE}; //Label Type Flags
|
||||
|
||||
/* Find Last Label of Specified Types *
|
||||
* Args: lbtyp1: First label type *
|
||||
* lbtyp2: Second label type *
|
||||
* Sets: tmplbl - Label name *
|
||||
* Returns: Index into label table *
|
||||
* (-1 if not found) */
|
||||
int lstlbl(int lbtyp1, int lbtyp2)
|
||||
int lstlbl(int lbflag)
|
||||
{
|
||||
int i;
|
||||
DEBUG("Searching for label type %d ", lbtyp1);
|
||||
DEBUG("and label type %d\n",lbtyp2);
|
||||
DEBUG("Searching for label flag %d\n", lbflag);
|
||||
for (i = lblcnt - 1; i>-1; i--) {
|
||||
if (lbltyp[i] == lbtyp1) break;
|
||||
if (lbltyp[i] == lbtyp2) break;
|
||||
//DEBUG("Comparing against flag %d", lblflg[lbltyp[i]]);
|
||||
if (lblflg[lbltyp[i]] == lbflag) break;
|
||||
}
|
||||
DEBUG("Search produced label index %d\n", i);
|
||||
if (i>=0)
|
||||
|
1
label.h
1
label.h
@ -19,6 +19,7 @@ int lblnxt; //Sequence of next label to be generated
|
||||
char lbltmp[LABLEN+1]; //Label Temporary Storage
|
||||
|
||||
enum ltypes {LTNONE, LTIF, LTLOOP, LTEND, LTDO, LTDWHL, LTSLCT, LTCASE, LTFUNC}; //Label Types
|
||||
enum lflags {LFNONE, LFBGN, LFEND}; //Label Flag Types
|
||||
|
||||
void prslbl(); //Parse Label From Code
|
||||
void newlbl(char* lbname); //Generate New Block Label
|
||||
|
@ -39,7 +39,8 @@ for (c=0; c<10; c++) {
|
||||
}
|
||||
|
||||
newlin();
|
||||
for (c=$18; c<$23; c++) {
|
||||
for (c=$18; c<$22; c++) {
|
||||
if (c & 15 > 9) continue; //Skip $1A - $1F
|
||||
prbyte(c);
|
||||
putc(' ');
|
||||
select (c) {
|
||||
@ -48,8 +49,8 @@ for (c=$18; c<$23; c++) {
|
||||
putln("BREAK ONE-NINE");
|
||||
if (c==$19) break;
|
||||
putln("OOPS!");
|
||||
case $22: putln("BLACKJACK!");
|
||||
default: //putln("*");
|
||||
case $21: putln("BLACKJACK!");
|
||||
default: putln("*");
|
||||
}
|
||||
}
|
||||
|
||||
|
12
stmnt.c
12
stmnt.c
@ -139,10 +139,10 @@ void prsasn(char trmntr)
|
||||
}
|
||||
|
||||
/* parse and compile 'break'/'continue' statement */
|
||||
void pbrcnt(int lbtyp1, int lbtyp2)
|
||||
void pbrcnt(int lbflag)
|
||||
{
|
||||
DEBUG("Parsing BREAK/CONTINUE statement\n", 0);
|
||||
if (lstlbl(lbtyp1, lbtyp2) < 0)
|
||||
if (lstlbl(lbflag) < 0)
|
||||
ERROR("Break/continue statement outside of loop\n", 0, EXIT_FAILURE);
|
||||
DEBUG("Found Label '%s'\n", tmplbl);
|
||||
asmlin("JMP", tmplbl);
|
||||
@ -312,8 +312,8 @@ void pslct() {
|
||||
expect('(');
|
||||
prsxpr(')'); //Parse Expression
|
||||
newlbl(endlbl); //Create New Label
|
||||
pshlbl(LTSLCT,endlbl); //Push Onto Stack
|
||||
bgnblk('{'); //Require Beginning of Block
|
||||
pshlbl(LTSLCT,endlbl); //Push Onto Stack
|
||||
bgnblk('{'); //Require Beginning of Block
|
||||
strcpy(xstmnt, "CASE"); //Require Next Statement to be CASE
|
||||
}
|
||||
|
||||
@ -466,9 +466,9 @@ void pstmnt()
|
||||
if (wordis("ASM"))
|
||||
pasm();
|
||||
else if (wordis("BREAK"))
|
||||
pbrcnt(LTEND, LTDWHL);
|
||||
pbrcnt(LFEND);
|
||||
else if (wordis("CONTINUE"))
|
||||
pbrcnt(LTLOOP, LTDO);
|
||||
pbrcnt(LFBGN);
|
||||
else if (wordis("GOTO"))
|
||||
pgoto();
|
||||
else if (wordis("INLINE"))
|
||||
|
Loading…
Reference in New Issue
Block a user