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.
\*/
|
558069 | 1996-06-21 | Fredrik Hübinette (Hubbe) | | #ifndef PROGRAM_H
#define PROGRAM_H
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
#include <stdarg.h>
|
afa694 | 1997-01-28 | Fredrik Hübinette (Hubbe) | | #include "global.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
558069 | 1996-06-21 | Fredrik Hübinette (Hubbe) | | #define LFUN___INIT 0
#define LFUN_CREATE 1
#define LFUN_DESTROY 2
#define LFUN_ADD 3
#define LFUN_SUBTRACT 4
#define LFUN_AND 5
#define LFUN_OR 6
#define LFUN_XOR 7
#define LFUN_LSH 8
#define LFUN_RSH 9
#define LFUN_MULTIPLY 10
#define LFUN_DIVIDE 11
#define LFUN_MOD 12
#define LFUN_COMPL 13
#define LFUN_EQ 14
#define LFUN_LT 15
#define LFUN_GT 16
#define LFUN___HASH 17
#define LFUN_CAST 18
#define LFUN_NOT 19
|
774b06 | 1996-08-03 | Fredrik Hübinette (Hubbe) | | #define LFUN_INDEX 20
#define LFUN_ASSIGN_INDEX 21
|
dffa01 | 1997-01-15 | Fredrik Hübinette (Hubbe) | | #define LFUN_ARROW 22
#define LFUN_ASSIGN_ARROW 23
|
0683be | 1997-01-26 | Fredrik Hübinette (Hubbe) | | #define LFUN__SIZEOF 24
#define LFUN__INDICES 25
#define LFUN__VALUES 26
#define LFUN_CALL 27
|
558069 | 1996-06-21 | Fredrik Hübinette (Hubbe) | |
|
0683be | 1997-01-26 | Fredrik Hübinette (Hubbe) | | #define NUM_LFUNS 28
|
558069 | 1996-06-21 | Fredrik Hübinette (Hubbe) | |
extern char *lfun_names[];
|
dfa5b3 | 1996-12-05 | Fredrik Hübinette (Hubbe) | | #ifndef STRUCT_SVALUE_DECLARED
#define STRUCT_SVALUE_DECLARED
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | struct svalue;
|
dfa5b3 | 1996-12-05 | Fredrik Hübinette (Hubbe) | | #endif
#ifndef STRUCT_OBJECT_DECLARED
#define STRUCT_OBJECT_DECLARED
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | struct object;
|
dfa5b3 | 1996-12-05 | Fredrik Hübinette (Hubbe) | | #endif
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | * to the C/PIKE function body.
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | *
* c) A number of flags to send to 'add_simul_efun' to specify side effects
* and such.
*/
|
558069 | 1996-06-21 | Fredrik Hübinette (Hubbe) | | * 2^16 functions + global variables
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | * 2^16 inherits
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | * 2^16 arguments to pike functions
|
558069 | 1996-06-21 | Fredrik Hübinette (Hubbe) | | * 2^32 efuns
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | * 2^8 local variables (and arguments)
*/
union idptr
{
void (*c_fun)(INT32);
INT32 offset;
};
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | #define IDENTIFIER_PIKE_FUNCTION 1
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #define IDENTIFIER_C_FUNCTION 2
#define IDENTIFIER_FUNCTION 3
#define IDENTIFIER_VARARGS 4
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | #define IDENTIFIER_CONSTANT 8
#define IDENTIFIER_IS_FUNCTION(X) ((X) & IDENTIFIER_FUNCTION)
#define IDENTIFIER_IS_CONSTANT(X) ((X) & IDENTIFIER_CONSTANT)
#define IDENTIFIER_IS_VARIABLE(X) (!((X) & (IDENTIFIER_FUNCTION | IDENTIFIER_CONSTANT)))
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
struct identifier
{
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | struct pike_string *name;
struct pike_string *type;
|
7fda7a | 1997-09-08 | Fredrik Hübinette (Hubbe) | | unsigned INT16 identifier_flags;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | unsigned INT16 run_time_type;
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | #ifdef PROFILING
unsigned INT32 num_calls;
#endif /* PROFILING */
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | union idptr func;
};
#define ID_STATIC 0x01
#define ID_PRIVATE 0x02
#define ID_NOMASK 0x04
#define ID_PUBLIC 0x08
#define ID_PROTECTED 0x10
#define ID_VARARGS 0x20
#define ID_INLINE 0x40
#define ID_HIDDEN 0x80 /* needed? */
#define ID_INHERITED 0x100
struct reference
{
|
cb2256 | 1995-10-11 | Fredrik Hübinette (Hubbe) | | unsigned INT16 inherit_offset;
unsigned INT16 identifier_offset;
|
7fda7a | 1997-09-08 | Fredrik Hübinette (Hubbe) | | INT16 id_flags;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | };
struct inherit
{
struct program *prog;
INT16 inherit_level;
INT16 identifier_level;
INT32 storage_offset;
};
|
b504ed | 1997-09-21 | Fredrik Hübinette (Hubbe) | | #define PROG_DESTRUCT_IMMEDIATE 1
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | struct program
{
INT32 refs;
INT32 id;
INT32 storage_needed;
struct program *next;
struct program *prev;
unsigned char *program;
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | struct pike_string **strings;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | struct inherit *inherits;
struct reference *identifier_references;
struct identifier *identifiers;
unsigned INT16 *identifier_index;
struct svalue *constants;
char *linenumbers;
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | void (*init)(struct object *);
void (*exit)(struct object *);
|
d4828c | 1997-07-17 | Fredrik Hübinette (Hubbe) | | void (*gc_marked)(struct object *);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #ifdef DEBUG
unsigned INT32 checksum;
#endif
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | #ifdef PROFILING
unsigned INT32 num_clones;
#endif /* PROFILING */
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
SIZE_T total_size;
SIZE_T num_linenumbers;
SIZE_T program_size;
|
b504ed | 1997-09-21 | Fredrik Hübinette (Hubbe) | | unsigned INT16 flags;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | unsigned INT16 num_constants;
unsigned INT16 num_strings;
unsigned INT16 num_identifiers;
unsigned INT16 num_identifier_references;
unsigned INT16 num_identifier_indexes;
unsigned INT16 num_inherits;
|
558069 | 1996-06-21 | Fredrik Hübinette (Hubbe) | | INT16 lfuns[NUM_LFUNS];
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | };
#define INHERIT_FROM_PTR(P,X) ((P)->inherits + (X)->inherit_offset)
#define PROG_FROM_PTR(P,X) (INHERIT_FROM_PTR(P,X)->prog)
#define ID_FROM_PTR(P,X) (PROG_FROM_PTR(P,X)->identifiers+(X)->identifier_offset)
#define INHERIT_FROM_INT(P,X) INHERIT_FROM_PTR(P,(P)->identifier_references+(X))
#define PROG_FROM_INT(P,X) PROG_FROM_PTR(P,(P)->identifier_references+(X))
#define ID_FROM_INT(P,X) ID_FROM_PTR(P,(P)->identifier_references+(X))
#define free_program(p) do{ struct program *_=(p); if(!--_->refs) really_free_program(_); }while(0)
extern struct object fake_object;
extern struct program fake_program;
|
591c0c | 1997-01-19 | Fredrik Hübinette (Hubbe) | | void use_module(struct svalue *s);
int find_module_identifier(struct pike_string *ident);
|
b8cda2 | 1997-01-21 | Fredrik Hübinette (Hubbe) | | struct program *id_to_program(INT32 id);
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | void setup_fake_program(void);
void start_new_program(void);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | void really_free_program(struct program *p);
|
5683de | 1995-11-06 | Fredrik Hübinette (Hubbe) | | void dump_program_desc(struct program *p);
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | void toss_current_program(void);
|
624d09 | 1996-02-24 | Fredrik Hübinette (Hubbe) | | void check_program(struct program *p);
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | struct program *end_program(void);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | SIZE_T add_storage(SIZE_T size);
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | void set_init_callback(void (*init)(struct object *));
void set_exit_callback(void (*exit)(struct object *));
|
d4828c | 1997-07-17 | Fredrik Hübinette (Hubbe) | | void set_gc_mark_callback(void (*m)(struct object *));
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | int low_reference_inherited_identifier(int e,struct pike_string *name);
int reference_inherited_identifier(struct pike_string *super_name,
struct pike_string *function_name);
void rename_last_inherit(struct pike_string *n);
void do_inherit(struct program *p,INT32 flags, struct pike_string *name);
void simple_do_inherit(struct pike_string *s, INT32 flags,struct pike_string *name);
int isidentifier(struct pike_string *s);
|
05c7cd | 1997-07-19 | Fredrik Hübinette (Hubbe) | | int low_define_variable(struct pike_string *name,
struct pike_string *type,
INT32 flags,
INT32 offset,
INT32 run_time_type);
int map_variable(char *name,
char *type,
INT32 flags,
INT32 offset,
INT32 run_time_type);
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | int define_variable(struct pike_string *name,
struct pike_string *type,
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | INT32 flags);
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | int add_constant(struct pike_string *name,
struct svalue *c,
INT32 flags);
|
5c0a10 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | int simple_add_constant(char *name,
struct svalue *c,
INT32 flags);
|
e43ca2 | 1996-11-15 | Fredrik Hübinette (Hubbe) | | int add_integer_constant(char *name,
INT32 i,
INT32 flags);
|
5c0a10 | 1997-02-06 | Fredrik Hübinette (Hubbe) | | int add_float_constant(char *name,
double f,
INT32 flags);
int add_string_constant(char *name,
char *str,
INT32 flags);
int add_program_constant(char *name,
struct program *p,
INT32 flags);
|
c15240 | 1997-02-10 | Fredrik Hübinette (Hubbe) | | int add_function_constant(char *name, void (*cfun)(INT32), char * type, INT16 flags);
int end_class(char *name, INT32 flags);
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | INT32 define_function(struct pike_string *name,
struct pike_string *type,
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | INT16 flags,
INT8 function_flags,
union idptr *func);
struct ff_hash;
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | int find_shared_string_identifier(struct pike_string *name,
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | struct program *prog);
int find_identifier(char *name,struct program *prog);
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | int store_prog_string(struct pike_string *str);
|
5683de | 1995-11-06 | Fredrik Hübinette (Hubbe) | | int store_constant(struct svalue *foo, int equal);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | void start_line_numbering(void);
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | void store_linenumber(INT32 current_line, struct pike_string *current_file);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | char *get_line(unsigned char *pc,struct program *prog,INT32 *linep);
void my_yyerror(char *fmt,...);
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | void compile(void);
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | struct program *compile_file(struct pike_string *file_name);
struct program *compile_string(struct pike_string *prog,
struct pike_string *name);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | void add_function(char *name,void (*cfun)(INT32),char *type,INT16 flags);
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | void check_all_programs(void);
void cleanup_program(void);
|
c94c37 | 1996-03-28 | Fredrik Hübinette (Hubbe) | | void gc_mark_program_as_referenced(struct program *p);
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | void gc_check_all_programs(void);
void gc_mark_all_programs(void);
void gc_free_all_unreferenced_programs(void);
|
c3c703 | 1996-12-04 | Fredrik Hübinette (Hubbe) | | void count_memory_in_programs(INT32 *num_, INT32 *size_);
|
be478c | 1997-08-30 | Henrik Grubbström (Grubba) | | void push_locals(void);
void pop_locals(void);
|
cff0d7 | 1997-03-23 | Fredrik Hübinette (Hubbe) | | char *get_storage(struct object *o, struct program *p);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
void my_yyerror(char *fmt,...) ATTRIBUTE((format (printf, 1, 2)));
#endif
|