1 #include "schpriv.h"
2 #include "racket_version.h"
3 #include "schminc.h"
4 
5 /* Generated by the build process in the build area; might simply
6    redirect to "startup.inc": */
7 #include "cstartup.inc"
8 
9 #ifndef SCHEME_STARTUP_DEFINED
10 
eval_linklet_string(const char * str,intptr_t len,int extract)11 static Scheme_Linklet *eval_linklet_string(const char *str, intptr_t len, int extract)
12 {
13   Scheme_Object *port, *expr;
14 
15   if (len < 0)
16     len = strlen(str);
17   port = scheme_make_sized_byte_string_input_port(str, -len); /* negative means it's constant */
18 
19   if (extract) {
20     /* expr is a linklet bundle; 'startup is mapped to the linklet */
21     expr = scheme_read_linklet_bundle_hash(port);
22     return (Scheme_Linklet *)scheme_hash_tree_get((Scheme_Hash_Tree *)expr,
23                                                   scheme_intern_symbol("startup"));
24   } else {
25     expr = scheme_internal_read(port, 1, 1, -1, scheme_init_load_on_demand ? scheme_true : scheme_false);
26     return scheme_compile_and_optimize_linklet(scheme_datum_to_syntax(expr, scheme_false, 0),
27                                                scheme_intern_symbol("startup"));
28   }
29 }
30 
startup_linklet()31 static Scheme_Linklet *startup_linklet()
32 {
33 #define EVAL_ONE_STR(str) return eval_linklet_string(str, -1, 0)
34 #define EVAL_ONE_SIZED_STR(str, len) return eval_linklet_string(str, len, 1)
35   EVAL_STARTUP;
36 }
37 
scheme_init_startup(void)38 void scheme_init_startup(void)
39 {
40   /* called once (not per-place) */
41 }
42 
scheme_init_startup_instance(Scheme_Instance * inst)43 void scheme_init_startup_instance(Scheme_Instance *inst)
44 {
45   /* called per-places */
46   scheme_instantiate_linklet_multi(startup_linklet(), inst, 0, NULL, 0);
47 }
48 
49 #endif
50