From 05d44505b8fa56294564db0a94cb8e281bbe3f96 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Sun, 19 Jun 2005 13:27:50 +0000 Subject: [PATCH] *** empty log message *** --- doc/ref/ChangeLog | 5 +++++ ice-9/ChangeLog | 6 ++++++ ice-9/boot-9.scm | 12 +++++++----- libguile/ChangeLog | 9 ++++++++- libguile/gc.c | 2 +- libguile/modules.c | 13 +++++++++++++ libguile/modules.h | 1 + scripts/snarf-check-and-output-texi | 1 - test-suite/tests/gc.test | 1 + 9 files changed, 42 insertions(+), 8 deletions(-) diff --git a/doc/ref/ChangeLog b/doc/ref/ChangeLog index 25f2cc53d..756dbb88f 100644 --- a/doc/ref/ChangeLog +++ b/doc/ref/ChangeLog @@ -1,3 +1,8 @@ +2004-08-16 Han-Wen Nienhuys + + * gh.texi (Defining new Scheme procedures in C): remove : - note: + causes spurious info reference. + 2004-09-07 Kevin Ryde * posix.texi (System Identification): Remove software-type, it doesn't diff --git a/ice-9/ChangeLog b/ice-9/ChangeLog index f5d8efc88..a7b6ac763 100644 --- a/ice-9/ChangeLog +++ b/ice-9/ChangeLog @@ -1,3 +1,9 @@ +2005-06-10 Han-Wen Nienhuys + + * boot-9.scm (set-module-eval-closure!): remove + set-procedure-property! closure 'module. Setting this property + causes un-gc-able modules. + 2005-04-23 Kevin Ryde * boot-9.scm (numerator, denominator): New functions as specified by diff --git a/ice-9/boot-9.scm b/ice-9/boot-9.scm index df39297f1..19a16b53d 100644 --- a/ice-9/boot-9.scm +++ b/ice-9/boot-9.scm @@ -258,7 +258,7 @@ (define (environment-module env) (let ((closure (and (pair? env) (car (last-pair env))))) - (and closure (procedure-property closure 'module)))) + (and closure (eval-closure-module closure)))) ;;; {Records} @@ -1063,10 +1063,12 @@ (let ((setter (record-modifier module-type 'eval-closure))) (lambda (module closure) (setter module closure) - ;; Make it possible to lookup the module from the environment. - ;; This implementation is correct since an eval closure can belong - ;; to maximally one module. - (set-procedure-property! closure 'module module)))) + + + ;; do not set procedure properties on closures. + ;; since procedure properties are weak-hashes, they cannot + ;; have cyclical data, otherwise the data cannot be GC-ed. + ))) (begin-deprecated (define (eval-in-module exp mod) diff --git a/libguile/ChangeLog b/libguile/ChangeLog index 124281f01..2475e7eb2 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -1,4 +1,11 @@ -2005-06-19 Han-Wen Nienhuys +2005-06-10 Han-Wen Nienhuys + + * modules.c (s_scm_eval_closure_module): new function. Return the + module inside an eval-closure. + + * gc.c (scm_init_storage): make scm_stand_in_procs a weak_key hash + table. This means that procedure properties are GC'd if the + procedure dies. * guile.c (main): use pointer iso. array. This fixes compile error on GCC 4. diff --git a/libguile/gc.c b/libguile/gc.c index 437734be0..712eb0627 100644 --- a/libguile/gc.c +++ b/libguile/gc.c @@ -2827,7 +2827,7 @@ scm_init_storage () #endif #endif - scm_stand_in_procs = scm_c_make_hash_table (257); + scm_stand_in_procs = scm_make_weak_key_hash_table (SCM_MAKINUM (257)); scm_permobjs = SCM_EOL; scm_protects = scm_c_make_hash_table (31); scm_gc_registered_roots = scm_c_make_hash_table (31); diff --git a/libguile/modules.c b/libguile/modules.c index 4bb698d05..b5047e739 100644 --- a/libguile/modules.c +++ b/libguile/modules.c @@ -340,6 +340,19 @@ SCM_DEFINE (scm_standard_eval_closure, "standard-eval-closure", 1, 0, 0, } #undef FUNC_NAME + +SCM_DEFINE (scm_eval_closure_module, "eval-closure-module", 1, 0, 0, + (SCM closure), + "Return the module for @var{closure}.") +#define FUNC_NAME s_scm_eval_closure_module +{ + SCM_ASSERT_TYPE(SCM_EVAL_CLOSURE_P (closure), closure, SCM_ARG1, FUNC_NAME, "eval-closure"); + return SCM_PACK (SCM_CELL_WORD_1(closure)); +} +#undef FUNC_NAME + + + SCM_DEFINE (scm_standard_interface_eval_closure, "standard-interface-eval-closure", 1, 0, 0, (SCM module), diff --git a/libguile/modules.h b/libguile/modules.h index b147697e1..6cee3d555 100644 --- a/libguile/modules.h +++ b/libguile/modules.h @@ -118,6 +118,7 @@ extern SCM scm_current_module_lookup_closure (void); extern SCM scm_current_module_transformer (void); extern SCM scm_eval_closure_lookup (SCM eclo, SCM sym, SCM definep); extern SCM scm_standard_eval_closure (SCM module); +extern SCM scm_eval_closure_module (SCM closure); extern SCM scm_standard_interface_eval_closure (SCM module); extern SCM scm_get_pre_modules_obarray (void); extern SCM scm_lookup_closure_module (SCM proc); diff --git a/scripts/snarf-check-and-output-texi b/scripts/snarf-check-and-output-texi index 0379d4848..96e5a61b0 100755 --- a/scripts/snarf-check-and-output-texi +++ b/scripts/snarf-check-and-output-texi @@ -25,7 +25,6 @@ exec ${GUILE-guile} -l $0 -c "(apply $main (cdr (command-line)))" "$@" ;;; Author: Michael Livshin ;;; Code: - (define-module (scripts snarf-check-and-output-texi) :use-module (ice-9 streams) :use-module (ice-9 match) diff --git a/test-suite/tests/gc.test b/test-suite/tests/gc.test index 358f072a7..020c2a9f2 100644 --- a/test-suite/tests/gc.test +++ b/test-suite/tests/gc.test @@ -78,3 +78,4 @@ (gc) (remove-hook! after-gc-hook thunk) foo))) +