Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
cache the arguments in property cache data
Change-Id: Ie02b94c2ddb1d5d7b7bb6556a01a5ae86a438c57
(cherry picked from commit 39fed3e2601935c1d6834bb5e75266e5b280e5cd)
  • Loading branch information
yinyunqiao committed May 13, 2011
1 parent 4890cbe commit 3032765
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 3 deletions.
31 changes: 30 additions & 1 deletion src/declarative/qml/qdeclarativepropertycache.cpp
Expand Up @@ -93,6 +93,26 @@ void QDeclarativePropertyCache::Data::load(const QMetaProperty &p, QDeclarativeE
revision = p.revision();
}

int QDeclarativePropertyCache::Data::enumType(const QMetaObject *meta, const QString &strname)
{
QByteArray str = strname.toUtf8();
QByteArray scope;
QByteArray name;
int scopeIdx = str.lastIndexOf("::");
if (scopeIdx != -1) {
scope = str.left(scopeIdx);
name = str.mid(scopeIdx + 2);
} else {
name = str;
}
for (int i = meta->enumeratorCount() - 1; i >= 0; --i) {
QMetaEnum m = meta->enumerator(i);
if ((m.name() == name) && (scope.isEmpty() || (m.scope() == scope)))
return QVariant::Int;
}
return QVariant::Invalid;
}

void QDeclarativePropertyCache::Data::load(const QMetaMethod &m)
{
coreIndex = m.methodIndex();
Expand All @@ -107,8 +127,17 @@ void QDeclarativePropertyCache::Data::load(const QMetaMethod &m)
propType = QMetaType::type(returnType);

QList<QByteArray> params = m.parameterTypes();
if (!params.isEmpty())
if (!params.isEmpty()) {
flags |= Data::HasArguments;
paramTypes.resize(params.size());
for (int i = 0; i < params.size(); ++i) {
paramTypes[i] = QMetaType::type(params.at(i));
if (paramTypes[i] == QVariant::Invalid)
paramTypes[i] = enumType(m.enclosingMetaObject(), QString::fromLatin1(params.at(i)));
if (paramTypes[i] == QVariant::Invalid)
paramTypes[i] = -1; //Unknown method parameter type
}
}
revision = m.revision();
}

Expand Down
5 changes: 3 additions & 2 deletions src/declarative/qml/qdeclarativepropertycache_p.h
Expand Up @@ -64,7 +64,6 @@ QT_BEGIN_NAMESPACE

class QDeclarativeEngine;
class QMetaProperty;

class Q_AUTOTEST_EXPORT QDeclarativePropertyCache : public QDeclarativeRefCount, public QDeclarativeCleanup
{
public:
Expand All @@ -74,6 +73,7 @@ class Q_AUTOTEST_EXPORT QDeclarativePropertyCache : public QDeclarativeRefCount,

struct Data {
inline Data();

inline bool operator==(const Data &);

enum Flag {
Expand Down Expand Up @@ -115,8 +115,9 @@ class Q_AUTOTEST_EXPORT QDeclarativePropertyCache : public QDeclarativeRefCount,
int overrideIndex : 31;
int revision;
int metaObjectOffset;

QVector<int> paramTypes;
static Flags flagsForProperty(const QMetaProperty &, QDeclarativeEngine *engine = 0);
int enumType(const QMetaObject *meta, const QString &strname);
void load(const QMetaProperty &, QDeclarativeEngine *engine = 0);
void load(const QMetaMethod &);
QString name(QObject *);
Expand Down

0 comments on commit 3032765

Please sign in to comment.