#ifndef FUNCTION_H #define FUNCTION_H /* It is usually better to include "lpc_incl.h" instead of including this directly */ /* FP_LOCAL */ typedef struct { short index; } local_ptr_t; /* FP_SIMUL */ typedef local_ptr_t simul_ptr_t; /* FP_EFUN */ typedef local_ptr_t efun_ptr_t; /* FP_FUNCTIONAL */ typedef struct { /* these two must come first */ unsigned char num_arg; unsigned char num_local; short fio; struct program_s *prog; int offset; short vio; char lpccode[80]; } functional_t; /* common header */ typedef struct { unsigned short ref; short type; /* FP_* is used */ #ifdef DEBUG int extra_ref; #endif struct object_s *owner; struct array_s *args; } funptr_hdr_t; typedef struct funptr_s { funptr_hdr_t hdr; union { efun_ptr_t efun; local_ptr_t local; simul_ptr_t simul; functional_t functional; } f; } funptr_t; union string_or_func { funptr_t *f; char *s; }; void dealloc_funp (funptr_t *); void push_refed_funp (funptr_t *); INLINE void push_funp (funptr_t *); INLINE void free_funp (funptr_t *); int merge_arg_lists (int, struct array_s *, int); INLINE funptr_t *make_efun_funp (int, struct svalue_s *); INLINE funptr_t *make_lfun_funp (int, struct svalue_s *); INLINE funptr_t *make_simul_funp (int, struct svalue_s *); INLINE funptr_t *make_functional_funp (short, short, short, struct svalue_s *, int); #endif