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));
+    }
 }