ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/microscheme/scheme.c
(Generate patch)

Comparing cvsroot/microscheme/scheme.c (file contents):
Revision 1.43 by root, Mon Nov 30 06:40:57 2015 UTC vs.
Revision 1.44 by root, Mon Nov 30 06:49:11 2015 UTC

1656 /* garbage collect */ 1656 /* garbage collect */
1657 clrmark (NIL); 1657 clrmark (NIL);
1658 SCHEME_V->fcells = 0; 1658 SCHEME_V->fcells = 0;
1659 SCHEME_V->free_cell = NIL; 1659 SCHEME_V->free_cell = NIL;
1660 1660
1661 /* free-list is kept sorted by address so as to maintain consecutive 1661 uint32_t total = 0;
1662 ranges, if possible, for use with vectors. Here we scan the cells 1662
1663 (which are also kept sorted by address) downwards to build the 1663 /* Here we scan the cells to build the free-list. */
1664 free-list in sorted order.
1665 */
1666 for (i = SCHEME_V->last_cell_seg; i >= 0; i--) 1664 for (i = SCHEME_V->last_cell_seg; i >= 0; i--)
1667 { 1665 {
1668 p = SCHEME_V->cell_seg[i] + SCHEME_V->cell_segsize [i]; 1666 pointer end = SCHEME_V->cell_seg[i] + SCHEME_V->cell_segsize [i];
1667 total += SCHEME_V->cell_segsize [i];
1669 1668
1670 while (--p >= SCHEME_V->cell_seg[i]) 1669 for (p = SCHEME_V->cell_seg[i]; p < end; ++p)
1671 { 1670 {
1672 if (is_mark (p)) 1671 if (is_mark (p))
1673 clrmark (p); 1672 clrmark (p);
1674 else 1673 else
1675 { 1674 {
1688 } 1687 }
1689 } 1688 }
1690 1689
1691 if (SCHEME_V->gc_verbose) 1690 if (SCHEME_V->gc_verbose)
1692 { 1691 {
1693 xwrstr ("done: "); xwrnum (SCHEME_V->fcells); xwrstr (" cells were recovered.\n"); 1692 xwrstr ("done: "); xwrnum (SCHEME_V->fcells); xwrstr (" out of "); xwrnum (total); xwrstr (" cells were recovered.\n");
1694 } 1693 }
1695} 1694}
1696 1695
1697static void 1696static void
1698finalize_cell (SCHEME_P_ pointer a) 1697finalize_cell (SCHEME_P_ pointer a)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines