ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/microscheme/scheme-private.h
Revision: 1.2
Committed: Wed Nov 25 10:01:39 2015 UTC (8 years, 6 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.1: +7 -5 lines
Log Message:
*** empty log message ***

File Contents

# Content
1
2 /* scheme-private.h */
3
4 #ifndef SCHEME_PRIVATE_H
5 #define SCHEME_PRIVATE_H
6
7 #include "scheme.h"
8
9 #include <inttypes.h>
10
11 /*------------------ Ugly internals -----------------------------------*/
12
13 /*------------------ Of interest only to FFI users --------------------*/
14
15 # ifdef __cplusplus
16 extern "C"
17 {
18 # endif
19
20 enum scheme_port_kind
21 {
22 port_free = 0,
23 port_file = 1,
24 port_string = 2,
25 port_srfi6 = 4,
26 port_input = 16,
27 port_output = 32,
28 port_saw_EOF = 64
29 };
30
31 typedef struct port
32 {
33 unsigned char kind;
34 int16_t unget;
35 union
36 {
37 struct
38 {
39 int file;
40 int closeit;
41 # if SHOW_ERROR_LINE
42 int curr_line;
43 char *filename;
44 # endif
45 } stdio;
46 struct
47 {
48 char *start;
49 char *past_the_end;
50 char *curr;
51 } string;
52 } rep;
53 } port;
54
55 /* cell structure */
56 struct cell
57 {
58 union
59 {
60 struct
61 {
62 char *svalue;
63 int length;
64 } string;
65
66 num number;
67
68 port *port;
69
70 foreign_func ff;
71
72 struct
73 {
74 struct cell *car;
75 struct cell *cdr;
76 } cons;
77
78 } object;
79
80 unsigned int flag; /* need 11 bits */
81 };
82
83 /* frequently accessed members are near the beginning, reducing codesize esp. on CISC */
84 struct scheme
85 {
86 /* NIL is the most commonly accessed value */
87 struct cell xNIL; /* special cell representing empty cell */
88
89 /* We use 4 registers. */
90 pointer args; /* register for arguments of function */
91 pointer envir; /* stack register for current environment */
92 pointer code; /* register for current code */
93 pointer dump; /* stack register for next evaluation */
94
95 struct cell xT; /* special cell representing #t */
96 struct cell xF; /* special cell representing #f */
97 struct cell xEOF_OBJ; /* special cell representing end-of-file object */
98 struct cell xsink; /* when mem. alloc. fails */
99
100 /* arrays for segments */
101 #ifndef CELL_SEGSIZE
102 # define CELL_SEGSIZE 128 /* # of cells in one segment */
103 #endif
104 #ifndef CELL_NSEGMENT
105 # define CELL_NSEGMENT 10 /* # of segments for cells */
106 #endif
107 char *alloc_seg[CELL_NSEGMENT];
108 pointer cell_seg[CELL_NSEGMENT];
109 int cell_segsize[CELL_NSEGMENT];
110 int last_cell_seg;
111
112 int interactive_repl; /* are we in an interactive REPL? */
113
114 pointer oblist; /* pointer to symbol table */
115 pointer global_env; /* pointer to global environment */
116 pointer c_nest; /* stack for nested calls from C */
117
118 /* global pointers to special symbols */
119 pointer LAMBDA; /* pointer to syntax lambda */
120 pointer QUOTE; /* pointer to syntax quote */
121
122 pointer QQUOTE; /* pointer to symbol quasiquote */
123 pointer UNQUOTE; /* pointer to symbol unquote */
124 pointer UNQUOTESP; /* pointer to symbol unquote-splicing */
125 pointer FEED_TO; /* => */
126 pointer COLON_HOOK; /* *colon-hook* */
127 pointer ERROR_HOOK; /* *error-hook* */
128 pointer SHARP_HOOK; /* *sharp-hook* */
129 pointer COMPILE_HOOK; /* *compile-hook* */
130
131 pointer free_cell; /* pointer to top of free cells */
132 long fcells; /* # of free cells */
133
134 /* return code */
135 int retcode;
136 int tracing;
137
138 pointer inport;
139 pointer outport;
140 pointer save_inport;
141 pointer loadport;
142
143 # define MAXFIL 64
144 port load_stack[MAXFIL]; /* Stack of open files for port -1 (LOADing) */
145 int nesting_stack[MAXFIL];
146 int file_i;
147 int nesting;
148
149 char gc_verbose; /* if gc_verbose is not zero, print gc status */
150 char no_memory; /* Whether mem. alloc. has failed */
151
152 # define LINESIZE 1024
153 char linebuff[LINESIZE];
154 # define STRBUFFSIZE 256
155 char strbuff[STRBUFFSIZE];
156
157 int tmpfp;
158 int tok;
159 int print_flag;
160 pointer value;
161 int op;
162
163 void *ext_data; /* For the benefit of foreign functions */
164 long gensym_cnt;
165
166 struct scheme_interface *vptr;
167 struct dump_stack_frame *dump_base; /* pointer to base of allocated dump stack */
168 int dump_size; /* number of frames allocated for dump stack */
169 };
170
171 /* operator code */
172 enum scheme_opcodes
173 {
174 # define OP_DEF(A,B,C,D,E,OP) OP,
175 # include "opdefines.h"
176 OP_MAXDEFINED
177 };
178
179 # define cons(a,b) xcons(SCHEME_A_ a,b,0)
180 # define immutable_cons(a,b) xcons(SCHEME_A_ a,b,1)
181
182 INTERFACE int is_string (pointer p);
183 INTERFACE char *string_value (pointer p);
184 INTERFACE int is_number (pointer p);
185 INTERFACE num nvalue (pointer p);
186 INTERFACE IVALUE ivalue (pointer p);
187 INTERFACE RVALUE rvalue (pointer p);
188 INTERFACE int is_integer (pointer p);
189 INTERFACE int is_real (pointer p);
190 INTERFACE int is_character (pointer p);
191 INTERFACE long charvalue (pointer p);
192 INTERFACE int is_vector (pointer p);
193
194 INTERFACE int is_port (pointer p);
195
196 INTERFACE int is_pair (pointer p);
197 INTERFACE pointer pair_car (pointer p);
198 INTERFACE pointer pair_cdr (pointer p);
199 INTERFACE void set_car (pointer p, pointer q);
200 INTERFACE void set_cdr (pointer p, pointer q);
201
202 INTERFACE int is_symbol (pointer p);
203 INTERFACE char *symname (pointer p);
204 INTERFACE int hasprop (pointer p);
205
206 INTERFACE int is_syntax (pointer p);
207 INTERFACE int is_proc (pointer p);
208 INTERFACE int is_foreign (pointer p);
209 INTERFACE char *syntaxname (pointer p);
210 INTERFACE int is_closure (pointer p);
211 # ifdef USE_MACRO
212 INTERFACE int is_macro (pointer p);
213 # endif
214 INTERFACE pointer closure_code (pointer p);
215 INTERFACE pointer closure_env (pointer p);
216
217 INTERFACE int is_continuation (pointer p);
218 INTERFACE int is_promise (pointer p);
219 INTERFACE int is_environment (pointer p);
220 INTERFACE int is_immutable (pointer p);
221 INTERFACE void setimmutable (pointer p);
222
223 #ifdef __cplusplus
224 }
225 #endif
226
227 #endif
228
229 /*
230 Local variables:
231 c-file-style: "k&r"
232 End:
233 */