diff --git a/Cable/CMakeLists.txt b/Cable/CMakeLists.txt index d4ef449..d0c8375 100644 --- a/Cable/CMakeLists.txt +++ b/Cable/CMakeLists.txt @@ -1,4 +1,4 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 1.4) +CMAKE_MINIMUM_REQUIRED(VERSION 2.4) IF (CMAKE_MAJOR_VERSION MATCHES "^1$") IF (CMAKE_MINOR_VERSION MATCHES "^[56]$") diff --git a/Cable/CxxTypes/cxxArrayType.cxx b/Cable/CxxTypes/cxxArrayType.cxx index 28c000d..58147ff 100644 --- a/Cable/CxxTypes/cxxArrayType.cxx +++ b/Cable/CxxTypes/cxxArrayType.cxx @@ -87,8 +87,11 @@ String ArrayType::GenerateDeclaration(const String& name, */ String ArrayType::GenerateLengthString() const { - char buf[128]; - sprintf(buf, "%lu", m_Length); + char buf[128] = ""; + if (m_Length > 0) + { + sprintf(buf, "%lu", m_Length); + } return buf; } diff --git a/Cable/CxxTypes/cxxUtils.h b/Cable/CxxTypes/cxxUtils.h index 319919d..2c8c099 100644 --- a/Cable/CxxTypes/cxxUtils.h +++ b/Cable/CxxTypes/cxxUtils.h @@ -29,7 +29,7 @@ #endif // Visual C++ for-loop scoping hack. -#ifdef _MSC_VER +#if defined(_MSC_VER) && _MSC_VER < 1700 #ifndef for #define for if(false) {} else for #endif diff --git a/Cable/Parsers/cableFunctionType.cxx b/Cable/Parsers/cableFunctionType.cxx index 9532018..7abc26f 100644 --- a/Cable/Parsers/cableFunctionType.cxx +++ b/Cable/Parsers/cableFunctionType.cxx @@ -142,6 +142,19 @@ unsigned int FunctionType::GetNumberOfRequiredArguments() const return m_RequiredArguments; } +//---------------------------------------------------------------------------- +int FunctionType::GetIndexOf(const std::string& argname) const +{ + int result = -1; + std::vector::iterator iterator = std::find(m_ArgumentNameVector.begin(), m_ArgumentNameVector.end(), argname); + if (iterator != m_ArgumentNameVector.end()) + { + result = iterator - m_ArgumentNameVector.begin(); + } + + return result; +} + //---------------------------------------------------------------------------- Type* FunctionType::GetArgument(unsigned int index) const { diff --git a/Cable/Parsers/cableFunctionType.h b/Cable/Parsers/cableFunctionType.h index 4058319..74f4ddd 100644 --- a/Cable/Parsers/cableFunctionType.h +++ b/Cable/Parsers/cableFunctionType.h @@ -52,7 +52,10 @@ class CABLE_PARSERS_EXPORT FunctionType: public Type /** Get the number of arguments without default values. */ unsigned int GetNumberOfRequiredArguments() const; - + + /** Get the index of an argument by name */ + int GetIndexOf(const std::string& argname) const; + /** Get the argument with the given index. */ Type* GetArgument(unsigned int index) const; diff --git a/Cable/Parsers/cableMethod.cxx b/Cable/Parsers/cableMethod.cxx index dd4dddd..4036a6a 100644 --- a/Cable/Parsers/cableMethod.cxx +++ b/Cable/Parsers/cableMethod.cxx @@ -89,6 +89,18 @@ void Method::SetPureVirtual(bool s) m_PureVirtual = s; } +//---------------------------------------------------------------------------- +bool Method::GetOverride() const +{ + return m_Override; +} + +//---------------------------------------------------------------------------- +void Method::SetOverride(bool s) +{ + m_Override = s; +} + //---------------------------------------------------------------------------- void Method::Print(std::ostream& os, Indent indent) const { diff --git a/Cable/Parsers/cableMethod.h b/Cable/Parsers/cableMethod.h index 52a8afc..28133c5 100644 --- a/Cable/Parsers/cableMethod.h +++ b/Cable/Parsers/cableMethod.h @@ -44,6 +44,10 @@ class CABLE_PARSERS_EXPORT Method: public Function bool GetPureVirtual() const; void SetPureVirtual(bool s); + /** Get/Set whether the method is overridden. */ + bool GetOverride() const; + void SetOverride(bool s); + /** Get/Set whether the method is const. */ bool GetConst() const; void SetConst(bool c); @@ -61,6 +65,9 @@ class CABLE_PARSERS_EXPORT Method: public Function // Whether or not the method is virtual. bool m_Virtual; + // Whether or not the method is overridden. + bool m_Override; + // Whether or not the method is static. bool m_Static; diff --git a/Cable/Parsers/cableUtils.h b/Cable/Parsers/cableUtils.h index 4341e08..8ec69ed 100644 --- a/Cable/Parsers/cableUtils.h +++ b/Cable/Parsers/cableUtils.h @@ -36,7 +36,7 @@ // Visual C++ for-loop scoping hack. We can use this inside the CABLE // application without interfering with user code. -#ifdef _MSC_VER +#if defined(_MSC_VER) && _MSC_VER < 1700 #ifndef for #define for if(false) {} else for #endif diff --git a/Cable/Parsers/cableXMLSourceParser.cxx b/Cable/Parsers/cableXMLSourceParser.cxx index 2360faf..4e2ca9f 100644 --- a/Cable/Parsers/cableXMLSourceParser.cxx +++ b/Cable/Parsers/cableXMLSourceParser.cxx @@ -579,6 +579,14 @@ bool XMLSourceParser::SetupNamed(XMLSourceElement* element, Named* named) { named->SetName("{anonymous-constructor}"); } + else if (Destructor::SafeDownCast(named)) + { + named->SetName("{anonymous-destructor}"); + } + else if (Converter::SafeDownCast(named)) + { + named->SetName("{operator}"); + } else { cableErrorMacro("No name on Named object " << named->GetNameOfClass()); @@ -700,13 +708,24 @@ bool XMLSourceParser::SetupFunctionType(XMLSourceElement* element, XMLSourceElement* argElement = element->GetNestedElement(i); if(String(argElement->GetName()) == "Argument") { - const char* typeId = argElement->GetAttribute("type"); - if(!typeId) - { - cableErrorMacro("No type attribute on Argument " << i << " in " - << element->GetName() << " " << element->GetId()); - return false; - } + const char* typeId; + const char* originaltypeId = argElement->GetAttribute("original_type"); + if (originaltypeId) + { + //when arrays and functions decay to a pointer type, then swap the type for the original + typeId = originaltypeId; + } + else + { + typeId = argElement->GetAttribute("type"); + if (!typeId) + { + cableErrorMacro("No type attribute on Argument " << i << " in " + << element->GetName() << " " << element->GetId()); + return false; + } + } + Type* argType = this->GetTypeFromId(typeId); if(!argType) { @@ -1348,9 +1367,15 @@ SourceObject* XMLSourceParser::AddMethod(XMLSourceElement* element) bool isStatic = false; bool isVirtual = false; bool isPureVirtual = false; + bool isOverride = false; const char* virtualAttr = element->GetAttribute("virtual"); if(virtualAttr && (String(virtualAttr) == "1")) { isVirtual = true; } + if (isVirtual) + { + const char* overridesAttr = element->GetAttribute("overrides"); + if (overridesAttr && (String(overridesAttr) != "")) { isOverride = true; } + } const char* pureVirtualAttr = element->GetAttribute("pure_virtual"); if(pureVirtualAttr && (String(pureVirtualAttr) == "1")) { isPureVirtual = true; } @@ -1381,6 +1406,7 @@ SourceObject* XMLSourceParser::AddMethod(XMLSourceElement* element) m->SetStatic(isStatic); m->SetVirtual(isVirtual); m->SetPureVirtual(isPureVirtual); + m->SetOverride(isOverride); // Add the FunctionType element with a dummy id. String fid = element->GetId(); diff --git a/GCC_XML/KWSys/CMakeLists.txt b/GCC_XML/KWSys/CMakeLists.txt index ca496ab..3a3ea66 100644 --- a/GCC_XML/KWSys/CMakeLists.txt +++ b/GCC_XML/KWSys/CMakeLists.txt @@ -243,7 +243,7 @@ STRING(COMPARE EQUAL "${PROJECT_SOURCE_DIR}" "${PROJECT_BINARY_DIR}" KWSYS_IN_SOURCE_BUILD) IF(NOT KWSYS_IN_SOURCE_BUILD) CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/kwsysPrivate.h - ${PROJECT_BINARY_DIR}/kwsysPrivate.h COPY_ONLY IMMEDIATE) + ${PROJECT_BINARY_DIR}/kwsysPrivate.h COPYONLY IMMEDIATE) ENDIF(NOT KWSYS_IN_SOURCE_BUILD) # Select plugin module file name convention. diff --git a/GCC_XML/KWSys/kwsysPlatformTests.cmake b/GCC_XML/KWSys/kwsysPlatformTests.cmake index d042450..fce1983 100644 --- a/GCC_XML/KWSys/kwsysPlatformTests.cmake +++ b/GCC_XML/KWSys/kwsysPlatformTests.cmake @@ -13,7 +13,7 @@ SET(KWSYS_PLATFORM_TEST_FILE_C kwsysPlatformTestsC.c) SET(KWSYS_PLATFORM_TEST_FILE_CXX kwsysPlatformTestsCXX.cxx) MACRO(KWSYS_PLATFORM_TEST lang var description invert) - IF("${var}_COMPILED" MATCHES "^${var}_COMPILED$") + IF(${var}_COMPILED MATCHES ^${var}_COMPILED$) MESSAGE(STATUS "${description}") TRY_COMPILE(${var}_COMPILED ${CMAKE_CURRENT_BINARY_DIR} @@ -42,7 +42,7 @@ MACRO(KWSYS_PLATFORM_TEST lang var description invert) MESSAGE(STATUS "${description} - no") ENDIF(${var}_COMPILED) ENDIF(${invert} MATCHES INVERT) - ENDIF("${var}_COMPILED" MATCHES "^${var}_COMPILED$") + ENDIF(${var}_COMPILED MATCHES ^${var}_COMPILED$) IF(${invert} MATCHES INVERT) IF(${var}_COMPILED) SET(${var} 0) @@ -59,7 +59,7 @@ MACRO(KWSYS_PLATFORM_TEST lang var description invert) ENDMACRO(KWSYS_PLATFORM_TEST) MACRO(KWSYS_PLATFORM_TEST_RUN lang var description invert) - IF("${var}" MATCHES "^${var}$") + IF(${var} MATCHES ^${var}$) MESSAGE(STATUS "${description}") TRY_RUN(${var} ${var}_COMPILED ${CMAKE_CURRENT_BINARY_DIR} @@ -106,7 +106,7 @@ MACRO(KWSYS_PLATFORM_TEST_RUN lang var description invert) MESSAGE(STATUS "${description} - failed to compile") ENDIF(${var}_COMPILED) ENDIF(${invert} MATCHES INVERT) - ENDIF("${var}" MATCHES "^${var}$") + ENDIF(${var} MATCHES ^${var}$) IF(${invert} MATCHES INVERT) IF(${var}_COMPILED) @@ -150,7 +150,7 @@ ENDMACRO(KWSYS_PLATFORM_C_TEST_RUN) MACRO(KWSYS_PLATFORM_CXX_TEST var description invert) SET(KWSYS_PLATFORM_TEST_DEFINES ${KWSYS_PLATFORM_CXX_TEST_DEFINES}) SET(KWSYS_PLATFORM_TEST_EXTRA_FLAGS ${KWSYS_PLATFORM_CXX_TEST_EXTRA_FLAGS}) - KWSYS_PLATFORM_TEST(CXX "${var}" "${description}" "${invert}") + KWSYS_PLATFORM_TEST(CXX ${var} ${description} ${invert}) SET(KWSYS_PLATFORM_TEST_DEFINES) SET(KWSYS_PLATFORM_TEST_EXTRA_FLAGS) ENDMACRO(KWSYS_PLATFORM_CXX_TEST) @@ -158,7 +158,7 @@ ENDMACRO(KWSYS_PLATFORM_CXX_TEST) MACRO(KWSYS_PLATFORM_CXX_TEST_RUN var description invert) SET(KWSYS_PLATFORM_TEST_DEFINES ${KWSYS_PLATFORM_CXX_TEST_DEFINES}) SET(KWSYS_PLATFORM_TEST_EXTRA_FLAGS ${KWSYS_PLATFORM_CXX_TEST_EXTRA_FLAGS}) - KWSYS_PLATFORM_TEST_RUN(CXX "${var}" "${description}" "${invert}") + KWSYS_PLATFORM_TEST_RUN(CXX ${var} ${description} ${invert}) SET(KWSYS_PLATFORM_TEST_DEFINES) SET(KWSYS_PLATFORM_TEST_EXTRA_FLAGS) ENDMACRO(KWSYS_PLATFORM_CXX_TEST_RUN)