It seems generally useful.
#define SOD_CONVERT(cls, obj) ((cls *)sod_convert(cls##__class, (obj)))
#define SOD_CONVERT(cls, obj) ((cls *)sod_convert(cls##__class, (obj)))
+/* --- @SOD_DECL@ --- *
+ *
+ * Arguments: @cls_@ = a class type name
+ * @var_@ = a variable name
+ *
+ * Use: Declare @var_@ as a pointer to an initialized instance of
+ * @cls_@ with automatic lifetime.
+ */
+
+#define SOD_DECL(cls_, var_) \
+ struct cls_##__ilayout var_##__layout; \
+ cls_ *var_ = cls_##__class->cls.init(&var_##__layout)
+
/*----- Functions provided ------------------------------------------------*/
/* --- @sod_subclassp@ --- *
/*----- Functions provided ------------------------------------------------*/
/* --- @sod_subclassp@ --- *
s->_vt->serpent.bite(s);
}
s->_vt->serpent.bite(s);
}
-#define SOD_DECL(cls_, var_) \
- struct cls_##__ilayout var_##__layout; \
- cls_ *var_ = cls_##__class->cls.init(&var_##__layout)
-