aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2017-11-08 10:28:30 +0100
committerLars Knoll <lars.knoll@qt.io>2017-11-08 12:32:01 +0100
commit0a27a14ec1879096e5fffca75b3bd107b813db87 (patch)
tree2e4332c9545af969903cb9c8bd619f2adc53f5a8 /src/qml/jsruntime
parentb853a1e1b003d4dc01884201c09c2fcbf75f2cf6 (diff)
parent7bedd55551fbe95355b0db11f9d576924e829f9d (diff)
Merge remote-tracking branch 'origin/dev' into new-backend
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
3 files changed, 11 insertions, 9 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp
index 5db7da668b..049e4a117d 100644
--- a/src/qml/jsruntime/qv4engine.cpp
+++ b/src/qml/jsruntime/qv4engine.cpp
@@ -470,10 +470,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;
@@ -918,9 +916,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 6d5b93bcc8..db002035da 100644
--- a/src/qml/jsruntime/qv4engine_p.h
+++ b/src/qml/jsruntime/qv4engine_p.h
@@ -58,6 +58,7 @@
#ifndef V4_BOOTSTRAP
# include <private/qv8engine_p.h>
+# include <private/qv4compileddata_p.h>
#endif
namespace WTF {
@@ -336,7 +337,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 2ac4409805..ca5340c37d 100644
--- a/src/qml/jsruntime/qv4numberobject.cpp
+++ b/src/qml/jsruntime/qv4numberobject.cpp
@@ -197,7 +197,9 @@ ReturnedValue NumberPrototype::method_isNaN(const BuiltinFunction *, CallData *c
return Encode(false);
double v = callData->args[0].toNumber();
- return 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.
+ return Encode(bool(std::isnan(v)));
}
ReturnedValue NumberPrototype::method_toString(const BuiltinFunction *b, CallData *callData)