From: Rudolf Polzer Date: Fri, 8 Jul 2011 14:00:36 +0000 (+0200) Subject: optimize menuqc compiling speed by doing the second interface pass, and the implement... X-Git-Tag: xonotic-v0.5.0~148^2~62 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=6085d8e8af9b692e1155cdfce021350e04c078dd;p=xonotic%2Fxonotic-data.pk3dir.git optimize menuqc compiling speed by doing the second interface pass, and the implementation pass, in one --- diff --git a/qcsrc/menu/oo/classdefs.h b/qcsrc/menu/oo/classdefs.h deleted file mode 100644 index 85bc6c2af..000000000 --- a/qcsrc/menu/oo/classdefs.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef INTERFACE -#define INTERFACE -#endif - -#ifdef IMPLEMENTATION -#undef IMPLEMENTATION -#endif - -#ifdef CLASS -#undef CLASS -#undef EXTENDS -#undef METHOD -#undef ATTRIB -#undef ATTRIBARRAY -#undef ENDCLASS -#undef SUPER -#endif - -#define CLASS(cname) entity spawn##cname(); entity cname##_vtbl; -#define EXTENDS(base) -#define METHOD(cname,name,prototype) prototype cname##_##name; .prototype name; -#define ATTRIB(cname,name,type,val) .type name; -#define ATTRIBARRAY(cname,name,type,cnt) .type name[cnt]; -#define ENDCLASS(cname) .float instanceOf##cname; -#define SUPER(cname) diff --git a/qcsrc/menu/oo/constructors.h b/qcsrc/menu/oo/constructors.h deleted file mode 100644 index 4e758dd47..000000000 --- a/qcsrc/menu/oo/constructors.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef INTERFACE -#define INTERFACE -#endif - -#ifdef IMPLEMENTATION -#undef IMPLEMENTATION -#endif - -#ifdef CLASS -#undef CLASS -#undef EXTENDS -#undef METHOD -#undef ATTRIB -#undef ATTRIBARRAY -#undef ENDCLASS -#undef SUPER -#endif - -#define CLASS(cname) entity spawn##cname() { entity me; -#define EXTENDS(base) me = spawn##base (); entity basevtbl; basevtbl = base##_vtbl; -#define METHOD(cname,name,prototype) me.name = cname##_##name; -#define ATTRIB(cname,name,type,val) me.name = val; -#define ATTRIBARRAY(cname,name,type,cnt) me.name = me.name; -#define ENDCLASS(cname) me.instanceOf##cname = 1; me.classname = #cname; if(!cname##_vtbl) cname##_vtbl = spawnVtbl(me, basevtbl); return me; } -#define SUPER(cname) diff --git a/qcsrc/menu/oo/implementation.h b/qcsrc/menu/oo/implementation.h index ed6bd71f3..34f32e306 100644 --- a/qcsrc/menu/oo/implementation.h +++ b/qcsrc/menu/oo/implementation.h @@ -1,5 +1,5 @@ -#ifdef INTERFACE -#undef INTERFACE +#ifndef INTERFACE +#define INTERFACE #endif #ifndef IMPLEMENTATION @@ -16,4 +16,13 @@ #undef SUPER #endif +// for the constructor +#define CLASS(cname) entity spawn##cname() { entity me; +#define EXTENDS(base) me = spawn##base (); entity basevtbl; basevtbl = base##_vtbl; +#define METHOD(cname,name,prototype) me.name = cname##_##name; +#define ATTRIB(cname,name,type,val) me.name = val; +#define ATTRIBARRAY(cname,name,type,cnt) me.name = me.name; +#define ENDCLASS(cname) me.instanceOf##cname = 1; me.classname = #cname; if(!cname##_vtbl) cname##_vtbl = spawnVtbl(me, basevtbl); return me; } + +// for the implementation #define SUPER(cname) (cname##_vtbl.vtblbase) diff --git a/qcsrc/menu/oo/interface.h b/qcsrc/menu/oo/interface.h new file mode 100644 index 000000000..85bc6c2af --- /dev/null +++ b/qcsrc/menu/oo/interface.h @@ -0,0 +1,25 @@ +#ifndef INTERFACE +#define INTERFACE +#endif + +#ifdef IMPLEMENTATION +#undef IMPLEMENTATION +#endif + +#ifdef CLASS +#undef CLASS +#undef EXTENDS +#undef METHOD +#undef ATTRIB +#undef ATTRIBARRAY +#undef ENDCLASS +#undef SUPER +#endif + +#define CLASS(cname) entity spawn##cname(); entity cname##_vtbl; +#define EXTENDS(base) +#define METHOD(cname,name,prototype) prototype cname##_##name; .prototype name; +#define ATTRIB(cname,name,type,val) .type name; +#define ATTRIBARRAY(cname,name,type,cnt) .type name[cnt]; +#define ENDCLASS(cname) .float instanceOf##cname; +#define SUPER(cname) diff --git a/qcsrc/menu/progs.src b/qcsrc/menu/progs.src index 34eb5db88..1184c32d1 100644 --- a/qcsrc/menu/progs.src +++ b/qcsrc/menu/progs.src @@ -20,10 +20,7 @@ draw.qh skin.qh xonotic/util.qh -oo/classdefs.h - classes.c - -oo/constructors.h +oo/interface.h classes.c oo/implementation.h classes.c