aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4engine.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2013-08-16 18:35:29 +0200
committerLars Knoll <lars.knoll@digia.com>2013-08-16 19:22:24 +0200
commita44f92d925a1b0f5fa205706a26d81f07de75c33 (patch)
tree16345975d3058ca04b769b2598f58fa6de1f6f0d /src/qml/jsruntime/qv4engine.cpp
parent0f0e7443aea0d9a203b380bec708c485a01450e0 (diff)
Get rid of the functions list in QV4::ExecutionEngine
Change-Id: I97067dbb2819936a1b2029c9f63f0627cb6b8bd2 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4engine.cpp')
-rw-r--r--src/qml/jsruntime/qv4engine.cpp28
1 files changed, 8 insertions, 20 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp
index 764f3fa45f..36ab994274 100644
--- a/src/qml/jsruntime/qv4engine.cpp
+++ b/src/qml/jsruntime/qv4engine.cpp
@@ -87,7 +87,6 @@ ExecutionEngine::ExecutionEngine(QQmlJS::EvalISelFactory *factory)
, debugger(0)
, globalObject(0)
, globalCode(0)
- , functionsNeedSort(false)
, m_engineId(engineSerial.fetchAndAddOrdered(1))
, regExpCache(0)
, m_multiplyWrappedQObjects(0)
@@ -279,7 +278,6 @@ ExecutionEngine::~ExecutionEngine()
delete identifierTable;
delete bumperPointerAllocator;
delete regExpCache;
- UnwindHelper::deregisterFunctions(functions);
delete regExpAllocator;
delete executableAllocator;
}
@@ -379,8 +377,6 @@ ExecutionContext *ExecutionEngine::pushGlobalContext()
Function *ExecutionEngine::newFunction(const QString &name)
{
Function *f = new Function(this, newIdentifier(name));
- functions.append(f);
- functionsNeedSort = true;
return f;
}
@@ -732,9 +728,6 @@ void ExecutionEngine::markObjects()
c = c->parent;
}
- for (int i = 0; i < functions.size(); ++i)
- functions.at(i)->mark();
-
id_length->mark();
id_prototype->mark();
id_constructor->mark();
@@ -796,11 +789,6 @@ void ExecutionEngine::markObjects()
}
namespace {
- bool functionSortHelper(Function *lhs, Function *rhs)
- {
- return reinterpret_cast<quintptr>(lhs->code) < reinterpret_cast<quintptr>(rhs->code);
- }
-
struct FindHelper
{
bool operator()(Function *function, quintptr pc)
@@ -818,15 +806,15 @@ namespace {
Function *ExecutionEngine::functionForProgramCounter(quintptr pc) const
{
- if (functionsNeedSort) {
- qSort(functions.begin(), functions.end(), functionSortHelper);
- functionsNeedSort = false;
+ for (QSet<QV4::CompiledData::CompilationUnit*>::ConstIterator unitIt = compilationUnits.constBegin(), unitEnd = compilationUnits.constEnd();
+ unitIt != unitEnd; ++unitIt) {
+ const QVector<Function*> &functions = (*unitIt)->runtimeFunctionsSortedByAddress;
+ QVector<Function*>::ConstIterator it = qBinaryFind(functions.constBegin(),
+ functions.constEnd(),
+ pc, FindHelper());
+ if (it != functions.constEnd())
+ return *it;
}
-
- QVector<Function*>::ConstIterator it = qBinaryFind(functions.constBegin(), functions.constEnd(),
- pc, FindHelper());
- if (it != functions.constEnd())
- return *it;
return 0;
}