From c4b7fbccc110f271746cca58aed55dc2c0dfb7db Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sat, 7 Mar 2015 17:28:00 -0800 Subject: QtDeclarative: fix const correctness Add const_cast where we're really violating the correctness. Found by GCC's -Wcast-qual. Change-Id: Iee8cbc07c4434ce9b560ffff13c9619c48672f5a Reviewed-by: Alan Alpert (Personal) <416365416c@gmail.com> --- src/declarative/qml/qdeclarativebinding.cpp | 3 ++- .../qml/qdeclarativecompiledbindings.cpp | 31 +++++++++++----------- src/declarative/qml/qdeclarativeengine.cpp | 6 ++--- src/declarative/qml/qdeclarativemetatype.cpp | 2 +- .../qml/qdeclarativeobjectscriptclass.cpp | 4 +-- src/declarative/qml/qdeclarativeproperty.cpp | 8 +++--- src/declarative/qml/qdeclarativevme.cpp | 21 ++++++++------- src/declarative/qml/qdeclarativevmemetaobject.cpp | 2 +- src/declarative/qml/qdeclarativevmemetaobject_p.h | 2 +- src/declarative/util/qdeclarativelistaccessor.cpp | 4 +-- src/declarative/util/qdeclarativelistmodel.cpp | 2 +- 11 files changed, 44 insertions(+), 41 deletions(-) diff --git a/src/declarative/qml/qdeclarativebinding.cpp b/src/declarative/qml/qdeclarativebinding.cpp index fb0ff65f..76a9aacf 100644 --- a/src/declarative/qml/qdeclarativebinding.cpp +++ b/src/declarative/qml/qdeclarativebinding.cpp @@ -245,7 +245,8 @@ QDeclarativeBinding::createBinding(Identifier id, QObject *obj, QDeclarativeCont typeData = engine->typeLoader.get(ctxtdata->url); cdata = typeData->compiledData(); } - QDeclarativeBinding *rv = cdata ? new QDeclarativeBinding((void*)cdata->datas.at(id).constData(), cdata, obj, ctxtdata, url, lineNumber, parent) : 0; + QDeclarativeBinding *rv = cdata ? new QDeclarativeBinding(const_cast(cdata->datas.at(id).constData()), + cdata, obj, ctxtdata, url, lineNumber, parent) : 0; if (cdata) cdata->release(); if (typeData) diff --git a/src/declarative/qml/qdeclarativecompiledbindings.cpp b/src/declarative/qml/qdeclarativecompiledbindings.cpp index 8723c76e..081c4e0b 100644 --- a/src/declarative/qml/qdeclarativecompiledbindings.cpp +++ b/src/declarative/qml/qdeclarativecompiledbindings.cpp @@ -150,14 +150,14 @@ struct Register { QVariant *getvariantptr() { return (QVariant *)typeDataPtr(); } QString *getstringptr() { return (QString *)typeDataPtr(); } QUrl *geturlptr() { return (QUrl *)typeDataPtr(); } - const QVariant *getvariantptr() const { return (QVariant *)typeDataPtr(); } - const QString *getstringptr() const { return (QString *)typeDataPtr(); } - const QUrl *geturlptr() const { return (QUrl *)typeDataPtr(); } + const QVariant *getvariantptr() const { return (const QVariant *)typeDataPtr(); } + const QString *getstringptr() const { return (const QString *)typeDataPtr(); } + const QUrl *geturlptr() const { return (const QUrl *)typeDataPtr(); } void *typeDataPtr() { return (void *)&data; } void *typeMemory() { return (void *)data; } - const void *typeDataPtr() const { return (void *)&data; } - const void *typeMemory() const { return (void *)data; } + const void *typeDataPtr() const { return (const void *)&data; } + const void *typeMemory() const { return (const void *)data; } int gettype() const { return type; } void settype(int t) { type = t; } @@ -945,13 +945,13 @@ void QDeclarativeCompiledBindingsPrivate::findgeneric(Register *output, void QDeclarativeCompiledBindingsPrivate::init() { - Program *program = (Program *)programData; + Program *program = (Program *)const_cast(programData); if (program->subscriptions) subscriptions = new QDeclarativeCompiledBindingsPrivate::Subscription[program->subscriptions]; if (program->identifiers) identifiers = new QScriptDeclarativeClass::PersistentIdentifier[program->identifiers]; - m_signalTable = (quint32 *)(program->data() + program->signalTableOffset); + m_signalTable = (quint32 *)const_cast(program->data() + program->signalTableOffset); m_bindings = new QDeclarativeCompiledBindingsPrivate::Binding[program->bindings]; } @@ -965,7 +965,7 @@ static void throwException(int id, QDeclarativeDelayedError *error, else error->error.setDescription(description); if (id != 0xFF) { - quint64 e = *((quint64 *)(program->data() + program->exceptionDataOffset) + id); + quint64 e = *((const quint64 *)(program->data() + program->exceptionDataOffset) + id); error->error.setLine((e >> 32) & 0xFFFFFFFF); error->error.setColumn(e & 0xFFFFFFFF); } else { @@ -1134,7 +1134,8 @@ void QDeclarativeCompiledBindingsPrivate::run(int instrIndex, Register registers[32]; QDeclarativeEnginePrivate *engine = QDeclarativeEnginePrivate::get(context->engine); - Program *program = (Program *)programData; + + Program *program = (Program *)const_cast(programData); const Instr *instr = program->instructions(); instr += instrIndex; const char *data = program->data(); @@ -1148,7 +1149,7 @@ void QDeclarativeCompiledBindingsPrivate::run(int instrIndex, program->compiled = true; const Instr *inop = program->instructions(); for (int i = 0; i < program->instructionCount; ++i) { - Instr *op = (Instr *) inop++; + Instr *op = const_cast(inop++); op->common.code = decode_instr[op->common.type]; } } @@ -1284,7 +1285,7 @@ void QDeclarativeCompiledBindingsPrivate::run(int instrIndex, { Register &output = registers[instr->string_value.reg]; new (output.getstringptr()) - QString((QChar *)(data + instr->string_value.offset), instr->string_value.length); + QString((const QChar *)(data + instr->string_value.offset), instr->string_value.length); output.settype(QMetaType::QString); } QML_END_INSTR(String) @@ -1502,8 +1503,8 @@ void QDeclarativeCompiledBindingsPrivate::run(int instrIndex, QML_BEGIN_INSTR(InitString) if (!identifiers[instr->initstring.offset].identifier) { - quint32 len = *(quint32 *)(data + instr->initstring.dataIdx); - QChar *strdata = (QChar *)(data + instr->initstring.dataIdx + sizeof(quint32)); + quint32 len = *(const quint32 *)(data + instr->initstring.dataIdx); + const QChar *strdata = (const QChar *)(data + instr->initstring.dataIdx + sizeof(quint32)); QString str = QString::fromRawData(strdata, len); @@ -2899,9 +2900,9 @@ QByteArray QDeclarativeBindingCompiler::program() const programData.resize(size); memcpy(programData.data(), &prog, sizeof(Program)); if (prog.dataLength) - memcpy((char *)((Program *)programData.data())->data(), data.constData(), + memcpy(const_cast(((Program *)programData.data())->data()), data.constData(), data.size()); - memcpy((char *)((Program *)programData.data())->instructions(), bytecode.constData(), + memcpy(const_cast(((Program *)programData.data())->instructions()), bytecode.constData(), bytecode.count() * sizeof(Instr)); } diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp index 1d51f932..af6c7aaa 100644 --- a/src/declarative/qml/qdeclarativeengine.cpp +++ b/src/declarative/qml/qdeclarativeengine.cpp @@ -2084,14 +2084,14 @@ QScriptValue QDeclarativeEnginePrivate::scriptValueFromVariant(const QVariant &v { if (val.userType() == qMetaTypeId()) { QDeclarativeListReferencePrivate *p = - QDeclarativeListReferencePrivate::get((QDeclarativeListReference*)val.constData()); + QDeclarativeListReferencePrivate::get((QDeclarativeListReference*)const_cast(val.constData())); if (p->object) { return listClass->newList(p->property, p->propertyType); } else { return scriptEngine.nullValue(); } } else if (val.userType() == qMetaTypeId >()) { - const QList &list = *(QList*)val.constData(); + const QList &list = *(const QList*)val.constData(); QScriptValue rv = scriptEngine.newArray(list.count()); for (int ii = 0; ii < list.count(); ++ii) { QObject *object = list.at(ii); @@ -2466,7 +2466,7 @@ QObject *QDeclarativeEnginePrivate::toQObject(const QVariant &v, bool *ok) const int t = v.userType(); if (t == QMetaType::QObjectStar || m_compositeTypes.contains(t)) { if (ok) *ok = true; - return *(QObject **)(v.constData()); + return *(QObject *const *)(v.constData()); } else { return QDeclarativeMetaType::toQObject(v, ok); } diff --git a/src/declarative/qml/qdeclarativemetatype.cpp b/src/declarative/qml/qdeclarativemetatype.cpp index 746e8471..f9c2e47b 100644 --- a/src/declarative/qml/qdeclarativemetatype.cpp +++ b/src/declarative/qml/qdeclarativemetatype.cpp @@ -780,7 +780,7 @@ QObject *QDeclarativeMetaType::toQObject(const QVariant &v, bool *ok) if (ok) *ok = true; - return *(QObject **)v.constData(); + return *(QObject *const *)v.constData(); } bool QDeclarativeMetaType::isQObject(int userType) diff --git a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp index 6ec3fba4..91265724 100644 --- a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp +++ b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp @@ -236,7 +236,7 @@ QDeclarativeObjectScriptClass::property(QObject *obj, const Identifier &name) } else if (lastData->flags & QDeclarativePropertyCache::Data::IsFunction) { if (lastData->flags & QDeclarativePropertyCache::Data::IsVMEFunction) { - return Value(scriptEngine, ((QDeclarativeVMEMetaObject *)(obj->metaObject()))->vmeMethod(lastData->coreIndex)); + return Value(scriptEngine, ((QDeclarativeVMEMetaObject *)const_cast(obj->metaObject()))->vmeMethod(lastData->coreIndex)); } else { // Uncomment to use QtScript method call logic // QScriptValue sobj = scriptEngine->newQObject(obj); @@ -411,7 +411,7 @@ void QDeclarativeObjectScriptClass::setProperty(QObject *obj, const QString &rawValue = value.toString(); int status = -1; int flags = 0; - void *a[] = { (void *)&rawValue, 0, &status, &flags }; + void *a[] = { const_cast(&rawValue), 0, &status, &flags }; QMetaObject::metacall(obj, QMetaObject::WriteProperty, lastData->coreIndex, a); return; diff --git a/src/declarative/qml/qdeclarativeproperty.cpp b/src/declarative/qml/qdeclarativeproperty.cpp index 19ec215c..4add2fd2 100644 --- a/src/declarative/qml/qdeclarativeproperty.cpp +++ b/src/declarative/qml/qdeclarativeproperty.cpp @@ -1132,12 +1132,12 @@ bool QDeclarativePropertyPrivate::write(QObject *object, const QDeclarativePrope } else if (variantType == propertyType) { - void *a[] = { (void *)value.constData(), 0, &status, &flags }; + void *a[] = { const_cast(value.constData()), 0, &status, &flags }; QMetaObject::metacall(object, QMetaObject::WriteProperty, coreIdx, a); } else if (qMetaTypeId() == propertyType) { - void *a[] = { (void *)&value, 0, &status, &flags }; + void *a[] = { const_cast(&value), 0, &status, &flags }; QMetaObject::metacall(object, QMetaObject::WriteProperty, coreIdx, a); } else if (property.flags & QDeclarativePropertyCache::Data::IsQObjectDerived) { @@ -1147,7 +1147,7 @@ bool QDeclarativePropertyPrivate::write(QObject *object, const QDeclarativePrope if (!valMo) return false; - QObject *o = *(QObject **)value.constData(); + QObject *o = *(QObject *const *)value.constData(); const QMetaObject *propMo = rawMetaObjectForType(enginePriv, propertyType); if (o) valMo = o->metaObject(); @@ -1224,7 +1224,7 @@ bool QDeclarativePropertyPrivate::write(QObject *object, const QDeclarativePrope } } if (ok) { - void *a[] = { (void *)v.constData(), 0, &status, &flags}; + void *a[] = { const_cast(v.constData()), 0, &status, &flags}; QMetaObject::metacall(object, QMetaObject::WriteProperty, coreIdx, a); } else { return false; diff --git a/src/declarative/qml/qdeclarativevme.cpp b/src/declarative/qml/qdeclarativevme.cpp index 9309d7b6..0554183f 100644 --- a/src/declarative/qml/qdeclarativevme.cpp +++ b/src/declarative/qml/qdeclarativevme.cpp @@ -278,7 +278,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEObjectStack &stack, ::memset(static_cast(o), 0, instr.createSimple.typeSize + sizeof(QDeclarativeData)); instr.createSimple.create(o); - QDeclarativeData *ddata = (QDeclarativeData *)(((const char *)o) + instr.createSimple.typeSize); + QDeclarativeData *ddata = (QDeclarativeData *)const_cast(((const char *)o) + instr.createSimple.typeSize); ddata->ownedByQml1 = true; const QDeclarativeCompiledData::TypeReference &ref = types.at(instr.createSimple.type); if (!ddata->propertyCache && ref.typePropertyCache) { @@ -419,7 +419,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEObjectStack &stack, QObject *target = stack.top(); CLEAN_PROPERTY(target, instr.storeString.propertyIndex); - void *a[] = { (void *)&primitives.at(instr.storeString.value), 0, &status, &flags }; + void *a[] = { const_cast(&primitives.at(instr.storeString.value)), 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, instr.storeString.propertyIndex, a); } @@ -430,7 +430,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEObjectStack &stack, QObject *target = stack.top(); CLEAN_PROPERTY(target, instr.storeUrl.propertyIndex); - void *a[] = { (void *)&urls.at(instr.storeUrl.value), 0, &status, &flags }; + void *a[] = { const_cast(&urls.at(instr.storeUrl.value)), 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, instr.storeUrl.propertyIndex, a); } @@ -465,7 +465,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEObjectStack &stack, QObject *target = stack.top(); CLEAN_PROPERTY(target, instr.storeBool.propertyIndex); - void *a[] = { (void *)&instr.storeBool.value, 0, &status, &flags }; + void *a[] = { const_cast(&instr.storeBool.value), 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, instr.storeBool.propertyIndex, a); } @@ -476,7 +476,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEObjectStack &stack, QObject *target = stack.top(); CLEAN_PROPERTY(target, instr.storeInteger.propertyIndex); - void *a[] = { (void *)&instr.storeInteger.value, 0, &status, &flags }; + void *a[] = { const_cast(&instr.storeInteger.value), 0, &status, &flags }; QMetaObject::metacall(target, QMetaObject::WriteProperty, instr.storeInteger.propertyIndex, a); } @@ -767,7 +767,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEObjectStack &stack, if ((stack.count() - instr.assignBinding.owner) == 1 && bindingSkipList.testBit(coreIndex)) break; - QDeclarativeBinding *bind = new QDeclarativeBinding((void *)datas.at(instr.assignBinding.value).constData(), comp, context, ctxt, comp->name, instr.line, 0); + QDeclarativeBinding *bind = new QDeclarativeBinding(const_cast(datas.at(instr.assignBinding.value).constData()), + comp, context, ctxt, comp->name, instr.line, 0); bindValues.append(bind); bind->m_mePtr = &bindValues.values[bindValues.count - 1]; bind->setTarget(mp); @@ -822,7 +823,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEObjectStack &stack, QDeclarativePropertyPrivate::restore(datas.at(instr.assignValueInterceptor.property), target, ctxt); obj->setParent(target); vi->setTarget(prop); - QDeclarativeVMEMetaObject *mo = static_cast((QMetaObject*)target->metaObject()); + QDeclarativeVMEMetaObject *mo = static_cast(const_cast(target->metaObject())); mo->registerInterceptor(prop.index(), QDeclarativePropertyPrivate::valueTypeCoreIndex(prop), vi); } break; @@ -831,7 +832,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEObjectStack &stack, { QObject *assign = stack.pop(); - const ListInstance &list = qliststack.top(); + ListInstance &list = const_cast(qliststack.top()); list.qListProperty.append((QDeclarativeListProperty*)&list.qListProperty, assign); } break; @@ -840,7 +841,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEObjectStack &stack, { // This is only used for assigning interfaces QObject *assign = stack.pop(); - const ListInstance &list = qliststack.top(); + ListInstance &list = const_cast(qliststack.top()); int type = list.type; @@ -917,7 +918,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEObjectStack &stack, qliststack.push(ListInstance(instr.fetchQmlList.type)); void *a[1]; - a[0] = (void *)&(qliststack.top().qListProperty); + a[0] = (void *)const_cast *>(&qliststack.top().qListProperty); QMetaObject::metacall(target, QMetaObject::ReadProperty, instr.fetchQmlList.property, a); } diff --git a/src/declarative/qml/qdeclarativevmemetaobject.cpp b/src/declarative/qml/qdeclarativevmemetaobject.cpp index f5735c98..25141023 100644 --- a/src/declarative/qml/qdeclarativevmemetaobject.cpp +++ b/src/declarative/qml/qdeclarativevmemetaobject.cpp @@ -494,7 +494,7 @@ int QDeclarativeVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a) int listIndex = data[id].asInt(); const List *list = &listProperties.at(listIndex); *reinterpret_cast *>(a[0]) = - QDeclarativeListProperty(object, (void *)list, + QDeclarativeListProperty(object, const_cast(list), list_append, list_count, list_at, list_clear); } diff --git a/src/declarative/qml/qdeclarativevmemetaobject_p.h b/src/declarative/qml/qdeclarativevmemetaobject_p.h index 95e02fd9..f98cc6b5 100644 --- a/src/declarative/qml/qdeclarativevmemetaobject_p.h +++ b/src/declarative/qml/qdeclarativevmemetaobject_p.h @@ -109,7 +109,7 @@ struct QDeclarativeVMEMetaData }; PropertyData *propertyData() const { - return (PropertyData *)(((const char *)this) + sizeof(QDeclarativeVMEMetaData)); + return (PropertyData *)const_cast(((const char *)this) + sizeof(QDeclarativeVMEMetaData)); } AliasData *aliasData() const { diff --git a/src/declarative/util/qdeclarativelistaccessor.cpp b/src/declarative/util/qdeclarativelistaccessor.cpp index efc51979..e2d5c064 100644 --- a/src/declarative/util/qdeclarativelistaccessor.cpp +++ b/src/declarative/util/qdeclarativelistaccessor.cpp @@ -91,7 +91,7 @@ int QDeclarativeListAccessor::count() const case VariantList: return qvariant_cast(d).count(); case ListProperty: - return ((QDeclarativeListReference *)d.constData())->count(); + return ((const QDeclarativeListReference *)d.constData())->count(); case Instance: return 1; case Integer: @@ -111,7 +111,7 @@ QVariant QDeclarativeListAccessor::at(int idx) const case VariantList: return qvariant_cast(d).at(idx); case ListProperty: - return QVariant::fromValue(((QDeclarativeListReference *)d.constData())->at(idx)); + return QVariant::fromValue(((const QDeclarativeListReference *)d.constData())->at(idx)); case Instance: return d; case Integer: diff --git a/src/declarative/util/qdeclarativelistmodel.cpp b/src/declarative/util/qdeclarativelistmodel.cpp index 2308433d..9f63c744 100644 --- a/src/declarative/util/qdeclarativelistmodel.cpp +++ b/src/declarative/util/qdeclarativelistmodel.cpp @@ -74,7 +74,7 @@ void qdeclarativelistmodel_move(int from, int to, int n, T *items) QDeclarativeListModelParser::ListInstruction *QDeclarativeListModelParser::ListModelData::instructions() const { - return (QDeclarativeListModelParser::ListInstruction *)((char *)this + sizeof(ListModelData)); + return (QDeclarativeListModelParser::ListInstruction *)(const_cast((const char *)this) + sizeof(ListModelData)); } /*! -- cgit v1.2.3