18 #define CLASS(cname, base) \
19 [[accumulate]] entity spawn##cname(entity this, entity basevtbl) { \
20 this = NEW(base); basevtbl = base##_vtbl; \
23 #define METHOD(cname, name, prototype) \
24 prototype cname##_##name; \
26 [[accumulate]] entity spawn##cname(entity this, entity basevtbl) { \
27 this.name = cname##_##name; \
30 #define ATTRIB(cname, name, type, val) \
32 [[accumulate]] entity spawn##cname(entity this, entity basevtbl) { \
36 #define ATTRIBARRAY(cname, name, type, cnt) \
39 #define ENDCLASS(cname) \
40 .bool instanceOf##cname; \
41 entity cname##_vtbl; \
42 [[accumulate]] entity spawn##cname(entity this, entity basevtbl) { \
43 this.instanceOf##cname = true; \
44 this.classname = #cname; \
45 if (!cname##_vtbl) cname##_vtbl = spawnVtbl(this, basevtbl); \
51 #include "../classes.inc"