~ chicken-core (chicken-5) b666dd21e1f64c3e4211dff04acfd16e2c8224ec
commit b666dd21e1f64c3e4211dff04acfd16e2c8224ec Author: felix <felix@call-with-current-continuation.org> AuthorDate: Tue Jul 14 11:05:13 2015 +0200 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Tue Jul 14 11:05:13 2015 +0200 create proper termination continuation before invoking toplevel diff --git a/runtime.c b/runtime.c index 0fd9e2ee..a20b87e5 100644 --- a/runtime.c +++ b/runtime.c @@ -599,6 +599,7 @@ void parse_argv(C_char *cmds) int CHICKEN_initialize(int heap, int stack, int symbols, void *toplevel) { + C_SCHEME_BLOCK *k0; int i; #ifdef HAVE_SIGACTION struct sigaction sa; @@ -757,6 +758,14 @@ int CHICKEN_initialize(int heap, int stack, int symbols, void *toplevel) callback_continuation_level = 0; gc_ms = 0; (void)C_randomize(C_fix(time(NULL))); + + /* create k to invoke code for system-startup: */ + k0 = (C_SCHEME_BLOCK *)C_align((C_word)C_fromspace_top); + C_fromspace_top += C_align(2 * sizeof(C_word)); + k0->header = C_CLOSURE_TYPE | 1; + C_set_block_item(k0, 0, (C_word)termination_continuation); + C_save(k0); + C_save(C_SCHEME_UNDEFINED); return 1; }Trap