X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Flib%2Foo.qh;h=f57bf8e909c4e7d1a594a0e36f2415b715483fda;hb=d865de7a9a17c5a1d9286aec40f68c3530697660;hp=e3206dcf3ee799b584e85bf71457fbe44d20ee3e;hpb=05ee5b1212a6537e5c5acb76dbc1ef9df40f85c6;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/lib/oo.qh b/qcsrc/lib/oo.qh index e3206dcf3..f57bf8e90 100644 --- a/qcsrc/lib/oo.qh +++ b/qcsrc/lib/oo.qh @@ -171,11 +171,19 @@ STATIC_INIT(RegisterClasses) #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) \ { \ @@ -227,13 +235,17 @@ STATIC_INIT(RegisterClasses) } \ STATIC_METHOD(cname, dtorimpl, void(cname this)) -#define ATTRIB(cname, name, type, val) \ - class(cname).type name; \ +#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_4(cname, name, type, val) \ + ATTRIB_3(cname, name, type); \ INIT(cname) \ { \ noref bool strzone; /* Error on strzone() calls. */ \ this.name = val; \ - } + } \ + ATTRIB_3(cname, name, type) #define STATIC_ATTRIB(cname, name, type, val) \ type cname##_##name; \ @@ -264,7 +276,7 @@ STATIC_INIT(RegisterClasses) } #define ATTRIBARRAY(cname, name, type, cnt) \ - class(cname).type name[cnt]; + class(cname) .type name[cnt] #define ENDCLASS(cname) \ INIT(cname) \