aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/3rdparty/cplusplus
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/3rdparty/cplusplus')
-rw-r--r--src/libs/3rdparty/cplusplus/Name.cpp15
-rw-r--r--src/libs/3rdparty/cplusplus/Name.h6
-rw-r--r--src/libs/3rdparty/cplusplus/Templates.cpp2
-rw-r--r--src/libs/3rdparty/cplusplus/Templates.h3
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