Changeset 821:8f0b24bc55f0
- Timestamp:
- 12/01/08 19:44:17
(1 month ago)
- Author:
- Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
- branch:
- default
- Message:
Added CMake option to disable generation of ClassInfo?.offTi arrays, defaults to OFF.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r785 |
r821 |
|
| 42 | 42 | set(D_VERSION 1 CACHE STRING "D language version") |
|---|
| 43 | 43 | option(USE_BOEHM_GC "use the Boehm garbage collector internally") |
|---|
| | 44 | option(GENERATE_OFFTI "generate complete ClassInfo.offTi arrays") |
|---|
| 44 | 45 | |
|---|
| 45 | 46 | if(D_VERSION EQUAL 1) |
|---|
| … | … | |
| 143 | 144 | endif(USE_BOEHM_GC) |
|---|
| 144 | 145 | |
|---|
| | 146 | if(GENERATE_OFFTI) |
|---|
| | 147 | add_definitions(-DGENERATE_OFFTI) |
|---|
| | 148 | endif(GENERATE_OFFTI) |
|---|
| | 149 | |
|---|
| 145 | 150 | if(CMAKE_MINOR_VERSION LESS 6) |
|---|
| 146 | 151 | set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin CACHE PATH "output dir for built executables") |
|---|
| r816 |
r821 |
|
| 1313 | 1313 | ////////////////////////////////////////////////////////////////////////////////////////// |
|---|
| 1314 | 1314 | |
|---|
| | 1315 | #if GENERATE_OFFTI |
|---|
| | 1316 | |
|---|
| 1315 | 1317 | // build a single element for the OffsetInfo[] of ClassInfo |
|---|
| 1316 | 1318 | static LLConstant* build_offti_entry(ClassDeclaration* cd, VarDeclaration* vd) |
|---|
| … | … | |
| 1371 | 1373 | return DtoConstSlice(size, ptr); |
|---|
| 1372 | 1374 | } |
|---|
| | 1375 | |
|---|
| | 1376 | #endif // GENERATE_OFFTI |
|---|
| 1373 | 1377 | |
|---|
| 1374 | 1378 | static LLConstant* build_class_dtor(ClassDeclaration* cd) |
|---|
| … | … | |
| 1582 | 1586 | VarDeclaration* offTiVar = (VarDeclaration*)cinfo->fields.data[9]; |
|---|
| 1583 | 1587 | const LLType* offTiTy = DtoType(offTiVar->type); |
|---|
| | 1588 | |
|---|
| | 1589 | #if GENERATE_OFFTI |
|---|
| | 1590 | |
|---|
| 1584 | 1591 | if (cd->isInterfaceDeclaration()) |
|---|
| 1585 | 1592 | c = LLConstant::getNullValue(offTiTy); |
|---|
| 1586 | 1593 | else |
|---|
| 1587 | 1594 | c = build_offti_array(cd, offTiTy); |
|---|
| | 1595 | |
|---|
| | 1596 | #else // GENERATE_OFFTI |
|---|
| | 1597 | |
|---|
| | 1598 | c = LLConstant::getNullValue(offTiTy); |
|---|
| | 1599 | |
|---|
| | 1600 | #endif // GENERATE_OFFTI |
|---|
| | 1601 | |
|---|
| 1588 | 1602 | inits.push_back(c); |
|---|
| 1589 | 1603 | |
|---|
| … | … | |
| 1607 | 1621 | // FIXME: fill it out! |
|---|
| 1608 | 1622 | inits.push_back( LLConstant::getNullValue(xgetTy) ); |
|---|
| 1609 | | |
|---|
| 1610 | | #else |
|---|
| 1611 | 1623 | #endif |
|---|
| 1612 | 1624 | |
|---|
| r341 |
r821 |
|
| 12 | 12 | { |
|---|
| 13 | 13 | auto c = C.classinfo; |
|---|
| 14 | | assert(c.offTi !is null); |
|---|
| | 14 | if (c.offTi !is null) |
|---|
| | 15 | { |
|---|
| 15 | 16 | assert(c.offTi.length == 4); |
|---|
| 16 | 17 | |
|---|
| … | … | |
| 25 | 26 | assert(c.offTi[3].offset == base+16); |
|---|
| 26 | 27 | assert(c.offTi[3].ti == typeid(int)); |
|---|
| | 28 | } |
|---|
| 27 | 29 | } |
|---|