aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2014-05-23 10:05:51 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-05-27 07:53:45 +0200
commita949f798730341bb5014ea38ef844a3de70481ff (patch)
treecd42def9cec4e632a42b4c1f5b1e6056301b1de5
parent228fe20d82c15b713f773b5cfc33910d3457fb63 (diff)
Fix compilation on MSVC 2008
We are using std::lower_bound on a vector where the item we search for is of a different type than the items in the container. MSVC 2008's STL is very happy to check all sorts of constraints and also compare the order of items within the container. That means it tries to call the compare function not only with the key we're searching and one item but also two items from the container. The existing compare function can't satisfy that constraint, so instead we'll go back to the old approach of a proper functor that operates outside of the class scope, in order to build with older compilers. That functor now offers all necessary overloads. Task-number: QTBUG-38873 Change-Id: I6f350106f98cb03a4ff7e1671a84e67f629cedd3 Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
-rw-r--r--src/qml/compiler/qqmltypecompiler.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/qml/compiler/qqmltypecompiler.cpp b/src/qml/compiler/qqmltypecompiler.cpp
index 1110b3f29d..60a0829b9b 100644
--- a/src/qml/compiler/qqmltypecompiler.cpp
+++ b/src/qml/compiler/qqmltypecompiler.cpp
@@ -1759,10 +1759,21 @@ QString QQmlPropertyValidator::bindingAsString(int objectIndex, const QV4::Compi
typedef QVarLengthArray<const QV4::CompiledData::Binding *, 8> GroupPropertyVector;
-static bool compareNameIndices(const QV4::CompiledData::Binding *binding, quint32 name)
+struct BindingFinder
{
- return binding->propertyNameIndex < name;
-}
+ bool operator()(quint32 name, const QV4::CompiledData::Binding *binding) const
+ {
+ return name < binding->propertyNameIndex;
+ }
+ bool operator()(const QV4::CompiledData::Binding *binding, quint32 name) const
+ {
+ return binding->propertyNameIndex < name;
+ }
+ bool operator()(const QV4::CompiledData::Binding *lhs, const QV4::CompiledData::Binding *rhs) const
+ {
+ return lhs->propertyNameIndex < rhs->propertyNameIndex;
+ }
+};
bool QQmlPropertyValidator::validateObject(int objectIndex, const QV4::CompiledData::Binding *instantiatingBinding, bool populatingValueTypeGroupProperty)
{
@@ -1810,7 +1821,7 @@ bool QQmlPropertyValidator::validateObject(int objectIndex, const QV4::CompiledD
return false;
}
- GroupPropertyVector::const_iterator pos = std::lower_bound(groupProperties.constBegin(), groupProperties.constEnd(), binding->propertyNameIndex, compareNameIndices);
+ GroupPropertyVector::const_iterator pos = std::lower_bound(groupProperties.constBegin(), groupProperties.constEnd(), binding->propertyNameIndex, BindingFinder());
groupProperties.insert(pos, binding);
}
@@ -1923,7 +1934,7 @@ bool QQmlPropertyValidator::validateObject(int objectIndex, const QV4::CompiledD
}
if (pd) {
- GroupPropertyVector::const_iterator assignedGroupProperty = std::lower_bound(groupProperties.constBegin(), groupProperties.constEnd(), binding->propertyNameIndex, compareNameIndices);
+ GroupPropertyVector::const_iterator assignedGroupProperty = std::lower_bound(groupProperties.constBegin(), groupProperties.constEnd(), binding->propertyNameIndex, BindingFinder());
const bool assigningToGroupProperty = assignedGroupProperty != groupProperties.constEnd() && !(binding->propertyNameIndex < (*assignedGroupProperty)->propertyNameIndex);
if (!pd->isWritable()