diff --git a/include/cyclone/types.h b/include/cyclone/types.h index fa83d1f8..dafc0cb0 100644 --- a/include/cyclone/types.h +++ b/include/cyclone/types.h @@ -237,8 +237,9 @@ struct gc_heap_root_t { */ typedef struct gc_header_type_t gc_header_type; struct gc_header_type_t { - unsigned char mark; // mark bits - unsigned char grayed; // stack object to be grayed when moved to heap + unsigned char mark; // mark bits + 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 */ @@ -247,6 +248,9 @@ struct gc_header_type_t { /** Get an object's `grayed` value */ #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 */ typedef enum { STATUS_ASYNC, STATUS_SYNC1, STATUS_SYNC2 } gc_status_type;