moc: bump the full output revision and remove old support
This removes the venerable integer generation at moc time that was added in Qt 4.0, in favor of the generation at constexpr time. Change-Id: Ia1238b1de442a329d739fffd91d1498cad70bfb9 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
This commit is contained in:
parent
29a6cb3386
commit
c17c69c2ed
@ -11,7 +11,8 @@
|
|||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
#ifndef Q_MOC_OUTPUT_REVISION
|
#ifndef Q_MOC_OUTPUT_REVISION
|
||||||
#define Q_MOC_OUTPUT_REVISION 68
|
// This number should be in sync with moc's outputrevision.h
|
||||||
|
#define Q_MOC_OUTPUT_REVISION 69
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// The following macros can be defined by tools that understand Qt
|
// The following macros can be defined by tools that understand Qt
|
||||||
|
@ -78,8 +78,6 @@ template <uint... Nx> constexpr auto stringData(const char (&...strings)[Nx])
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
# define QT_MOC_HAS_STRINGDATA 1
|
|
||||||
|
|
||||||
struct NoType {};
|
struct NoType {};
|
||||||
template <typename T> struct ForceCompleteMetaTypes {};
|
template <typename T> struct ForceCompleteMetaTypes {};
|
||||||
|
|
||||||
@ -568,8 +566,6 @@ constexpr auto metaObjectData(uint flags, const Methods &methods, const Properti
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define QT_MOC_HAS_UINTDATA 1
|
|
||||||
|
|
||||||
template <typename T> inline std::enable_if_t<std::is_enum_v<T>> assignFlags(void *v, T t) noexcept
|
template <typename T> inline std::enable_if_t<std::is_enum_v<T>> assignFlags(void *v, T t) noexcept
|
||||||
{
|
{
|
||||||
*static_cast<T *>(v) = t;
|
*static_cast<T *>(v) = t;
|
||||||
|
@ -131,17 +131,6 @@ int Generator::stridx(const QByteArray &s)
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the sum of all parameters (including return type) for the given
|
|
||||||
// \a list of methods. This is needed for calculating the size of the methods'
|
|
||||||
// parameter type/name meta-data.
|
|
||||||
static int aggregateParameterCount(const QList<FunctionDef> &list)
|
|
||||||
{
|
|
||||||
int sum = 0;
|
|
||||||
for (const FunctionDef &def : list)
|
|
||||||
sum += int(def.arguments.size()) + 1; // +1 for return type
|
|
||||||
return sum;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Generator::registerableMetaType(const QByteArray &propertyType)
|
bool Generator::registerableMetaType(const QByteArray &propertyType)
|
||||||
{
|
{
|
||||||
if (metaTypes.contains(propertyType))
|
if (metaTypes.contains(propertyType))
|
||||||
@ -269,8 +258,7 @@ void Generator::generateCode()
|
|||||||
// Build the strings using QtMocHelpers::stringData
|
// Build the strings using QtMocHelpers::stringData
|
||||||
//
|
//
|
||||||
|
|
||||||
fprintf(out, "\n#ifdef QT_MOC_HAS_STRINGDATA\n"
|
fprintf(out, "static constexpr auto qt_meta_stringdata_%s = QtMocHelpers::stringData(",
|
||||||
"static constexpr auto qt_meta_stringdata_%s = QtMocHelpers::stringData(",
|
|
||||||
qualifiedClassNameIdentifier.constData());
|
qualifiedClassNameIdentifier.constData());
|
||||||
{
|
{
|
||||||
char comma = 0;
|
char comma = 0;
|
||||||
@ -281,10 +269,7 @@ void Generator::generateCode()
|
|||||||
comma = ',';
|
comma = ',';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fprintf(out, "\n);\n"
|
fprintf(out, "\n);\n\n");
|
||||||
"#else // !QT_MOC_HAS_STRINGDATA\n");
|
|
||||||
fprintf(out, "#error \"qtmochelpers.h not found or too old.\"\n");
|
|
||||||
fprintf(out, "#endif // !QT_MOC_HAS_STRINGDATA\n\n");
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// build the data array
|
// build the data array
|
||||||
@ -294,8 +279,7 @@ void Generator::generateCode()
|
|||||||
// creating the meta object for, so we get access to everything it has
|
// creating the meta object for, so we get access to everything it has
|
||||||
// access to and with the same contexts (for example, member enums and
|
// access to and with the same contexts (for example, member enums and
|
||||||
// types).
|
// types).
|
||||||
fprintf(out, "#ifdef QT_MOC_HAS_UINTDATA\n"
|
fprintf(out, "template <> constexpr inline auto %s::qt_create_metaobjectdata<qt_meta_tag_%s_t>()\n"
|
||||||
"template <> constexpr inline auto %s::qt_create_metaobjectdata<qt_meta_tag_%s_t>()\n"
|
|
||||||
"{\n"
|
"{\n"
|
||||||
" namespace QMC = QtMocConstants;\n"
|
" namespace QMC = QtMocConstants;\n"
|
||||||
" QtMocHelpers::UintData qt_methods {\n",
|
" QtMocHelpers::UintData qt_methods {\n",
|
||||||
@ -372,137 +356,13 @@ void Generator::generateCode()
|
|||||||
|
|
||||||
// create a copy of qt_meta_data_types' members so the uint array ends up
|
// create a copy of qt_meta_data_types' members so the uint array ends up
|
||||||
// in the pure .rodata section while the meta types is in .data.rel.ro
|
// in the pure .rodata section while the meta types is in .data.rel.ro
|
||||||
fprintf(out, "static constexpr auto qt_meta_data_%s_array =\n"
|
fprintf(out, "static constexpr auto qt_meta_data_%s =\n"
|
||||||
" qt_meta_data_types_%s.data;\n",
|
" qt_meta_data_types_%s.data;\n",
|
||||||
qualifiedClassNameIdentifier.constData(), qualifiedClassNameIdentifier.constData());
|
qualifiedClassNameIdentifier.constData(), qualifiedClassNameIdentifier.constData());
|
||||||
fprintf(out, "static constexpr const uint *qt_meta_data_%s =\n"
|
|
||||||
" qt_meta_data_%s_array.data();\n",
|
|
||||||
qualifiedClassNameIdentifier.constData(), qualifiedClassNameIdentifier.constData());
|
|
||||||
fprintf(out, "static constexpr auto qt_meta_types_%s =\n"
|
fprintf(out, "static constexpr auto qt_meta_types_%s =\n"
|
||||||
" qt_meta_data_types_%s.metaTypes;\n",
|
" qt_meta_data_types_%s.metaTypes;\n\n",
|
||||||
qualifiedClassNameIdentifier.constData(), qualifiedClassNameIdentifier.constData());
|
qualifiedClassNameIdentifier.constData(), qualifiedClassNameIdentifier.constData());
|
||||||
|
|
||||||
fprintf(out, "#else // !QT_MOC_HAS_UINTDATA\n");
|
|
||||||
|
|
||||||
int index = MetaObjectPrivateFieldCount;
|
|
||||||
fprintf(out, "Q_CONSTINIT static const uint qt_meta_data_%s[] = {\n", qualifiedClassNameIdentifier.constData());
|
|
||||||
fprintf(out, "\n // content:\n");
|
|
||||||
fprintf(out, " %4d, // revision\n", 12); // hardcoded to an earlier version
|
|
||||||
fprintf(out, " %4d, // classname\n", stridx(cdef->qualified));
|
|
||||||
fprintf(out, " %4d, %4d, // classinfo\n", int(cdef->classInfoList.size()), int(cdef->classInfoList.size() ? index : 0));
|
|
||||||
index += cdef->classInfoList.size() * 2;
|
|
||||||
|
|
||||||
qsizetype methodCount = 0;
|
|
||||||
if (qAddOverflow(cdef->signalList.size(), cdef->slotList.size(), &methodCount)
|
|
||||||
|| qAddOverflow(cdef->methodList.size(), methodCount, &methodCount)) {
|
|
||||||
parser->error("internal limit exceeded: the total number of member functions"
|
|
||||||
" (including signals and slots) is too big.");
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(out, " %4" PRIdQSIZETYPE ", %4d, // methods\n", methodCount, methodCount ? index : 0);
|
|
||||||
index += methodCount * QMetaObjectPrivate::IntsPerMethod;
|
|
||||||
if (cdef->revisionedMethods)
|
|
||||||
index += methodCount;
|
|
||||||
int paramsIndex = index;
|
|
||||||
int totalParameterCount = aggregateParameterCount(cdef->signalList)
|
|
||||||
+ aggregateParameterCount(cdef->slotList)
|
|
||||||
+ aggregateParameterCount(cdef->methodList)
|
|
||||||
+ aggregateParameterCount(cdef->constructorList);
|
|
||||||
index += totalParameterCount * 2 // types and parameter names
|
|
||||||
- methodCount // return "parameters" don't have names
|
|
||||||
- int(cdef->constructorList.size()); // "this" parameters don't have names
|
|
||||||
|
|
||||||
fprintf(out, " %4d, %4d, // properties\n", int(cdef->propertyList.size()), int(cdef->propertyList.size() ? index : 0));
|
|
||||||
index += cdef->propertyList.size() * QMetaObjectPrivate::IntsPerProperty;
|
|
||||||
fprintf(out, " %4d, %4d, // enums/sets\n", int(cdef->enumList.size()), cdef->enumList.size() ? index : 0);
|
|
||||||
|
|
||||||
int enumsIndex = index;
|
|
||||||
for (const EnumDef &def : std::as_const(cdef->enumList))
|
|
||||||
index += QMetaObjectPrivate::IntsPerEnum + (def.values.size() * 2);
|
|
||||||
|
|
||||||
fprintf(out, " %4d, %4d, // constructors\n", isConstructible ? int(cdef->constructorList.size()) : 0,
|
|
||||||
isConstructible ? index : 0);
|
|
||||||
|
|
||||||
int flags = 0;
|
|
||||||
if (cdef->hasQGadget || cdef->hasQNamespace) {
|
|
||||||
// Ideally, all the classes could have that flag. But this broke classes generated
|
|
||||||
// by qdbusxml2cpp which generate code that require that we call qt_metacall for properties
|
|
||||||
flags |= PropertyAccessInStaticMetaCall;
|
|
||||||
}
|
|
||||||
fprintf(out, " %4d, // flags\n", flags);
|
|
||||||
fprintf(out, " %4d, // signalCount\n", int(cdef->signalList.size()));
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Build classinfo array
|
|
||||||
//
|
|
||||||
generateClassInfos();
|
|
||||||
|
|
||||||
qsizetype propEnumCount = 0;
|
|
||||||
// all property metatypes + all enum metatypes + 1 for the type of the current class itself
|
|
||||||
if (qAddOverflow(cdef->propertyList.size(), cdef->enumList.size(), &propEnumCount)
|
|
||||||
|| qAddOverflow(propEnumCount, qsizetype(1), &propEnumCount)
|
|
||||||
|| propEnumCount >= std::numeric_limits<int>::max()) {
|
|
||||||
parser->error("internal limit exceeded: number of property and enum metatypes is too big.");
|
|
||||||
}
|
|
||||||
int initialMetaTypeOffset = int(propEnumCount);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Build signals array first, otherwise the signal indices would be wrong
|
|
||||||
//
|
|
||||||
generateFunctions(cdef->signalList, "signal", MethodSignal, paramsIndex, initialMetaTypeOffset);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Build slots array
|
|
||||||
//
|
|
||||||
generateFunctions(cdef->slotList, "slot", MethodSlot, paramsIndex, initialMetaTypeOffset);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Build method array
|
|
||||||
//
|
|
||||||
generateFunctions(cdef->methodList, "method", MethodMethod, paramsIndex, initialMetaTypeOffset);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Build method version arrays
|
|
||||||
//
|
|
||||||
if (cdef->revisionedMethods) {
|
|
||||||
generateFunctionRevisions(cdef->signalList, "signal");
|
|
||||||
generateFunctionRevisions(cdef->slotList, "slot");
|
|
||||||
generateFunctionRevisions(cdef->methodList, "method");
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Build method parameters array
|
|
||||||
//
|
|
||||||
generateFunctionParameters(cdef->signalList, "signal");
|
|
||||||
generateFunctionParameters(cdef->slotList, "slot");
|
|
||||||
generateFunctionParameters(cdef->methodList, "method");
|
|
||||||
if (isConstructible)
|
|
||||||
generateFunctionParameters(cdef->constructorList, "constructor");
|
|
||||||
|
|
||||||
//
|
|
||||||
// Build property array
|
|
||||||
//
|
|
||||||
generateProperties();
|
|
||||||
|
|
||||||
//
|
|
||||||
// Build enums array
|
|
||||||
//
|
|
||||||
generateEnums(enumsIndex);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Build constructors array
|
|
||||||
//
|
|
||||||
if (isConstructible)
|
|
||||||
generateFunctions(cdef->constructorList, "constructor", MethodConstructor, paramsIndex, initialMetaTypeOffset);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Terminate data array
|
|
||||||
//
|
|
||||||
fprintf(out, "\n 0 // eod\n};\n");
|
|
||||||
|
|
||||||
fprintf(out, "#endif // !QT_MOC_HAS_UINTDATA\n\n");
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Build extra array
|
// Build extra array
|
||||||
//
|
//
|
||||||
@ -590,7 +450,7 @@ void Generator::generateCode()
|
|||||||
else
|
else
|
||||||
fprintf(out, " nullptr,\n");
|
fprintf(out, " nullptr,\n");
|
||||||
fprintf(out, " qt_meta_stringdata_%s.offsetsAndSizes,\n"
|
fprintf(out, " qt_meta_stringdata_%s.offsetsAndSizes,\n"
|
||||||
" qt_meta_data_%s,\n", qualifiedClassNameIdentifier.constData(),
|
" qt_meta_data_%s.data(),\n", qualifiedClassNameIdentifier.constData(),
|
||||||
qualifiedClassNameIdentifier.constData());
|
qualifiedClassNameIdentifier.constData());
|
||||||
if (hasStaticMetaCall)
|
if (hasStaticMetaCall)
|
||||||
fprintf(out, " qt_static_metacall,\n");
|
fprintf(out, " qt_static_metacall,\n");
|
||||||
@ -602,70 +462,9 @@ void Generator::generateCode()
|
|||||||
else
|
else
|
||||||
fprintf(out, " qt_meta_extradata_%s,\n", qualifiedClassNameIdentifier.constData());
|
fprintf(out, " qt_meta_extradata_%s,\n", qualifiedClassNameIdentifier.constData());
|
||||||
|
|
||||||
fprintf(out, "#ifdef QT_MOC_HAS_UINTDATA\n"
|
fprintf(out, " qt_meta_types_%s.data(),\n",
|
||||||
" qt_meta_types_%s.data(),\n"
|
|
||||||
"#else\n",
|
|
||||||
qualifiedClassNameIdentifier.constData());
|
qualifiedClassNameIdentifier.constData());
|
||||||
|
|
||||||
const char *comma = "";
|
|
||||||
auto stringForType = [requireCompleteness](const QByteArray &type, bool forceComplete) -> QByteArray {
|
|
||||||
const char *forceCompleteType = forceComplete ? ", std::true_type>" : ", std::false_type>";
|
|
||||||
if (requireCompleteness)
|
|
||||||
return type;
|
|
||||||
return "QtPrivate::TypeAndForceComplete<" % type % forceCompleteType;
|
|
||||||
};
|
|
||||||
if (!requireCompleteness) {
|
|
||||||
fprintf(out, " qt_incomplete_metaTypeArray<qt_meta_tag_%s_t", qualifiedClassNameIdentifier.constData());
|
|
||||||
comma = ",";
|
|
||||||
} else {
|
|
||||||
fprintf(out, " qt_metaTypeArray<");
|
|
||||||
}
|
|
||||||
// metatypes for properties
|
|
||||||
for (const PropertyDef &p : std::as_const(cdef->propertyList)) {
|
|
||||||
fprintf(out, "%s\n // property '%s'\n %s",
|
|
||||||
comma, p.name.constData(), stringForType(p.type, true).constData());
|
|
||||||
comma = ",";
|
|
||||||
}
|
|
||||||
|
|
||||||
// metatypes for enums
|
|
||||||
for (const EnumDef &e : std::as_const(cdef->enumList)) {
|
|
||||||
fprintf(out, "%s\n // enum '%s'\n %s",
|
|
||||||
comma, e.name.constData(), stringForType(e.qualifiedType(cdef), true).constData());
|
|
||||||
comma = ",";
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(out, "%s\n // Q_OBJECT / Q_GADGET\n %s",
|
|
||||||
comma, stringForType(ownType, true).constData());
|
|
||||||
comma = ",";
|
|
||||||
|
|
||||||
// metatypes for all exposed methods
|
|
||||||
// because we definitely printed something above, this section doesn't need comma control
|
|
||||||
const auto allMethods = {&cdef->signalList, &cdef->slotList, &cdef->methodList};
|
|
||||||
for (const QList<FunctionDef> *methodContainer : allMethods) {
|
|
||||||
for (const FunctionDef &fdef : *methodContainer) {
|
|
||||||
fprintf(out, ",\n // method '%s'\n %s",
|
|
||||||
fdef.name.constData(), stringForType(fdef.type.name, false).constData());
|
|
||||||
for (const auto &argument: fdef.arguments)
|
|
||||||
fprintf(out, ",\n %s", stringForType(argument.type.name, false).constData());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// but constructors have no return types, so this needs comma control again
|
|
||||||
for (const FunctionDef &fdef : std::as_const(cdef->constructorList)) {
|
|
||||||
if (fdef.arguments.isEmpty())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
fprintf(out, "%s\n // constructor '%s'", comma, fdef.name.constData());
|
|
||||||
comma = "";
|
|
||||||
for (const auto &argument: fdef.arguments) {
|
|
||||||
fprintf(out, "%s\n %s", comma,
|
|
||||||
stringForType(argument.type.name, false).constData());
|
|
||||||
comma = ",";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fprintf(out, "\n >,\n");
|
|
||||||
fprintf(out, "#endif // !QT_MOC_HAS_UINTDATA\n");
|
|
||||||
|
|
||||||
fprintf(out, " nullptr\n} };\n\n");
|
fprintf(out, " nullptr\n} };\n\n");
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -781,17 +580,6 @@ void Generator::addClassInfos()
|
|||||||
fprintf(out, " { %4d, %4d },\n", stridx(c.name), stridx(c.value));
|
fprintf(out, " { %4d, %4d },\n", stridx(c.name), stridx(c.value));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Generator::generateClassInfos()
|
|
||||||
{
|
|
||||||
if (cdef->classInfoList.isEmpty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
fprintf(out, "\n // classinfo: key, value\n");
|
|
||||||
|
|
||||||
for (const ClassInfoDef &c : std::as_const(cdef->classInfoList))
|
|
||||||
fprintf(out, " %4d, %4d,\n", stridx(c.name), stridx(c.value));
|
|
||||||
}
|
|
||||||
|
|
||||||
void Generator::registerFunctionStrings(const QList<FunctionDef> &list)
|
void Generator::registerFunctionStrings(const QList<FunctionDef> &list)
|
||||||
{
|
{
|
||||||
for (const FunctionDef &f : list) {
|
for (const FunctionDef &f : list) {
|
||||||
@ -882,91 +670,6 @@ void Generator::addFunctions(const QList<FunctionDef> &list, const char *functyp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Generator::generateFunctions(const QList<FunctionDef> &list, const char *functype, int type,
|
|
||||||
int ¶msIndex, int &initialMetatypeOffset)
|
|
||||||
{
|
|
||||||
if (list.isEmpty())
|
|
||||||
return;
|
|
||||||
fprintf(out, "\n // %ss: name, argc, parameters, tag, flags, initial metatype offsets\n", functype);
|
|
||||||
|
|
||||||
for (const FunctionDef &f : list) {
|
|
||||||
QByteArray comment;
|
|
||||||
uint flags = type;
|
|
||||||
if (f.access == FunctionDef::Private) {
|
|
||||||
flags |= AccessPrivate;
|
|
||||||
comment.append("Private");
|
|
||||||
} else if (f.access == FunctionDef::Public) {
|
|
||||||
flags |= AccessPublic;
|
|
||||||
comment.append("Public");
|
|
||||||
} else if (f.access == FunctionDef::Protected) {
|
|
||||||
flags |= AccessProtected;
|
|
||||||
comment.append("Protected");
|
|
||||||
}
|
|
||||||
if (f.isCompat) {
|
|
||||||
flags |= MethodCompatibility;
|
|
||||||
comment.append(" | MethodCompatibility");
|
|
||||||
}
|
|
||||||
if (f.wasCloned) {
|
|
||||||
flags |= MethodCloned;
|
|
||||||
comment.append(" | MethodCloned");
|
|
||||||
}
|
|
||||||
if (f.isScriptable) {
|
|
||||||
flags |= MethodScriptable;
|
|
||||||
comment.append(" | isScriptable");
|
|
||||||
}
|
|
||||||
if (f.revision > 0) {
|
|
||||||
flags |= MethodRevisioned;
|
|
||||||
comment.append(" | MethodRevisioned");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (f.isConst) {
|
|
||||||
flags |= MethodIsConst;
|
|
||||||
comment.append(" | MethodIsConst ");
|
|
||||||
}
|
|
||||||
|
|
||||||
const int argc = int(f.arguments.size());
|
|
||||||
fprintf(out, " %4d, %4d, %4d, %4d, 0x%02x, %4d /* %s */,\n",
|
|
||||||
stridx(f.name), argc, paramsIndex, stridx(f.tag), flags, initialMetatypeOffset, comment.constData());
|
|
||||||
|
|
||||||
paramsIndex += 1 + argc * 2;
|
|
||||||
// constructors don't have a return type
|
|
||||||
initialMetatypeOffset += (f.isConstructor ? 0 : 1) + argc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Generator::generateFunctionRevisions(const QList<FunctionDef> &list, const char *functype)
|
|
||||||
{
|
|
||||||
if (list.size())
|
|
||||||
fprintf(out, "\n // %ss: revision\n", functype);
|
|
||||||
for (const FunctionDef &f : list)
|
|
||||||
fprintf(out, " %4d,\n", f.revision);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Generator::generateFunctionParameters(const QList<FunctionDef> &list, const char *functype)
|
|
||||||
{
|
|
||||||
if (list.isEmpty())
|
|
||||||
return;
|
|
||||||
fprintf(out, "\n // %ss: parameters\n", functype);
|
|
||||||
for (const FunctionDef &f : list) {
|
|
||||||
fprintf(out, " ");
|
|
||||||
|
|
||||||
// Types
|
|
||||||
const bool allowEmptyName = f.isConstructor;
|
|
||||||
generateTypeInfo(f.normalizedType, allowEmptyName);
|
|
||||||
fputc(',', out);
|
|
||||||
for (const ArgumentDef &arg : f.arguments) {
|
|
||||||
fputc(' ', out);
|
|
||||||
generateTypeInfo(arg.normalizedType, allowEmptyName);
|
|
||||||
fputc(',', out);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parameter names
|
|
||||||
for (const ArgumentDef &arg : f.arguments)
|
|
||||||
fprintf(out, " %4d,", stridx(arg.name));
|
|
||||||
|
|
||||||
fprintf(out, "\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Generator::generateTypeInfo(const QByteArray &typeName, bool allowEmptyName)
|
void Generator::generateTypeInfo(const QByteArray &typeName, bool allowEmptyName)
|
||||||
{
|
{
|
||||||
@ -1074,65 +777,6 @@ void Generator::addProperties()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Generator::generateProperties()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Create meta data
|
|
||||||
//
|
|
||||||
|
|
||||||
if (cdef->propertyList.size())
|
|
||||||
fprintf(out, "\n // properties: name, type, flags, notifyId, revision\n");
|
|
||||||
for (const PropertyDef &p : std::as_const(cdef->propertyList)) {
|
|
||||||
uint flags = Invalid;
|
|
||||||
if (!isBuiltinType(p.type))
|
|
||||||
flags |= EnumOrFlag;
|
|
||||||
if (!p.member.isEmpty() && !p.constant)
|
|
||||||
flags |= Writable;
|
|
||||||
if (!p.read.isEmpty() || !p.member.isEmpty())
|
|
||||||
flags |= Readable;
|
|
||||||
if (!p.write.isEmpty()) {
|
|
||||||
flags |= Writable;
|
|
||||||
if (p.stdCppSet())
|
|
||||||
flags |= StdCppSet;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!p.reset.isEmpty())
|
|
||||||
flags |= Resettable;
|
|
||||||
|
|
||||||
if (p.designable != "false")
|
|
||||||
flags |= Designable;
|
|
||||||
|
|
||||||
if (p.scriptable != "false")
|
|
||||||
flags |= Scriptable;
|
|
||||||
|
|
||||||
if (p.stored != "false")
|
|
||||||
flags |= Stored;
|
|
||||||
|
|
||||||
if (p.user != "false")
|
|
||||||
flags |= User;
|
|
||||||
|
|
||||||
if (p.constant)
|
|
||||||
flags |= Constant;
|
|
||||||
if (p.final)
|
|
||||||
flags |= Final;
|
|
||||||
if (p.required)
|
|
||||||
flags |= Required;
|
|
||||||
|
|
||||||
if (!p.bind.isEmpty())
|
|
||||||
flags |= Bindable;
|
|
||||||
|
|
||||||
fprintf(out, " %4d, ", stridx(p.name));
|
|
||||||
generateTypeInfo(p.type);
|
|
||||||
int notifyId = p.notifyId;
|
|
||||||
if (p.notifyId < -1) {
|
|
||||||
// signal is in parent class
|
|
||||||
const int indexInStrings = int(strings.indexOf(p.notify));
|
|
||||||
notifyId = indexInStrings | IsUnresolvedSignal;
|
|
||||||
}
|
|
||||||
fprintf(out, ", 0x%.8x, uint(%d), %d,\n", flags, notifyId, p.revision);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Generator::registerEnumStrings()
|
void Generator::registerEnumStrings()
|
||||||
{
|
{
|
||||||
for (const EnumDef &e : std::as_const(cdef->enumList)) {
|
for (const EnumDef &e : std::as_const(cdef->enumList)) {
|
||||||
@ -1184,38 +828,6 @@ void Generator::addEnums()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Generator::generateEnums(int index)
|
|
||||||
{
|
|
||||||
if (cdef->enumDeclarations.isEmpty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
fprintf(out, "\n // enums: name, alias, flags, count, data\n");
|
|
||||||
index += QMetaObjectPrivate::IntsPerEnum * cdef->enumList.size();
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < cdef->enumList.size(); ++i) {
|
|
||||||
const EnumDef &e = cdef->enumList.at(i);
|
|
||||||
uint flags = e.flags | cdef->enumDeclarations.value(e.name);
|
|
||||||
fprintf(out, " %4d, %4d, 0x%.1x, %4d, %4d,\n",
|
|
||||||
stridx(e.name),
|
|
||||||
e.enumName.isNull() ? stridx(e.name) : stridx(e.enumName),
|
|
||||||
flags,
|
|
||||||
int(e.values.size()),
|
|
||||||
index);
|
|
||||||
index += e.values.size() * 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(out, "\n // enum data: key, value\n");
|
|
||||||
for (const EnumDef &e : std::as_const(cdef->enumList)) {
|
|
||||||
QByteArray prefix = cdef->qualified;
|
|
||||||
if (e.flags & EnumIsScoped)
|
|
||||||
prefix += "::" + (e.enumName.isNull() ? e.name : e.enumName);
|
|
||||||
for (const QByteArray &val : e.values) {
|
|
||||||
fprintf(out, " %4d, uint(%s::%s),\n",
|
|
||||||
stridx(val), prefix.constData(), val.constData());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Generator::generateMetacall()
|
void Generator::generateMetacall()
|
||||||
{
|
{
|
||||||
bool isQObject = (cdef->classname == "QObject");
|
bool isQObject = (cdef->classname == "QObject");
|
||||||
|
@ -26,22 +26,15 @@ public:
|
|||||||
private:
|
private:
|
||||||
bool registerableMetaType(const QByteArray &propertyType);
|
bool registerableMetaType(const QByteArray &propertyType);
|
||||||
void registerClassInfoStrings();
|
void registerClassInfoStrings();
|
||||||
void generateClassInfos();
|
|
||||||
void registerFunctionStrings(const QList<FunctionDef> &list);
|
void registerFunctionStrings(const QList<FunctionDef> &list);
|
||||||
void registerByteArrayVector(const QList<QByteArray> &list);
|
void registerByteArrayVector(const QList<QByteArray> &list);
|
||||||
void addProperties();
|
void addProperties();
|
||||||
void addEnums();
|
void addEnums();
|
||||||
void addFunctions(const QList<FunctionDef> &list, const char *functype);
|
void addFunctions(const QList<FunctionDef> &list, const char *functype);
|
||||||
void addClassInfos();
|
void addClassInfos();
|
||||||
void generateFunctions(const QList<FunctionDef> &list, const char *functype, int type,
|
|
||||||
int ¶msIndex, int &initialMetatypeOffset);
|
|
||||||
void generateFunctionRevisions(const QList<FunctionDef> &list, const char *functype);
|
|
||||||
void generateFunctionParameters(const QList<FunctionDef> &list, const char *functype);
|
|
||||||
void generateTypeInfo(const QByteArray &typeName, bool allowEmptyName = false);
|
void generateTypeInfo(const QByteArray &typeName, bool allowEmptyName = false);
|
||||||
void registerEnumStrings();
|
void registerEnumStrings();
|
||||||
void generateEnums(int index);
|
|
||||||
void registerPropertyStrings();
|
void registerPropertyStrings();
|
||||||
void generateProperties();
|
|
||||||
void generateMetacall();
|
void generateMetacall();
|
||||||
void generateStaticMetacall();
|
void generateStaticMetacall();
|
||||||
void generateSignal(const FunctionDef *def, int index);
|
void generateSignal(const FunctionDef *def, int index);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#ifndef OUTPUTREVISION_H
|
#ifndef OUTPUTREVISION_H
|
||||||
#define OUTPUTREVISION_H
|
#define OUTPUTREVISION_H
|
||||||
|
|
||||||
// if the output revision changes, you MUST change it in qobjectdefs.h too
|
// if the output revision changes, you MUST change it in qtmetamacros.h too
|
||||||
enum { mocOutputRevision = 68 }; // moc format output revision
|
enum { mocOutputRevision = 69 }; // moc format output revision
|
||||||
|
|
||||||
#endif // OUTPUTREVISION_H
|
#endif // OUTPUTREVISION_H
|
||||||
|
@ -15,6 +15,6 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "MetaType.h",
|
"inputFile": "MetaType.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -30,6 +30,6 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "MetaType.h",
|
"inputFile": "MetaType.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "backslash-newlines.h",
|
"inputFile": "backslash-newlines.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -41,7 +41,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "c-comments.h",
|
"inputFile": "c-comments.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -73,7 +73,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "cstyle-enums.h",
|
"inputFile": "cstyle-enums.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -306,7 +306,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "cxx11-enums.h",
|
"inputFile": "cxx11-enums.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -654,7 +654,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "cxx11-explicit-override-control.h",
|
"inputFile": "cxx11-explicit-override-control.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -768,7 +768,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "cxx11-final-classes.h",
|
"inputFile": "cxx11-final-classes.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -848,7 +848,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "cxx11-trailing-return.h",
|
"inputFile": "cxx11-trailing-return.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -886,7 +886,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "cxx17-namespaces.h",
|
"inputFile": "cxx17-namespaces.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -916,7 +916,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "dir-in-include-path.h",
|
"inputFile": "dir-in-include-path.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -934,7 +934,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "enum_with_include.h",
|
"inputFile": "enum_with_include.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -966,7 +966,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "escapes-in-string-literals.h",
|
"inputFile": "escapes-in-string-literals.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -1186,7 +1186,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "forward-declared-param.h",
|
"inputFile": "forward-declared-param.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -1218,7 +1218,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "function-with-attributes.h",
|
"inputFile": "function-with-attributes.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -1252,7 +1252,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "gadgetwithnoenums.h",
|
"inputFile": "gadgetwithnoenums.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -1288,7 +1288,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "grand-parent-gadget-class.h",
|
"inputFile": "grand-parent-gadget-class.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -1356,7 +1356,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "moc_include.h",
|
"inputFile": "moc_include.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -1422,7 +1422,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "namespace.h",
|
"inputFile": "namespace.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -1453,7 +1453,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "namespaced-base-class.h",
|
"inputFile": "namespaced-base-class.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -1541,7 +1541,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "namespaced-flags.h",
|
"inputFile": "namespaced-flags.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -1575,7 +1575,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "no-keywords.h",
|
"inputFile": "no-keywords.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -1593,7 +1593,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "non-gadget-parent-class.h",
|
"inputFile": "non-gadget-parent-class.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -1656,7 +1656,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "oldstyle-casts.h",
|
"inputFile": "oldstyle-casts.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -1878,7 +1878,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "parse-defines.h",
|
"inputFile": "parse-defines.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -1896,7 +1896,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "plugin_metadata.h",
|
"inputFile": "plugin_metadata.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -1993,7 +1993,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "pointery_to_incomplete.h",
|
"inputFile": "pointery_to_incomplete.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -2069,7 +2069,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "pure-virtual-signals.h",
|
"inputFile": "pure-virtual-signals.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -2138,7 +2138,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "qflags64object.h",
|
"inputFile": "qflags64object.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -2190,7 +2190,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "qinvokable.h",
|
"inputFile": "qinvokable.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -2228,7 +2228,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "qmlmacro.h",
|
"inputFile": "qmlmacro.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -2262,7 +2262,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "qprivateslots.h",
|
"inputFile": "qprivateslots.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -2284,7 +2284,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "qtbug-35657-gadget.h",
|
"inputFile": "qtbug-35657-gadget.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -2317,7 +2317,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "related-metaobjects-in-gadget.h",
|
"inputFile": "related-metaobjects-in-gadget.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -2372,7 +2372,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "related-metaobjects-in-namespaces.h",
|
"inputFile": "related-metaobjects-in-namespaces.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -2832,7 +2832,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "related-metaobjects-name-conflict.h",
|
"inputFile": "related-metaobjects-name-conflict.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -2871,7 +2871,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "signal-with-default-arg.h",
|
"inputFile": "signal-with-default-arg.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -2899,7 +2899,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "single-quote-digit-separator-n3781.h",
|
"inputFile": "single-quote-digit-separator-n3781.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -2973,7 +2973,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "slots-with-void-template.h",
|
"inputFile": "slots-with-void-template.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -2991,7 +2991,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "task192552.h",
|
"inputFile": "task192552.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -3021,7 +3021,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "task234909.h",
|
"inputFile": "task234909.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -3184,7 +3184,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "task240368.h",
|
"inputFile": "task240368.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -3202,7 +3202,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "task87883.h",
|
"inputFile": "task87883.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -3281,7 +3281,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "tech-preview.h",
|
"inputFile": "tech-preview.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"classes": [
|
"classes": [
|
||||||
@ -3360,6 +3360,6 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"inputFile": "trigraphs.h",
|
"inputFile": "trigraphs.h",
|
||||||
"outputRevision": 68
|
"outputRevision": 69
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -2599,13 +2599,11 @@ public Q_SLOTS:
|
|||||||
void someSlot2(int) {}
|
void someSlot2(int) {}
|
||||||
public:
|
public:
|
||||||
Q_INVOKABLE PrivateClass() {}
|
Q_INVOKABLE PrivateClass() {}
|
||||||
#ifdef QT_MOC_HAS_UINTDATA // access to private class' enums was fixed for Qt 6.9
|
|
||||||
enum SomeEnum {
|
enum SomeEnum {
|
||||||
Value0,
|
Value0,
|
||||||
Value1,
|
Value1,
|
||||||
};
|
};
|
||||||
Q_ENUM(SomeEnum)
|
Q_ENUM(SomeEnum)
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void tst_Moc::privateClass()
|
void tst_Moc::privateClass()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user