| 106 | } |
| 107 | |
| 108 | static QString qjsValueToString(const QJSValue &v) |
| 109 | { |
| 110 | if (v.isArray()) { |
| 111 | return QStringLiteral("<array>"); |
| 112 | } else if (v.isBool()) { |
| 113 | return v.toBool() ? QStringLiteral("true") : QStringLiteral("false"); |
| 114 | // note: v.isQMetaObject() == true => v.isCallable() == true, because QV4::QMetaObjectWrapper inherits |
| 115 | // QV4::FunctionObject and isCallable just checks whether the object is a function object. |
| 116 | // thus the isQMetaObject check needs to come before the isCallable check |
| 117 | } else if (v.isQMetaObject()) { |
| 118 | return QStringLiteral("QMetaObject[className=%1]").arg(v.toQMetaObject()->className()); |
| 119 | } else if (v.isCallable()) { |
| 120 | return callableQjsValueToString(v); |
| 121 | } else if (v.isDate()) { |
| 122 | return v.toDateTime().toString(); |
| 123 | } else if (v.isError()) { |
| 124 | return QStringLiteral("<error>"); |
| 125 | } else if (v.isNull()) { |
| 126 | return QStringLiteral("<null>"); |
| 127 | } else if (v.isNumber()) { |
| 128 | return QString::number(v.toNumber()); |
| 129 | } else if (v.isObject()) { |
| 130 | return QStringLiteral("<object>"); |
| 131 | } else if (v.isQObject()) { |
| 132 | return Util::displayString(v.toQObject()); |
| 133 | } else if (v.isRegExp()) { |
| 134 | return QStringLiteral("<regexp>"); |
| 135 | } else if (v.isString()) { |
| 136 | return v.toString(); |
| 137 | } else if (v.isUndefined()) { |
| 138 | return QStringLiteral("<undefined>"); |
| 139 | } else if (QVariant var = v.toVariant(); var.isValid()) { |
| 140 | return VariantHandler::displayString(var); |
| 141 | } |
| 142 | return QStringLiteral("<unknown QJSValue>"); |
| 143 | } |
| 144 | |
| 145 | static QString qqmlScriptStringToString(const QQmlScriptString &v) |
| 146 | { |
nothing calls this directly
no test coverage detected