e576bb | 2002-10-11 | Martin Nilsson | | |
48073c | 2003-02-05 | Henrik Grubbström (Grubba) | | || $Id: module.c,v 1.21 2003/02/05 13:05:37 grubba Exp $
|
e576bb | 2002-10-11 | Martin Nilsson | | */
|
aedfb1 | 2002-10-09 | Martin Nilsson | |
|
db3e13 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | #include "global.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #include "module.h"
|
bb55f8 | 1997-03-16 | Fredrik Hübinette (Hubbe) | | #include "pike_macros.h"
|
b2d3e4 | 2000-12-01 | Fredrik Hübinette (Hubbe) | | #include "pike_error.h"
|
db3e13 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | #include "builtin_functions.h"
#include "main.h"
#include "svalue.h"
#include "interpret.h"
#include "stralloc.h"
#include "object.h"
#include "mapping.h"
|
992e66 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | #include "program_id.h"
|
37b022 | 2002-01-31 | Marcus Comstedt | | #include "language.h"
#include "lex.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
db3e13 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | #include "modules/modlist_headers.h"
|
f17308 | 2001-02-01 | Fredrik Hübinette (Hubbe) | | #ifndef IN_TPIKE
#include "post_modules/modlist_headers.h"
#endif
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
48073c | 2003-02-05 | Henrik Grubbström (Grubba) | | RCSID("$Id: module.c,v 1.21 2003/02/05 13:05:37 grubba Exp $");
#if defined(TRACE_MAIN) || defined(TRACE_MODULE)
#define TRACE(X) fprintf X
#else /* !TRACE_MAIN */
#define TRACE(X)
#endif /* TRACE_MAIN */
|
24ddc7 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
db3e13 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | typedef void (*modfun)(void);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
db3e13 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | struct static_module
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
db3e13 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | char *name;
modfun init;
modfun exit;
};
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
db3e13 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | static struct static_module module_list[] = {
|
156fd5 | 1997-10-27 | Fredrik Hübinette (Hubbe) | | { "Builtin", low_init_main, low_exit_main }
|
db3e13 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | #include "modules/modlist.h"
|
f17308 | 2001-02-01 | Fredrik Hübinette (Hubbe) | | #ifndef IN_TPIKE
#include "post_modules/modlist.h"
#endif
|
156fd5 | 1997-10-27 | Fredrik Hübinette (Hubbe) | | ,{ "Builtin2", init_main, exit_main }
|
db3e13 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | };
void init_modules(void)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
c712e7 | 1998-04-23 | Fredrik Hübinette (Hubbe) | | struct program *p;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | unsigned int e;
|
37b022 | 2002-01-31 | Marcus Comstedt | | struct lex save_lex;
save_lex = lex;
lex.current_line=1;
lex.current_file=make_shared_string("-");
|
c712e7 | 1998-04-23 | Fredrik Hübinette (Hubbe) | |
start_new_program();
|
992e66 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | Pike_compiler->new_program->id=PROG___BUILTIN_ID;
|
db3e13 | 1997-02-06 | Fredrik Hübinette (Hubbe) | |
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | for(e=0;e<NELEM(module_list);e++)
{
|
37b022 | 2002-01-31 | Marcus Comstedt | | JMP_BUF recovery;
|
db3e13 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | start_new_program();
|
37b022 | 2002-01-31 | Marcus Comstedt | | if(SETJMP(recovery)) {
free_program(end_program());
call_handle_error();
} else {
|
48073c | 2003-02-05 | Henrik Grubbström (Grubba) | | TRACE((stderr, "Initializing static module #%d: \"%s\"...\n",
e, module_list[e].name));
|
37b022 | 2002-01-31 | Marcus Comstedt | | module_list[e].init();
debug_end_class(module_list[e].name,strlen(module_list[e].name),0);
}
UNSETJMP(recovery);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
|
c712e7 | 1998-04-23 | Fredrik Hübinette (Hubbe) | | push_text("_static_modules");
push_object(low_clone(p=end_program()));
f_add_constant(2);
free_program(p);
|
37b022 | 2002-01-31 | Marcus Comstedt | | free_string(lex.current_file);
lex = save_lex;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
|
db3e13 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | void exit_modules(void)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
37b022 | 2002-01-31 | Marcus Comstedt | | JMP_BUF recovery;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | int e;
|
db3e13 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | for(e=NELEM(module_list)-1;e>=0;e--)
|
37b022 | 2002-01-31 | Marcus Comstedt | | {
if(SETJMP(recovery))
call_handle_error();
|
48073c | 2003-02-05 | Henrik Grubbström (Grubba) | | else {
TRACE((stderr, "Exiting static module #%d: \"%s\"...\n",
e, module_list[e].name));
|
37b022 | 2002-01-31 | Marcus Comstedt | | module_list[e].exit();
|
48073c | 2003-02-05 | Henrik Grubbström (Grubba) | | }
|
37b022 | 2002-01-31 | Marcus Comstedt | | UNSETJMP(recovery);
}
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
|