throw.c: Renamed last_debug_info_frame -> scm_last_debug_frame.
* throw.c: Renamed scm_catch --> scm_catch_apply and added more
arguments. The motivation is that code in root.c needs catch
functionality, and we want to avoid code duplication.
New functions: scm_catch, scm_lazy_catch. These are wrappers for
scm_catch_apply. scm_lazy_catch is intended to introduce catch
handlers that run without popping the stack into the dynwind
chain.
throw.c: Renamed last_debug_info_frame -> scm_last_debug_frame.
* root.c: Renamed `call-with-new-root' -->
`call-with-dynamic-root'.
(cwdr): Removed allocation of new root state. This should be done
separately by use of scm_make_root.
(scm_apply_with_dynamic_root): New function: Does what it
sounds like. Needed when spawning threads.
* throw.c: Renamed scm_catch --> scm_catch_apply and added more
arguments. The motivation is that code in root.c needs catch
functionality, and we want to avoid code duplication.
New functions: scm_catch, scm_lazy_catch. These are wrappers for
scm_catch_apply. scm_lazy_catch is intended to introduce catch
handlers that run without popping the stack into the dynwind
chain.
see if a given element of scm_dynwinds is a valid catch.
* throw.c (scm_ithrow): If scm_dynwinds has invalid list
structure, abort; don't just silently ignore the garbage.
numbers are), just call scm_small_istr2int to deal with it.
(scm_small_istr2int): New function, created by un-#ifdefing the
non-bignum version of scm_istr2int and renaming it.
* __scm.h: #undef SICP.
* pairs.h (SCM_EOL): Delete this definition, equating it with
SCM_BOOL_F.
* tags.h (SCM_EOL): Give it a new definition here; I think I found
the value it used to have. Doc fixes, too.
(scm_catch): Changed SCM_DEFER_INTS --> SCM_REDEFER_INTS and
SCM_ALLOW_INTS --> SCM_REALLOW_INTS. This is so that scm_catch
can be used in scm_call_with_new_root; Added reenabling of stack
checking when catching a throw.
(cwdr, scm_call_with_new_root, scm_dynamic_root, scm_app_wdr): New
functions: Implements dynamic roots mostly according to spec in
SCM manual. Main difference is that the second argument is a
throw handler rather than an error "thunk".
* root.h: Added declaration of scm_init_root.
SCM_THREAD_CRITICAL_SECTION_END. Moved marking of root data to
root.c:mark_root.
* * root.c, root.h: Added root smob.
(cwdr, scm_call_with_new_root, scm_dynamic_root, scm_app_wdr): New
functions: Implements dynamic roots mostly according to spec in
SCM manual. Main difference is that the second argument is a
throw handler rather than an error "thunk".
* root.c: Added #include "genio.h", #include "smob.h", #include
"pairs.h", #include "throw.h", #include "dynwind.h", #include
"eval.h"
(scm_init_root): Added #include "root.x".
declare the char * to be const. Avoids a warning in rgx.c.
* ports.h: spelling fix.
* filesys.c (scm_sys_stat, scm_sys,lstat): include file name in
error messages.
* load.c (scm_sys_try_load_path): throw an error if file not found
(like it says it in NEWS).
Remove special support for uncaught throws; see throw.c for
rationale.
* throw.c (unhandled_throw): New function.
(scm_ithrow): Call unhandled_throw if we don't find a throw
target; don't mess with scm_bad_throw_vcell.
(scm_bad_throw_vcell): Variable deleted.
(scm_init_throw): Don't initialize it.
* throw.c (scm_ithrow): Don't let outer key matches shadow inner
#t catches.
by scm_open_file is #f, it won't be. Always return SCM_UNSPECIFIED.
Change the Scheme name from %try-load to primitive-load.
* error.c (scm_error): convert a NULL message to SCM_BOOL_F.
Can avoid passing a message, allowing it to be derived in the
error handler (e.g., if we want to throw to the key both from
Scheme and C).
scm_iprin1. Removed prototype for scm_prlist.
* print.c, print.h: Closures now print like #<procedure foo (x)>.
People who whish to see the source can do `(print-enable 'source)'.
Removed #ifdef DEBUG_EXTENSIONS.
references now have a new appearance which is more compact and
also gives a clue about what the target of the reference is.
By setting parameters in the print state, more fancy printing can
be achieved. This is used by the (not yet commited) backtrace
code.
* print.c: Added #include "struct.h". Removed function
scm_prlist.
* print.c (scm_prin1): Print states are now allocated when calling
scm_prin1 and then passed around to all printing functions as an
argument. A cache `print_state_pool' enables reuse of print
states.
(scm_make_print_state): New function.
(scm_iprin1): Adaption to print states.
(scm_iprlist): An initial "hare and tortoise" scan brings down
time complexity to O (depth * N). (Better time complexity will be
achieved when the printing code is completely rewritten.)
* print.c, print.h: Closures now print like #<procedure foo (x)>.
People who whish to see the source can do `(print-enable 'source)'.
Removed #ifdef DEBUG_EXTENSIONS.