#define _INIT_STATIC(cname) [[accumulate]] void spawn##cname##_static(cname this)
#define INIT(cname) [[accumulate]] cname spawn##cname##_1(cname this)
+#if NDEBUG
+ #define DEBUG_STUFF(cname)
+#else
+ #define DEBUG_STUFF(cname) \
+ bool is_##cname(entity e) { return e.instanceOf##cname; } \
+ void isnt_##cname(entity e) { eprint(e); }
+#endif
+
+
#define CLASS(cname, base) \
entityclass(cname, base); \
class(cname).bool instanceOf##cname; \
- bool is_##cname(entity e) { return e.instanceOf##cname; } \
- void isnt_##cname(entity e) { eprint(e); } \
+ DEBUG_STUFF(cname) \
VTBL(cname, base) \
_INIT_STATIC(cname) \
{ \
#define ATTRIB(...) EVAL_ATTRIB(OVERLOAD_(ATTRIB, __VA_ARGS__))
#define EVAL_ATTRIB(...) __VA_ARGS__
-#define ATTRIB_3(cname, name, type) INIT(cname) {} class(cname) .type name
+#define ATTRIB_3(cname, name, type) class(cname) .type name
#define ATTRIB_4(cname, name, type, val) \
ATTRIB_3(cname, name, type); \
INIT(cname) \
class(cname).type name; \
INIT(cname) \
{ \
- if (this.name) \
- strunzone(this.name); \
- this.name = strzone(val); \
+ strcpy(this.name, val); \
}
#define STATIC_ATTRIB_STRZONE(cname, name, type, val) \
type cname##_##name; \
_INIT_STATIC(cname) \
{ \
- if (cname##_##name) \
- strunzone(cname##_##name); \
- cname##_##name = val; \
+ strcpy(cname##_##name, val); \
}
#define ATTRIBARRAY(cname, name, type, cnt) \