mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-01-27 15:02:12 -08:00
Do not use constants for OP_GO labels
This commit is contained in:
parent
96edd717f4
commit
8caa5d9d7d
2 changed files with 14 additions and 11 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue