mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-12 06:41:13 +02:00
* dynwind.c (scm_frame_end): Do not use scm_i_dowinds. Instead, do
the unwinding directly. It is simple enough. * dynwind.h, dynwind.c: Did the following renamings: scm_begin_frame -> scm_frame_begin, scm_end_frame -> scm_frame_end, scm_on_unwind -> scm_frame_unwind, scm_on_rewind -> scm_frame_rewind, scm_on_unwind_with_scm -> scm_frame_unwind_with_scm, scm_on_rewind_with_scm -> scm_frame_rewind_with_scm. Changed all uses.
This commit is contained in:
parent
dfe610a085
commit
0888de4fd1
2 changed files with 36 additions and 36 deletions
|
@ -121,11 +121,11 @@ scm_internal_dynamic_wind (scm_t_guard before,
|
||||||
{
|
{
|
||||||
SCM ans;
|
SCM ans;
|
||||||
|
|
||||||
scm_begin_frame (SCM_F_FRAME_REWINDABLE);
|
scm_frame_begin (SCM_F_FRAME_REWINDABLE);
|
||||||
scm_on_rewind (before, guard_data, SCM_F_WIND_EXPLICITLY);
|
scm_frame_rewind (before, guard_data, SCM_F_WIND_EXPLICITLY);
|
||||||
scm_on_unwind (after, guard_data, SCM_F_WIND_EXPLICITLY);
|
scm_frame_unwind (after, guard_data, SCM_F_WIND_EXPLICITLY);
|
||||||
ans = inner (inner_data);
|
ans = inner (inner_data);
|
||||||
scm_end_frame ();
|
scm_frame_end ();
|
||||||
return ans;
|
return ans;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,7 +150,7 @@ static scm_t_bits tc16_winder;
|
||||||
#define WINDER_MARK_P(w) (SCM_CELL_WORD_0(w) & WINDER_F_MARK)
|
#define WINDER_MARK_P(w) (SCM_CELL_WORD_0(w) & WINDER_F_MARK)
|
||||||
|
|
||||||
void
|
void
|
||||||
scm_begin_frame (scm_t_frame_flags flags)
|
scm_frame_begin (scm_t_frame_flags flags)
|
||||||
{
|
{
|
||||||
SCM f;
|
SCM f;
|
||||||
scm_t_bits fl = ((flags&SCM_F_FRAME_REWINDABLE)? FRAME_F_REWINDABLE : 0);
|
scm_t_bits fl = ((flags&SCM_F_FRAME_REWINDABLE)? FRAME_F_REWINDABLE : 0);
|
||||||
|
@ -159,23 +159,23 @@ scm_begin_frame (scm_t_frame_flags flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
scm_end_frame (void)
|
scm_frame_end (void)
|
||||||
{
|
{
|
||||||
long delta;
|
/* Unwind upto and including the next frame entry. We can only
|
||||||
SCM to;
|
encounter #<winder> entries on the way.
|
||||||
|
|
||||||
/* Unwind upto and including the next frame entry.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
for (to = scm_dynwinds, delta = 1;
|
while (SCM_CONSP (scm_dynwinds))
|
||||||
SCM_CONSP (to);
|
|
||||||
to = SCM_CDR (to), delta++)
|
|
||||||
{
|
{
|
||||||
if (FRAME_P (SCM_CAR (to)))
|
SCM entry = SCM_CAR (scm_dynwinds);
|
||||||
{
|
scm_dynwinds = SCM_CDR (scm_dynwinds);
|
||||||
scm_i_dowinds (SCM_CDR (to), delta, 1, NULL, NULL);
|
|
||||||
return;
|
if (FRAME_P (entry))
|
||||||
}
|
return;
|
||||||
|
|
||||||
|
assert (WINDER_P (entry));
|
||||||
|
if (!WINDER_REWIND_P (entry) && WINDER_EXPLICIT_P (entry))
|
||||||
|
WINDER_PROC(entry) (WINDER_DATA (entry));
|
||||||
}
|
}
|
||||||
|
|
||||||
assert (0);
|
assert (0);
|
||||||
|
@ -190,8 +190,8 @@ winder_mark (SCM w)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
scm_on_unwind (void (*proc) (void *), void *data,
|
scm_frame_unwind (void (*proc) (void *), void *data,
|
||||||
scm_t_wind_flags flags)
|
scm_t_wind_flags flags)
|
||||||
{
|
{
|
||||||
SCM w;
|
SCM w;
|
||||||
scm_t_bits fl = ((flags&SCM_F_WIND_EXPLICITLY)? WINDER_F_EXPLICIT : 0);
|
scm_t_bits fl = ((flags&SCM_F_WIND_EXPLICITLY)? WINDER_F_EXPLICIT : 0);
|
||||||
|
@ -201,8 +201,8 @@ scm_on_unwind (void (*proc) (void *), void *data,
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
scm_on_rewind (void (*proc) (void *), void *data,
|
scm_frame_rewind (void (*proc) (void *), void *data,
|
||||||
scm_t_wind_flags flags)
|
scm_t_wind_flags flags)
|
||||||
{
|
{
|
||||||
SCM w;
|
SCM w;
|
||||||
SCM_NEWSMOB2 (w, tc16_winder | WINDER_F_REWIND,
|
SCM_NEWSMOB2 (w, tc16_winder | WINDER_F_REWIND,
|
||||||
|
@ -213,8 +213,8 @@ scm_on_rewind (void (*proc) (void *), void *data,
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
scm_on_unwind_with_scm (void (*proc) (SCM), SCM data,
|
scm_frame_unwind_with_scm (void (*proc) (SCM), SCM data,
|
||||||
scm_t_wind_flags flags)
|
scm_t_wind_flags flags)
|
||||||
{
|
{
|
||||||
SCM w;
|
SCM w;
|
||||||
scm_t_bits fl = ((flags&SCM_F_WIND_EXPLICITLY)? WINDER_F_EXPLICIT : 0);
|
scm_t_bits fl = ((flags&SCM_F_WIND_EXPLICITLY)? WINDER_F_EXPLICIT : 0);
|
||||||
|
@ -224,8 +224,8 @@ scm_on_unwind_with_scm (void (*proc) (SCM), SCM data,
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
scm_on_rewind_with_scm (void (*proc) (SCM), SCM data,
|
scm_frame_rewind_with_scm (void (*proc) (SCM), SCM data,
|
||||||
scm_t_wind_flags flags)
|
scm_t_wind_flags flags)
|
||||||
{
|
{
|
||||||
SCM w;
|
SCM w;
|
||||||
SCM_NEWSMOB2 (w, tc16_winder | WINDER_F_REWIND | WINDER_F_MARK,
|
SCM_NEWSMOB2 (w, tc16_winder | WINDER_F_REWIND | WINDER_F_MARK,
|
||||||
|
|
|
@ -50,18 +50,18 @@ typedef enum {
|
||||||
SCM_F_WIND_EXPLICITLY = (1 << 0)
|
SCM_F_WIND_EXPLICITLY = (1 << 0)
|
||||||
} scm_t_wind_flags;
|
} scm_t_wind_flags;
|
||||||
|
|
||||||
SCM_API void scm_begin_frame (scm_t_frame_flags);
|
SCM_API void scm_frame_begin (scm_t_frame_flags);
|
||||||
SCM_API void scm_end_frame (void);
|
SCM_API void scm_frame_end (void);
|
||||||
|
|
||||||
SCM_API void scm_on_unwind (void (*func) (void *), void *data,
|
SCM_API void scm_frame_unwind (void (*func) (void *), void *data,
|
||||||
scm_t_wind_flags);
|
scm_t_wind_flags);
|
||||||
SCM_API void scm_on_rewind (void (*func) (void *), void *data,
|
SCM_API void scm_frame_rewind (void (*func) (void *), void *data,
|
||||||
scm_t_wind_flags);
|
scm_t_wind_flags);
|
||||||
|
|
||||||
SCM_API void scm_on_unwind_with_scm (void (*func) (SCM), SCM data,
|
SCM_API void scm_frame_unwind_with_scm (void (*func) (SCM), SCM data,
|
||||||
scm_t_wind_flags);
|
scm_t_wind_flags);
|
||||||
SCM_API void scm_on_rewind_with_scm (void (*func) (SCM), SCM data,
|
SCM_API void scm_frame_rewind_with_scm (void (*func) (SCM), SCM data,
|
||||||
scm_t_wind_flags);
|
scm_t_wind_flags);
|
||||||
|
|
||||||
#ifdef GUILE_DEBUG
|
#ifdef GUILE_DEBUG
|
||||||
SCM_API SCM scm_wind_chain (void);
|
SCM_API SCM scm_wind_chain (void);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue