Changeset 2945
- Timestamp:
- 12/09/07 20:22:48 (13 months ago)
- Files:
-
- 1 modified
-
lang/c/misc/mlisp/src/mlisp.cpp (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/c/misc/mlisp/src/mlisp.cpp
r2383 r2945 142 142 143 143 private: 144 void collect_garbage(); 145 144 146 SExp read_string(FILE* fp); 145 147 SExp read_list(FILE* fp); … … 166 168 167 169 Cell g_cell_buf[MAX_CELL]; 168 int g_cell_free_p; 170 SExp g_free_cell; 171 int free_cell_num; 169 172 170 173 Symbol g_symbol_buf[MAX_SYMBOL]; … … 244 247 memset(flags, 0x00, sizeof(flags)); 245 248 246 g_cell_free_p = 0;247 249 g_symbol_free_p = 0; 248 250 g_stack_p = 0; 249 251 g_builtin_p = 0; 252 253 // �Z������Ȃ��āA�t���[�Z���Ƃ��� for (int i=0; i<MAX_CELL-1; ++i) { 254 Cell* p = &g_cell_buf[i]; 255 p->cdr = MAKE_SEXP(tCell, i+1); 256 } 257 Cell* p = &g_cell_buf[MAX_CELL-1]; 258 p->cdr = cNil; 259 g_free_cell = MAKE_SEXP(tCell, 0); 260 free_cell_num = MAX_CELL; 250 261 } 251 262 … … 261 272 void MLContext::dump() 262 273 { 263 printf("#cell:%d\n", g_cell_free_p);264 274 printf("#symbol:%d\n", g_symbol_free_p); 265 275 for (int i=0; i<g_symbol_free_p; ++i) { … … 267 277 } 268 278 printf("\n"); 279 printf("#free cell:%d\n", free_cell_num); 269 280 } 270 281 … … 287 298 } 288 299 300 void MLContext::collect_garbage() 301 { 302 assert(!"not implemented"); 303 } 304 289 305 SExp MLContext::cons(SExp a, SExp d) 290 306 { 291 assert(g_cell_free_p < MAX_CELL); 292 int idx = g_cell_free_p++; 307 if (g_free_cell == cNil) { 308 collect_garbage(); 309 } 310 SExp res = g_free_cell; 311 assert(SEXP_TYPE(res) == tCell); 312 assert(free_cell_num > 0); 313 g_free_cell = cdr(res); 314 --free_cell_num; 315 316 int idx = SEXP_UVAL(res); 293 317 294 318 Cell* p = &g_cell_buf[idx];
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)