mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-28 16:00:22 +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
|
void
|
||||||
scm_i_init_deprecated ()
|
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);
|
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_LIST0 SCM_EOL
|
||||||
#define SCM_LIST1(e0) scm_cons ((e0), SCM_EOL)
|
#define SCM_LIST1(e0) scm_cons ((e0), SCM_EOL)
|
||||||
#define SCM_LIST2(e0, e1) scm_cons2 ((e0), (e1), 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
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public License
|
* 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
|
#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. */
|
/* Frames and winders. */
|
||||||
|
|
||||||
static scm_t_bits tc16_frame;
|
static scm_t_bits tc16_frame;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#ifndef SCM_DYNWIND_H
|
#ifndef SCM_DYNWIND_H
|
||||||
#define 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
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public License
|
* modify it under the terms of the GNU Lesser General Public License
|
||||||
|
@ -28,14 +28,8 @@
|
||||||
|
|
||||||
|
|
||||||
typedef void (*scm_t_guard) (void *);
|
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_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_API void scm_dowinds (SCM to, long delta);
|
||||||
SCM_INTERNAL void scm_i_dowinds (SCM to, long delta,
|
SCM_INTERNAL void scm_i_dowinds (SCM to, long delta,
|
||||||
void (*turn_func) (void *), void *data);
|
void (*turn_func) (void *), void *data);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue