diff --git a/src/module.c b/src/module.c index fb71fa99c0685e562cf87bb478a208ae53273d18..d2ed0f6ad17ddfe785c2867e186332eacc8f16de 100644 --- a/src/module.c +++ b/src/module.c @@ -3,38 +3,65 @@ ||| Pike is distributed as GPL (General Public License) ||| See the files COPYING and DISCLAIMER for more information. \*/ +#include "global.h" #include "module.h" #include "macros.h" #include "error.h" +#include "builtin_functions.h" +#include "main.h" +#include "svalue.h" +#include "interpret.h" +#include "stralloc.h" +#include "object.h" +#include "mapping.h" -#include "modlist.h" +#include "modules/modlist_headers.h" -struct module *current_module=module_list; +typedef void (*modfun)(void); -void init_modules_efuns() +struct static_module { - unsigned int e; - for(e=0;e<NELEM(module_list);e++) - { - current_module=module_list+e; - module_list[e].init_efuns(); - } - current_module=module_list; -} + char *name; + modfun init; + modfun exit; +}; -void init_modules_programs() +static struct static_module module_list[] = { + { "builtin", init_main, exit_main } +#include "modules/modlist.h" +}; + +void init_modules(void) { unsigned int e; + struct mapping *m = allocate_mapping(10); + m->refs++; + push_text("_static_modules"); + push_mapping(m); + f_add_constant(2); + for(e=0;e<NELEM(module_list);e++) { - current_module=module_list+e; - module_list[e].init_programs(); + struct program *p; + struct object *o; + struct pike_string *s; + start_new_program(); + module_list[e].init(); + p=end_program(); + + o=clone(p,0); + free_program(p); + + push_text(module_list[e].name); + push_object(o); + mapping_insert(m, sp-2, sp-1); + pop_n_elems(2); } - current_module=module_list; } -void exit_modules() +void exit_modules(void) { int e; - for(e=NELEM(module_list)-1;e>=0;e--) module_list[e].exit(); + for(e=NELEM(module_list)-1;e>=0;e--) + module_list[e].exit(); } diff --git a/src/module.h b/src/module.h index 21c0bd76d4674b365940f8f4dea2eaf803dd51fd..85c5d5a216a71cb03f70e5d3b8949de8a6342976 100644 --- a/src/module.h +++ b/src/module.h @@ -8,24 +8,10 @@ #include "types.h" -typedef void (*fun)(void); - -struct module -{ - char *name; - fun init_efuns; /* this one _might_ be called before the master is compiled */ - fun init_programs; /* this one is called after the master is compiled */ - fun exit; - INT32 refs; -}; - -#define UGLY_WORKAROUND [] -extern struct module *current_module; - /* Prototypes begin here */ -void init_modules_efuns(); -void init_modules_programs(); -void exit_modules(); +struct static_module; +void init_modules(void); +void exit_modules(void); /* Prototypes end here */