Mercurial > projects > ldc
changeset 821:8f0b24bc55f0
Added CMake option to disable generation of ClassInfo.offTi arrays, defaults to OFF.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Tue, 02 Dec 2008 01:44:17 +0100 |
parents | bb4a81e68ddb |
children | 43178a913a28 |
files | CMakeLists.txt gen/classes.cpp tests/mini/classinfo3.d |
diffstat | 3 files changed, 22 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/CMakeLists.txt Tue Dec 02 01:20:22 2008 +0100 +++ b/CMakeLists.txt Tue Dec 02 01:44:17 2008 +0100 @@ -41,6 +41,7 @@ set(D_VERSION 1 CACHE STRING "D language version") option(USE_BOEHM_GC "use the Boehm garbage collector internally") +option(GENERATE_OFFTI "generate complete ClassInfo.offTi arrays") if(D_VERSION EQUAL 1) set(DMDFE_PATH dmd) @@ -142,6 +143,10 @@ add_definitions(-DUSE_BOEHM_GC) endif(USE_BOEHM_GC) +if(GENERATE_OFFTI) + add_definitions(-DGENERATE_OFFTI) +endif(GENERATE_OFFTI) + if(CMAKE_MINOR_VERSION LESS 6) set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin CACHE PATH "output dir for built executables") set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib CACHE PATH "output dir for built libraries")
--- a/gen/classes.cpp Tue Dec 02 01:20:22 2008 +0100 +++ b/gen/classes.cpp Tue Dec 02 01:44:17 2008 +0100 @@ -1312,6 +1312,8 @@ ////////////////////////////////////////////////////////////////////////////////////////// +#if GENERATE_OFFTI + // build a single element for the OffsetInfo[] of ClassInfo static LLConstant* build_offti_entry(ClassDeclaration* cd, VarDeclaration* vd) { @@ -1371,6 +1373,8 @@ return DtoConstSlice(size, ptr); } +#endif // GENERATE_OFFTI + static LLConstant* build_class_dtor(ClassDeclaration* cd) { FuncDeclaration* dtor = cd->dtor; @@ -1581,10 +1585,20 @@ // offset typeinfo VarDeclaration* offTiVar = (VarDeclaration*)cinfo->fields.data[9]; const LLType* offTiTy = DtoType(offTiVar->type); + +#if GENERATE_OFFTI + if (cd->isInterfaceDeclaration()) c = LLConstant::getNullValue(offTiTy); else c = build_offti_array(cd, offTiTy); + +#else // GENERATE_OFFTI + + c = LLConstant::getNullValue(offTiTy); + +#endif // GENERATE_OFFTI + inits.push_back(c); // default constructor @@ -1606,8 +1620,6 @@ // FIXME: fill it out! inits.push_back( LLConstant::getNullValue(xgetTy) ); - -#else #endif /*size_t n = inits.size();
--- a/tests/mini/classinfo3.d Tue Dec 02 01:20:22 2008 +0100 +++ b/tests/mini/classinfo3.d Tue Dec 02 01:44:17 2008 +0100 @@ -11,7 +11,8 @@ void main() { auto c = C.classinfo; - assert(c.offTi !is null); + if (c.offTi !is null) + { assert(c.offTi.length == 4); size_t base = 2*size_t.sizeof; @@ -24,4 +25,5 @@ assert(c.offTi[2].ti == typeid(long)); assert(c.offTi[3].offset == base+16); assert(c.offTi[3].ti == typeid(int)); + } }