pike.git/src/modules/Parser/parser.c:1:
#include "global.h"
#include "stralloc.h"
#include "global.h"
- RCSID("$Id: parser.c,v 1.3 1999/06/12 13:42:42 mirar Exp $");
+ RCSID("$Id: parser.c,v 1.4 1999/06/19 20:25:22 hubbe Exp $");
#include "pike_macros.h"
#include "interpret.h"
#include "program.h"
#include "object.h"
#include "operators.h"
#include "parser.h"
#define PARSER_INITER
pike.git/src/modules/Parser/parser.c:48:
char *name;
void (*init)(void);
void (*exit)(void);
} initsubmodule[]=
{
#undef PARSER_CLASS
#undef PARSER_SUBMODULE
#define PARSER_CLASS(name,init,exit,prog)
#define PARSER_SUBMODULE(name,init,exit) { name,init,exit },
#include "initstuff.h"
+ {0,0,0 }
};
static struct
{
char *name;
void (*init)(void);
void (*exit)(void);
struct pike_string *ps;
struct object *o;
} submagic[]=
{
#undef PARSER_SUBMODULE
#undef PARSER_SUBMODMAG
#define PARSER_SUBMODULE(a,b,c)
#define PARSER_SUBMODMAG(name,init,exit) { name,init,exit,NULL,NULL },
#include "initstuff.h"
-
+ { 0,0,0,0,0 }
};
#ifdef PIKE_DEBUG
#define PARSER_CHECK_STACK(X) do { if (save_sp != sp) { fatal("%s:%d: %d droppings on stack! previous init: %s\n", __FILE__, __LINE__, sp - save_sp,X); } } while(0)
#else
#define PARSER_CHECK_STACK(X)
#endif /* PIKE_DEBUG */
static void parser_magic_index(INT32 args)
{
struct svalue tmp;
int i;
if (args!=1)
error("Parser.`[]: Too few or too many arguments\n");
if (sp[-1].type!=T_STRING)
error("Parser.`[]: Illegal type of argument\n");
- for (i=0; i<(int)NELEM(submagic); i++)
+ for (i=0; i<(int)NELEM(submagic)-1; i++)
if (sp[-1].u.string==submagic[i].ps)
{
#ifdef PIKE_DEBUG
struct svalue *save_sp;
#endif
pop_stack();
#ifdef PIKE_DEBUG
save_sp = sp;
#endif
pike.git/src/modules/Parser/parser.c:161: Inside #if defined(DEBUG)
fprintf(stderr,"Parser: initiating class \"Parser.%s\"...\n",
initclass[i].name);
#endif
(initclass[i].init)();
PARSER_CHECK_STACK(initclass[i].name);
initclass[i].dest[0]=end_program();
add_program_constant(initclass[i].name,initclass[i].dest[0],0);
}
- for (i=0; i<(int)NELEM(initsubmodule); i++)
+ for (i=0; i<(int)NELEM(initsubmodule)-1; i++)
{
struct program *p;
struct pike_string *s;
#ifdef DEBUG
fprintf(stderr,"Parser: initiating submodule \"Parser.%s\"...\n",
initsubmodule[i].name);
#endif
start_new_program();
pike.git/src/modules/Parser/parser.c:183:
PARSER_CHECK_STACK(initsubmodule[i].name);
p=end_program();
push_object(clone_object(p,0));
s=make_shared_string(initsubmodule[i].name);
add_constant(s,sp-1,0);
free_string(s);
free_program(p);
pop_stack();
}
- for (i=0; i<(int)NELEM(submagic); i++)
+ for (i=0; i<(int)NELEM(submagic)-1; i++)
submagic[i].ps=make_shared_string(submagic[i].name);
#undef PARSER_FUNCTION
#define PARSER_FUNCTION(name,func,def0,def1) ADD_FUNCTION(name,func,def0,def1);
#include "initstuff.h"
ADD_FUNCTION("`[]",parser_magic_index,
tFunc(tString,tMixed),0);
}
void pike_module_exit(void)
{
int i;
for (i=0; i<(int)NELEM(initclass); i++)
{
(initclass[i].exit)();
free_program(initclass[i].dest[0]);
}
- for (i=0; i<(int)NELEM(initsubmodule); i++)
+ for (i=0; i<(int)NELEM(initsubmodule)-1; i++)
(initsubmodule[i].exit)();
- for (i=0; i<(int)NELEM(submagic); i++)
+ for (i=0; i<(int)NELEM(submagic)-1; i++)
if (submagic[i].o)
{
(submagic[i].exit)();
free_object(submagic[i].o);
}
}