diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2011-07-06 13:43:47 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-08-30 13:18:28 +0200 |
commit | 809ee66b67ce70dba89a04b92daccc9445af2e75 (patch) | |
tree | 84c6d4023312d72583ccfcd2ad79df4fdf714527 /src/declarative/qml/v8/qv8qobjectwrapper.cpp | |
parent | f8f9db6cc74a34d3648ac693196c0f5d4bda9c50 (diff) |
More efficient type name cache
Instead of creating completely separate hashes for all the types used
by every QML file, we simply link to the QDeclarativeTypeModule. This
uses much less memory, and is faster to construct at startup.
Change-Id: I28bc2807074f9c6f38096d6e4ce8be744159d023
Reviewed-on: http://codereview.qt.nokia.com/3741
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
Diffstat (limited to 'src/declarative/qml/v8/qv8qobjectwrapper.cpp')
-rw-r--r-- | src/declarative/qml/v8/qv8qobjectwrapper.cpp | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/declarative/qml/v8/qv8qobjectwrapper.cpp b/src/declarative/qml/v8/qv8qobjectwrapper.cpp index f59e995e2d..52e106494c 100644 --- a/src/declarative/qml/v8/qv8qobjectwrapper.cpp +++ b/src/declarative/qml/v8/qv8qobjectwrapper.cpp @@ -618,14 +618,20 @@ v8::Handle<v8::Value> QV8QObjectWrapper::Getter(v8::Local<v8::String> property, if (QV8Engine::startsWithUpper(property)) { // Check for attached properties QDeclarativeContextData *context = v8engine->callingContext(); - QDeclarativeTypeNameCache::Data *data = - context && (context->imports)?context->imports->data(propertystring):0; - - if (data) { - if (data->type) { - return v8engine->typeWrapper()->newObject(object, data->type, QV8TypeWrapper::ExcludeEnums); - } else if (data->typeNamespace) { - return v8engine->typeWrapper()->newObject(object, data->typeNamespace, QV8TypeWrapper::ExcludeEnums); + + if (context && context->imports) { + QDeclarativeTypeNameCache::Result r = context->imports->query(propertystring); + + if (r.isValid()) { + if (r.scriptIndex != -1) { + return v8::Undefined(); + } else if (r.type) { + return v8engine->typeWrapper()->newObject(object, r.type, QV8TypeWrapper::ExcludeEnums); + } else if (r.importNamespace) { + return v8engine->typeWrapper()->newObject(object, context->imports, r.importNamespace, + QV8TypeWrapper::ExcludeEnums); + } + Q_ASSERT(!"Unreachable"); } } } |