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 void *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* */
119 pointer COMPILE_HOOK; /* *compile-hook* */
122 pointer free_cell; /* pointer to top of free cells */
123 long fcells; /* # of free cells */
124 size_t inhibit_gc; /* nesting of gc_disable */
125 size_t reserved_cells; /* # of reserved cells */
127 int reserved_lineno; /* location of last reservation */
138 port load_stack[MAXFIL]; /* Stack of open files for port -1 (LOADing) */
139 int nesting_stack[MAXFIL];
143 char gc_verbose; /* if gc_verbose is not zero, print gc status */
144 char no_memory; /* Whether mem. alloc. has failed */
147 #define LINESIZE 1024
149 char linebuff[LINESIZE];
151 #define STRBUFFSIZE 256
161 void *ext_data; /* For the benefit of foreign functions */
164 struct scheme_interface *vptr;
168 enum scheme_opcodes {
169 #define _OP_DEF(A,B,C,D,E,OP) OP,
170 #include "opdefines.h"
175 #define cons(sc,a,b) _cons(sc,a,b,0)
176 #define immutable_cons(sc,a,b) _cons(sc,a,b,1)
178 int is_string(pointer p);
179 char *string_value(pointer p);
180 int is_number(pointer p);
181 num nvalue(pointer p);
182 long ivalue(pointer p);
183 double rvalue(pointer p);
184 int is_integer(pointer p);
185 int is_real(pointer p);
186 int is_character(pointer p);
187 long charvalue(pointer p);
188 int is_vector(pointer p);
190 int is_port(pointer p);
192 int is_pair(pointer p);
193 pointer pair_car(pointer p);
194 pointer pair_cdr(pointer p);
195 pointer set_car(pointer p, pointer q);
196 pointer set_cdr(pointer p, pointer q);
198 int is_symbol(pointer p);
199 char *symname(pointer p);
200 int hasprop(pointer p);
202 int is_syntax(pointer p);
203 int is_proc(pointer p);
204 int is_foreign(pointer p);
205 char *syntaxname(pointer p);
206 int is_closure(pointer p);
208 int is_macro(pointer p);
210 pointer closure_code(pointer p);
211 pointer closure_env(pointer p);
213 int is_continuation(pointer p);
214 int is_promise(pointer p);
215 int is_environment(pointer p);
216 int is_immutable(pointer p);
217 void setimmutable(pointer p);
219 int is_foreign_object(pointer p);
220 const foreign_object_vtable *get_foreign_object_vtable(pointer p);
221 void *get_foreign_object_data(pointer p);