ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/microscheme/scheme-private.h
(Generate patch)

Comparing microscheme/scheme-private.h (file contents):
Revision 1.3 by root, Wed Nov 25 10:30:34 2015 UTC vs.
Revision 1.9 by root, Mon Nov 30 13:07:34 2015 UTC

1/*
2 * µscheme
3 *
4 * Copyright (C) 2015 Marc Alexander Lehmann <uscheme@schmorp.de>
5 * do as you want with this, attribution appreciated.
6 */
1 7
2/* scheme-private.h */ 8/* scheme-private.h */
3 9
4#ifndef SCHEME_PRIVATE_H 10#ifndef SCHEME_PRIVATE_H
5#define SCHEME_PRIVATE_H 11#define SCHEME_PRIVATE_H
55{ 61{
56 union 62 union
57 { 63 {
58 struct 64 struct
59 { 65 {
60 char *svalue; 66 uint8_t *svalue;
61 uint32_t length; 67 uint32_t length;
62 } string; 68 } string;
63 69
64 struct { 70 struct {
65 struct cell **vvalue; 71 struct cell **vvalue;
66 uint32_t length; 72 uint32_t length;
67 } vector; 73 } vector;
68 74
69 num number; 75 intptr_t ivalue;
76#if USE_REAL
77 double rvalue;
78#endif
70 79
71 port *port; 80 port *port;
72 81
73 foreign_func ff; 82 foreign_func ff;
74 83
103 /* arrays for segments */ 112 /* arrays for segments */
104#ifndef CELL_SEGSIZE 113#ifndef CELL_SEGSIZE
105# define CELL_SEGSIZE 128 /* # of cells in one segment */ 114# define CELL_SEGSIZE 128 /* # of cells in one segment */
106#endif 115#endif
107#ifndef CELL_NSEGMENT 116#ifndef CELL_NSEGMENT
108# define CELL_NSEGMENT 10 /* # of segments for cells */ 117# define CELL_NSEGMENT 20 /* # of segments for cells */
109#endif 118#endif
110 char *alloc_seg[CELL_NSEGMENT]; 119 char *alloc_seg[CELL_NSEGMENT];
111 pointer cell_seg[CELL_NSEGMENT]; 120 pointer cell_seg[CELL_NSEGMENT];
112 int cell_segsize[CELL_NSEGMENT]; 121 int cell_segsize[CELL_NSEGMENT];
113 int last_cell_seg; 122 int last_cell_seg;
141 pointer inport; 150 pointer inport;
142 pointer outport; 151 pointer outport;
143 pointer save_inport; 152 pointer save_inport;
144 pointer loadport; 153 pointer loadport;
145 154
146# define MAXFIL 64 155#define MAXFIL 8
147 port load_stack[MAXFIL]; /* Stack of open files for port -1 (LOADing) */ 156 port load_stack[MAXFIL]; /* Stack of open files for port -1 (LOADing) */
148 int nesting_stack[MAXFIL]; 157 int nesting_stack[MAXFIL];
149 int file_i; 158 int file_i;
150 int nesting; 159 int nesting;
151 160
152 char gc_verbose; /* if gc_verbose is not zero, print gc status */ 161 char gc_verbose; /* if gc_verbose is not zero, print gc status */
153 char no_memory; /* Whether mem. alloc. has failed */ 162 char no_memory; /* Whether mem. alloc. has failed */
154 163
155# define LINESIZE 1024 164#define LINESIZE 1024
156 char linebuff[LINESIZE]; 165 char linebuff[LINESIZE];
157# define STRBUFFSIZE 256 166#define STRBUFFSIZE 256
158 char strbuff[STRBUFFSIZE]; 167 char strbuff[STRBUFFSIZE];
159 168
160 int tmpfp; 169 int tmpfp;
161 int tok; 170 int tok;
162 int print_flag; 171 int print_flag;
164 int op; 173 int op;
165 174
166 void *ext_data; /* For the benefit of foreign functions */ 175 void *ext_data; /* For the benefit of foreign functions */
167 long gensym_cnt; 176 long gensym_cnt;
168 177
178#if USE_INTCACHE
179#define INTCACHE_MIN -10
180#define INTCACHE_MAX 32
181 pointer intcache[INTCACHE_MAX - INTCACHE_MIN + 1];
182#endif
183
169 struct scheme_interface *vptr; 184 struct scheme_interface *vptr;
170 struct dump_stack_frame *dump_base; /* pointer to base of allocated dump stack */ 185 struct dump_stack_frame *dump_base; /* pointer to base of allocated dump stack */
171 int dump_size; /* number of frames allocated for dump stack */ 186 int dump_size; /* number of frames allocated for dump stack */
172}; 187};
173 188
174/* operator code */ 189/* operator code */
175enum scheme_opcodes 190enum scheme_opcodes
176{ 191{
177# define OP_DEF(A,B,C,D,E,OP) OP, 192#define OP_DEF(func,name,minarity,maxarity,argtest,op) op,
178# include "opdefines.h" 193#include "opdefines.h"
194#undef OP_DEF
179 OP_MAXDEFINED 195 OP_MAXDEFINED
180}; 196};
181 197
198typedef struct num num;
199
182# define cons(a,b) xcons(SCHEME_A_ a,b,0) 200#define cons(a,b) xcons(SCHEME_A_ a,b,0)
183# define immutable_cons(a,b) xcons(SCHEME_A_ a,b,1) 201#define immutable_cons(a,b) xcons(SCHEME_A_ a,b,1)
184 202
185INTERFACE int is_string (pointer p); 203INTERFACE int is_string (pointer p);
186INTERFACE char *string_value (pointer p); 204INTERFACE char *string_value (pointer p);
187INTERFACE int is_number (pointer p); 205INTERFACE int is_number (pointer p);
188INTERFACE num nvalue (pointer p); 206INTERFACE num nvalue (pointer p);
189INTERFACE IVALUE ivalue (pointer p);
190INTERFACE RVALUE rvalue (pointer p);
191INTERFACE int is_integer (pointer p); 207INTERFACE int is_integer (pointer p);
192INTERFACE int is_real (pointer p); 208INTERFACE int is_real (pointer p);
193INTERFACE int is_character (pointer p); 209INTERFACE int is_character (pointer p);
194INTERFACE long charvalue (pointer p); 210INTERFACE long charvalue (pointer p);
195INTERFACE int is_vector (pointer p); 211INTERFACE int is_vector (pointer p);
209INTERFACE int is_syntax (pointer p); 225INTERFACE int is_syntax (pointer p);
210INTERFACE int is_proc (pointer p); 226INTERFACE int is_proc (pointer p);
211INTERFACE int is_foreign (pointer p); 227INTERFACE int is_foreign (pointer p);
212INTERFACE char *syntaxname (pointer p); 228INTERFACE char *syntaxname (pointer p);
213INTERFACE int is_closure (pointer p); 229INTERFACE int is_closure (pointer p);
214# ifdef USE_MACRO 230#ifdef USE_MACRO
215INTERFACE int is_macro (pointer p); 231INTERFACE int is_macro (pointer p);
216# endif 232#endif
217INTERFACE pointer closure_code (pointer p); 233INTERFACE pointer closure_code (pointer p);
218INTERFACE pointer closure_env (pointer p); 234INTERFACE pointer closure_env (pointer p);
219 235
220INTERFACE int is_continuation (pointer p); 236INTERFACE int is_continuation (pointer p);
221INTERFACE int is_promise (pointer p); 237INTERFACE int is_promise (pointer p);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines