diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-07-01 08:48:41 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-07-03 13:22:25 +0200 |
commit | 06eaeb0ac8d861cf3e60b11a8fbbabdeef1d6759 (patch) | |
tree | 825fb27485c376d0b83e8dfbcd20c852f2dd525c /src/qml/qml/qqmlpropertycache.cpp | |
parent | b30657647a7f816a2945302b3569b882d7ac6b72 (diff) |
Get rid of the signal expression rewriter
This replaces the entire rewriter with more or less:
expressionToEval = "(function(<named params here>) { " + expr + " } )"
This also fixes crashes at run-time when the signal rewriter was
executed from the loader thread and tried to use a v4 identifier
hash with the same engine that's also in the main thread.
Change-Id: Ib1e4927d330706a593411fbff64ed3da1e23d0e0
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/qml/qqmlpropertycache.cpp')
-rw-r--r-- | src/qml/qml/qqmlpropertycache.cpp | 55 |
1 files changed, 0 insertions, 55 deletions
diff --git a/src/qml/qml/qqmlpropertycache.cpp b/src/qml/qml/qqmlpropertycache.cpp index 908ab27563..903d50e067 100644 --- a/src/qml/qml/qqmlpropertycache.cpp +++ b/src/qml/qml/qqmlpropertycache.cpp @@ -49,7 +49,6 @@ #include <private/qmetaobject_p.h> #include <private/qqmlaccessors_p.h> #include <private/qmetaobjectbuilder_p.h> -#include <private/qqmlrewrite_p.h> #include <private/qv4value_p.h> @@ -1087,60 +1086,6 @@ QQmlPropertyCacheMethodArguments *QQmlPropertyCache::createArgumentsObject(int a return args; } -/*! \internal - \a index MUST be in the signal index range (see QObjectPrivate::signalIndex()). - This is different from QMetaMethod::methodIndex(). -*/ -QString QQmlPropertyCache::signalParameterStringForJS(int index, int *count, QString *errorString) -{ - QQmlPropertyCache *c = 0; - QQmlPropertyData *signalData = signal(index, &c); - if (!signalData) - return QString(); - - typedef QQmlPropertyCacheMethodArguments A; - - if (signalData->arguments) { - A *arguments = static_cast<A *>(signalData->arguments); - if (arguments->signalParameterStringForJS) { - if (count) - *count = arguments->signalParameterCountForJS; - if (arguments->parameterError) { - if (errorString) - *errorString = *arguments->signalParameterStringForJS; - return QString(); - } - return *arguments->signalParameterStringForJS; - } - } - - QList<QByteArray> parameterNameList = signalParameterNames(index); - - if (!signalData->arguments) { - A *args = c->createArgumentsObject(parameterNameList.count(), parameterNameList); - signalData->arguments = args; - } - - QQmlEnginePrivate *ep = QQmlEnginePrivate::get(engine); - QQmlRewrite::RewriteSignalHandler rewriter(ep->v4engine()); - const QString ¶meters = rewriter.createParameterString(parameterNameList, - ep->v8engine()->illegalNames()); - - bool error = rewriter.hasParameterError(); - A *arguments = static_cast<A *>(signalData->arguments); - arguments->signalParameterStringForJS = new QString(error ? rewriter.parameterError() : parameters); - arguments->signalParameterCountForJS = rewriter.parameterCountForJS(); - if (count) - *count = arguments->signalParameterCountForJS; - if (error) { - arguments->parameterError = true; - if (errorString) - *errorString = *arguments->signalParameterStringForJS; - return QString(); - } - return *arguments->signalParameterStringForJS; -} - // Returns an array of the arguments for method \a index. The first entry in the array // is the number of arguments. int *QQmlPropertyCache::methodParameterTypes(QObject *object, int index, |