From 8d98dc1a15b0b73341882fca38fed3fa59a2b535 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 30 Apr 2019 12:59:17 -0400 Subject: [PATCH] Add immutable field to the object header --- include/cyclone/types.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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;