Fix failing assertion with MSVC in debug builds in various tests
We re-implemented Vector::begin() and end() by means of dereferencing the return value from std::begin() and then taking the address of it. That causes a failing assertion in MSVC's STL (rightly so!). We did this only to avoid modifying the original YarrJIT.cpp code. This patch instead simplifies our Vector.h stub again and just fixes the two small occurrences in YarrJIT.cpp where it expects vector->begin() to return a pointer instead of an iterator. Change-Id: I2ad137be91ea969ccb310333dffa8d98e5825f8f Reviewed-by: Lars Knoll <lars.knoll@digia.com>
This commit is contained in:
parent
b24bf4fc0c
commit
8c0b5be802
|
|
@ -32,6 +32,8 @@ HEADERS += $$PWD/stubs/WTFStubs.h
|
|||
|
||||
SOURCES += $$PWD/stubs/Options.cpp
|
||||
|
||||
HEADERS += $$PWD/stubs/wtf/*.h
|
||||
|
||||
SOURCES += $$PWD/disassembler/Disassembler.cpp
|
||||
SOURCES += $$PWD/disassembler/UDis86Disassembler.cpp
|
||||
contains(DEFINES, WTF_USE_UDIS86=1) {
|
||||
|
|
|
|||
|
|
@ -55,9 +55,6 @@ namespace WTF {
|
|||
template <typename T, int capacity = 1, int overflowMode = UnsafeVectorOverflow>
|
||||
class Vector : public std::vector<T> {
|
||||
public:
|
||||
typedef T* iterator;
|
||||
typedef const T* const_iterator;
|
||||
|
||||
Vector() {}
|
||||
Vector(int initialSize) : std::vector<T>(initialSize) {}
|
||||
|
||||
|
|
@ -70,7 +67,7 @@ public:
|
|||
|
||||
inline void append(const Vector<T>& vector)
|
||||
{
|
||||
this->insert(this->std::vector<T>::end(), vector.std::template vector<T>::begin(), vector.std::template vector<T>::end());
|
||||
this->insert(this->end(), vector.begin(), vector.end());
|
||||
}
|
||||
|
||||
inline void append(const T* ptr, size_t count)
|
||||
|
|
@ -90,33 +87,23 @@ public:
|
|||
inline void reserveInitialCapacity(size_t size) { this->reserve(size); }
|
||||
|
||||
inline void insert(size_t position, T value)
|
||||
{ this->insert(this->std::vector<T>::begin() + position, value); }
|
||||
{ this->insert(this->begin() + position, value); }
|
||||
|
||||
inline void grow(size_t size)
|
||||
{ this->resize(size); }
|
||||
|
||||
inline void shrink(size_t size)
|
||||
{ this->erase(this->std::vector<T>::begin() + size, this->std::vector<T>::end()); }
|
||||
{ this->erase(this->begin() + size, this->end()); }
|
||||
|
||||
inline void shrinkToFit()
|
||||
{ this->shrink(this->size()); }
|
||||
|
||||
inline void remove(size_t position)
|
||||
{ this->erase(this->std::vector<T>::begin() + position); }
|
||||
{ this->erase(this->begin() + position); }
|
||||
|
||||
inline bool isEmpty() const { return this->empty(); }
|
||||
|
||||
inline T &last() { return *(this->std::vector<T>::begin() + this->size() - 1); }
|
||||
|
||||
inline iterator begin()
|
||||
{ return &(*this->std::vector<T>::begin()); }
|
||||
inline const_iterator begin() const
|
||||
{ return &(*this->std::vector<T>::begin()); }
|
||||
inline iterator end()
|
||||
{ return &(*this->std::vector<T>::end()); }
|
||||
inline const_iterator end() const
|
||||
{ return &(*this->std::vector<T>::end()); }
|
||||
|
||||
inline T &last() { return *(this->begin() + this->size() - 1); }
|
||||
};
|
||||
|
||||
template <typename T, int capacity>
|
||||
|
|
|
|||
|
|
@ -212,7 +212,7 @@ class YarrGenerator : private MacroAssembler {
|
|||
if (charClass->m_ranges.size()) {
|
||||
unsigned matchIndex = 0;
|
||||
JumpList failures;
|
||||
matchCharacterClassRange(character, failures, matchDest, charClass->m_ranges.begin(), charClass->m_ranges.size(), &matchIndex, charClass->m_matches.begin(), charClass->m_matches.size());
|
||||
matchCharacterClassRange(character, failures, matchDest, &charClass->m_ranges[0], charClass->m_ranges.size(), &matchIndex, &charClass->m_matches[0], charClass->m_matches.size());
|
||||
while (matchIndex < charClass->m_matches.size())
|
||||
matchDest.append(branch32(Equal, character, Imm32((unsigned short)charClass->m_matches[matchIndex++])));
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue