History

Fixes for code review

ksuprynowicz committed 4 years ago

Commit 586bd7f1 parent e9bfdd416 files · +142 −117Browse files

Showing the changes to libraries/script-engine/src/qtscript/ScriptObjectQtProxy.cpp (1 of 16 files). Show all

Unified · Split

libraries/script-engine/src/qtscript/ScriptObjectQtProxy.cpp+42−36
@@ -17,6 +17,8 @@ · 16 unmodified lines
1717
1818 #include <QtScript/QScriptContext>
1919
20+#include "../ScriptEngineLogging.h"
21+
2022 #include "ScriptContextQtWrapper.h"
2123 #include "ScriptValueQtWrapper.h"
2224
@@ -190,7 +192,7 @@ void ScriptObjectQtProxy::investigate() { · 167 unmodified lines
190192 }
191193 break;
192194 default:
193− ;
195+ break;
194196 }
195197
196198 QScriptString name = _engine->toStringHandle(QString::fromLatin1(szName));
@@ -214,11 +216,11 @@ void ScriptObjectQtProxy::investigate() { · 17 unmodified lines
214216 } else {
215217 int parameterCount = method.parameterCount();
216218 if(method.returnType() == QMetaType::UnknownType) {
217− qCritical() << "Method " << metaObject->className() << "::" << name << " has QMetaType::UnknownType return value";
219+ qCritical(scriptengine) << "Method " << metaObject->className() << "::" << name << " has QMetaType::UnknownType return value";
218220 }
219221 for (int i = 0; i < method.parameterCount(); i++) {
220222 if (method.parameterType(i) == QMetaType::UnknownType) {
221− qCritical() << "Parameter " << i << "in method " << metaObject->className() << "::" << name << " is of type QMetaType::UnknownType";
223+ qCritical(scriptengine) << "Parameter " << i << "in method " << metaObject->className() << "::" << name << " is of type QMetaType::UnknownType";
222224 }
223225 }
224226 if (nameLookup == methodNames.end()) {
@@ -331,10 +333,8 @@ QScriptValue ScriptObjectQtProxy::property(const QScriptValue& object, const QSc · 106 unmodified lines
331333 if (lookup == _methods.cend()) return QScriptValue();
332334 const MethodDef& methodDef = lookup.value();
333335 for (auto iter = methodDef.methods.begin(); iter != methodDef.methods.end(); iter++ ) {
334− //qDebug() << (*iter).returnType();
335336 if((*iter).returnType() == QMetaType::UnknownType) {
336− qDebug() << "Method with QMetaType::UnknownType " << metaObject->className() << " " << (*iter).name();
337− printf("Method with QMetaType::UnknownType");
337+ qDebug(scriptengine) << "Method with QMetaType::UnknownType " << metaObject->className() << " " << (*iter).name();
338338 }
339339 }
340340 return static_cast<QScriptEngine*>(_engine)->newObject(
@@ -466,25 +466,22 @@ QVariant ScriptMethodQtProxy::extension(Extension extension, const QVariant& arg · 125 unmodified lines
466466 QVector< QList<ScriptValue> > qScriptArgLists;
467467 QVector< QVector <QGenericArgument> > qGenArgsVectors;
468468 QVector< QList<QVariant> > qVarArgLists;
469− QVector<int> conversionPenaltyScore;
470− QVector<bool> isMetaRejected;
471469 qScriptArgLists.resize(num_metas);
472470 qGenArgsVectors.resize(num_metas);
473471 qVarArgLists.resize(num_metas);
474− conversionPenaltyScore.resize(num_metas);
475− isMetaRejected.resize(num_metas);
472+ bool isValidMetaSelected = false;
473+ int bestMeta = 0;
474+ int bestConversionPenaltyScore = 0;
476475
477476 for (int i = 0; i < num_metas; i++) {
478477 const QMetaMethod& meta = _metas[i];
479− isMetaRejected[i] = false;
480478 int methodNumArgs = meta.parameterCount();
481479 if (methodNumArgs != numArgs) {
482− isMetaRejected[i] = true;
483480 continue;
484481 }
485482
486483 qGenArgsVectors[i].resize(10);
487− conversionPenaltyScore[i] = 0;
484+ int conversionPenaltyScore = 0;
488485 int conversionFailures = 0;
489486
490487 for (int arg = 0; arg < numArgs; ++arg) {
@@ -504,7 +501,7 @@ QVariant ScriptMethodQtProxy::extension(Extension extension, const QVariant& arg · 13 unmodified lines
504501 } else {
505502 qVarArgLists[i].append(varArgVal);
506503 const QVariant& converted = qVarArgLists[i].back();
507− conversionPenaltyScore[i] = _engine->computeCastPenalty(argVal, methodArgTypeId);
504+ conversionPenaltyScore = _engine->computeCastPenalty(argVal, methodArgTypeId);
508505
509506 // a lot of type conversion assistance thanks to https://stackoverflow.com/questions/28457819/qt-invoke-method-with-qvariant
510507 // A const_cast is needed because calling data() would detach the QVariant.
@@ -518,27 +515,23 @@ QVariant ScriptMethodQtProxy::extension(Extension extension, const QVariant& arg · 7 unmodified lines
518515 parameterConversionFailureCount = conversionFailures;
519516 parameterConversionFailureId = meta.methodIndex();
520517 }
521− isMetaRejected[i] = true;
522518 continue;
523519 }
524520
525− ScriptContextQtWrapper ourContext(_engine, context);
526− ScriptContextGuard guard(&ourContext);
527− }
528−
529− bool isValidMetaSelected = false;
530− int bestMeta = 0;
531− for (int i = 0; i < num_metas; i++) {
532− if (!isValidMetaSelected && !isMetaRejected[i]) {
521+ if (!isValidMetaSelected) {
533522 isValidMetaSelected = true;
534523 bestMeta = i;
524+ bestConversionPenaltyScore = conversionPenaltyScore;
535525 }
536− if (isValidMetaSelected && !isMetaRejected[i] && conversionPenaltyScore[bestMeta] > conversionPenaltyScore[i]) {
526+ if (isValidMetaSelected && bestConversionPenaltyScore > conversionPenaltyScore) {
537527 bestMeta = i;
528+ bestConversionPenaltyScore = conversionPenaltyScore;
538529 }
539530 }
540531
541532 if (isValidMetaSelected) {
533+ ScriptContextQtWrapper ourContext(_engine, context);
534+ ScriptContextGuard guard(&ourContext);
542535 const QMetaMethod& meta = _metas[bestMeta];
543536 int returnTypeId = meta.returnType();
544537 QVector <QGenericArgument> &qGenArgs = qGenArgsVectors[bestMeta];
@@ -649,7 +642,7 @@ int ScriptSignalQtProxy::qt_metacall(QMetaObject::Call call, int id, void** argu · 104 unmodified lines
649642
650643 for (ConnectionList::iterator iter = connections.begin(); iter != connections.end(); ++iter) {
651644 Connection& conn = *iter;
652− conn.callback.call(conn.thisValue, args);
645+ conn.callback.call(conn.thisValue, args);
653646 }
654647
655648 return -1;
@@ -662,6 +655,15 @@ int ScriptSignalQtProxy::discoverMetaCallIdx() { · 6 unmodified lines
662655
663656 ScriptSignalQtProxy::ConnectionList::iterator ScriptSignalQtProxy::findConnection(QScriptValue thisObject, QScriptValue callback) {
664657 ConnectionList::iterator iter;
658+/* resultWithReadLock<ScriptSignalQtProxy::ConnectionList::iterator>([&]{
659+ for (iter = _connections.begin(); iter != _connections.end(); ++iter) {
660+ Connection& conn = *iter;
661+ if (conn.callback.strictlyEquals(callback) && conn.thisValue.strictlyEquals(thisObject)) {
662+ break;
663+ }
664+ }
665+ return iter;
666+ });*/
665667 withReadLock([&]{
666668 for (iter = _connections.begin(); iter != _connections.end(); ++iter) {
667669 Connection& conn = *iter;
@@ -698,9 +700,11 @@ void ScriptSignalQtProxy::connect(QScriptValue arg0, QScriptValue arg1) { · 30 unmodified lines
698700 }
699701
700702 // are we already connected?
701− ConnectionList::iterator lookup = findConnection(callbackThis, callback);
702− if (lookup != _connections.end()) {
703− return; // already exists
703+ {
704+ ConnectionList::iterator lookup = findConnection(callbackThis, callback);
705+ if (lookup != _connections.end()) {
706+ return; // already exists
707+ }
704708 }
705709
706710 // add a reference to ourselves to the destination callback
@@ -757,15 +761,17 @@ void ScriptSignalQtProxy::disconnect(QScriptValue arg0, QScriptValue arg1) { · 50 unmodified lines
757761 }
758762
759763 // locate this connection in our list of connections
760− ConnectionList::iterator lookup = findConnection(callbackThis, callback);
761− if (lookup == _connections.end()) {
762− return; // not here
763− }
764+ {
765+ ConnectionList::iterator lookup = findConnection(callbackThis, callback);
766+ if (lookup == _connections.end()) {
767+ return; // not here
768+ }
764769
765− // remove it from our internal list of connections
766− withWriteLock([&]{
767− _connections.erase(lookup);
768− });
770+ // remove it from our internal list of connections
771+ withWriteLock([&]{
772+ _connections.erase(lookup);
773+ });
774+ }
769775
770776 // remove a reference to ourselves from the destination callback
771777 QScriptValue destData = callback.data();

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t