-SCM scm_sys_protects[SCM_NUM_PROTECTS];
-
-scm_t_bits scm_tc16_root;
-
-\f
-
-static SCM
-root_mark (SCM root)
-{
- scm_root_state *s = SCM_ROOT_STATE (root);
-
- scm_gc_mark (s->rootcont);
- scm_gc_mark (s->dynwinds);
- scm_gc_mark (s->progargs);
- scm_gc_mark (s->exitval);
- scm_gc_mark (s->cur_inp);
- scm_gc_mark (s->cur_outp);
- scm_gc_mark (s->cur_errp);
- /* No need to gc mark def_loadp */
- scm_gc_mark (s->fluids);
- scm_gc_mark (s->active_asyncs);
- scm_gc_mark (s->signal_asyncs);
- return SCM_ROOT_STATE (root) -> parent;
-}
-
-
-static int
-root_print (SCM exp, SCM port, scm_print_state *pstate SCM_UNUSED)
-{
- scm_puts ("#<root ", port);
- scm_uintprint(SCM_SEQ (SCM_ROOT_STATE (exp) -> rootcont), 16, port);
- scm_putc('>', port);
- return 1;
-}
-
-
-\f
-
-SCM
-scm_make_root (SCM parent)
-{
- SCM root;
- scm_root_state *root_state;
-
- root_state = (scm_root_state *) scm_gc_malloc (sizeof (scm_root_state),
- "root state");
- if (SCM_ROOTP (parent))
- {
- memcpy (root_state, SCM_ROOT_STATE (parent), sizeof (scm_root_state));
- root_state->parent = parent;
- }
- else
- {
- root_state->parent = SCM_BOOL_F;
-
- /* Initialize everything right now, in case a GC happens early. */
- root_state->rootcont
- = root_state->dynwinds
- = root_state->progargs
- = root_state->exitval
- = root_state->cur_inp
- = root_state->cur_outp
- = root_state->cur_errp
- = root_state->cur_loadp
- = root_state->fluids
- = root_state->handle
- = root_state->parent
- = SCM_BOOL_F;
- }
-
- root_state->active_asyncs = SCM_EOL;
- root_state->signal_asyncs = SCM_EOL;
- root_state->block_asyncs = 0;
- root_state->pending_asyncs = 1;
-
- SCM_NEWSMOB (root, scm_tc16_root, root_state);
- root_state->handle = root;
-
- if (SCM_ROOTP (parent))
- /* Must be done here so that fluids are GC protected */
- scm_i_copy_fluids (root_state);
-
- return root;
-}
-