Showing the changes to libraries/script-engine/src/qtscript/ScriptEngineQtScript_cast.cpp (1 of 16 files). Show all
Unified · Split
| @@ -199,6 +199,7 @@ int ScriptEngineQtScript::computeCastPenalty(QScriptValue& val, int destTypeId) · 198 unmodified lines | |||
| 199 | if (val.isNumber()) { | 199 | if (val.isNumber()) { |
| 200 | switch (destTypeId){ | 200 | switch (destTypeId){ |
| 201 | case QMetaType::Bool: | 201 | case QMetaType::Bool: |
| 202 | // Conversion to bool is acceptable, but numbers are preferred | ||
| 202 | return 5; | 203 | return 5; |
| 203 | break; | 204 | break; |
| 204 | case QMetaType::UInt: | 205 | case QMetaType::UInt: |
| @@ -211,20 +212,24 @@ int ScriptEngineQtScript::computeCastPenalty(QScriptValue& val, int destTypeId) · 6 unmodified lines | |||
| 211 | case QMetaType::ULongLong: | 212 | case QMetaType::ULongLong: |
| 212 | case QMetaType::LongLong: | 213 | case QMetaType::LongLong: |
| 213 | case QMetaType::UShort: | 214 | case QMetaType::UShort: |
| 215 | // Perfect case. JS doesn't have separate integer and floating point type | ||
| 214 | return 0; | 216 | return 0; |
| 215 | break; | 217 | break; |
| 216 | case QMetaType::QString: | 218 | case QMetaType::QString: |
| 217 | case QMetaType::QByteArray: | 219 | case QMetaType::QByteArray: |
| 218 | case QMetaType::QDateTime: | 220 | case QMetaType::QDateTime: |
| 219 | case QMetaType::QDate: | 221 | case QMetaType::QDate: |
| 222 | // Conversion to string should be avoided, it's probably not what we want | ||
| 220 | return 100; | 223 | return 100; |
| 221 | break; | 224 | break; |
| 222 | default: | 225 | default: |
| 226 | // Other, not predicted cases | ||
| 223 | return 5; | 227 | return 5; |
| 224 | } | 228 | } |
| 225 | } else if (val.isString() || val.isDate() || val.isRegExp()) { | 229 | } else if (val.isString() || val.isDate() || val.isRegExp()) { |
| 226 | switch (destTypeId){ | 230 | switch (destTypeId){ |
| 227 | case QMetaType::Bool: | 231 | case QMetaType::Bool: |
| 232 | // Conversion from to bool should be avoided if possible, it's probably not what we want | ||
| 228 | return 100; | 233 | return 100; |
| 229 | case QMetaType::UInt: | 234 | case QMetaType::UInt: |
| 230 | case QMetaType::ULong: | 235 | case QMetaType::ULong: |
| @@ -236,12 +241,15 @@ int ScriptEngineQtScript::computeCastPenalty(QScriptValue& val, int destTypeId) · 5 unmodified lines | |||
| 236 | case QMetaType::ULongLong: | 241 | case QMetaType::ULongLong: |
| 237 | case QMetaType::LongLong: | 242 | case QMetaType::LongLong: |
| 238 | case QMetaType::UShort: | 243 | case QMetaType::UShort: |
| 244 | // Conversion from to number should be avoided if possible, it's probably not what we want | ||
| 239 | return 100; | 245 | return 100; |
| 240 | case QMetaType::QString: | 246 | case QMetaType::QString: |
| 247 | // Perfect case | ||
| 241 | return 0; | 248 | return 0; |
| 242 | case QMetaType::QByteArray: | 249 | case QMetaType::QByteArray: |
| 243 | case QMetaType::QDateTime: | 250 | case QMetaType::QDateTime: |
| 244 | case QMetaType::QDate: | 251 | case QMetaType::QDate: |
| 252 | // String to string should be slightly preferred | ||
| 245 | return 5; | 253 | return 5; |
| 246 | default: | 254 | default: |
| 247 | return 5; | 255 | return 5; |
| @@ -249,6 +257,7 @@ int ScriptEngineQtScript::computeCastPenalty(QScriptValue& val, int destTypeId) · 1 unmodified line | |||
| 249 | } else if (val.isBool() || val.isBoolean()) { | 257 | } else if (val.isBool() || val.isBoolean()) { |
| 250 | switch (destTypeId){ | 258 | switch (destTypeId){ |
| 251 | case QMetaType::Bool: | 259 | case QMetaType::Bool: |
| 260 | // Perfect case | ||
| 252 | return 0; | 261 | return 0; |
| 253 | break; | 262 | break; |
| 254 | case QMetaType::UInt: | 263 | case QMetaType::UInt: |
| @@ -261,12 +270,14 @@ int ScriptEngineQtScript::computeCastPenalty(QScriptValue& val, int destTypeId) · 6 unmodified lines | |||
| 261 | case QMetaType::ULongLong: | 270 | case QMetaType::ULongLong: |
| 262 | case QMetaType::LongLong: | 271 | case QMetaType::LongLong: |
| 263 | case QMetaType::UShort: | 272 | case QMetaType::UShort: |
| 273 | // Using function with bool parameter should be preferred over converted bool to nimber | ||
| 264 | return 5; | 274 | return 5; |
| 265 | break; | 275 | break; |
| 266 | case QMetaType::QString: | 276 | case QMetaType::QString: |
| 267 | case QMetaType::QByteArray: | 277 | case QMetaType::QByteArray: |
| 268 | case QMetaType::QDateTime: | 278 | case QMetaType::QDateTime: |
| 269 | case QMetaType::QDate: | 279 | case QMetaType::QDate: |
| 280 | // Bool probably shouldn't be converted to string if there are better alternatives | ||
| 270 | return 50; | 281 | return 50; |
| 271 | break; | 282 | break; |
| 272 | default: | 283 | default: |
| @@ -292,13 +303,6 @@ bool ScriptEngineQtScript::castValueToVariant(const QScriptValue& val, QVariant& · 19 unmodified lines | |||
| 292 | } | 303 | } |
| 293 | } | 304 | } |
| 294 | } | 305 | } |
| 295 | /* if (QMetaType(destTypeId).name() == "MenuItemProperties") { | ||
| 296 | qDebug() << "castValueToVariant MenuItemProperties " << destTypeId << "map size: " << _customTypes.size(); | ||
| 297 | for (auto iter = _customTypes.keyBegin(); iter != _customTypes.keyEnd(); iter++){ | ||
| 298 | qDebug() << (*iter); | ||
| 299 | } | ||
| 300 | printf("castValueToVariant MenuItemProperties"); | ||
| 301 | }*/ | ||
| 302 | 306 | ||
| 303 | if (destTypeId == qMetaTypeId<ScriptValue>()) { | 307 | if (destTypeId == qMetaTypeId<ScriptValue>()) { |
| 304 | dest = QVariant::fromValue(ScriptValue(new ScriptValueQtWrapper(this, val))); | 308 | dest = QVariant::fromValue(ScriptValue(new ScriptValueQtWrapper(this, val))); |