1.1 --- a/templates/types.h Sun Nov 14 00:37:32 2021 +0100
1.2 +++ b/templates/types.h Sun Nov 14 00:42:49 2021 +0100
1.3 @@ -130,12 +130,15 @@
1.4
1.5 /* Attribute interpretation. */
1.6
1.7 -#define __NUM_TAG_BITS 1
1.8 -#define __TAG_MUTABLE 0b1
1.9 -#define __TAG_MASK 0b1
1.10 +#define __NUM_TAG_BITS 2
1.11 +#define __TAG_COPYABLE 0b01UL
1.12 +#define __TAG_MUTABLE 0b10UL
1.13 +#define __TAG_MASK 0b11UL
1.14
1.15 -#define __MUTABLE(ATTR) (((ATTR).rawvalue & __TAG_MASK) == __TAG_MUTABLE)
1.16 -#define __TO_MUTABLE(ATTR) ((__attr) (((ATTR).rawvalue & (~__TAG_MASK)) | __TAG_MUTABLE))
1.17 +#define __COPYABLE(ATTR) ((ATTR).rawvalue & __TAG_COPYABLE)
1.18 +#define __MUTABLE(ATTR) ((ATTR).rawvalue & __TAG_MUTABLE)
1.19 +#define __TO_IMMUTABLE(ATTR) ((__attr) {.rawvalue=(ATTR).rawvalue & (~__TAG_MUTABLE)})
1.20 +#define __TO_MUTABLE(ATTR) ((__attr) {.rawvalue=(ATTR).rawvalue | __TAG_MASK})
1.21
1.22 /* Attribute value setting. */
1.23