scheme-private.h
Go to the documentation of this file.00001
00002
00008 #ifndef _SCHEME_PRIVATE_H
00009 #define _SCHEME_PRIVATE_H
00010
00011 #include "scheme.h"
00012
00013 enum scheme_port_kind {
00014 port_free=0,
00015 port_file=1,
00016 port_string=2,
00017 port_input=16,
00018 port_output=32
00019 };
00020
00021 typedef struct port {
00022 unsigned char kind;
00023 union {
00024 struct {
00025 FILE *file;
00026 int closeit;
00027 } stdio;
00028 struct {
00029 char *start;
00030 char *past_the_end;
00031 char *curr;
00032 } string;
00033 } rep;
00034 } port;
00035
00036
00037 struct cell {
00038 unsigned int _flag;
00039 union {
00040 struct {
00041 char *_svalue;
00042 int _length;
00043 } _string;
00044 num _number;
00045 port *_port;
00046 foreign_func _ff;
00047 struct {
00048 struct cell *_car;
00049 struct cell *_cdr;
00050 } _cons;
00051 } _object;
00052 };
00053
00054 struct scheme {
00055
00056 func_alloc malloc;
00057 func_dealloc free;
00058
00059
00060 int retcode;
00061 int tracing;
00062
00063 #define CELL_SEGSIZE 5000
00064 #define CELL_NSEGMENT 10
00065 char *alloc_seg[CELL_NSEGMENT];
00066 pointer cell_seg[CELL_NSEGMENT];
00067 int last_cell_seg;
00068
00069
00070 pointer args;
00071 pointer envir;
00072 pointer code;
00073 pointer dump;
00074
00075 int interactive_repl;
00076
00077 struct cell _sink;
00078 pointer sink;
00079 struct cell _NIL;
00080 pointer NIL;
00081 struct cell _HASHT;
00082 pointer T;
00083 struct cell _HASHF;
00084 pointer F;
00085 struct cell _EOF_OBJ;
00086 pointer EOF_OBJ;
00087 pointer oblist;
00088 pointer global_env;
00089
00090
00091 pointer LAMBDA;
00092 pointer QUOTE;
00093
00094 pointer QQUOTE;
00095 pointer UNQUOTE;
00096 pointer UNQUOTESP;
00097 pointer FEED_TO;
00098 pointer COLON_HOOK;
00099 pointer ERROR_HOOK;
00100 pointer SHARP_HOOK;
00101
00102 pointer free_cell;
00103 long fcells;
00104
00105 pointer inport;
00106 pointer outport;
00107 pointer save_inport;
00108 pointer loadport;
00109
00110 #define MAXFIL 64
00111 port load_stack[MAXFIL];
00112 int nesting_stack[MAXFIL];
00113 int file_i;
00114 int nesting;
00115
00116 char gc_verbose;
00117 char no_memory;
00118
00119 #define LINESIZE 1024
00120 char linebuff[LINESIZE];
00121 char strbuff[256];
00122
00123 FILE *tmpfp;
00124 int tok;
00125 int print_flag;
00126 pointer value;
00127 int op;
00128
00129 void *ext_data;
00130 long gensym_cnt;
00131
00132 struct scheme_interface *vptr;
00133 void *dump_base;
00134 int dump_size;
00135 };
00136
00137
00138 enum scheme_opcodes {
00139 #define _OP_DEF(A,B,C,D,E,OP) OP,
00140 #include "opdefines.h"
00141 OP_MAXDEFINED
00142 };
00143
00144
00145 #define cons(sc,a,b) _cons(sc,a,b,0)
00146 #define immutable_cons(sc,a,b) _cons(sc,a,b,1)
00147
00148 int is_string(pointer p);
00149 char *string_value(pointer p);
00150 int is_number(pointer p);
00151 num nvalue(pointer p);
00152 long ivalue(pointer p);
00153 double rvalue(pointer p);
00154 int is_integer(pointer p);
00155 int is_real(pointer p);
00156 int is_character(pointer p);
00157 long charvalue(pointer p);
00158 int is_vector(pointer p);
00159
00160 int is_port(pointer p);
00161
00162 int is_pair(pointer p);
00163 pointer pair_car(pointer p);
00164 pointer pair_cdr(pointer p);
00165 pointer set_car(pointer p, pointer q);
00166 pointer set_cdr(pointer p, pointer q);
00167
00168 int is_symbol(pointer p);
00169 char *symname(pointer p);
00170 int hasprop(pointer p);
00171
00172 int is_syntax(pointer p);
00173 int is_proc(pointer p);
00174 int is_foreign(pointer p);
00175 char *syntaxname(pointer p);
00176 int is_closure(pointer p);
00177 #ifdef USE_MACRO
00178 int is_macro(pointer p);
00179 #endif
00180 pointer closure_code(pointer p);
00181 pointer closure_env(pointer p);
00182
00183 int is_continuation(pointer p);
00184 int is_promise(pointer p);
00185 int is_environment(pointer p);
00186 int is_immutable(pointer p);
00187 void setimmutable(pointer p);
00188
00189 #endif