]> gitweb.factorcode.org Git - factor.git/blobdiff - vm/bump_allocator.hpp
webapps.wiki: adding search bar
[factor.git] / vm / bump_allocator.hpp
index d33ce801022a39bb1e7883ba08b28449d02ef551..28aa527fd49104f8faff3f0bcb7bccc84ab9fabd 100644 (file)
@@ -1,40 +1,37 @@
 namespace factor {
 
-template <typename Block> struct bump_allocator {
-  /* offset of 'here' and 'end' is hardcoded in compiler backends */
+struct bump_allocator {
+  // offset of 'here' and 'end' is hardcoded in compiler backends
   cell here;
   cell start;
   cell end;
   cell size;
 
-  explicit bump_allocator(cell size_, cell start_)
-      : here(start_), start(start_), end(start_ + size_), size(size_) {}
+  bump_allocator(cell size, cell start)
+      : here(start), start(start), end(start + size), size(size) {}
 
-  bool contains_p(Block* block) { return ((cell) block - start) < size; }
+  bool contains_p(object* obj) {
+    return (cell)obj >= start && (cell)obj < end;
+  }
 
-  Block* allot(cell size) {
+  object* allot(cell size) {
     cell h = here;
     here = h + align(size, data_alignment);
-    return (Block*)h;
+    return (object*)h;
   }
 
   cell occupied_space() { return here - start; }
 
   cell free_space() { return end - here; }
 
-  cell next_object_after(cell scan) {
-    cell size = ((Block*)scan)->size();
-    if (scan + size < here)
-      return scan + size;
-    else
-      return 0;
-  }
-
-  cell first_object() {
-    if (start != here)
-      return start;
-    else
-      return 0;
+  void flush() {
+    here = start;
+#ifdef FACTOR_DEBUG
+    // In case of bugs, there may be bogus references pointing to the
+    // memory space after the gc has run. Filling it with a pattern
+    // makes accesses to such shadow data fail hard.
+    memset_cell((void*)start, 0xbaadbaad, size);
+#endif
   }
 };