aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@nokia.com>2012-08-28 10:49:28 +1000
committerQt by Nokia <qt-info@nokia.com>2012-08-28 04:32:48 +0200
commita47597ea986e76cb6deeaaa64b3714add4688a01 (patch)
tree8c2e5fec8faed87b8abb90356c42fd7de93ecc2b /src/qml
parent7223f1861d3309d336123c90866665cfe2507d7f (diff)
Refactor QQmlPropertyCacheMethodArguments creation.
Change-Id: Ic7215741b26ddf0a36181cf7c7daaff095e797da Reviewed-by: Matthew Vogt <matthew.vogt@nokia.com>
Diffstat (limited to 'src/qml')
-rw-r--r--src/qml/qml/qqmlpropertycache.cpp78
-rw-r--r--src/qml/qml/qqmlpropertycache_p.h3
2 files changed, 24 insertions, 57 deletions
diff --git a/src/qml/qml/qqmlpropertycache.cpp b/src/qml/qml/qqmlpropertycache.cpp
index 50674fa1e4..528e3afdcd 100644
--- a/src/qml/qml/qqmlpropertycache.cpp
+++ b/src/qml/qml/qqmlpropertycache.cpp
@@ -398,16 +398,9 @@ void QQmlPropertyCache::appendSignal(const QString &name, quint32 flags, int cor
if (types) {
int argumentCount = *types;
- typedef QQmlPropertyCacheMethodArguments A;
- A *args = static_cast<A *>(malloc(sizeof(A) + (argumentCount + 1) * sizeof(int)));
+ QQmlPropertyCacheMethodArguments *args = createArgumentsObject(argumentCount, names);
::memcpy(args->arguments, types, (argumentCount + 1) * sizeof(int));
args->argumentsValid = true;
- args->signalParameterStringForJS = 0;
- args->signalParameterCountForJS = 0;
- args->parameterError = false;
- args->names = new QList<QByteArray>(names);
- args->next = argumentsCache;
- argumentsCache = args;
data.arguments = args;
}
@@ -442,16 +435,9 @@ void QQmlPropertyCache::appendSignal(const QHashedCStringRef &name, quint32 flag
if (types) {
int argumentCount = *types;
- typedef QQmlPropertyCacheMethodArguments A;
- A *args = static_cast<A *>(malloc(sizeof(A) + (argumentCount + 1) * sizeof(int)));
+ QQmlPropertyCacheMethodArguments *args = createArgumentsObject(argumentCount, names);
::memcpy(args->arguments, types, (argumentCount + 1) * sizeof(int));
args->argumentsValid = true;
- args->signalParameterStringForJS = 0;
- args->signalParameterCountForJS = 0;
- args->parameterError = false;
- args->names = new QList<QByteArray>(names);
- args->next = argumentsCache;
- argumentsCache = args;
data.arguments = args;
}
@@ -481,20 +467,10 @@ void QQmlPropertyCache::appendMethod(const QString &name, quint32 flags, int cor
data.propType = QMetaType::QVariant;
data.coreIndex = coreIndex;
- typedef QQmlPropertyCacheMethodArguments A;
- A *args = static_cast<A *>(malloc(sizeof(A) + (argumentCount + 1) * sizeof(int)));
- args->arguments[0] = argumentCount;
+ QQmlPropertyCacheMethodArguments *args = createArgumentsObject(argumentCount, names);
for (int ii = 0; ii < argumentCount; ++ii)
args->arguments[ii + 1] = QMetaType::QVariant;
args->argumentsValid = true;
- args->signalParameterStringForJS = 0;
- args->signalParameterCountForJS = 0;
- args->parameterError = false;
- args->names = 0;
- if (argumentCount)
- args->names = new QList<QByteArray>(names);
- args->next = argumentsCache;
- argumentsCache = args;
data.arguments = args;
data.flags = flags;
@@ -518,20 +494,10 @@ void QQmlPropertyCache::appendMethod(const QHashedCStringRef &name, quint32 flag
data.propType = QMetaType::QVariant;
data.coreIndex = coreIndex;
- typedef QQmlPropertyCacheMethodArguments A;
- A *args = static_cast<A *>(malloc(sizeof(A) + (argumentCount + 1) * sizeof(int)));
- args->arguments[0] = argumentCount;
+ QQmlPropertyCacheMethodArguments *args = createArgumentsObject(argumentCount, names);
for (int ii = 0; ii < argumentCount; ++ii)
args->arguments[ii + 1] = QMetaType::QVariant;
args->argumentsValid = true;
- args->signalParameterStringForJS = 0;
- args->signalParameterCountForJS = 0;
- args->parameterError = false;
- args->names = 0;
- if (argumentCount)
- args->names = new QList<QByteArray>(names);
- args->next = argumentsCache;
- argumentsCache = args;
data.arguments = args;
data.flags = flags;
@@ -1061,6 +1027,21 @@ static int EnumType(const QMetaObject *metaobj, const QByteArray &str, int type)
return type;
}
+QQmlPropertyCacheMethodArguments *QQmlPropertyCache::createArgumentsObject(int argc, const QList<QByteArray> &names)
+{
+ typedef QQmlPropertyCacheMethodArguments A;
+ A *args = static_cast<A *>(malloc(sizeof(A) + (argc + 1) * sizeof(int)));
+ args->arguments[0] = argc;
+ args->argumentsValid = false;
+ args->signalParameterStringForJS = 0;
+ args->signalParameterCountForJS = 0;
+ args->parameterError = false;
+ args->names = argc ? new QList<QByteArray>(names) : 0;
+ args->next = argumentsCache;
+ argumentsCache = args;
+ return args;
+}
+
/*! \internal
\a index MUST be in the signal index range (see QObjectPrivate::signalIndex()).
This is different from QMetaMethod::methodIndex().
@@ -1091,17 +1072,8 @@ QString QQmlPropertyCache::signalParameterStringForJS(int index, int *count, QSt
QList<QByteArray> parameterNameList = signalParameterNames(index);
if (!signalData->arguments) {
- int argc = parameterNameList.count();
- A *args = static_cast<A *>(malloc(sizeof(A) + (argc + 1) * sizeof(int)));
- args->arguments[0] = argc;
- args->argumentsValid = false;
- args->signalParameterStringForJS = 0;
- args->signalParameterCountForJS = 0;
- args->parameterError = false;
- args->names = new QList<QByteArray>(parameterNameList);
+ A *args = c->createArgumentsObject(parameterNameList.count(), parameterNameList);
signalData->arguments = args;
- args->next = c->argumentsCache;
- c->argumentsCache = args;
}
QQmlRewrite::RewriteSignalHandler rewriter;
@@ -1154,16 +1126,8 @@ int *QQmlPropertyCache::methodParameterTypes(QObject *object, int index,
int argc = m.parameterCount();
if (!rv->arguments) {
- A *args = static_cast<A *>(malloc(sizeof(A) + (argc + 1) * sizeof(int)));
- args->arguments[0] = argc;
- args->argumentsValid = false;
- args->signalParameterStringForJS = 0;
- args->signalParameterCountForJS = 0;
- args->parameterError = false;
- args->names = 0;
+ A *args = c->createArgumentsObject(argc);
rv->arguments = args;
- args->next = c->argumentsCache;
- c->argumentsCache = args;
}
A *args = static_cast<A *>(rv->arguments);
diff --git a/src/qml/qml/qqmlpropertycache_p.h b/src/qml/qml/qqmlpropertycache_p.h
index ad94ed4688..99fab4323c 100644
--- a/src/qml/qml/qqmlpropertycache_p.h
+++ b/src/qml/qml/qqmlpropertycache_p.h
@@ -238,6 +238,7 @@ private:
bool notFullyResolved() const { return flags & NotFullyResolved; }
};
+class QQmlPropertyCacheMethodArguments;
class Q_QML_PRIVATE_EXPORT QQmlPropertyCache : public QQmlRefCount, public QQmlCleanup
{
public:
@@ -345,6 +346,8 @@ private:
// Implemented in v8/qv8qobjectwrapper.cpp
v8::Local<v8::Object> newQObject(QObject *, QV8Engine *);
+ QQmlPropertyCacheMethodArguments *createArgumentsObject(int count,
+ const QList<QByteArray> &names = QList<QByteArray>());
QQmlPropertyData *signal(int, QQmlPropertyCache **) const;
typedef QVector<QQmlPropertyData> IndexCache;