diff options
author | Lars Knoll <[email protected]> | 2017-08-07 12:15:23 +0200 |
---|---|---|
committer | Lars Knoll <[email protected]> | 2017-08-10 08:18:34 +0000 |
commit | 2ad213cc02094e003802530757fa4010720a22e6 (patch) | |
tree | c01c50c5563c79cd838f45e02b96c7cff602cdac /src | |
parent | 026ec5feee4d6fac4d7b0530fce6da649a1ee27d (diff) |
Remove unused lookup types
The indexed getters and setters haven't been used for a while and
don't offer any performance benefits currently.
Change-Id: Ifd5e1fab934e6e9940c4f1ad67f8850f04597504
Reviewed-by: Simon Hausmann <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/compiler/qv4compileddata.cpp | 4 | ||||
-rw-r--r-- | src/qml/compiler/qv4compileddata_p.h | 4 | ||||
-rw-r--r-- | src/qml/compiler/qv4compiler.cpp | 18 | ||||
-rw-r--r-- | src/qml/compiler/qv4compiler_p.h | 2 | ||||
-rw-r--r-- | src/qml/compiler/qv4instr_moth.cpp | 8 | ||||
-rw-r--r-- | src/qml/compiler/qv4instr_moth_p.h | 16 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4lookup.cpp | 134 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4lookup_p.h | 11 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4vme_moth.cpp | 11 |
9 files changed, 1 insertions, 207 deletions
diff --git a/src/qml/compiler/qv4compileddata.cpp b/src/qml/compiler/qv4compileddata.cpp index 91bc5071ac..7cf97e55dc 100644 --- a/src/qml/compiler/qv4compileddata.cpp +++ b/src/qml/compiler/qv4compileddata.cpp @@ -150,10 +150,6 @@ QV4::Function *CompilationUnit::linkToEngine(ExecutionEngine *engine) l->setter = QV4::Lookup::setterGeneric; else if (type == CompiledData::Lookup::Type_GlobalGetter) l->globalGetter = QV4::Lookup::globalGetterGeneric; - else if (type == CompiledData::Lookup::Type_IndexedGetter) - l->indexedGetter = QV4::Lookup::indexedGetterGeneric; - else if (type == CompiledData::Lookup::Type_IndexedSetter) - l->indexedSetter = QV4::Lookup::indexedSetterGeneric; for (int j = 0; j < QV4::Lookup::Size; ++j) l->classList[j] = 0; diff --git a/src/qml/compiler/qv4compileddata_p.h b/src/qml/compiler/qv4compileddata_p.h index 8b2e91d0b0..9bb7396632 100644 --- a/src/qml/compiler/qv4compileddata_p.h +++ b/src/qml/compiler/qv4compileddata_p.h @@ -158,9 +158,7 @@ struct Lookup enum Type : unsigned int { Type_Getter = 0x0, Type_Setter = 0x1, - Type_GlobalGetter = 2, - Type_IndexedGetter = 3, - Type_IndexedSetter = 4 + Type_GlobalGetter = 2 }; union { diff --git a/src/qml/compiler/qv4compiler.cpp b/src/qml/compiler/qv4compiler.cpp index 3d42dff662..9f8f2f8f56 100644 --- a/src/qml/compiler/qv4compiler.cpp +++ b/src/qml/compiler/qv4compiler.cpp @@ -107,24 +107,6 @@ QV4::Compiler::JSUnitGenerator::JSUnitGenerator(QV4::Compiler::Module *module) registerString(QString()); } -int QV4::Compiler::JSUnitGenerator::registerIndexedGetterLookup() -{ - CompiledData::Lookup l; - l.type_and_flags = CompiledData::Lookup::Type_IndexedGetter; - l.nameIndex = 0; - lookups << l; - return lookups.size() - 1; -} - -int QV4::Compiler::JSUnitGenerator::registerIndexedSetterLookup() -{ - CompiledData::Lookup l; - l.type_and_flags = CompiledData::Lookup::Type_IndexedSetter; - l.nameIndex = 0; - lookups << l; - return lookups.size() - 1; -} - int QV4::Compiler::JSUnitGenerator::registerGetterLookup(const QString &name) { return registerGetterLookup(registerString(name)); diff --git a/src/qml/compiler/qv4compiler_p.h b/src/qml/compiler/qv4compiler_p.h index af71415a45..0c50516bf6 100644 --- a/src/qml/compiler/qv4compiler_p.h +++ b/src/qml/compiler/qv4compiler_p.h @@ -111,8 +111,6 @@ struct Q_QML_PRIVATE_EXPORT JSUnitGenerator { int registerSetterLookup(int nameIndex); int registerGlobalGetterLookup(const QString &name); int registerGlobalGetterLookup(int nameIndex); - int registerIndexedGetterLookup(); - int registerIndexedSetterLookup(); int registerRegExp(QQmlJS::AST::RegExpLiteral *regexp); diff --git a/src/qml/compiler/qv4instr_moth.cpp b/src/qml/compiler/qv4instr_moth.cpp index f8bb7d1e21..ea351dcc76 100644 --- a/src/qml/compiler/qv4instr_moth.cpp +++ b/src/qml/compiler/qv4instr_moth.cpp @@ -185,18 +185,10 @@ void dumpBytecode(const char *code, int len, int nFormals) d << instr.base.dump(nFormals) << "[acc]"; MOTH_END_INSTR(LoadElement) - MOTH_BEGIN_INSTR(LoadElementLookup) - d << instr.base.dump(nFormals) << "[" << instr.index.dump(nFormals) << "]"; - MOTH_END_INSTR(LoadElementLookup) - MOTH_BEGIN_INSTR(StoreElement) d << instr.base.dump(nFormals) << "[" << instr.index.dump(nFormals) << "]"; MOTH_END_INSTR(StoreElement) - MOTH_BEGIN_INSTR(StoreElementLookup) - d << instr.base.dump(nFormals) << "[" << instr.index.dump(nFormals) << "]"; - MOTH_END_INSTR(StoreElementLookup) - MOTH_BEGIN_INSTR(LoadProperty) d << instr.base.dump(nFormals) << "[" << instr.name << "]"; MOTH_END_INSTR(LoadProperty) diff --git a/src/qml/compiler/qv4instr_moth_p.h b/src/qml/compiler/qv4instr_moth_p.h index 55de0da962..54d085e820 100644 --- a/src/qml/compiler/qv4instr_moth_p.h +++ b/src/qml/compiler/qv4instr_moth_p.h @@ -88,9 +88,7 @@ QT_BEGIN_NAMESPACE F(StoreName, storeName) \ F(LoadElement, loadElement) \ F(LoadElementA, loadElementA) \ - F(LoadElementLookup, loadElementLookup) \ F(StoreElement, storeElement) \ - F(StoreElementLookup, storeElementLookup) \ F(LoadProperty, loadProperty) \ F(LoadPropertyA, loadPropertyA) \ F(GetLookup, getLookup) \ @@ -392,23 +390,11 @@ union Instr MOTH_INSTR_HEADER StackSlot base; }; - struct instr_loadElementLookup { - MOTH_INSTR_HEADER - uint lookup; - StackSlot base; - StackSlot index; - }; struct instr_storeElement { MOTH_INSTR_HEADER StackSlot base; StackSlot index; }; - struct instr_storeElementLookup { - MOTH_INSTR_HEADER - uint lookup; - StackSlot base; - StackSlot index; - }; struct instr_callValue { MOTH_INSTR_HEADER StackSlot callData; @@ -720,9 +706,7 @@ union Instr instr_storeName storeName; instr_loadElement loadElement; instr_loadElementA loadElementA; - instr_loadElementLookup loadElementLookup; instr_storeElement storeElement; - instr_storeElementLookup storeElementLookup; instr_loadProperty loadProperty; instr_loadPropertyA loadPropertyA; instr_getLookup getLookup; diff --git a/src/qml/jsruntime/qv4lookup.cpp b/src/qml/jsruntime/qv4lookup.cpp index 1d32d453ac..ae74e0d14c 100644 --- a/src/qml/jsruntime/qv4lookup.cpp +++ b/src/qml/jsruntime/qv4lookup.cpp @@ -116,140 +116,6 @@ ReturnedValue Lookup::lookup(const Object *thisObject, PropertyAttributes *attrs return Primitive::emptyValue().asReturnedValue(); } -ReturnedValue Lookup::indexedGetterGeneric(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &index) -{ - uint idx; - if (object.isObject() && index.asArrayIndex(idx)) { - l->indexedGetter = indexedGetterObjectInt; - return indexedGetterObjectInt(l, engine, object, index); - } - return indexedGetterFallback(l, engine, object, index); -} - -ReturnedValue Lookup::indexedGetterFallback(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &index) -{ - Q_UNUSED(l); - Scope scope(engine); - uint idx = 0; - bool isInt = index.asArrayIndex(idx); - - ScopedObject o(scope, object); - if (!o) { - if (isInt) { - if (const String *str = object.as<String>()) { - if (idx >= (uint)str->toQString().length()) { - return Encode::undefined(); - } - const QString s = str->toQString().mid(idx, 1); - return scope.engine->newString(s)->asReturnedValue(); - } - } - - if (object.isNullOrUndefined()) { - QString message = QStringLiteral("Cannot read property '%1' of %2").arg(index.toQStringNoThrow()).arg(object.toQStringNoThrow()); - return engine->throwTypeError(message); - } - - o = RuntimeHelpers::convertToObject(scope.engine, object); - if (!o) // type error - return Encode::undefined(); - } - - if (isInt) { - if (o->d()->arrayData && !o->d()->arrayData->attrs) { - ScopedValue v(scope, Scoped<ArrayData>(scope, o->arrayData())->get(idx)); - if (!v->isEmpty()) - return v->asReturnedValue(); - } - - return o->getIndexed(idx); - } - - ScopedString name(scope, index.toString(scope.engine)); - if (scope.hasException()) - return Encode::undefined(); - return o->get(name); - -} - - -ReturnedValue Lookup::indexedGetterObjectInt(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &index) -{ - uint idx; - if (index.asArrayIndex(idx)) { - if (Heap::Base *b = object.heapObject()) { - if (b->vtable()->isObject) { - Heap::Object *o = static_cast<Heap::Object *>(b); - if (o->arrayData && o->arrayData->type == Heap::ArrayData::Simple) { - Heap::SimpleArrayData *s = o->arrayData.cast<Heap::SimpleArrayData>(); - if (idx < s->values.size) - if (!s->data(idx).isEmpty()) - return s->data(idx).asReturnedValue(); - } - } - } - } - - return indexedGetterFallback(l, engine, object, index); -} - -void Lookup::indexedSetterGeneric(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &index, const Value &v) -{ - if (Object *o = object.objectValue()) { - uint idx; - if (o->d()->arrayData && o->d()->arrayData->type == Heap::ArrayData::Simple && index.asArrayIndex(idx)) { - l->indexedSetter = indexedSetterObjectInt; - indexedSetterObjectInt(l, engine, object, index, v); - return; - } - } - indexedSetterFallback(l, engine, object, index, v); -} - -void Lookup::indexedSetterFallback(Lookup *, ExecutionEngine *engine, const Value &object, const Value &index, const Value &value) -{ - Scope scope(engine); - ScopedObject o(scope, object.toObject(scope.engine)); - if (scope.engine->hasException) - return; - - uint idx; - if (index.asArrayIndex(idx)) { - if (o->d()->arrayData && o->d()->arrayData->type == Heap::ArrayData::Simple) { - Heap::SimpleArrayData *s = o->d()->arrayData.cast<Heap::SimpleArrayData>(); - if (idx < s->values.size) { - s->setData(engine, idx, value); - return; - } - } - o->putIndexed(idx, value); - return; - } - - ScopedString name(scope, index.toString(scope.engine)); - o->put(name, value); -} - -void Lookup::indexedSetterObjectInt(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &index, const Value &v) -{ - uint idx; - if (index.asArrayIndex(idx)) { - if (Heap::Base *b = object.heapObject()) { - if (b->vtable()->isObject) { - Heap::Object *o = static_cast<Heap::Object *>(b); - if (o->arrayData && o->arrayData->type == Heap::ArrayData::Simple) { - Heap::SimpleArrayData *s = o->arrayData.cast<Heap::SimpleArrayData>(); - if (idx < s->values.size) { - s->setData(engine, idx, v); - return; - } - } - } - } - } - indexedSetterFallback(l, engine, object, index, v); -} - ReturnedValue Lookup::getterGeneric(Lookup *l, ExecutionEngine *engine, const Value &object) { if (const Object *o = object.as<Object>()) diff --git a/src/qml/jsruntime/qv4lookup_p.h b/src/qml/jsruntime/qv4lookup_p.h index ce5189a780..aa4cdd0d57 100644 --- a/src/qml/jsruntime/qv4lookup_p.h +++ b/src/qml/jsruntime/qv4lookup_p.h @@ -67,8 +67,6 @@ namespace QV4 { struct Lookup { enum { Size = 4 }; union { - ReturnedValue (*indexedGetter)(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &index); - void (*indexedSetter)(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &index, const Value &v); ReturnedValue (*getter)(Lookup *l, ExecutionEngine *engine, const Value &object); ReturnedValue (*globalGetter)(Lookup *l, ExecutionEngine *engine); void (*setter)(Lookup *l, ExecutionEngine *engine, Value &object, const Value &v); @@ -90,14 +88,6 @@ struct Lookup { uint index; uint nameIndex; - static ReturnedValue indexedGetterGeneric(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &index); - static ReturnedValue indexedGetterFallback(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &index); - static ReturnedValue indexedGetterObjectInt(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &index); - - static void indexedSetterGeneric(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &index, const Value &v); - static void indexedSetterFallback(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &index, const Value &value); - static void indexedSetterObjectInt(Lookup *l, ExecutionEngine *engine, const Value &object, const Value &index, const Value &v); - static ReturnedValue getterGeneric(Lookup *l, ExecutionEngine *engine, const Value &object); static ReturnedValue getterTwoClasses(Lookup *l, ExecutionEngine *engine, const Value &object); static ReturnedValue getterFallback(Lookup *l, ExecutionEngine *engine, const Value &object); @@ -151,7 +141,6 @@ struct Lookup { Q_STATIC_ASSERT(std::is_standard_layout<Lookup>::value); // Ensure that these offsets are always at this point to keep generated code compatible // across 32-bit and 64-bit (matters when cross-compiling). -Q_STATIC_ASSERT(offsetof(Lookup, indexedGetter) == 0); Q_STATIC_ASSERT(offsetof(Lookup, getter) == 0); } diff --git a/src/qml/jsruntime/qv4vme_moth.cpp b/src/qml/jsruntime/qv4vme_moth.cpp index b1f667bd05..48c52ab52c 100644 --- a/src/qml/jsruntime/qv4vme_moth.cpp +++ b/src/qml/jsruntime/qv4vme_moth.cpp @@ -551,22 +551,11 @@ QV4::ReturnedValue VME::exec(Function *function, const FunctionObject *jsFunctio STORE_ACCUMULATOR(Runtime::method_getElement(engine, STACK_VALUE(instr.base), accumulator)); MOTH_END_INSTR(LoadElementA) - MOTH_BEGIN_INSTR(LoadElementLookup) - QV4::Lookup *l = function->compilationUnit->runtimeLookups + instr.lookup; - STORE_ACCUMULATOR(l->indexedGetter(l, engine, STACK_VALUE(instr.base), STACK_VALUE(instr.index))); - MOTH_END_INSTR(LoadElementLookup) - MOTH_BEGIN_INSTR(StoreElement) Runtime::method_setElement(engine, STACK_VALUE(instr.base), STACK_VALUE(instr.index), accumulator); CHECK_EXCEPTION; MOTH_END_INSTR(StoreElement) - MOTH_BEGIN_INSTR(StoreElementLookup) - QV4::Lookup *l = function->compilationUnit->runtimeLookups + instr.lookup; - l->indexedSetter(l, engine, STACK_VALUE(instr.base), STACK_VALUE(instr.index), accumulator); - CHECK_EXCEPTION; - MOTH_END_INSTR(StoreElementLookup) - MOTH_BEGIN_INSTR(LoadProperty) STORE_ACCUMULATOR(Runtime::method_getProperty(engine, STACK_VALUE(instr.base), instr.name)); MOTH_END_INSTR(LoadProperty) |