test/chimaera.sod: Introduce a macro for stack-allocating instances.
authorMark Wooding <mdw@distorted.org.uk>
Mon, 17 Aug 2015 16:33:26 +0000 (17:33 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Mon, 17 Aug 2015 16:33:26 +0000 (17:33 +0100)
test/chimaera.sod

index 63602d8..ca775bc 100644 (file)
@@ -76,32 +76,32 @@ static void provoke_serpent(Serpent *s)
   s->_vt->serpent.bite(s);
 }
 
+#define SOD_DECL(cls_, var_)                                           \
+  struct cls_##__ilayout var_##__layout;                               \
+  cls_ *var_ = cls_##__class->cls.init(&var_##__layout)
+
 int main(void)
 {
   {
-    struct Lion__ilayout ll;
-    Lion *l = Lion__class->cls.init(&ll);
+    SOD_DECL(Lion, l);
     provoke_lion(l);
     tickle_animal(LION__CONV_NML(l));
   }
 
   {
-    struct Goat__ilayout gg;
-    Goat *g = Goat__class->cls.init(&gg);
+    SOD_DECL(Goat, g);
     provoke_goat(g);
     tickle_animal(GOAT__CONV_NML(g));
   }
 
   {
-    struct Serpent__ilayout ss;
-    Serpent *s = Serpent__class->cls.init(&ss);
+    SOD_DECL(Serpent, s);
     provoke_serpent(s);
     tickle_animal(SERPENT__CONV_NML(s));
   }
 
   {
-    struct Chimaera__ilayout cc;
-    Chimaera *c = Chimaera__class->cls.init(&cc);
+    SOD_DECL(Chimaera, c);
     provoke_lion(CHIMAERA__CONV_LION(c));
     provoke_goat(CHIMAERA__CONV_GOAT(c));
     provoke_serpent(CHIMAERA__CONV_SERPENT(c));