3
#ifndef _SCHEME_PRIVATE_H
4
#define _SCHEME_PRIVATE_H
7
/*------------------ Ugly internals -----------------------------------*/
8
/*------------------ Of interest only to FFI users --------------------*/
10
enum scheme_port_kind {
53
/* arrays for segments */
61
#define CELL_SEGSIZE 5000 /* # of cells in one segment */
62
#define CELL_NSEGMENT 20 /* # of segments for cells */
63
char *alloc_seg[CELL_NSEGMENT];
64
pointer cell_seg[CELL_NSEGMENT];
67
/* We use 5 registers. */
68
pointer args; /* register for arguments of function */
69
pointer envir; /* stack register for current environment */
70
pointer code; /* register for current code */
71
pointer dump; /* stack register for next evaluation */
72
pointer safe_foreign; /* register to avoid gc problems */
74
int interactive_repl; /* are we in an interactive REPL? */
75
int print_output; /* set to 1 to print results and error messages */
76
int print_error; /* set to 1 while printing error messages */
79
pointer sink; /* when mem. alloc. fails */
81
pointer NIL; /* special cell representing empty cell */
83
pointer T; /* special cell representing #t */
85
pointer F; /* special cell representing #f */
87
pointer EOF_OBJ; /* special cell representing end-of-file object */
88
pointer oblist; /* pointer to symbol table */
89
pointer global_env; /* pointer to global environment */
91
/* global pointers to special symbols */
92
pointer LAMBDA; /* pointer to syntax lambda */
93
pointer QUOTE; /* pointer to syntax quote */
95
pointer QQUOTE; /* pointer to symbol quasiquote */
96
pointer UNQUOTE; /* pointer to symbol unquote */
97
pointer UNQUOTESP; /* pointer to symbol unquote-splicing */
98
pointer FEED_TO; /* => */
99
pointer COLON_HOOK; /* *colon-hook* */
100
pointer ERROR_HOOK; /* *error-hook* */
101
pointer SHARP_HOOK; /* *sharp-hook* */
103
pointer free_cell; /* pointer to top of free cells */
104
long fcells; /* # of free cells */
112
port load_stack[MAXFIL]; /* Stack of open files for port -1 (LOADing) */
113
int nesting_stack[MAXFIL];
117
char gc_verbose; /* if gc_verbose is not zero, print gc status */
118
char no_memory; /* Whether mem. alloc. has failed */
120
#define LINESIZE 1024
121
char linebuff[LINESIZE];
122
char strbuff[LINESIZE];
130
void *ext_data; /* For the benefit of foreign functions */
133
struct scheme_interface *vptr;
134
void *dump_base; /* pointer to base of allocated dump stack */
135
int dump_size; /* number of frames allocated for dump stack */
142
enum scheme_opcodes {
143
#define _OP_DEF(A,B,C,D,E,OP) OP,
144
#include "opdefines.h"
149
#define cons(sc,a,b) _cons(sc,a,b,0)
150
#define immutable_cons(sc,a,b) _cons(sc,a,b,1)
152
int is_string(pointer p);
153
char *string_value(pointer p);
154
int is_number(pointer p);
155
num nvalue(pointer p);
156
long ivalue(pointer p);
157
double rvalue(pointer p);
158
int is_integer(pointer p);
159
int is_real(pointer p);
160
int is_character(pointer p);
161
int string_length(pointer p);
162
gunichar charvalue(pointer p);
163
int is_vector(pointer p);
165
int is_port(pointer p);
167
int is_pair(pointer p);
168
pointer pair_car(pointer p);
169
pointer pair_cdr(pointer p);
170
pointer set_car(pointer p, pointer q);
171
pointer set_cdr(pointer p, pointer q);
173
int is_symbol(pointer p);
174
char *symname(pointer p);
175
char *symkey(pointer p);
176
int hasprop(pointer p);
178
int is_syntax(pointer p);
179
int is_proc(pointer p);
180
int is_foreign(pointer p);
181
char *syntaxname(pointer p);
182
int is_closure(pointer p);
183
int is_macro(pointer p);
184
pointer closure_code(pointer p);
185
pointer closure_env(pointer p);
187
int is_continuation(pointer p);
188
int is_promise(pointer p);
189
int is_environment(pointer p);
190
int is_immutable(pointer p);
191
void setimmutable(pointer p);