Moc: fix narrowing conversion warnings by using iterator-based for-loop

The alternative would be to explicitly cast each list.size() to int. I
think using iterators is a cleaner solution.

Drive-by changes:
- Give a std::pair's members better names than first/second, by using a
  structured binding
- Port to qsizetype

Pick-to: 6.6 6.5
Change-Id: Icff3126192f9813fba698d5722b209307011ca48
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
This commit is contained in:
Ahmad Samir 2023-05-18 19:29:46 +03:00 committed by Fabian Kosmale
parent 1fcbe0f6c2
commit c88961bcf4
2 changed files with 43 additions and 27 deletions

View File

@ -586,13 +586,21 @@ void Generator::generateCode()
fprintf(out, " if (!strcmp(_clname, qt_meta_stringdata_%s.stringdata0))\n"
" return static_cast<void*>(this);\n",
qualifiedClassNameIdentifier.constData());
for (int i = 1; i < cdef->superclassList.size(); ++i) { // for all superclasses but the first one
if (cdef->superclassList.at(i).second == FunctionDef::Private)
continue;
const char *cname = cdef->superclassList.at(i).first.constData();
fprintf(out, " if (!strcmp(_clname, \"%s\"))\n return static_cast< %s*>(this);\n",
cname, cname);
// for all superclasses but the first one
if (cdef->superclassList.size() > 1) {
auto it = cdef->superclassList.cbegin() + 1;
const auto end = cdef->superclassList.cend();
for (; it != end; ++it) {
const auto &[className, access] = *it;
if (access == FunctionDef::Private)
continue;
const char *cname = className.constData();
fprintf(out, " if (!strcmp(_clname, \"%s\"))\n return static_cast< %s*>(this);\n",
cname, cname);
}
}
for (const QList<ClassDef::Interface> &iface : std::as_const(cdef->interfaceList)) {
for (qsizetype j = 0; j < iface.size(); ++j) {
fprintf(out, " if (!strcmp(_clname, %s))\n return ", iface.at(j).interfaceId.constData());
@ -1010,10 +1018,11 @@ void Generator::generateStaticMetacall()
Q_ASSERT(!f.isPrivateSignal); // That would be a strange ctor indeed
int offset = 1;
int argsCount = f.arguments.size();
for (int j = 0; j < argsCount; ++j) {
const ArgumentDef &a = f.arguments.at(j);
if (j)
const auto begin = f.arguments.cbegin();
const auto end = f.arguments.cend();
for (auto it = begin; it != end; ++it) {
const ArgumentDef &a = *it;
if (it != begin)
fprintf(out, ",");
fprintf(out, "(*reinterpret_cast<%s>(_a[%d]))",
a.typeNameForCast.constData(), offset++);
@ -1085,16 +1094,17 @@ void Generator::generateStaticMetacall()
if (f.isRawSlot) {
fprintf(out, "QMethodRawArguments{ _a }");
} else {
int argsCount = f.arguments.size();
for (int j = 0; j < argsCount; ++j) {
const ArgumentDef &a = f.arguments.at(j);
if (j)
const auto begin = f.arguments.cbegin();
const auto end = f.arguments.cend();
for (auto it = begin; it != end; ++it) {
const ArgumentDef &a = *it;
if (it != begin)
fprintf(out, ",");
fprintf(out, "(*reinterpret_cast< %s>(_a[%d]))",a.typeNameForCast.constData(), offset++);
isUsed_a = true;
}
if (f.isPrivateSignal) {
if (argsCount > 0)
if (!f.arguments.isEmpty())
fprintf(out, ", ");
fprintf(out, "%s", "QPrivateSignal()");
}
@ -1155,15 +1165,16 @@ void Generator::generateStaticMetacall()
fprintf(out, " {\n");
fprintf(out, " using _t = %s (%s::*)(",f.type.rawName.constData() , cdef->classname.constData());
int argsCount = f.arguments.size();
for (int j = 0; j < argsCount; ++j) {
const ArgumentDef &a = f.arguments.at(j);
if (j)
const auto begin = f.arguments.cbegin();
const auto end = f.arguments.cend();
for (auto it = begin; it != end; ++it) {
const ArgumentDef &a = *it;
if (it != begin)
fprintf(out, ", ");
fprintf(out, "%s", QByteArray(a.type.name + ' ' + a.rightType).constData());
}
if (f.isPrivateSignal) {
if (argsCount > 0)
if (!f.arguments.isEmpty())
fprintf(out, ", ");
fprintf(out, "%s", "QPrivateSignal");
}
@ -1420,9 +1431,11 @@ void Generator::generateSignal(FunctionDef *def,int index)
}
int offset = 1;
for (int j = 0; j < def->arguments.size(); ++j) {
const ArgumentDef &a = def->arguments.at(j);
if (j)
const auto begin = def->arguments.cbegin();
const auto end = def->arguments.cend();
for (auto it = begin; it != end; ++it) {
const ArgumentDef &a = *it;
if (it != begin)
fputs(", ", out);
if (a.type.name.size())
fputs(a.type.name.constData(), out);

View File

@ -618,17 +618,20 @@ Symbols Preprocessor::macroExpandIdentifier(Preprocessor *that, SymbolStack &sym
HashHash
} mode = Normal;
for (int i = 0; i < macro.symbols.size(); ++i) {
const Symbol &s = macro.symbols.at(i);
const auto end = macro.symbols.cend();
auto it = macro.symbols.cbegin();
const auto lastSym = std::prev(macro.symbols.cend(), !macro.symbols.isEmpty() ? 1 : 0);
for (; it != end; ++it) {
const Symbol &s = *it;
if (s.token == HASH || s.token == PP_HASHHASH) {
mode = (s.token == HASH ? Hash : HashHash);
continue;
}
int index = macro.arguments.indexOf(s);
const qsizetype index = macro.arguments.indexOf(s);
if (mode == Normal) {
if (index >= 0 && index < arguments.size()) {
// each argument undoergoes macro expansion if it's not used as part of a # or ##
if (i == macro.symbols.size() - 1 || macro.symbols.at(i + 1).token != PP_HASHHASH) {
if (it == lastSym || std::next(it)->token != PP_HASHHASH) {
Symbols arg = arguments.at(index);
qsizetype idx = 1;
macroExpand(&expansion, that, arg, idx, lineNum, false, symbols.excludeSymbols());