mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
deprecate scm_internal_dynamic_wind
* libguile/dynwind.c: * libguile/dynwind.h: * libguile/deprecated.h (scm_t_inner): * libguile/deprecated.c (scm_internal_dynamic_wind): Deprecate, as the scm_dynwind API is better, and this API encourages users to stuff SCM values into pointers.
This commit is contained in:
parent
b5df9cda41
commit
b2feee6bc0
4 changed files with 36 additions and 25 deletions
|
@ -2574,6 +2574,29 @@ scm_struct_create_handle (SCM obj)
|
|||
|
||||
|
||||
|
||||
SCM
|
||||
scm_internal_dynamic_wind (scm_t_guard before,
|
||||
scm_t_inner inner,
|
||||
scm_t_guard after,
|
||||
void *inner_data,
|
||||
void *guard_data)
|
||||
{
|
||||
SCM ans;
|
||||
|
||||
scm_c_issue_deprecation_warning
|
||||
("`scm_internal_dynamic_wind' is deprecated. "
|
||||
"Use the `scm_dynwind_begin' / `scm_dynwind_end' API instead.");
|
||||
|
||||
scm_dynwind_begin (SCM_F_DYNWIND_REWINDABLE);
|
||||
scm_dynwind_rewind_handler (before, guard_data, SCM_F_WIND_EXPLICITLY);
|
||||
scm_dynwind_unwind_handler (after, guard_data, SCM_F_WIND_EXPLICITLY);
|
||||
ans = inner (inner_data);
|
||||
scm_dynwind_end ();
|
||||
return ans;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
scm_i_init_deprecated ()
|
||||
{
|
||||
|
|
|
@ -143,6 +143,17 @@ SCM_DEPRECATED SCM scm_make_gsubr_with_generic (const char *name,
|
|||
|
||||
SCM_DEPRECATED SCM scm_create_hook (const char* name, int n_args);
|
||||
|
||||
|
||||
/* Deprecated 13-05-2011 because it's better just to scm_dynwind_begin.
|
||||
That also avoids the temptation to stuff pointers in an SCM. */
|
||||
|
||||
typedef SCM (*scm_t_inner) (void *);
|
||||
SCM_DEPRECATED SCM scm_internal_dynamic_wind (scm_t_guard before,
|
||||
scm_t_inner inner,
|
||||
scm_t_guard after,
|
||||
void *inner_data,
|
||||
void *guard_data);
|
||||
|
||||
#define SCM_LIST0 SCM_EOL
|
||||
#define SCM_LIST1(e0) scm_cons ((e0), SCM_EOL)
|
||||
#define SCM_LIST2(e0, e1) scm_cons2 ((e0), (e1), SCM_EOL)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1995,1996,1998,1999,2000,2001, 2003, 2004, 2006, 2008, 2010 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995,1996,1998,1999,2000,2001, 2003, 2004, 2006, 2008, 2010, 2011 Free Software Foundation, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
|
@ -68,23 +68,6 @@ scm_dynamic_wind (SCM in_guard, SCM thunk, SCM out_guard)
|
|||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
SCM
|
||||
scm_internal_dynamic_wind (scm_t_guard before,
|
||||
scm_t_inner inner,
|
||||
scm_t_guard after,
|
||||
void *inner_data,
|
||||
void *guard_data)
|
||||
{
|
||||
SCM ans;
|
||||
|
||||
scm_dynwind_begin (SCM_F_DYNWIND_REWINDABLE);
|
||||
scm_dynwind_rewind_handler (before, guard_data, SCM_F_WIND_EXPLICITLY);
|
||||
scm_dynwind_unwind_handler (after, guard_data, SCM_F_WIND_EXPLICITLY);
|
||||
ans = inner (inner_data);
|
||||
scm_dynwind_end ();
|
||||
return ans;
|
||||
}
|
||||
|
||||
/* Frames and winders. */
|
||||
|
||||
static scm_t_bits tc16_frame;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#ifndef SCM_DYNWIND_H
|
||||
#define SCM_DYNWIND_H
|
||||
|
||||
/* Copyright (C) 1995,1996,1998,1999,2000,2003,2004, 2006, 2008 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995,1996,1998,1999,2000,2003,2004, 2006, 2008, 2011 Free Software Foundation, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
|
@ -28,14 +28,8 @@
|
|||
|
||||
|
||||
typedef void (*scm_t_guard) (void *);
|
||||
typedef SCM (*scm_t_inner) (void *);
|
||||
|
||||
SCM_API SCM scm_dynamic_wind (SCM thunk1, SCM thunk2, SCM thunk3);
|
||||
SCM_API SCM scm_internal_dynamic_wind (scm_t_guard before,
|
||||
scm_t_inner inner,
|
||||
scm_t_guard after,
|
||||
void *inner_data,
|
||||
void *guard_data);
|
||||
SCM_API void scm_dowinds (SCM to, long delta);
|
||||
SCM_INTERNAL void scm_i_dowinds (SCM to, long delta,
|
||||
void (*turn_func) (void *), void *data);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue