diff --git a/source/compiler/sc.h b/source/compiler/sc.h index 6adf043..69c2b27 100644 --- a/source/compiler/sc.h +++ b/source/compiler/sc.h @@ -699,7 +699,7 @@ SC_FUNC void dec(value *lval); SC_FUNC void jmp_ne0(int number); SC_FUNC void jmp_eq0(int number); SC_FUNC void outval(cell val,int newline); -SC_FUNC void outinstr(const char *name, int nargs, ucell *args); +SC_FUNC void outinstr(const char *name,int nargs,ucell *args); /* function prototypes in SC5.C */ SC_FUNC int error(int number,...); diff --git a/source/compiler/sc1.c b/source/compiler/sc1.c index b384297..a88bc99 100644 --- a/source/compiler/sc1.c +++ b/source/compiler/sc1.c @@ -5833,24 +5833,23 @@ static void check_empty(const unsigned char *lptr) /* verifies that the string contains only whitespace */ while (*lptr<=' ' && *lptr!='\0') lptr++; - if (*lptr!='\0'&&*lptr!='}') + if (*lptr!='\0' && *lptr!='}') error(38); /* extra characters on line */ } -static void emit_invalid_token(int need_token, int current_token) +static void emit_invalid_token(int need_token,int current_token) { - char s[sNAMEMAX+ 2]; + char s[sNAMEMAX+2]; extern char *sc_tokens[]; - if (current_tokenident!=iFUNCTN && sym->ident!=iREFFUNC && (sym->usage & uDEFINE)==0) || sym->ident==iLABEL) { + if (sym==NULL || (sym->ident!=iFUNCTN && sym->ident!=iREFFUNC && (sym->usage & uDEFINE)==0) || sym->ident==iLABEL) error(17,str); /* undefined symbol */ + if (sym->ident==iFUNCTN || sym->ident==iREFFUNC) { + if ((sym->usage & uNATIVE)!=0 && (sym->usage & uREAD)==0 && sym->addr>=0) + sym->addr=ntv_funcid++; + p[curp]=sym->addr; + markusage(sym,uREAD); } else { - if (sym->ident==iFUNCTN || sym->ident==iREFFUNC) { - if ((sym->usage & uNATIVE)!=0) { - if ((sym->usage & uREAD)==0 && sym->addr>=0) - sym->addr=ntv_funcid++; - } - p[curp]=sym->addr; - markusage(sym,uREAD); - } else { - p[curp]=sym->addr; - markusage(sym,uREAD|uWRITTEN); - } /* if */ + p[curp]=sym->addr; + markusage(sym,uREAD|uWRITTEN); } /* if */ break; default: @@ -5901,17 +5896,16 @@ static void emit_param_num(char *name, ucell *p, int size) break; } /* if */ } /* if */ - if (tokvclass!=sSTATIC) sym=findglb(str,sGLOBAL); - if (sym==NULL) { - error(17,str); - } else { - if (sym->ident!=iVARIABLE) { - error(17,str); /* undefined symbol */ - } /* if */ - markusage(sym,uREAD|uWRITTEN); - p[curp]=sym->addr; - } /* if */ - } while (++curp < size); + if (sym==NULL) + error(17,str); /* undefined symbol */ + if (sym->ident!=iVARIABLE) + error(17,str); /* undefined symbol */ + markusage(sym,uREAD|uWRITTEN); + p[curp]=sym->addr; + } while (++curpusage|=uREAD; outinstr(name,1,&sym->addr); @@ -5986,16 +5975,16 @@ static void OPHANDLER_CALL emit_parm2_num(char *name) { ucell p[2]; - emit_param_num(name, p, arraysize(p)); - outinstr(name,arraysize(p),p); + emit_param_num(name,p,(sizeof p / sizeof p[0])); + outinstr(name,(sizeof p / sizeof p[0]),p); } static void OPHANDLER_CALL emit_parm2_gvar(char *name) { ucell p[2]; - emit_param_data(name, p, arraysize(p)); - outinstr(name,arraysize(p),p); + emit_param_data(name,p,(sizeof p / sizeof p[0])); + outinstr(name,(sizeof p / sizeof p[0]),p); } static void OPHANDLER_CALL emit_parm2_gvar_num(char *name) @@ -6009,75 +5998,68 @@ static void OPHANDLER_CALL emit_parm2_gvar_num(char *name) extern char *sc_tokens[]; tok=lex(&val,&str); - if (tok!=tSYMBOL) { - emit_invalid_token(tSYMBOL, tok); - } /* if */ + if (tok!=tSYMBOL) + emit_invalid_token(tSYMBOL,tok); sym=findloc(str); if (sym==NULL || sym->vclass!=sSTATIC) sym=findglb(str,sGLOBAL); - if (sym==NULL) { - error(17,str); - } else { - if (sym->ident!=iVARIABLE) { - error(17,str); /* undefined symbol */ - } /* if */ - markusage(sym,uREAD); - p[0]=sym->addr; - tok=lex(&val,&str); - if (tok!=tNUMBER) { - emit_invalid_token(tNUMBER, tok); - } /* if */ - p[1]=val; - outinstr(name,arraysize(p),p); - } /* if */ + if (sym==NULL || sym->ident!=iVARIABLE) + error(17,str); /* undefined symbol */ + markusage(sym,uREAD); + p[0]=sym->addr; + tok=lex(&val,&str); + if (tok!=tNUMBER) + emit_invalid_token(tNUMBER,tok); + p[1]=val; + outinstr(name,(sizeof p / sizeof p[0]),p); } static void OPHANDLER_CALL emit_parm3_num(char *name) { ucell p[3]; - emit_param_num(name, p, arraysize(p)); - outinstr(name,arraysize(p),p); + emit_param_num(name,p,(sizeof p / sizeof p[0])); + outinstr(name,(sizeof p / sizeof p[0]),p); } static void OPHANDLER_CALL emit_parm3_gvar(char *name) { ucell p[3]; - emit_param_data(name, p, arraysize(p)); - outinstr(name,arraysize(p),p); + emit_param_data(name,p,(sizeof p / sizeof p[0])); + outinstr(name,(sizeof p / sizeof p[0]),p); } static void OPHANDLER_CALL emit_parm4_num(char *name) { ucell p[4]; - emit_param_num(name, p, arraysize(p)); - outinstr(name,arraysize(p),p); + emit_param_num(name,p,(sizeof p / sizeof p[0])); + outinstr(name,(sizeof p / sizeof p[0]),p); } static void OPHANDLER_CALL emit_parm4_gvar(char *name) { ucell p[4]; - emit_param_data(name, p, arraysize(p)); - outinstr(name,arraysize(p),p); + emit_param_data(name,p,(sizeof p / sizeof p[0])); + outinstr(name,(sizeof p / sizeof p[0]),p); } static void OPHANDLER_CALL emit_parm5_num(char *name) { ucell p[5]; - emit_param_num(name, p, arraysize(p)); - outinstr(name,arraysize(p),p); + emit_param_num(name,p,(sizeof p / sizeof p[0])); + outinstr(name,(sizeof p / sizeof p[0]),p); } static void OPHANDLER_CALL emit_parm5_gvar(char *name) { ucell p[5]; - emit_param_data(name, p, arraysize(p)); - outinstr(name,arraysize(p),p); + emit_param_data(name,p,(sizeof p / sizeof p[0])); + outinstr(name,(sizeof p / sizeof p[0]),p); } static void OPHANDLER_CALL emit_do_case(char *name) @@ -6094,18 +6076,15 @@ static void OPHANDLER_CALL emit_do_case(char *name) stgwrite(" "); tok=lex(&val,&str); - if (tok!=tNUMBER) { - emit_invalid_token(tSYMBOL, tok); - } /* if */ + if (tok!=tNUMBER) + emit_invalid_token(tSYMBOL,tok); outval(val,FALSE); tok=lex(&val,&str); - if (tok!=tSYMBOL) { - emit_invalid_token(tSYMBOL, tok); - } /* if */ + if (tok!=tSYMBOL) + emit_invalid_token(tSYMBOL,tok); sym=fetchlab(str); - if (sym==NULL) { + if (sym==NULL) error(17,str); /* undefined symbol */ - } /* if */ outval(sym->addr,FALSE); stgwrite("\n"); code_idx+=opargs(2)+opcodes(0); @@ -6119,12 +6098,10 @@ static void OPHANDLER_CALL emit_do_lodb_strb(char *name) extern char *sc_tokens[]; tok=lex(&val,&str); - if (tok!=tNUMBER) { - emit_invalid_token(tNUMBER, tok); - } /* if */ - if (val!=1 && val!=2 && val!=4) { + if (tok!=tNUMBER) + emit_invalid_token(tNUMBER,tok); + if (val!=1 && val!=2 && val!=4) error(50); /* invalid range */ - } /* if */ outinstr(name,1,&val); } @@ -6137,22 +6114,18 @@ static void OPHANDLER_CALL emit_do_call(char *name) extern char *sc_tokens[]; tok=lex(&val,&str); - if (tok!=tSYMBOL) { - emit_invalid_token(tSYMBOL, tok); - } /* if */ + if (tok!=tSYMBOL) + emit_invalid_token(tSYMBOL,tok); sym=findglb(str,sGLOBAL); - if (sym==NULL) { + if (sym==NULL) error(12); /* invalid function call */ - } else { - stgwrite("\t"); - stgwrite(name); - stgwrite(" "); - stgwrite("."); - stgwrite(str); - stgwrite("\n"); - code_idx+=opcodes(1)+opargs(1); - markusage(sym,uREAD); - } + stgwrite("\t"); + stgwrite(name); + stgwrite(" ."); + stgwrite(str); + stgwrite("\n"); + code_idx+=opcodes(1)+opargs(1); + markusage(sym,uREAD); } static EMIT_OPCODE emit_opcodelist[] = { @@ -6354,36 +6327,32 @@ SC_FUNC void emit_parse_line(void) int tok,len,i; symbol *sym; char name[MAX_INSTR_LEN]; + extern char *sc_tokens[]; tok=tokeninfo(&val,&st); - if (tok==tSYMBOL || (tok > tMIDDLE && tok <= tLAST)) { + if (tok==tSYMBOL || (tok>tMIDDLE && tok<=tLAST)) { /* get the token length */ - if (tok > tMIDDLE && tok <= tLAST) { - extern char *sc_tokens[]; + if (tok>tMIDDLE && tok<=tLAST) len=strlen(sc_tokens[tok-tFIRST]); - } else { + else len=strlen(st); - } /* if */ lptr-=len; - for(i=0; iaddr); sym->usage|=uDEFINE; } /* if */ - if ((emit_block_parsing && matchtoken('}')) || !emit_block_parsing) { + if (!emit_block_parsing || matchtoken('}')) { matchtoken(';'); emit_block_parsing=FALSE; } /* if */ diff --git a/source/compiler/sc3.c b/source/compiler/sc3.c index 2665ae8..de9e89f 100644 --- a/source/compiler/sc3.c +++ b/source/compiler/sc3.c @@ -1453,12 +1453,12 @@ static int hier2(value *lval) cell val; char* st; if (!matchtoken('{')) - error(38); + error(38); /* extra characters on line */ lex(&val,&st); lval->ident=iEXPRESSION; emit_parse_line(); if (!matchtoken('}')) - error(38); + error(38); /* extra characters on line */ return FALSE; } /* case */ default: