From ea0ea907edbe7dd0c65f10752d7df1de6f0fd63b Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Mon, 2 Sep 2013 14:25:15 +0200 Subject: Optimize String.replace and RegExp.exec This speeds up the v8 regexp benchmark by a factor 2.5 :) Change-Id: Ibd6b18ee28181aa712429cbec4598984e0c69820 Reviewed-by: Simon Hausmann --- src/qml/jsruntime/qv4engine.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/qml/jsruntime/qv4engine.cpp') diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index af87ee2a45..ae444ab938 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -135,6 +135,8 @@ ExecutionEngine::ExecutionEngine(QQmlJS::EvalISelFactory *factory) id_eval = newIdentifier(QStringLiteral("eval")); id_uintMax = newIdentifier(QStringLiteral("4294967295")); id_name = newIdentifier(QStringLiteral("name")); + id_index = newIdentifier(QStringLiteral("index")); + id_input = newIdentifier(QStringLiteral("input")); ObjectPrototype *objectPrototype = new (memoryManager) ObjectPrototype(emptyClass); objectClass = emptyClass->changePrototype(objectPrototype); @@ -171,6 +173,10 @@ ExecutionEngine::ExecutionEngine(QQmlJS::EvalISelFactory *factory) RegExpPrototype *regExpPrototype = new (memoryManager) RegExpPrototype(objectClass); regExpClass = emptyClass->changePrototype(regExpPrototype); + regExpExecArrayClass = arrayClass->addMember(id_index, Attr_Data, &index); + Q_ASSERT(index == RegExpObject::Index_ArrayIndex); + regExpExecArrayClass = regExpExecArrayClass->addMember(id_input, Attr_Data, &index); + Q_ASSERT(index == RegExpObject::Index_ArrayInput); ErrorPrototype *errorPrototype = new (memoryManager) ErrorPrototype(objectClass); errorClass = emptyClass->changePrototype(errorPrototype); @@ -392,6 +398,13 @@ ArrayObject *ExecutionEngine::newArrayObject(const QStringList &list) return object; } +ArrayObject *ExecutionEngine::newArrayObject(InternalClass *ic) +{ + ArrayObject *object = new (memoryManager) ArrayObject(ic); + return object; +} + + DateObject *ExecutionEngine::newDateObject(const Value &value) { DateObject *object = new (memoryManager) DateObject(this, value); @@ -661,6 +674,8 @@ void ExecutionEngine::markObjects() id_eval->mark(); id_uintMax->mark(); id_name->mark(); + id_index->mark(); + id_input->mark(); objectCtor.mark(); stringCtor.mark(); -- cgit v1.2.3