diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-08-16 18:35:29 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@digia.com> | 2013-08-16 19:22:24 +0200 |
commit | a44f92d925a1b0f5fa205706a26d81f07de75c33 (patch) | |
tree | 16345975d3058ca04b769b2598f58fa6de1f6f0d /src/qml/jsruntime/qv4engine.cpp | |
parent | 0f0e7443aea0d9a203b380bec708c485a01450e0 (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.cpp | 28 |
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; } |