X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Flib%2Foo.qh;h=7a7a72641a0601a1d857a0654631223d452275dd;hb=b0210c08a287ad4631e16ddf3a83a0b0c546283f;hp=fd6ca20365000cc0fa7553e57b560823452eec24;hpb=3b934631926acf4b06d969dcd361a26a3073d2c8;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/lib/oo.qh b/qcsrc/lib/oo.qh index fd6ca2036..7a7a72641 100644 --- a/qcsrc/lib/oo.qh +++ b/qcsrc/lib/oo.qh @@ -4,13 +4,6 @@ #include "nil.qh" #include "static.qh" -#ifdef MENUQC - #define NULL (0, null_entity) - #define world NULL -#else - #define NULL (0, world) -#endif - .vector origin; .bool pure_data; /** @deprecated use new_pure or NEW(class) */ @@ -78,10 +71,17 @@ entity __spawn(string _classname, string _sourceLoc, bool pure) #define new_pure(class) _new(class, true) #define spawn() __spawn("entity", __FILE__ ":" STR(__LINE__), false) +[[accumulate]] void ONREMOVE(entity this) {} + +#ifndef SVQC + #define delete_fn builtin_remove +#endif + #define delete(this) MACRO_BEGIN { \ entity _this = (this); \ void(entity) _dtor = _this.dtor; \ - if (_dtor) _dtor(_this); else remove(_this); \ + ONREMOVE(this); \ + if (_dtor) _dtor(_this); else delete_fn(_this); \ /* this = NULL; */ \ } MACRO_END @@ -227,13 +227,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 +268,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) \ @@ -278,7 +282,7 @@ STATIC_INIT(RegisterClasses) #define spawn_1(this) #define _vtbl NULL CLASS(Object, ); - DESTRUCTOR(Object) { remove(this); } + DESTRUCTOR(Object) { builtin_remove(this); } #define remove(this) delete(this) METHOD(Object, describe, string(Object this)) {