This is the mail archive of the guile@cygnus.com mailing list for the guile project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Mark Galassi <rosalia@cygnus.com> wrote: > Maciej, do you think that it's OK to explicitly invoke > > gh_eval_str ("(primitive-load-path \"ice-9/boot-9.scm\")"); > > from your programs if you want to use ice-9 without gh_repl()? I think it's OK as long as I have an easy way of knowing from configure.in wether I need to, so I can support both 1.2 and the recent snapshots. However, since I think this is a relatively common need (boot-9 has a lot of fairly important features in it - the module system, load, various R4RS functions, etc), I think it would be nice to have a wrapper function to do it. Additionally, the existence of a wrapper function makes it trivial to test with autoconf wether it needs to be invoked or not. > I prefer the former, since I think it would be good to have gh_enter() > not load boot-9.scm, so that the library users have fine-grained > control over the loading of Scheme code. Well, it's mostly just a naming issue, but I think that if we end up splitting a function into two with different names, the one with the same semantics as the older version has a slightly better claim to the old name. In any case, here's a patch that adds gh_enter_with_boot_9 that has the older semantics and leaves gh_enter alone. If you reconsider the naming issue, the rename should be trivial to do. --- gh_init.c Tue Nov 25 12:20:21 1997 +++ gh_init.c.2 Fri Feb 20 14:08:50 1998 @@ -72,6 +72,29 @@ /* never returns */ } +/* This function takes care of all real GH initialization. Since it's + called by scm_boot_guile, it can safely work with heap objects, or + call functions that do so. */ +static void +gh_launch_pad_with_boot_9 (void *closure, int argc, char **argv) +{ + main_prog_t c_main_prog = (main_prog_t) closure; + + gh_eval_str ("(primitive-load-path \"ice-9/boot-9.scm\")"); + c_main_prog (argc, argv); + exit (0); +} + +/* starts up the Scheme interpreter, and stays in it. c_main_prog() + is the address of the user's main program, since gh_enter() never + returns. */ +void +gh_enter_with_boot_9 (int argc, char *argv[], main_prog_t c_main_prog) +{ + scm_boot_guile (argc, argv, gh_launch_pad_with_boot_9, (void *) c_main_prog); + /* never returns */ +} + /* offer a REPL to the C programmer; for now I just invoke the ice-9 REPL that is written in Scheme */ void --- gh.h Tue Jan 20 12:57:00 1998 +++ gh.h.2 Fri Feb 20 14:10:43 1998 @@ -61,6 +61,7 @@ #endif /* __GNUC__ */ void gh_enter(int argc, char *argv[], void (*c_main_prog)()); +void gh_enter_with_boot_9(int argc, char *argv[], void (*c_main_prog)()); void gh_repl(int argc, char *argv[]); SCM gh_catch(SCM tag, scm_catch_body_t body, void *body_data, scm_catch_handler_t handler, void *handler_data);