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.
\*/
|
46aa64 | 1999-12-29 | Henrik Grubbström (Grubba) | |
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #include "global.h"
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | #include "constants.h"
|
bb55f8 | 1997-03-16 | Fredrik Hübinette (Hubbe) | | #include "pike_macros.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #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"
|
9aa6fa | 1997-05-19 | Fredrik Hübinette (Hubbe) | | #include "pike_memory.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #include "interpret.h"
|
244ce6 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | #include "mapping.h"
|
b2d3e4 | 2000-12-01 | Fredrik Hübinette (Hubbe) | | #include "pike_error.h"
|
45ee5d | 1999-02-10 | Fredrik Hübinette (Hubbe) | | #include "block_alloc.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
8a2a52 | 2001-03-03 | Henrik Grubbström (Grubba) | | RCSID("$Id: constants.c,v 1.28 2001/03/03 00:23:45 grubba Exp $");
|
24ddc7 | 1998-03-28 | Henrik Grubbström (Grubba) | |
|
5f61da | 2000-04-13 | Fredrik Hübinette (Hubbe) | | struct mapping *builtin_constants = 0;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT struct mapping *get_builtin_constants(void)
|
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) | | }
}
|
cecf51 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | void low_add_constant(char *name, struct svalue *fun)
{
struct pike_string *p;
p=make_shared_string(name);
low_add_efun(p, fun);
free_string(p);
}
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT void add_global_program(char *name, struct program *p)
|
cecf51 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | {
struct svalue s;
s.type=T_PROGRAM;
s.subtype=0;
s.u.program=p;
low_add_constant(name, &s);
}
|
45ee5d | 1999-02-10 | Fredrik Hübinette (Hubbe) | | #undef EXIT_BLOCK
#define EXIT_BLOCK(X) do { \
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(X->type); \
|
45ee5d | 1999-02-10 | Fredrik Hübinette (Hubbe) | | free_string(X->name); \
}while(0)
BLOCK_ALLOC(callable,128)
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT struct callable *low_make_callable(c_fun fun,
|
45ee5d | 1999-02-10 | Fredrik Hübinette (Hubbe) | | struct pike_string *name,
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *type,
|
45ee5d | 1999-02-10 | Fredrik Hübinette (Hubbe) | | INT16 flags,
optimize_fun optimize,
docode_fun docode)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
45ee5d | 1999-02-10 | Fredrik Hübinette (Hubbe) | | struct callable *f=alloc_callable();
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | f->refs=1;
f->function=fun;
|
45ee5d | 1999-02-10 | Fredrik Hübinette (Hubbe) | | f->name=name;
f->type=type;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | f->flags=flags;
|
7bd0ea | 1996-02-19 | Fredrik Hübinette (Hubbe) | | f->docode=docode;
f->optimize=optimize;
|
044c62 | 1999-04-14 | Fredrik Hübinette (Hubbe) | | #ifdef PIKE_DEBUG
{
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *z = check_call(function_type_string, type, 0);
|
babd87 | 2001-02-23 | Henrik Grubbström (Grubba) | | f->may_return_void = (z == void_type_string);
|
044c62 | 1999-04-14 | Fredrik Hübinette (Hubbe) | | if(!z) fatal("Gnapp!\n");
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(z);
|
044c62 | 1999-04-14 | Fredrik Hübinette (Hubbe) | | }
#endif
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | return f;
}
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT struct callable *make_callable(c_fun fun,
|
45ee5d | 1999-02-10 | Fredrik Hübinette (Hubbe) | | char *name,
char *type,
INT16 flags,
optimize_fun optimize,
docode_fun docode)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
babd87 | 2001-02-23 | Henrik Grubbström (Grubba) | | return low_make_callable(fun, make_shared_string(name), parse_type(type),
flags, optimize, docode);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT struct callable *add_efun2(char *name,
|
4d7b18 | 1999-12-07 | Fredrik Hübinette (Hubbe) | | 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;
|
4d7b18 | 1999-12-07 | Fredrik Hübinette (Hubbe) | | struct callable *ret;
|
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;
|
4d7b18 | 1999-12-07 | Fredrik Hübinette (Hubbe) | | ret=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);
|
4d7b18 | 1999-12-07 | Fredrik Hübinette (Hubbe) | | return ret;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT struct callable *add_efun(char *name, c_fun fun, char *type, INT16 flags)
|
7bd0ea | 1996-02-19 | Fredrik Hübinette (Hubbe) | | {
|
4d7b18 | 1999-12-07 | Fredrik Hübinette (Hubbe) | | return add_efun2(name,fun,type,flags,0,0);
|
7bd0ea | 1996-02-19 | Fredrik Hübinette (Hubbe) | | }
|
51f0e0 | 2000-08-10 | Henrik Grubbström (Grubba) | | PMOD_EXPORT struct callable *quick_add_efun(char *name, ptrdiff_t name_length,
c_fun fun,
char *type, ptrdiff_t type_length,
INT16 flags,
optimize_fun optimize,
docode_fun docode)
|
45ee5d | 1999-02-10 | Fredrik Hübinette (Hubbe) | | {
struct svalue s;
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_string *n;
struct pike_type *t;
|
4d7b18 | 1999-12-07 | Fredrik Hübinette (Hubbe) | | struct callable *ret;
|
45ee5d | 1999-02-10 | Fredrik Hübinette (Hubbe) | |
|
8a2a52 | 2001-03-03 | Henrik Grubbström (Grubba) | | n = make_shared_binary_string(name, name_length);
#ifdef USE_PIKE_TYPE
t = make_pike_type(type);
#else /* !USE_PIKE_TYPE */
t = make_shared_binary_string(type, type_length);
#endif /* USE_PIKE_TYPE */
|
45ee5d | 1999-02-10 | Fredrik Hübinette (Hubbe) | | #ifdef DEBUG
check_type_string(t);
#endif
s.type=T_FUNCTION;
s.subtype=FUNCTION_BUILTIN;
add_ref(n);
|
4d7b18 | 1999-12-07 | Fredrik Hübinette (Hubbe) | | ret=s.u.efun=low_make_callable(fun, n, t, flags, optimize, docode);
|
45ee5d | 1999-02-10 | Fredrik Hübinette (Hubbe) | | low_add_efun(n, &s);
free_svalue(&s);
free_string(n);
|
4d7b18 | 1999-12-07 | Fredrik Hübinette (Hubbe) | | return ret;
|
45ee5d | 1999-02-10 | Fredrik Hübinette (Hubbe) | | }
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | void cleanup_added_efuns(void)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
5b7b06 | 1999-04-08 | Fredrik Hübinette (Hubbe) | | #ifdef DO_PIKE_CLEANUP
|
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) | | }
|
5b7b06 | 1999-04-08 | Fredrik Hübinette (Hubbe) | | #endif
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
|