-#define mem struct
-#define this_is(TYPE) struct *TYPE this
-#define create_mem(ID,...) struct _ARG1(__VA_ARGS__,) *ID=get_mem(__VA_ARGS__)
-#define new_mem(ID,...) struct _ARG1(__VA_ARGS__,) *ID=init_mem(__VA_ARGS__)
-#define def_mem(ID,TYPE) struct TYPE *ID=NULL
-#define def_mems(ID1,ID2,TYPE) struct TYPE *ID1=NULL, *ID2=NULL
-#define get_mem(...) (struct _ARG1(__VA_ARGS__,)*)_cll1_malloc(sizeof(struct _ARG1(__VA_ARGS__,)), _ARG2(__VA_ARGS__,,) - 0 )
-#define init_mem(...) _mem_##TYPE##_( _ARG2(__VA_ARGS__,,) - 0 )
-#define construct_mem(TYPE) (struct TYPE *)_mem_##TYPE##_(void) { create_mem(this,TYPE);/* <-' */ _init_mem_##TYPE##_(this); return this; } _init_mem_##TYPE##_(this_is(TYPE))
-#define create_list(ID1,I2,TYPE) create_mem(ID1,TYPE); struct TYPE *ID2=((ID1->__next=NULL),ID1)
-#define create_context(ID) create_mem(ID,_CTXAtom)
-#define def_context(ID) def_mem(ID,_CTXAtom)
-#define list(TYPE) struct TYPE *__next
-#define tree(TYPE) struct TYPE *__next; struct TYPE *__seek
-#define dictionary(TYPE) struct TYPE *__next; struct TYPE *__seek; char *__key
-#define array(TYPE) struct TYPE *__next; struct TYPE *__seek; int __key
+#define def_mem(TYPE) typedef struct _##TYPE##_t * TYPE; struct _##TYPE##_t
+#define get_mem(...) _GET_MEM(__VA_ARGS__,NULL)
+#define create_mem(ID,...) _ARG1(__VA_ARGS__,) ID=_GET_MEM(__VA_ARGS__,NULL)
+#define new_mem(ID,...) _ARG1(__VA_ARGS__,) ID=init_mem(__VA_ARGS__)
+#define init_mem(...) _ARG1(__VA_ARGS__,)_construct( _ARG2(__VA_ARGS__,,) - 0 )
+#define construct_mem(TYPE) TYPE TYPE##_init(void) { create_mem(this,TYPE); /* <-' */ _##TYPE##_init(this); return this; } _##TYPE##_init(TYPE this)
+#define list(TYPE) TYPE __next
+#define tree(TYPE) TYPE __next; TYPE __seek
+#define dictionary(TYPE) TYPE __next; TYPE __seek; str __key
+#define array(TYPE) struct TYPE __next; TYPE __seek; int __key