@@ -262,7 +262,7 @@ static inline size_t getstrlen(String * x) {
262262
263263// Already checked it's a CT_CON
264264#define CTAG(x) (((Con*)(x))->tag)
265−#define CARITY(x) (((Con*)(x))->arity)
265+#define CARITY(x) (((Con*)(x))->hdr.u16) // hdr.u16 used to store arity
266266
267267#define TAG(x) (ISINT(x) || x == NULL ? (-1) : ( GETTY(x) == CT_CON ? CTAG((Con*)x) : (-1)) )
268268#define ARITY(x) (ISINT(x) || x == NULL ? (-1) : ( GETTY(x) == CT_CON ? CARITY((Con*)x) : (-1)) )
@@ -369,7 +369,8 @@ void idris_free(void* ptr, size_t size);
369369static inline void updateConF(Con * cl, unsigned tag, unsigned arity) {
370370 SETTY(cl, CT_CON);
371371 cl->tag = tag;
372− cl->arity = arity;
372+ // hdr.u16 used to store arity
373+ cl->hdr.u16 = arity;
373374 assert(cl->hdr.sz == sizeof(*cl) + sizeof(VAL) * arity);
374375 // cl->hdr.sz = sizeof(*cl) + sizeof(VAL) * arity;
375376}
@@ -378,7 +379,8 @@ static inline Con * allocConF(VM * vm, unsigned tag, unsigned arity, int outer)
378379 Con * cl = iallocate(vm, sizeof(*cl) + sizeof(VAL) * arity, outer);
379380 SETTY(cl, CT_CON);
380381 cl->tag = tag;
381− cl->arity = arity;
382+ // hdr.u16 used to store arity
383+ cl->hdr.u16 = arity;
382384 return cl;
383385}
384386