e576bb | 2002-10-11 | Martin Nilsson | | |
1cb5d5 | 2004-04-14 | Henrik Grubbström (Grubba) | | || $Id: module.c,v 1.24 2004/04/14 19:02:03 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 "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) | | #include "post_modules/modlist_headers.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
1cb5d5 | 2004-04-14 | Henrik Grubbström (Grubba) | | RCSID("$Id: module.c,v 1.24 2004/04/14 19:02:03 grubba Exp $");
|
48073c | 2003-02-05 | Henrik Grubbström (Grubba) | |
#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) | | #include "post_modules/modlist.h"
|
db3e13 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | };
void init_modules(void)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
1cb5d5 | 2004-04-14 | Henrik Grubbström (Grubba) | | struct program *p = NULL;
|
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;
|
1cb5d5 | 2004-04-14 | Henrik Grubbström (Grubba) | | if (!p) {
start_new_program();
p = Pike_compiler->new_program;
}
|
37b022 | 2002-01-31 | Marcus Comstedt | | if(SETJMP(recovery)) {
|
1cb5d5 | 2004-04-14 | Henrik Grubbström (Grubba) | |
|
37b022 | 2002-01-31 | Marcus Comstedt | | free_program(end_program());
|
1cb5d5 | 2004-04-14 | Henrik Grubbström (Grubba) | | p = NULL;
|
37b022 | 2002-01-31 | Marcus Comstedt | | 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();
|
1cb5d5 | 2004-04-14 | Henrik Grubbström (Grubba) | | if (Pike_compiler.new_program->num_identifier_references) {
debug_end_class(module_list[e].name,strlen(module_list[e].name),0);
p = NULL;
} else {
}
|
37b022 | 2002-01-31 | Marcus Comstedt | | }
UNSETJMP(recovery);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
|
1cb5d5 | 2004-04-14 | Henrik Grubbström (Grubba) | | if (p) free_program(end_program());
|
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;
|
00538d | 2003-03-26 | Martin Nilsson | |
init_main();
|
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;
|
00538d | 2003-03-26 | Martin Nilsson | |
exit_main();
|
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) | | }
|