+/*----- Metaclass initialization ------------------------------------------*/
+
+[link = SodClass, nick = mycls]
+class MyClass: SodClass {
+ int x = -1, y, z = 2;
+}
+
+[nick = myobj, metaclass = MyClass]
+class MyObject: SodObject {
+ class mycls.x = 0, mycls.y = 1;
+}
+
+code c: tests {
+ prepare("metaclass, init");
+ STEP(MyObject__cls_obj->mycls.x);
+ STEP(MyObject__cls_obj->mycls.y);
+ STEP(MyObject__cls_obj->mycls.z);
+ DONE(3);
+}
+
+/*----- Static instances --------------------------------------------------*/
+
+[link = SodObject, nick = st]
+class StaticObject: SodObject {
+ int x, y = 2, z = 3;
+ [readonly = t] void step() { STEP(me->st.x); }
+}
+
+[extern = t] instance StaticObject mystatic: st.x = 0, st.z = 69;
+[const = nil] instance StaticObject otherstatic: st.x = 3, st.y = 42;
+
+code c: tests {
+ prepare("static instance");
+ StaticObject_step(mystatic);
+ if (mystatic->st.y == 2) STEP(1);
+ if (mystatic->st.z == 69) STEP(2);
+ StaticObject_step(otherstatic);
+ if (otherstatic->st.y == 42) STEP(4);
+ if (otherstatic->st.z == 3) STEP(5);
+ DONE(6);
+}
+