1.1 --- a/templates/types.h Thu Mar 23 16:40:57 2017 +0100
1.2 +++ b/templates/types.h Thu Mar 23 23:36:32 2017 +0100
1.3 @@ -72,14 +72,19 @@
1.4
1.5 typedef union __attr
1.6 {
1.7 + /* General attribute members. */
1.8 +
1.9 __ref value; /* attribute value */
1.10 + int intvalue; /* integer value data ((integer << 1) | 1) */
1.11 +
1.12 + /* Special case attribute members. */
1.13 +
1.14 const __ptable * ptable; /* parameter table */
1.15 struct {
1.16 __pcode code; /* parameter table code for key */
1.17 __ppos pos; /* parameter table position for key */
1.18 };
1.19 __attr (*fn)(); /* callable details */
1.20 - int intvalue; /* integer value */
1.21 float floatvalue; /* floating point value */
1.22 char * strvalue; /* string value */
1.23 __fragment * seqvalue; /* sequence data */
1.24 @@ -106,10 +111,22 @@
1.25
1.26 #define __FRAGMENT_SIZE(NUMBER) ((NUMBER) * sizeof(__attr) + 2 * sizeof(unsigned int))
1.27
1.28 +/* Attribute interpretation. */
1.29 +
1.30 +#define __INTEGER(ATTR) ((ATTR).intvalue % 2)
1.31 +
1.32 /* Attribute value setting. */
1.33
1.34 #define __ATTRVALUE(VALUE) ((__attr) {.value=VALUE})
1.35 #define __NULL __ATTRVALUE(0)
1.36 +#define __SETNULL(ATTR) ((ATTR).value = 0)
1.37 +
1.38 +/* Attribute as instance setting. */
1.39 +
1.40 +#define __INTVALUE(VALUE) ((__attr) {.intvalue=((VALUE) << 1) | 1})
1.41 +#define __TOINT(ATTR) ((ATTR).intvalue >> 1)
1.42 +#define __MAXINT ((1 << ((sizeof(__attr) * 8) - 2)) - 1)
1.43 +#define __MININT (-(1 << ((sizeof(__attr) * 8) - 2)))
1.44
1.45 /* Argument lists. */
1.46