-#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 interface(TYPE) struct TYPE *__interface
+#define def_mem(TYPE) typedef struct _##TYPE##_t * TYPE; struct _##TYPE##_t
+#define construct_mem(TYPE) TYPE _init_##TYPE(void) { create_mem(this,TYPE); /* <-' */ _init_##TYPE(this); return this; } _init_##TYPE(TYPE this)
+#define get_mem(...) _GET_MEM(__VA_ARGS__,NULL)
+#define init_mem(...) _init_##_ARG1(__VA_ARGS__,)( _ARG2(__VA_ARGS__,,) - 0 )
+#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 mem_len(TYPE) sizeof(struct _##TYPE##_t)
+//#define mem_copy
+#define list(TYPE) TYPE __next
+#define tree(TYPE) TYPE __next; TYPE __seek
+#define dict(TYPE) tree(TYPE); str __key
+#define array(TYPE) tree(TYPE); int __key
+#define interface(TYPE) TYPE __interface
+#define this_must_be(TYPE) TYPE this