+#ifndef MLIB_ALLOC_H
+#define MLIB_ALLOC_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/*----- Required header files ---------------------------------------------*/
+
+#include <stddef.h>
+
+#ifndef MLIB_ARENA_H
+# include "arena.h"
+#endif
+
+/*----- Functions and macros ----------------------------------------------*/
+
+/* --- @x_alloc@ --- *
+ *
+ * Arguments: @arena *a@ = pointer to underlying arena
+ * @size_t sz@ = size of block to allocate
+ *
+ * Returns: Pointer to allocated block.
+ *
+ * Use: Allocates memory. If there's not enough memory, the
+ * exception @EXC_NOMEM@ is thrown.
+ */
+
+extern void *x_alloc(arena */*a*/, size_t /*sz*/);
+
+/* --- @x_strdup@ --- *
+ *
+ * Arguments: @arena *a@ = pointer to underlying arena
+ * @const char *s@ = pointer to a string
+ *
+ * Returns: Pointer to a copy of the string.