cb2256 | 1995-10-11 | Fredrik Hübinette (Hubbe) | | |
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | ||| This file a part of Pike, and is copyright by Fredrik Hubinette
||| Pike is distributed as GPL (General Public License)
|
cb2256 | 1995-10-11 | Fredrik Hübinette (Hubbe) | | ||| See the files COPYING and DISCLAIMER for more information.
\*/
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #include "global.h"
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | #include "constants.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #include "macros.h"
#include "program.h"
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | #include "pike_types.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #include "stralloc.h"
#include "memory.h"
#include "interpret.h"
|
244ce6 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | #include "mapping.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
c3c703 | 1996-12-04 | Fredrik Hübinette (Hubbe) | | static INT32 num_callable=0;
|
244ce6 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | static struct mapping *builtin_constants = 0;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
244ce6 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | struct mapping *get_builtin_constants()
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
244ce6 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | if(!builtin_constants)
builtin_constants=allocate_mapping(20);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
244ce6 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | return builtin_constants;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | void low_add_efun(struct pike_string *name, struct svalue *fun)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
244ce6 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | struct svalue s;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
244ce6 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | if(!builtin_constants)
builtin_constants=allocate_mapping(20);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
244ce6 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | s.type=T_STRING;
s.subtype=0;
s.u.string=name;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
244ce6 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | if(fun)
{
mapping_insert(builtin_constants, &s, fun);
}else{
map_delete(builtin_constants, &s);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
}
|
7bd0ea | 1996-02-19 | Fredrik Hübinette (Hubbe) | | struct callable *make_callable(c_fun fun,
char *name,
char *type,
INT16 flags,
optimize_fun optimize,
docode_fun docode)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
struct callable *f;
f=ALLOC_STRUCT(callable);
|
c3c703 | 1996-12-04 | Fredrik Hübinette (Hubbe) | | num_callable++;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | f->refs=1;
f->function=fun;
f->name=make_shared_string(name);
f->type=parse_type(type);
f->flags=flags;
|
7bd0ea | 1996-02-19 | Fredrik Hübinette (Hubbe) | | f->docode=docode;
f->optimize=optimize;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | return f;
}
void really_free_callable(struct callable *fun)
{
free_string(fun->type);
free_string(fun->name);
free((char *)fun);
|
c3c703 | 1996-12-04 | Fredrik Hübinette (Hubbe) | | num_callable--;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
|
7bd0ea | 1996-02-19 | Fredrik Hübinette (Hubbe) | | void add_efun2(char *name,
c_fun fun,
char *type,
INT16 flags,
optimize_fun optimize,
docode_fun docode)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
struct svalue s;
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | struct pike_string *n;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
n=make_shared_string(name);
s.type=T_FUNCTION;
|
bdb509 | 1996-09-25 | Fredrik Hübinette (Hubbe) | | s.subtype=FUNCTION_BUILTIN;
|
7bd0ea | 1996-02-19 | Fredrik Hübinette (Hubbe) | | s.u.efun=make_callable(fun, name, type, flags, optimize, docode);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | low_add_efun(n, &s);
free_svalue(&s);
free_string(n);
}
|
7bd0ea | 1996-02-19 | Fredrik Hübinette (Hubbe) | | void add_efun(char *name, c_fun fun, char *type, INT16 flags)
{
add_efun2(name,fun,type,flags,0,0);
}
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | void cleanup_added_efuns()
{
|
244ce6 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | if(builtin_constants)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
244ce6 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | free_mapping(builtin_constants);
builtin_constants=0;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
}
|
c3c703 | 1996-12-04 | Fredrik Hübinette (Hubbe) | | void count_memory_in_callables(INT32 *num_, INT32 *size_)
{
*num_=num_callable;
*size_=num_callable*sizeof(struct callable);
}
|