emit/__emit: Simplify the code in emit_parm1_lbl() and emit_do_case()
This commit is contained in:
parent
f5cbeb010b
commit
b726f44a02
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user