From b6609fc78a35b65b9b84b639e7d25f26d463a02e Mon Sep 17 00:00:00 2001 From: Mikael Djurfeldt Date: Sat, 29 Nov 1997 10:49:18 +0000 Subject: [PATCH] * init.c (scm_start_stack): Removed initialization of scm_the_last_stack_var. * backtrace.h: Declare scm_the_last_stack_var. * backtrace.c: Define scm_the_last_stack_var. * root.c (mark_root): Don't mark the_last_stack_var. * root.h (scm_root_state): Removed the_last_stack_var. * throw.c: Added #include "fluids.h" (ss_handler): `the-last-stack' is now a fluid. * (backtrace.h, backtrace.c, throw.c): Renamed the_last_stack_var --> the_last_stack_fluid. * backtrace.c: Added #include "fluids.h" (scm_init_backtrace): Initialize `the-last-stack' to a fluid. (scm_backtrace): `the-last-stack' is now a fluid. * init.c (scm_boot_guile_1): Moved call to scm_init_backtrace after scm_init_fluids. --- libguile/ChangeLog | 17 +++++++++++++++++ libguile/backtrace.c | 6 ++++-- libguile/backtrace.h | 2 ++ libguile/init.c | 2 -- libguile/root.c | 1 - libguile/root.h | 3 --- libguile/throw.c | 7 ++++--- 7 files changed, 27 insertions(+), 11 deletions(-) diff --git a/libguile/ChangeLog b/libguile/ChangeLog index 6bdee91e7..094824852 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -1,5 +1,22 @@ Sat Nov 29 01:16:53 1997 Mikael Djurfeldt + * init.c (scm_start_stack): Removed initialization of + scm_the_last_stack_var. + + * backtrace.h: Declare scm_the_last_stack_var. + + * backtrace.c: Define scm_the_last_stack_var. + + * root.c (mark_root): Don't mark the_last_stack_var. + + * root.h (scm_root_state): Removed the_last_stack_var. + + * throw.c: Added #include "fluids.h" + (ss_handler): `the-last-stack' is now a fluid. + + * (backtrace.h, backtrace.c, throw.c): Renamed the_last_stack_var + --> the_last_stack_fluid. + * backtrace.c: Added #include "fluids.h" (scm_init_backtrace): Initialize `the-last-stack' to a fluid. (scm_backtrace): `the-last-stack' is now a fluid. diff --git a/libguile/backtrace.c b/libguile/backtrace.c index d66abb807..c216515e9 100644 --- a/libguile/backtrace.c +++ b/libguile/backtrace.c @@ -68,6 +68,8 @@ return SCM_BOOL_F; #endif +SCM scm_the_last_stack_fluid; + static void display_header SCM_P ((SCM source, SCM port)); static void display_header (source, port) @@ -539,7 +541,7 @@ SCM_PROC(s_backtrace, "backtrace", 0, 0, 0, scm_backtrace); SCM scm_backtrace () { - SCM the_last_stack = scm_fluid_ref (SCM_CDR (scm_the_last_stack_var)); + SCM the_last_stack = scm_fluid_ref (SCM_CDR (scm_the_last_stack_fluid)); if (SCM_NFALSEP (the_last_stack)) { scm_newline (scm_cur_outp); @@ -571,7 +573,7 @@ void scm_init_backtrace () { SCM f = scm_make_fluid (); - scm_the_last_stack_var = scm_sysintern ("the-last-stack", f); + scm_the_last_stack_fluid = scm_sysintern ("the-last-stack", f); #include "backtrace.x" } diff --git a/libguile/backtrace.h b/libguile/backtrace.h index fad89ec37..fd630afef 100644 --- a/libguile/backtrace.h +++ b/libguile/backtrace.h @@ -49,6 +49,8 @@ #include "libguile/__scm.h" +extern SCM scm_the_last_stack_fluid; + void scm_display_error_message SCM_P ((SCM message, SCM args, SCM port)); SCM scm_display_error SCM_P ((SCM stack, SCM port, SCM subr, SCM message, SCM args, SCM rest)); SCM scm_display_backtrace SCM_P ((SCM stack, SCM port, SCM first, SCM depth)); diff --git a/libguile/init.c b/libguile/init.c index aec3852c7..cb2bd8cb2 100644 --- a/libguile/init.c +++ b/libguile/init.c @@ -145,8 +145,6 @@ scm_start_stack (base) scm_top_level_lookup_closure_var = SCM_BOOL_F; scm_system_transformer = SCM_BOOL_F; - scm_the_last_stack_var = SCM_BOOL_F; - scm_root->fluids = scm_make_initial_fluids (); /* Create an object to hold the root continuation. diff --git a/libguile/root.c b/libguile/root.c index 291de56d8..5de8e1942 100644 --- a/libguile/root.c +++ b/libguile/root.c @@ -93,7 +93,6 @@ mark_root (root) scm_gc_mark (s->fluids); scm_gc_mark (s->top_level_lookup_closure_var); scm_gc_mark (s->system_transformer); - scm_gc_mark (s->the_last_stack_var); return SCM_ROOT_STATE (root) -> parent; } diff --git a/libguile/root.h b/libguile/root.h index 8f1545f85..598bade08 100644 --- a/libguile/root.h +++ b/libguile/root.h @@ -115,8 +115,6 @@ typedef struct scm_root_state SCM system_transformer; SCM top_level_lookup_closure_var; - SCM the_last_stack_var; - SCM handle; /* The root object for this root state */ SCM parent; /* The parent root object */ } scm_root_state; @@ -143,7 +141,6 @@ typedef struct scm_root_state #define scm_top_level_lookup_closure_var \ (scm_root->top_level_lookup_closure_var) #define scm_system_transformer (scm_root->system_transformer) -#define scm_the_last_stack_var (scm_root->the_last_stack_var) #ifdef USE_THREADS #define scm_root ((scm_root_state *) SCM_THREAD_LOCAL_DATA) diff --git a/libguile/throw.c b/libguile/throw.c index b83b78f5d..4d90ba6a0 100644 --- a/libguile/throw.c +++ b/libguile/throw.c @@ -55,6 +55,7 @@ #include "continuations.h" #include "stackchk.h" #include "stacks.h" +#include "fluids.h" #include "throw.h" @@ -339,14 +340,14 @@ scm_internal_lazy_catch (tag, body, body_data, handler, handler_data) /* scm_internal_stack_catch Use this one if you want debugging information to be stored in - scm_the_last_stack_var on error. */ + scm_the_last_stack_fluid on error. */ static SCM ss_handler (void *data, SCM tag, SCM throw_args) { /* Save the stack */ - SCM_SETCDR (scm_the_last_stack_var, - scm_make_stack (scm_cons (SCM_BOOL_T, SCM_EOL))); + scm_fluid_set_x (SCM_CDR (scm_the_last_stack_fluid), + scm_make_stack (scm_cons (SCM_BOOL_T, SCM_EOL))); /* Throw the error */ return scm_throw (tag, throw_args); }