12 #define CLASS(cname, base) \
13 [[accumulate]] entity spawn##cname(entity this, entity basevtbl) { \
14 this = NEW(base); basevtbl = base##_vtbl; \
17 #define METHOD(cname, name, prototype) \
18 prototype cname##_##name; \
20 [[accumulate]] entity spawn##cname(entity this, entity basevtbl) { \
21 this.name = cname##_##name; \
24 #define ATTRIB(cname, name, type, val) \
26 [[accumulate]] entity spawn##cname(entity this, entity basevtbl) { \
30 #define ATTRIBARRAY(cname, name, type, cnt) \
33 #define ENDCLASS(cname) \
34 .bool instanceOf##cname; \
35 entity cname##_vtbl; \
36 [[last]] entity spawn##cname(entity this, entity basevtbl) { \
37 this.instanceOf##cname = true; \
38 this.classname = #cname; \
39 if (!cname##_vtbl) cname##_vtbl = spawnVtbl(this, basevtbl); \
43 #define SUPER(cname) (cname##_vtbl.vtblbase)
49 #include "../classes.inc"
51 #ifndef IMPLEMENTATION
52 #define IMPLEMENTATION
55 #include "../classes.inc"