Add immutable field to the object header

This commit is contained in:
Justin Ethier 2019-04-30 12:59:17 -04:00
parent b1cdb81177
commit 8d98dc1a15

View file

@ -237,8 +237,9 @@ struct gc_heap_root_t {
*/ */
typedef struct gc_header_type_t gc_header_type; typedef struct gc_header_type_t gc_header_type;
struct gc_header_type_t { struct gc_header_type_t {
unsigned char mark; // mark bits unsigned char mark; // mark bits
unsigned char grayed; // stack object to be grayed when moved to heap unsigned char grayed; // stack object to be grayed when moved to heap
unsigned char immutable; // Flag normally mutable obj (EG: pair) as read-only
}; };
/** Get an object's `mark` value */ /** Get an object's `mark` value */
@ -247,6 +248,9 @@ struct gc_header_type_t {
/** Get an object's `grayed` value */ /** Get an object's `grayed` value */
#define grayed(x) (((list) x)->hdr.grayed) #define grayed(x) (((list) x)->hdr.grayed)
//** Access an object's "immutable" field */
#define immutable(x) (((list) x)->hdr.immutable)
/** Enums for tri-color marking */ /** Enums for tri-color marking */
typedef enum { STATUS_ASYNC, STATUS_SYNC1, STATUS_SYNC2 typedef enum { STATUS_ASYNC, STATUS_SYNC1, STATUS_SYNC2
} gc_status_type; } gc_status_type;