- added CclGcUnprotect

This commit is contained in:
grumbel 2003-07-14 18:34:28 +00:00
parent 51ca58c1b5
commit eb667b4508
2 changed files with 29 additions and 0 deletions

View file

@ -119,6 +119,7 @@ extern int CclInConfigFile; /// True while config file parsing
----------------------------------------------------------------------------*/ ----------------------------------------------------------------------------*/
extern void CclGcProtect(SCM obj); /// Protect scm object for GC extern void CclGcProtect(SCM obj); /// Protect scm object for GC
extern void CclGcUnprotect(SCM obj); /// Unprotect scm object for GC
extern void InitCcl(void); /// Initialise ccl extern void InitCcl(void); /// Initialise ccl
extern void LoadCcl(void); /// Load ccl config file extern void LoadCcl(void); /// Load ccl config file
extern void SaveCcl(FILE* file); /// Save CCL module extern void SaveCcl(FILE* file); /// Save CCL module

View file

@ -96,6 +96,34 @@ global void CclGcProtect(SCM obj)
setvar(var,cons(obj,symbol_value(var,NIL)),NIL); setvar(var,cons(obj,symbol_value(var,NIL)),NIL);
} }
/**
** Remove a SCM object from garbage collectors protection list.
**
** @param obj Scheme object
*/
global void CclGcUnprotect(SCM obj)
{
// Remove obj from the list *ccl-protect*
SCM sym;
SCM old_lst;
SCM new_lst;
sym = gh_symbol2scm("*ccl-protect*");
old_lst = symbol_value(sym, NIL);
new_lst = NIL;
while( !gh_null_p(old_lst) ) {
SCM el = gh_car(old_lst);
if (el != obj)
new_lst = cons(el, new_lst);
old_lst = gh_cdr(old_lst);
}
setvar(sym, new_lst, NIL);
}
/*............................................................................ /*............................................................................
.. Config .. Config
............................................................................*/ ............................................................................*/