diff options
Diffstat (limited to 'src/libs/3rdparty/cplusplus')
-rw-r--r-- | src/libs/3rdparty/cplusplus/Name.cpp | 15 | ||||
-rw-r--r-- | src/libs/3rdparty/cplusplus/Name.h | 6 | ||||
-rw-r--r-- | src/libs/3rdparty/cplusplus/Templates.cpp | 2 | ||||
-rw-r--r-- | src/libs/3rdparty/cplusplus/Templates.h | 3 |
4 files changed, 25 insertions, 1 deletions
diff --git a/src/libs/3rdparty/cplusplus/Name.cpp b/src/libs/3rdparty/cplusplus/Name.cpp index 6c1240b279e..8fec45f5c07 100644 --- a/src/libs/3rdparty/cplusplus/Name.cpp +++ b/src/libs/3rdparty/cplusplus/Name.cpp @@ -18,10 +18,13 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +#include "Literals.h" #include "Name.h" #include "Names.h" #include "NameVisitor.h" +#include <cstring> + using namespace CPlusPlus; Name::Name() @@ -65,4 +68,16 @@ void Name::accept(const Name *name, NameVisitor *visitor) name->accept(visitor); } +bool Name::Compare::operator()(const Name *name, const Name *other) const +{ + if (name == 0) + return other != 0; + if (other == 0) + return false; + if (name == other) + return false; + const Identifier *id = name->identifier(); + const Identifier *otherId = other->identifier(); + return std::strcmp(id->chars(), otherId->chars()) < 0; +} diff --git a/src/libs/3rdparty/cplusplus/Name.h b/src/libs/3rdparty/cplusplus/Name.h index 8a34b364790..43dcf3d35cc 100644 --- a/src/libs/3rdparty/cplusplus/Name.h +++ b/src/libs/3rdparty/cplusplus/Name.h @@ -23,6 +23,7 @@ #include "CPlusPlusForwardDeclarations.h" +#include <functional> namespace CPlusPlus { @@ -55,6 +56,11 @@ public: void accept(NameVisitor *visitor) const; static void accept(const Name *name, NameVisitor *visitor); +public: + struct Compare: std::binary_function<const Name *, const Name *, bool> { + bool operator()(const Name *name, const Name *other) const; + }; + protected: virtual void accept0(NameVisitor *visitor) const = 0; }; diff --git a/src/libs/3rdparty/cplusplus/Templates.cpp b/src/libs/3rdparty/cplusplus/Templates.cpp index 095fa010a93..1c4ec61ced5 100644 --- a/src/libs/3rdparty/cplusplus/Templates.cpp +++ b/src/libs/3rdparty/cplusplus/Templates.cpp @@ -514,6 +514,8 @@ Symbol *Clone::instantiate(Template *templ, const FullySpecifiedType *const args // // substitutions // + + FullySpecifiedType Subst::apply(const Name *name) const { if (name) { diff --git a/src/libs/3rdparty/cplusplus/Templates.h b/src/libs/3rdparty/cplusplus/Templates.h index 0057d7fcbfc..04064a89067 100644 --- a/src/libs/3rdparty/cplusplus/Templates.h +++ b/src/libs/3rdparty/cplusplus/Templates.h @@ -24,6 +24,7 @@ #include "CPlusPlusForwardDeclarations.h" #include "TypeVisitor.h" #include "FullySpecifiedType.h" +#include "Name.h" #include "NameVisitor.h" #include "SymbolVisitor.h" #include <map> @@ -56,7 +57,7 @@ public: private: Control *_control; Subst *_previous; - std::map<const Name *, FullySpecifiedType> _map; + std::map<const Name *, FullySpecifiedType, Name::Compare> _map; }; class CPLUSPLUS_EXPORT CloneType: protected TypeVisitor |