Blocks don't evaluate their name
This commit is contained in:
+3
-10
@@ -365,16 +365,9 @@ noreturn void lisp_signal(LispVal *name, LispVal *data) {
|
||||
top_of_stack_exception_handler(name, data);
|
||||
}
|
||||
|
||||
static void check_block_name(LispVal *name) {
|
||||
if (!SYMBOLP(name) || NILP(name)) {
|
||||
signal_type_error(name, LIST(Qsymbol, LIST(Qnot, Qnull)));
|
||||
}
|
||||
}
|
||||
|
||||
DEFSPECIAL(block, "block", (LispVal * name, LispVal *body), "(name &rest body)",
|
||||
"") {
|
||||
name = eval(name);
|
||||
check_block_name(name);
|
||||
CHECK_TYPE(name, TYPE_SYMBOL);
|
||||
if (!SYMBOLP(name))
|
||||
CHECK_TYPE(name, TYPE_SYMBOL);
|
||||
LispVal *volatile return_value = Qnil;
|
||||
@@ -406,8 +399,8 @@ static LispVal *lookup_block_tag(LispVal *name) {
|
||||
|
||||
DEFSPECIAL(return_from, "return-from", (LispVal * name, LispVal *value),
|
||||
"(name &optional value)", "") {
|
||||
name = eval(name);
|
||||
check_block_name(name);
|
||||
CHECK_TYPE(name, TYPE_SYMBOL);
|
||||
value = eval(value);
|
||||
LispVal *tag = lookup_block_tag(name);
|
||||
if (tag != Qunbound) {
|
||||
for (ptrdiff_t i = the_stack.depth; i >= 0; --i) {
|
||||
|
||||
Reference in New Issue
Block a user