mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-17 09:10:22 +02:00
Better backtraces from C, especially for optimized closures
* libguile/frames.h: * libguile/frames.c (scm_frame_call_representation): New interface; dispatches to Scheme. * libguile/backtrace.c (display_application): Use scm_frame_call_representation. This should be monotonically better, given that scm_frame_arguments (which was previously called) also dispatched to Scheme and actually ended up calling frame-call-representation.
This commit is contained in:
parent
d856931d8d
commit
4819276185
3 changed files with 24 additions and 9 deletions
|
@ -171,6 +171,27 @@ SCM_DEFINE (scm_frame_arguments, "frame-arguments", 1, 0, 0,
|
|||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
static SCM frame_call_representation_var;
|
||||
|
||||
static void
|
||||
init_frame_call_representation_var (void)
|
||||
{
|
||||
frame_call_representation_var
|
||||
= scm_c_private_lookup ("system vm frame", "frame-call-representation");
|
||||
}
|
||||
|
||||
SCM scm_frame_call_representation (SCM frame)
|
||||
#define FUNC_NAME "frame-call-representation"
|
||||
{
|
||||
static scm_i_pthread_once_t once = SCM_I_PTHREAD_ONCE_INIT;
|
||||
scm_i_pthread_once (&once, init_frame_call_representation_var);
|
||||
|
||||
SCM_VALIDATE_VM_FRAME (1, frame);
|
||||
|
||||
return scm_call_1 (scm_variable_ref (frame_call_representation_var), frame);
|
||||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
SCM_DEFINE (scm_frame_source, "frame-source", 1, 0, 0,
|
||||
(SCM frame),
|
||||
"")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue