aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/jsruntime')
-rw-r--r--src/qml/jsruntime/qv4engine.cpp11
-rw-r--r--src/qml/jsruntime/qv4engine_p.h5
-rw-r--r--src/qml/jsruntime/qv4numberobject.cpp4
-rw-r--r--src/qml/jsruntime/qv4regexpobject_p.h4
4 files changed, 13 insertions, 11 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp
index a5fc37b91b..7b298a302c 100644
--- a/src/qml/jsruntime/qv4engine.cpp
+++ b/src/qml/jsruntime/qv4engine.cpp
@@ -502,10 +502,8 @@ ExecutionEngine::~ExecutionEngine()
delete identifierTable;
delete memoryManager;
- QSet<QV4::CompiledData::CompilationUnit*> remainingUnits;
- qSwap(compilationUnits, remainingUnits);
- for (QV4::CompiledData::CompilationUnit *unit : qAsConst(remainingUnits))
- unit->unlink();
+ while (!compilationUnits.isEmpty())
+ (*compilationUnits.begin())->unlink();
internalClasses[Class_Empty]->destroy();
delete classPool;
@@ -970,9 +968,8 @@ void ExecutionEngine::markObjects(MarkStack *markStack)
classPool->markObjects(markStack);
markStack->drain();
- for (QSet<CompiledData::CompilationUnit*>::ConstIterator it = compilationUnits.constBegin(), end = compilationUnits.constEnd();
- it != end; ++it) {
- (*it)->markObjects(markStack);
+ for (auto compilationUnit: compilationUnits) {
+ compilationUnit->markObjects(markStack);
markStack->drain();
}
}
diff --git a/src/qml/jsruntime/qv4engine_p.h b/src/qml/jsruntime/qv4engine_p.h
index 3b4212020d..4549cda5b9 100644
--- a/src/qml/jsruntime/qv4engine_p.h
+++ b/src/qml/jsruntime/qv4engine_p.h
@@ -59,6 +59,7 @@
#ifndef V4_BOOTSTRAP
# include <private/qv8engine_p.h>
+# include <private/qv4compileddata_p.h>
#endif
namespace WTF {
@@ -314,7 +315,9 @@ public:
String *id_buffer() const { return reinterpret_cast<String *>(jsStrings + String_buffer); }
String *id_lastIndex() const { return reinterpret_cast<String *>(jsStrings + String_lastIndex); }
- QSet<CompiledData::CompilationUnit*> compilationUnits;
+#ifndef V4_BOOTSTRAP
+ QIntrusiveList<CompiledData::CompilationUnit, &CompiledData::CompilationUnit::nextCompilationUnit> compilationUnits;
+#endif
quint32 m_engineId;
diff --git a/src/qml/jsruntime/qv4numberobject.cpp b/src/qml/jsruntime/qv4numberobject.cpp
index 8cfa930888..d5c80dbf80 100644
--- a/src/qml/jsruntime/qv4numberobject.cpp
+++ b/src/qml/jsruntime/qv4numberobject.cpp
@@ -213,7 +213,9 @@ void NumberPrototype::method_isNaN(const BuiltinFunction *, Scope &scope, CallDa
}
double v = callData->args[0].toNumber();
- scope.result = Encode(std::isnan(v));
+ // cast to bool explicitly as std::isnan() may give us ::isnan(), which
+ // sometimes returns an int and we don't want the Encode(int) overload.
+ scope.result = Encode(bool(std::isnan(v)));
}
void NumberPrototype::method_toString(const BuiltinFunction *, Scope &scope, CallData *callData)
diff --git a/src/qml/jsruntime/qv4regexpobject_p.h b/src/qml/jsruntime/qv4regexpobject_p.h
index cb2bcbab2d..65055ccc81 100644
--- a/src/qml/jsruntime/qv4regexpobject_p.h
+++ b/src/qml/jsruntime/qv4regexpobject_p.h
@@ -55,8 +55,8 @@
#include "qv4context_p.h"
#include "qv4functionobject_p.h"
#include "qv4string_p.h"
-#include "qv4codegen_p.h"
-#include "qv4isel_p.h"
+#include <qv4codegen_p.h>
+#include <qv4isel_p.h>
#include "qv4managed_p.h"
#include "qv4property_p.h"
#include "qv4objectiterator_p.h"