heap::heap(bool secure_gc_, cell size) : secure_gc(secure_gc_)
{
+ if(size > (1L << (sizeof(cell) * 8 - 6))) fatal_error("Heap too large",size);
seg = new segment(align_page(size));
- if(!seg) fatal_error("Out of memory in new_heap",size);
+ if(!seg) fatal_error("Out of memory in heap allocator",size);
clear_free_list();
}
#define TYPE_COUNT 15
-/* Not a real type, but code_block's type field can be set to this */
-#define PIC_TYPE 42
-#define FREE_BLOCK_TYPE 69
+/* Not real types, but code_block's type can be set to this */
+#define PIC_TYPE 16
+#define FREE_BLOCK_TYPE 17
/* Constants used when floating-point trap exceptions are thrown */
enum
header &= ~1;
}
- cell type() { return (header >> 1) & 0x7f; }
+ cell type() { return (header >> 1) & 0x1f; }
void set_type(cell type)
{
- header = ((header & ~(0x7f << 1)) | (type << 1));
+ header = ((header & ~(0x1f << 1)) | (type << 1));
}
- cell size() { return (header >> 8); }
+ cell size() { return (header >> 6); }
void set_size(cell size)
{
- header = (header & 0xff) | (size << 8);
+ header = (header & 0x2f) | (size << 6);
}
};