//////////////////////////////// //PaScheme PaScheme// //////////////////////////////// // // // Distribute under GPL v.2 // // or later // // (c)2002 Petr Cermak // // xgxg@seznam.cz // //////////////////////////////// #ifndef FUNCTIONS_H #define FUNCTIONS_H #include "datatypes.h" #include // uncomment to print spy: everytime spy is called //#define PRINTSPY // comment to prevent waiting for enter on the end of the program #define WAINTENTER Object* execute(char* code); Object* parse(char* code); Object* parse_list(char* code); Object* ev_list(Object* object, HDef* defs); Object* eval(Object* object, HDef* defs); //Object* process_builtinf(char* code, HDef* defs); Object* call_func(Object* function, Object* args, HDef* defs, Object* codeobj); /* * Built-in functions */ Object* list_f(Object* args, HDef* defs); Object* cons_f(Object* args, HDef* defs); Object* null_f(Object* args, HDef* defs); Object* car_f(Object* args, HDef* defs); Object* cdr_f(Object* args, HDef* defs); Object* lambda_f(Object* args, HDef* defs); Object* cond_f(Object* args, HDef* defs); Object* if_f(Object* args, HDef* defs); Object* plus_f(Object* args, HDef* defs); Object* minus_f(Object* args, HDef* defs); Object* mult_f(Object* args, HDef* defs); Object* div_f(Object* args, HDef* defs); Object* g_f(Object* args, HDef* defs); Object* l_f(Object* args, HDef* defs); Object* ge_f(Object* args, HDef* defs); Object* le_f(Object* args, HDef* defs); Object* eq_f(Object* args, HDef* defs); Object* ne_f(Object* args, HDef* defs); Object* spy_f(Object* args, HDef* defs); Object* quote_f(Object* args, HDef* defs); Object* eval_f(Object* args, HDef* defs); /* * Defs functions */ void add_def_arg(Object* object, Object* name, HDef* calldefs, HDef* defs); void add_def(Object* object, HDef* defs); Object* find_object(char* name_pos, HDef* defs); void create_defs_from(HDef* source, HDef* destination); Def* create_def(void); HDef* create_defs(void); void free_defs(HDef* defs); /* * Object & list functions */ Object* create_object(Holding type); Object* create_object_o(Object* old); void erase_object(Object* object); Object* car(Object* object); Object* cdr(Object* object); int n_args(Object* object); void create_bifobjs(); /* * Hash functions */ HDef* create_hash(); void free_hash(HDef* hash); void join_hash(HDef* source, HDef* destination); void add_to_hash(Def* def, HDef* hash); int hash_func(char* def); Def* find_in_hash(char* name, HDef* hash); /* * String/list functions */ char* get_first_item(char* code); char* get_next_item(char* code); int strpcmp(char* where, char* what); int isspace(char c); int isidentifier(char c); int isnumeric(char c); /* * IO functions */ void print_o(Object* object); void print_object(Object* object); /* * System functions */ void err_paste_id(char* errmsg, char* code); void error(char* message, int retcode); #endif //#ifndef FUNCTIONS_H