pike.git / src / constants.h

version» Context lines:

pike.git/src/constants.h:1: - /*\ - ||| This file a part of Pike, and is copyright by Fredrik Hubinette - ||| Pike is distributed as GPL (General Public License) - ||| See the files COPYING and DISCLAIMER for more information. - \*/ -  +    /* -  * $Id: constants.h,v 1.15 2000/12/13 21:23:35 hubbe Exp $ + || This file is part of Pike. For copyright information see COPYRIGHT. + || Pike is distributed under GPL, LGPL and MPL. See the file COPYING + || for more information.   */ -  +    #ifndef ADD_EFUN_H   #define ADD_EFUN_H      #include "svalue.h"   #include "hashtable.h"   #include "las.h" /* For OPT_SIDE_EFFECT etc. */   #include "block_alloc_h.h"      typedef int (*docode_fun)(node *n);   typedef node *(*optimize_fun)(node *n);    -  + #define CALLABLE_DYNAMIC 1 +    struct callable   { -  INT32 refs; - #ifdef PIKE_SECURITY -  struct object *prot; - #endif +  PIKE_MEMORY_OBJECT_MEMBERS;    c_fun function; -  struct pike_string *type; +  struct pike_type *type;    struct pike_string *name; -  INT16 flags; +  struct program *prog; +  INT16 flags; /* OPT_* */ +  INT16 internal_flags;   #ifdef PIKE_DEBUG    INT8 may_return_void; -  +  long runs; +  struct callable *prev;   #endif    optimize_fun optimize;    docode_fun docode;    struct callable *next;   };    -  + #ifdef PIKE_DEBUG + /* We have a double-linked list in debug mode for identification +  * purposes. */ + extern struct callable *first_callable; + #endif +    /* Prototypes begin here */   PMOD_EXPORT struct mapping *get_builtin_constants(void);   void low_add_efun(struct pike_string *name, struct svalue *fun); - void low_add_constant(char *name, struct svalue *fun); - PMOD_EXPORT void add_global_program(char *name, struct program *p); - BLOCK_ALLOC(callable,128) + void low_add_constant(const char *name, struct svalue *fun); + void add_pike_string_constant(const char *name, const char *str, int len); + PMOD_EXPORT void add_global_program(const char *name, struct program *p); + void really_free_callable(struct callable * c); + void count_memory_in_callables(size_t * num, size_t * size); + void free_all_callable_blocks();   PMOD_EXPORT struct callable *low_make_callable(c_fun fun,    struct pike_string *name, -  struct pike_string *type, -  INT16 flags, +  struct pike_type *type, +  int flags,    optimize_fun optimize,    docode_fun docode);   PMOD_EXPORT struct callable *make_callable(c_fun fun, -  char *name, -  char *type, -  INT16 flags, +  const char *name, +  const char *type, +  int flags,    optimize_fun optimize,    docode_fun docode); - PMOD_EXPORT struct callable *add_efun2(char *name, + PMOD_EXPORT void add_efun2(const char *name,    c_fun fun, -  char *type, -  INT16 flags, +  const char *type, +  int flags,    optimize_fun optimize,    docode_fun docode); - PMOD_EXPORT struct callable *add_efun(char *name, c_fun fun, char *type, INT16 flags); - PMOD_EXPORT struct callable *quick_add_efun(char *name, ptrdiff_t name_length, + PMOD_EXPORT void add_efun(const char *name, c_fun fun, const char *type, int flags); + PMOD_EXPORT void quick_add_efun(const char *name, ptrdiff_t name_length,    c_fun fun, -  char *type, ptrdiff_t type_length, -  INT16 flags, +  const char *type, ptrdiff_t type_length, +  int flags,    optimize_fun optimize,    docode_fun docode); - void cleanup_added_efuns(void); + PMOD_EXPORT void visit_callable (struct callable *c, int action); + void init_builtin_constants(void); + void exit_builtin_constants(void);   /* Prototypes end here */    -  + #define visit_callable_ref(C, REF_TYPE) \ +  visit_ref (pass_callable (C), (REF_TYPE), \ +  (visit_thing_fn *) &visit_callable, NULL)      #include "pike_macros.h"    - #define ADD_EFUN(NAME,FUN,TYPE,FLAGS) \ -  quick_add_efun(NAME,CONSTANT_STRLEN(NAME),FUN,TYPE,CONSTANT_STRLEN(TYPE),FLAGS,0,0) + #define ADD_EFUN2(NAME,FUN,TYPE,OPT_FLAGS,OPTIMIZE,DOCODE) \ +  quick_add_efun(NAME,CONSTANT_STRLEN(NAME),FUN, \ +  TYPE,CONSTANT_STRLEN(TYPE),OPT_FLAGS,OPTIMIZE,DOCODE)    - #define ADD_EFUN2(NAME,FUN,TYPE,FLAGS,OPTIMIZE,DOCODE) \ -  quick_add_efun(NAME,CONSTANT_STRLEN(NAME),FUN,TYPE,CONSTANT_STRLEN(TYPE),FLAGS,OPTIMIZE,DOCODE) + #define ADD_EFUN(NAME,FUN,TYPE,OPT_FLAGS) \ +  ADD_EFUN2(NAME,FUN,TYPE,OPT_FLAGS,0,0)      #define ADD_EFUN_DTYPE(NAME,FUN,DTYPE,FLAGS) do { \    DTYPE_START; \    {DTYPE} \    { \    struct pike_string *_t; \    DTYPE_END(_t); \    quick_add_efun(NAME,CONSTANT_STRLEN(NAME),FUN,_t->str,_t->len,FLAGS,0,0); \    free_string(_t); \    } \   } while (0)      #endif