3 #ifndef _SCHEME_PRIVATE_H
4 #define _SCHEME_PRIVATE_H
7 /*------------------ Ugly internals -----------------------------------*/
8 /*------------------ Of interest only to FFI users --------------------*/
14 enum scheme_port_kind {
60 const foreign_object_vtable *_vtable;
66 /* arrays for segments */
76 #define CELL_SEGSIZE 5000 /* # of cells in one segment */
79 #define CELL_NSEGMENT 10 /* # of segments for cells */
81 char *alloc_seg[CELL_NSEGMENT];
82 pointer cell_seg[CELL_NSEGMENT];
85 /* We use 4 registers. */
86 pointer args; /* register for arguments of function */
87 pointer envir; /* stack register for current environment */
88 pointer code; /* register for current code */
89 pointer dump; /* stack register for next evaluation */
91 int interactive_repl; /* are we in an interactive REPL? */
94 pointer sink; /* when mem. alloc. fails */
96 pointer NIL; /* special cell representing empty cell */
98 pointer T; /* special cell representing #t */
100 pointer F; /* special cell representing #f */
101 struct cell _EOF_OBJ;
102 pointer EOF_OBJ; /* special cell representing end-of-file object */
103 pointer oblist; /* pointer to symbol table */
104 pointer global_env; /* pointer to global environment */
105 pointer c_nest; /* stack for nested calls from C */
107 /* global pointers to special symbols */
108 pointer LAMBDA; /* pointer to syntax lambda */
109 pointer QUOTE; /* pointer to syntax quote */
111 pointer QQUOTE; /* pointer to symbol quasiquote */
112 pointer UNQUOTE; /* pointer to symbol unquote */
113 pointer UNQUOTESP; /* pointer to symbol unquote-splicing */
114 pointer FEED_TO; /* => */
115 pointer COLON_HOOK; /* *colon-hook* */
116 pointer ERROR_HOOK; /* *error-hook* */
117 pointer SHARP_HOOK; /* *sharp-hook* */
118 pointer COMPILE_HOOK; /* *compile-hook* */
120 pointer free_cell; /* pointer to top of free cells */
121 long fcells; /* # of free cells */
131 port load_stack[MAXFIL]; /* Stack of open files for port -1 (LOADing) */
132 int nesting_stack[MAXFIL];
136 char gc_verbose; /* if gc_verbose is not zero, print gc status */
137 char no_memory; /* Whether mem. alloc. has failed */
140 #define LINESIZE 1024
142 char linebuff[LINESIZE];
144 #define STRBUFFSIZE 256
154 void *ext_data; /* For the benefit of foreign functions */
157 struct scheme_interface *vptr;
158 void *dump_base; /* pointer to base of allocated dump stack */
159 int dump_size; /* number of frames allocated for dump stack */
163 enum scheme_opcodes {
164 #define _OP_DEF(A,B,C,D,E,OP) OP,
165 #include "opdefines.h"
170 #define cons(sc,a,b) _cons(sc,a,b,0)
171 #define immutable_cons(sc,a,b) _cons(sc,a,b,1)
173 int is_string(pointer p);
174 char *string_value(pointer p);
175 int is_number(pointer p);
176 num nvalue(pointer p);
177 long ivalue(pointer p);
178 double rvalue(pointer p);
179 int is_integer(pointer p);
180 int is_real(pointer p);
181 int is_character(pointer p);
182 long charvalue(pointer p);
183 int is_vector(pointer p);
185 int is_port(pointer p);
187 int is_pair(pointer p);
188 pointer pair_car(pointer p);
189 pointer pair_cdr(pointer p);
190 pointer set_car(pointer p, pointer q);
191 pointer set_cdr(pointer p, pointer q);
193 int is_symbol(pointer p);
194 char *symname(pointer p);
195 int hasprop(pointer p);
197 int is_syntax(pointer p);
198 int is_proc(pointer p);
199 int is_foreign(pointer p);
200 char *syntaxname(pointer p);
201 int is_closure(pointer p);
203 int is_macro(pointer p);
205 pointer closure_code(pointer p);
206 pointer closure_env(pointer p);
208 int is_continuation(pointer p);
209 int is_promise(pointer p);
210 int is_environment(pointer p);
211 int is_immutable(pointer p);
212 void setimmutable(pointer p);
214 int is_foreign_object(pointer p);
215 const foreign_object_vtable *get_foreign_object_vtable(pointer p);
216 void *get_foreign_object_data(pointer p);