1
0
mirror of https://github.com/RevCurtisP/C02.git synced 2024-11-25 06:31:25 +00:00

Added enhanced debug output for labels

This commit is contained in:
Curtis F Kaylor 2020-02-23 13:18:51 -05:00
parent 25e95e4ec8
commit e3c66fea0f

View File

@ -19,15 +19,15 @@
void addlab(char *name) { void addlab(char *name) {
if (fndvar(name)) ERROR("Label %s conflicts with variable with same name", name, EXIT_FAILURE) if (fndvar(name)) ERROR("Label %s conflicts with variable with same name", name, EXIT_FAILURE)
if (fndlab(name)) ERROR("Duplicate program label %s\n", name, EXIT_FAILURE) if (fndlab(name)) ERROR("Duplicate program label %s\n", name, EXIT_FAILURE)
DEBUG("Adding Program Label %s ", name) DEBUG("at index %d\n", labcnt) DEBUG("label.addlab: Adding Program Label %s ", name) DETAIL("at index %d\n", labcnt)
strcpy(labnam[labcnt++], name); strcpy(labnam[labcnt++], name);
} }
int fndlab(char *name) { int fndlab(char *name) {
DEBUG("Looking for Program Label %s\n", name) DEBUG("label.fndlab: Looking for Program Label %s\n", name)
for (labidx=0; labidx<labcnt; labidx++) for (labidx=0; labidx<labcnt; labidx++)
if (strcmp(labnam[labidx], name) == 0) return TRUE; if (strcmp(labnam[labidx], name) == 0) return TRUE;
DEBUG("Label %s Not Found\n", name) DEBUG("label.fndlab: Label %s Not Found\n", name)
return FALSE; return FALSE;
} }
@ -51,10 +51,10 @@ const char lblflg[] = {LFNONE, LFNONE, LFNONE, LFBGN, LFEND, LFBGN, LFEND, LFEND
* (-1 if not found) */ * (-1 if not found) */
int lstlbl(int lbflag) { int lstlbl(int lbflag) {
int i; int i;
DEBUG("Searching for label flag %d\n", lbflag) DEBUG("label.lstlbl: Searching for label flag %d\n", lbflag)
for (i = lblcnt - 1; i>-1; i--) for (i = lblcnt - 1; i>-1; i--)
if (lblflg[lbltyp[i]] == lbflag) break; if (lblflg[lbltyp[i]] == lbflag) break;
DEBUG("Search produced label index %d\n", i) DEBUG("label.lstlbl: Search produced label index %d\n", i)
if (i>=0) strcpy(tmplbl, lblnam[i]); if (i>=0) strcpy(tmplbl, lblnam[i]);
return i; return i;
} }
@ -66,9 +66,9 @@ void setblk(int blkflg) { lblblk[lblcnt-1] = blkflg; }
* Assembly Language Code * * Assembly Language Code *
* to word */ * to word */
void setlbl(char *lblset) { void setlbl(char *lblset) {
DEBUG("Setting Label '%s'\n", lblset) DEBUG("label.setlbl: Setting Label '%s'\n", lblset)
if (strlen(lblasm) > 0) { if (strlen(lblasm) > 0) {
DEBUG("Emitting Label '%s'\n'", lblasm); DEBUG("label.setlbl: Emitting Label '%s'\n'", lblasm);
asmlin("",""); //Emit Block End Label on it's own line asmlin("",""); //Emit Block End Label on it's own line
} }
if (strlen(lblset) > LBLLEN) ERROR("Label '%s' exceeds maximum size\n", word, EXIT_FAILURE) if (strlen(lblset) > LBLLEN) ERROR("Label '%s' exceeds maximum size\n", word, EXIT_FAILURE)
@ -77,7 +77,7 @@ void setlbl(char *lblset) {
/* Parse Program Label */ /* Parse Program Label */
void prslab(void) { void prslab(void) {
DEBUG("Parsing Label '%s''\n", word) DEBUG("label.prslab: Parsing Label '%s''\n", word)
addlab(word); addlab(word);
CCMNT(nxtchr); CCMNT(nxtchr);
skpchr(); //skip ':' skpchr(); //skip ':'
@ -86,7 +86,7 @@ void prslab(void) {
/* generate new label */ /* generate new label */
void newlbl(char* lbname) { void newlbl(char* lbname) {
sprintf(lbname, LBLFMT, lblnxt++); sprintf(lbname, LBLFMT, lblnxt++);
DEBUG("Generated new label '%s'\n", lbname) DEBUG("label.newlbl: Generated new label '%s'\n", lbname)
} }
/* Check Label Contents * /* Check Label Contents *
@ -101,23 +101,23 @@ void chklbl(char* lbname) {
* if label is already set, returns that label * * if label is already set, returns that label *
* else generates new label and sets it */ * else generates new label and sets it */
void reqlbl(char* lbname) { void reqlbl(char* lbname) {
DEBUG("Requesting Label\n",0) DEBUG("label.reqlbl: Requesting Label\n",0)
if (lblasm[0] == 0) {newlbl(lbname); setlbl(lbname);} if (lblasm[0] == 0) {newlbl(lbname); setlbl(lbname);}
else {strcpy(lbname,lblasm); DEBUG("Found lblasm set to \"%s\"\n", lblasm)} else {strcpy(lbname,lblasm); DEBUG("label.reqlbl: Found lblasm set to \"%s\"\n", lblasm)}
} }
/* End Function Block */ /* End Function Block */
void endfnc(void) { void endfnc(void) {
DEBUG("Ending function definition with lsrtrn set to %d\n", lsrtrn) DEBUG("label.endfnc: Ending function definition with lsrtrn set to %d\n", lsrtrn)
if (!lsrtrn) asmlin("RTS", ""); if (!lsrtrn) asmlin("RTS", "");
infunc = FALSE; infunc = FALSE;
DEBUG("Set infunc to %d\n", infunc) DEBUG("label.endfnc: Set infunc to %d\n", infunc)
} }
/* Pop Label from Stack and Emit on Next Line */ /* Pop Label from Stack and Emit on Next Line */
int poplbl(void) { int poplbl(void) {
int lbtype = lbltyp[--lblcnt]; int lbtype = lbltyp[--lblcnt];
DEBUG("Popped label type %d\n", lbtype) DEBUG("label.poplbl: Popped label type %d\n", lbtype)
switch (lbtype) { switch (lbtype) {
case LTFUNC: endfnc(); break; //Return From Subroutine case LTFUNC: endfnc(); break; //Return From Subroutine
case LTDO: strcpy(loplbl, lblnam[lblcnt]); break; case LTDO: strcpy(loplbl, lblnam[lblcnt]); break;
@ -134,7 +134,7 @@ int poplbl(void) {
int toplbl(char *rtlbl) { int toplbl(char *rtlbl) {
if (lblcnt) { if (lblcnt) {
strcpy(rtlbl, lblnam[lblcnt-1]); strcpy(rtlbl, lblnam[lblcnt-1]);
DEBUG("Found top label %s\n", rtlbl) DEBUG("label.toplbl: Found top label %s\n", rtlbl)
return lbltyp[lblcnt-1]; return lbltyp[lblcnt-1];
} }
rtlbl[0] = 0; //Clear Label rtlbl[0] = 0; //Clear Label
@ -145,9 +145,9 @@ int toplbl(char *rtlbl) {
* Args: lbltyp - Label type * * Args: lbltyp - Label type *
* Uses: curlbl - Label to push */ * Uses: curlbl - Label to push */
void pshlbl(int lbtype, char* lbname) { void pshlbl(int lbtype, char* lbname) {
DEBUG("Pushing label type %d\n", lbtype) DEBUG("label.pshlbl: Pushing label type %d\n", lbtype)
strcpy(lblnam[lblcnt], lbname); strcpy(lblnam[lblcnt], lbname);
lbltyp[lblcnt] = lbtype; lbltyp[lblcnt] = lbtype;
lblblk[lblcnt++] = FALSE; lblblk[lblcnt++] = FALSE;
DEBUG("Pushed label '%s' onto stack\n", lbname) DEBUG("label.pshlbl: Pushed label '%s' onto stack\n", lbname)
} }