Do not use constants for OP_GO labels

This commit is contained in:
Juan Jose Garcia Ripoll 2008-06-22 21:50:33 +02:00
parent 96edd717f4
commit 8caa5d9d7d
2 changed files with 14 additions and 11 deletions

View file

@ -535,9 +535,11 @@ c_tag_ref(cl_object the_tag, cl_object the_type)
type = CAR(record);
name = CADR(record);
if (type == @':tag') {
if (type == the_type && !Null(ecl_assql(the_tag, name))) {
return CONS(MAKE_FIXNUM(n),
CDR(ecl_assql(the_tag, name)));
if (type == the_type) {
cl_object label = ecl_assql(the_tag, name);
if (!Null(label)) {
return CONS(MAKE_FIXNUM(n), ECL_CONS_CDR(label));
}
}
n++;
} else if (type == @':block' || type == @':function') {
@ -1279,7 +1281,7 @@ c_go(cl_object args, int flags) {
if (!Null(args))
FEprogram_error("GO: Too many arguments.",0);
asm_op2(OP_GO, fix(CAR(info)));
asm_c(CDR(info));
asm_arg(fix(CDR(info)));
return flags;
}

View file

@ -875,17 +875,18 @@ ecl_interpret(cl_object frame, cl_object env, cl_object bytecodes, cl_index offs
reg0 = close_around(reg0, lex_env);
THREAD_NEXT;
}
/* OP_GO n{arg}, tag-name{symbol}
Jumps to the tag which is defined at the n-th position in
the lexical environment. TAG-NAME is kept for debugging
purposes.
/* OP_GO n{arg}, tag-ndx{arg}
Jumps to the tag which is defined for the tagbody
frame registered at the n-th position in the lexical
environment. TAG-NDX is the number of tag in the list.
*/
CASE(OP_GO); {
cl_index lex_env_index;
cl_object tag_name;
cl_fixnum tag_ndx;
GET_OPARG(lex_env_index, vector);
GET_DATA(tag_name, vector, data);
cl_go(ecl_lex_env_get_tag(lex_env, lex_env_index), tag_name);
GET_OPARG(tag_ndx, vector);
cl_go(ecl_lex_env_get_tag(lex_env, lex_env_index),
MAKE_FIXNUM(tag_ndx));
THREAD_NEXT;
}
/* OP_RETURN n{arg}