Blocks don't evaluate their name

This commit is contained in:
2026-09-05 07:50:21 -07:00
parent 8ec08a55ea
commit 58089ce956
3 changed files with 22 additions and 12 deletions
+3 -10
View File
@@ -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) {