emit/__emit: Simplify the code in emit_parm1_lbl() and emit_do_case()

This commit is contained in:
Daniel_Cortez 2017-11-12 22:49:09 +07:00
parent f5cbeb010b
commit b726f44a02

View File

@ -5941,6 +5941,21 @@ static void emit_param_data(ucell *p,int size)
} while (++curp<size); } while (++curp<size);
} }
static void emit_param_label(ucell *p)
{
cell val;
char *str;
symbol *sym;
int tok;
tok=lex(&val,&str);
if (tok!=tSYMBOL)
emit_invalid_token(tSYMBOL,tok);
sym=fetchlab(str);
sym->usage|=uREAD;
*p=*(ucell *)&sym->addr;
}
static void OPHANDLER_CALL emit_noop(char *name) static void OPHANDLER_CALL emit_noop(char *name)
{ {
(void)name; (void)name;
@ -5969,17 +5984,10 @@ static void OPHANDLER_CALL emit_parm1_gvar(char *name)
static void OPHANDLER_CALL emit_parm1_lbl(char *name) static void OPHANDLER_CALL emit_parm1_lbl(char *name)
{ {
char *str; ucell p[1];
cell val;
symbol *sym;
int tok;
tok=lex(&val,&str); emit_param_label(&p[0]);
if (tok!=tSYMBOL) outinstr(name,(sizeof p / sizeof p[0]),p);
emit_invalid_token(tSYMBOL,tok);
sym=fetchlab(str);
sym->usage|=uREAD;
outinstr(name,1,(ucell *)&sym->addr);
} }
static void OPHANDLER_CALL emit_parm2_num(char *name) static void OPHANDLER_CALL emit_parm2_num(char *name)
@ -6057,29 +6065,11 @@ static void OPHANDLER_CALL emit_parm5_gvar(char *name)
static void OPHANDLER_CALL emit_do_case(char *name) static void OPHANDLER_CALL emit_do_case(char *name)
{ {
/* case <value> <label> */ ucell p[2];
cell val;
char *str;
symbol* sym;
int tok;
stgwrite("\t"); emit_param_num(&p[1],1);
stgwrite(name); emit_param_label(&p[1]);
stgwrite(" "); outinstr(name,2,p);
tok=lex(&val,&str);
if (tok!=tNUMBER)
emit_invalid_token(tSYMBOL,tok);
outval(val,FALSE);
tok=lex(&val,&str);
if (tok!=tSYMBOL)
emit_invalid_token(tSYMBOL,tok);
sym=fetchlab(str);
if (sym==NULL)
error(17,str); /* undefined symbol */
else
val=sym->addr;
outval(val,TRUE);
code_idx+=opargs(2)+opcodes(0); code_idx+=opargs(2)+opcodes(0);
} }