mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
deprecate lookup closures
* libguile/deprecated.h (SCM_TOP_LEVEL_LOOKUP_CLOSURE): * libguile/deprecated.c (scm_lookup_closure_module): (scm_module_lookup_closure): (scm_current_module_lookup_closure): Deprecate this part of the eval closure interface. It was unused internally, after the scm_sym2var refactor. * libguile/eval.h: * libguile/modules.c: * libguile/modules.h: Remove deprecated code. * libguile/goops.c (scm_ensure_accessor): Use scm_module_variable instead of calling the lookup closure. However I'm not sure that this code is used at all.
This commit is contained in:
parent
62e15979b5
commit
3f48638c8c
6 changed files with 70 additions and 60 deletions
|
@ -2694,6 +2694,55 @@ scm_sym2var (SCM sym, SCM proc, SCM definep)
|
|||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
SCM
|
||||
scm_lookup_closure_module (SCM proc)
|
||||
{
|
||||
scm_c_issue_deprecation_warning
|
||||
("Eval closures are deprecated. See \"Accessing Modules From C\" in\n"
|
||||
"the manual, for replacements.");
|
||||
|
||||
if (scm_is_false (proc))
|
||||
return scm_the_root_module ();
|
||||
else if (SCM_EVAL_CLOSURE_P (proc))
|
||||
return SCM_PACK (SCM_SMOB_DATA (proc));
|
||||
else
|
||||
/* FIXME: The `module' property is no longer set on eval closures, as it
|
||||
introduced a circular reference that precludes garbage collection of
|
||||
modules with the current weak hash table semantics (see
|
||||
http://lists.gnu.org/archive/html/guile-devel/2009-01/msg00102.html and
|
||||
http://thread.gmane.org/gmane.comp.programming.garbage-collection.boehmgc/2465
|
||||
for details). Since it doesn't appear to be used (only in this
|
||||
function, which has 1 caller), we no longer extend
|
||||
`set-module-eval-closure!' to set the `module' property. */
|
||||
abort ();
|
||||
}
|
||||
|
||||
SCM
|
||||
scm_module_lookup_closure (SCM module)
|
||||
{
|
||||
scm_c_issue_deprecation_warning
|
||||
("Eval closures are deprecated. See \"Accessing Modules From C\" in\n"
|
||||
"the manual, for replacements.");
|
||||
|
||||
if (scm_is_false (module))
|
||||
return SCM_BOOL_F;
|
||||
else
|
||||
return SCM_MODULE_EVAL_CLOSURE (module);
|
||||
}
|
||||
|
||||
SCM
|
||||
scm_current_module_lookup_closure ()
|
||||
{
|
||||
scm_c_issue_deprecation_warning
|
||||
("Eval closures are deprecated. See \"Accessing Modules From C\" in\n"
|
||||
"the manual, for replacements.");
|
||||
|
||||
if (scm_module_system_booted_p)
|
||||
return scm_module_lookup_closure (scm_current_module ());
|
||||
else
|
||||
return SCM_BOOL_F;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -815,6 +815,16 @@ SCM_DEPRECATED scm_t_bits scm_i_deprecated_asrtgo (scm_t_bits condition);
|
|||
scm_ensure_module_variable / scm_define / scm_module_define. */
|
||||
SCM_DEPRECATED SCM scm_sym2var (SCM sym, SCM thunk, SCM definep);
|
||||
|
||||
|
||||
|
||||
/* Eval closure deprecation, 23-05-2012. */
|
||||
#define SCM_TOP_LEVEL_LOOKUP_CLOSURE (scm_current_module_lookup_closure())
|
||||
|
||||
SCM_DEPRECATED SCM scm_lookup_closure_module (SCM proc);
|
||||
SCM_DEPRECATED SCM scm_module_lookup_closure (SCM module);
|
||||
SCM_DEPRECATED SCM scm_current_module_lookup_closure (void);
|
||||
|
||||
|
||||
|
||||
|
||||
void scm_i_init_deprecated (void);
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#ifndef SCM_EVAL_H
|
||||
#define SCM_EVAL_H
|
||||
|
||||
/* Copyright (C) 1995,1996,1998,1999,2000,2001,2002,2003,2004,2008,2009,2010,2011
|
||||
/* Copyright (C) 1995,1996,1998,1999,2000,2001,2002,2003,2004,2008,2009,2010,2011,2012
|
||||
* Free Software Foundation, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
|
@ -57,10 +57,6 @@ typedef SCM (*scm_t_trampoline_2) (SCM proc, SCM arg1, SCM arg2);
|
|||
|
||||
#define SCM_EXTEND_ENV scm_acons
|
||||
|
||||
/*fixme* This should probably be removed throught the code. */
|
||||
|
||||
#define SCM_TOP_LEVEL_LOOKUP_CLOSURE (scm_current_module_lookup_closure())
|
||||
|
||||
|
||||
|
||||
SCM_API SCM scm_call_0 (SCM proc);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 1998,1999,2000,2001,2002,2003,2004,2008,2009,2010,2011
|
||||
/* Copyright (C) 1998,1999,2000,2001,2002,2003,2004,2008,2009,2010,2011,2012
|
||||
* Free Software Foundation, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
|
@ -2765,13 +2765,21 @@ SCM_KEYWORD (k_getter, "getter");
|
|||
SCM
|
||||
scm_ensure_accessor (SCM name)
|
||||
{
|
||||
SCM gf = scm_call_2 (SCM_TOP_LEVEL_LOOKUP_CLOSURE, name, SCM_BOOL_F);
|
||||
SCM var, gf;
|
||||
|
||||
var = scm_module_variable (scm_current_module (), name);
|
||||
if (SCM_VARIABLEP (var) && !SCM_UNBNDP (SCM_VARIABLE_REF (var)))
|
||||
gf = SCM_VARIABLE_REF (var);
|
||||
else
|
||||
gf = SCM_BOOL_F;
|
||||
|
||||
if (!SCM_IS_A_P (gf, scm_class_accessor))
|
||||
{
|
||||
gf = scm_make (scm_list_3 (scm_class_generic, k_name, name));
|
||||
gf = scm_make (scm_list_5 (scm_class_accessor,
|
||||
k_name, name, k_setter, gf));
|
||||
}
|
||||
|
||||
return gf;
|
||||
}
|
||||
|
||||
|
|
|
@ -236,38 +236,6 @@ scm_c_export (const char *name, ...)
|
|||
}
|
||||
|
||||
|
||||
/* Environments */
|
||||
|
||||
SCM_SYMBOL (sym_module, "module");
|
||||
|
||||
SCM
|
||||
scm_lookup_closure_module (SCM proc)
|
||||
{
|
||||
if (scm_is_false (proc))
|
||||
return scm_the_root_module ();
|
||||
else if (SCM_EVAL_CLOSURE_P (proc))
|
||||
return SCM_PACK (SCM_SMOB_DATA (proc));
|
||||
else
|
||||
{
|
||||
SCM mod;
|
||||
|
||||
/* FIXME: The `module' property is no longer set on eval closures, as it
|
||||
introduced a circular reference that precludes garbage collection of
|
||||
modules with the current weak hash table semantics (see
|
||||
http://lists.gnu.org/archive/html/guile-devel/2009-01/msg00102.html and
|
||||
http://thread.gmane.org/gmane.comp.programming.garbage-collection.boehmgc/2465
|
||||
for details). Since it doesn't appear to be used (only in this
|
||||
function, which has 1 caller), we no longer extend
|
||||
`set-module-eval-closure!' to set the `module' property. */
|
||||
abort ();
|
||||
|
||||
mod = scm_procedure_property (proc, sym_module);
|
||||
if (scm_is_false (mod))
|
||||
mod = scm_the_root_module ();
|
||||
return mod;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* C level implementation of the standard eval closure
|
||||
*
|
||||
|
@ -611,24 +579,6 @@ SCM_DEFINE (scm_eval_closure_module,
|
|||
}
|
||||
#undef FUNC_NAME
|
||||
|
||||
SCM
|
||||
scm_module_lookup_closure (SCM module)
|
||||
{
|
||||
if (scm_is_false (module))
|
||||
return SCM_BOOL_F;
|
||||
else
|
||||
return SCM_MODULE_EVAL_CLOSURE (module);
|
||||
}
|
||||
|
||||
SCM
|
||||
scm_current_module_lookup_closure ()
|
||||
{
|
||||
if (scm_module_system_booted_p)
|
||||
return scm_module_lookup_closure (scm_current_module ());
|
||||
else
|
||||
return SCM_BOOL_F;
|
||||
}
|
||||
|
||||
SCM_SYMBOL (sym_macroexpand, "macroexpand");
|
||||
|
||||
SCM_DEFINE (scm_module_transformer, "module-transformer", 1, 0, 0,
|
||||
|
|
|
@ -119,16 +119,13 @@ SCM_API void scm_c_export (const char *name, ...);
|
|||
|
||||
SCM_API SCM scm_module_public_interface (SCM module);
|
||||
SCM_API SCM scm_module_import_interface (SCM module, SCM sym);
|
||||
SCM_API SCM scm_module_lookup_closure (SCM module);
|
||||
SCM_API SCM scm_module_transformer (SCM module);
|
||||
SCM_API SCM scm_current_module_lookup_closure (void);
|
||||
SCM_API SCM scm_current_module_transformer (void);
|
||||
SCM_API SCM scm_eval_closure_lookup (SCM eclo, SCM sym, SCM definep);
|
||||
SCM_API SCM scm_standard_eval_closure (SCM module);
|
||||
SCM_API SCM scm_standard_interface_eval_closure (SCM module);
|
||||
SCM_API SCM scm_eval_closure_module (SCM eval_closure); /* deprecated already */
|
||||
SCM_API SCM scm_get_pre_modules_obarray (void);
|
||||
SCM_API SCM scm_lookup_closure_module (SCM proc);
|
||||
|
||||
SCM_INTERNAL void scm_modules_prehistory (void);
|
||||
SCM_INTERNAL void scm_init_modules (void);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue