#define A_CREATE(a, type) subarena_alloc((a), sizeof(type))
+/* --- @A_SUBNEW@ --- *
+ *
+ * Arguments: @type *p@ = a pointer to allocate
+ * @subarena *s@ = pointer to arena
+ *
+ * Returns: ---
+ *
+ * Use: Set @p@ to point to a freshly allocated block large enough to
+ * hold an object of the type pointed to by @p@. If there is
+ * not enough memory, the exception @EXC_NOMEM@ is thrown.
+ */
+
+#define A_SUBNEW(p, a) \
+ do { (p) = subarena_alloc((a), sizeof(*(p))); } while (0)
+
/* --- @A_DESTROY@ --- *
*
* Arguments: @subarena *s@ = pointer to arena
#define CREATE(type) sub_alloc(sizeof(type))
+/* --- @NEW@ --- *
+ *
+ * Arguments: @type *p@ = a pointer to allocate
+ *
+ * Returns: ---
+ *
+ * Use: Set @p@ to point to a freshly allocated block large enough to
+ * hold an object of the type pointed to by @p@. If there is
+ * not enough memory, the exception @EXC_NOMEM@ is thrown.
+ */
+
+#define NEW(p) do { (p) = sub_alloc(sizeof(*(p))); } while (0)
+
/* --- @DESTROY@ --- *
*
* Arguments: @void *p@ = pointer to an object