From 6085d8e8af9b692e1155cdfce021350e04c078dd Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Fri, 8 Jul 2011 16:00:36 +0200 Subject: [PATCH] optimize menuqc compiling speed by doing the second interface pass, and the implementation pass, in one --- qcsrc/menu/oo/constructors.h | 25 ---------------------- qcsrc/menu/oo/implementation.h | 13 +++++++++-- qcsrc/menu/oo/{classdefs.h => interface.h} | 0 qcsrc/menu/progs.src | 5 +---- 4 files changed, 12 insertions(+), 31 deletions(-) delete mode 100644 qcsrc/menu/oo/constructors.h rename qcsrc/menu/oo/{classdefs.h => interface.h} (100%) 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/classdefs.h b/qcsrc/menu/oo/interface.h similarity index 100% rename from qcsrc/menu/oo/classdefs.h rename to qcsrc/menu/oo/interface.h 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 -- 2.39.2