-#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_str(ID,EXPR) char *ID=(EXPR)
-#define new_str(ID,...) char *ID=_cll1_get_str(__VA_ARGS__,NIL)
-#define def_str(ID) char *ID=NULL
-#define get_str(...) _cll1_get_str(__VA_ARGS__,NIL)
-#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 get_mem(...) _GET_MEM(__VA_ARGS__,NULL)
+#define Get_mem(ID,...) _ARG1(__VA_ARGS__,) ID=_GET_MEM(__VA_ARGS__,NULL)
+#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