Fix lexical jump errors
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
;; -*- mode: lisp-data -*-
|
;; -*- mode: lisp-data -*-
|
||||||
|
|
||||||
(prin1 (let ((l (block 'c (lambda () (return-from 'c 3)))))
|
(prin1 (let ((l (block 'c (lambda () (return-from 'd 3)))))
|
||||||
(block 'c
|
(block 'c
|
||||||
(funcall l))))
|
(funcall l))))
|
||||||
(write-byte ?\n)
|
(write-byte ?\n)
|
||||||
|
|||||||
+7
-2
@@ -419,9 +419,12 @@ DEFSPECIAL(return_from, "return-from", (LispVal * name, LispVal *value),
|
|||||||
longjmp(*frame->block.target, 1);
|
longjmp(*frame->block.target, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// block went out of scope
|
||||||
|
lisp_signal(Qblock_out_of_scope_error, LIST(name));
|
||||||
|
} else {
|
||||||
|
// block never existed
|
||||||
|
lisp_signal(Qno_such_block_error, LIST(name));
|
||||||
}
|
}
|
||||||
// block went out of scope
|
|
||||||
lisp_signal(Qno_such_block_error, LIST(name));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN(backtrace, "backtrace", (void), "()", "") {
|
DEFUN(backtrace, "backtrace", (void), "()", "") {
|
||||||
@@ -442,5 +445,7 @@ DEFUN(backtrace, "backtrace", (void), "()", "") {
|
|||||||
|
|
||||||
DEFINE_SYMBOL(no_such_block_error, "no-such-block-error");
|
DEFINE_SYMBOL(no_such_block_error, "no-such-block-error");
|
||||||
DEFINE_CONDITION_CLASS(no_such_block_error, error);
|
DEFINE_CONDITION_CLASS(no_such_block_error, error);
|
||||||
|
DEFINE_SYMBOL(block_out_of_scope_error, "block-out-of-scope-error");
|
||||||
|
DEFINE_CONDITION_CLASS(block_out_of_scope_error, error);
|
||||||
DEFINE_SYMBOL(excessive_lisp_nesting_error, "excessive-lisp-nesting-error");
|
DEFINE_SYMBOL(excessive_lisp_nesting_error, "excessive-lisp-nesting-error");
|
||||||
DEFINE_CONDITION_CLASS(excessive_lisp_nesting_error, error);
|
DEFINE_CONDITION_CLASS(excessive_lisp_nesting_error, error);
|
||||||
|
|||||||
@@ -157,6 +157,8 @@ DECLARE_FUNCTION(backtrace, (void) );
|
|||||||
|
|
||||||
DECLARE_SYMBOL(no_such_block_error);
|
DECLARE_SYMBOL(no_such_block_error);
|
||||||
MAKE_CONDITION_CLASS(no_such_block_error);
|
MAKE_CONDITION_CLASS(no_such_block_error);
|
||||||
|
DECLARE_SYMBOL(block_out_of_scope_error);
|
||||||
|
MAKE_CONDITION_CLASS(block_out_of_scope_error);
|
||||||
DECLARE_SYMBOL(excessive_lisp_nesting_error);
|
DECLARE_SYMBOL(excessive_lisp_nesting_error);
|
||||||
MAKE_CONDITION_CLASS(excessive_lisp_nesting_error);
|
MAKE_CONDITION_CLASS(excessive_lisp_nesting_error);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user