forked from qt-creator/qt-creator
CPlusPlus tools: Fix build
Catch up to recent refactorings. Change-Id: I14e8fa03a50ea4169ccdd41ed0d147d6ecb8af8b Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -280,9 +280,9 @@ protected:
|
|||||||
virtual bool visit(Declaration *symbol) {
|
virtual bool visit(Declaration *symbol) {
|
||||||
out << _id[symbol].constData() << " [label=\"";
|
out << _id[symbol].constData() << " [label=\"";
|
||||||
out << "Declaration\\n";
|
out << "Declaration\\n";
|
||||||
out << qPrintable(o(symbol->name()));
|
out << qPrintable(o.prettyName(symbol->name()));
|
||||||
out << ": ";
|
out << ": ";
|
||||||
out << qPrintable(o(symbol->type()));
|
out << qPrintable(o.prettyType(symbol->type()));
|
||||||
if (symbol->isDeprecated())
|
if (symbol->isDeprecated())
|
||||||
out << "\\n(deprecated)";
|
out << "\\n(deprecated)";
|
||||||
if (Function *funTy = symbol->type()->asFunctionType()) {
|
if (Function *funTy = symbol->type()->asFunctionType()) {
|
||||||
@@ -308,7 +308,7 @@ protected:
|
|||||||
|
|
||||||
virtual bool visit(BaseClass *symbol) {
|
virtual bool visit(BaseClass *symbol) {
|
||||||
out << _id[symbol].constData() << " [label=\"BaseClass\\n";
|
out << _id[symbol].constData() << " [label=\"BaseClass\\n";
|
||||||
out << qPrintable(o(symbol->name()));
|
out << qPrintable(o.prettyName(symbol->name()));
|
||||||
if (symbol->isDeprecated())
|
if (symbol->isDeprecated())
|
||||||
out << "\\n(deprecated)";
|
out << "\\n(deprecated)";
|
||||||
out << "\"];" << std::endl;
|
out << "\"];" << std::endl;
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ class MkVisitor: protected SymbolVisitor
|
|||||||
bool isMiscNode(ClassOrNamespace *b) const
|
bool isMiscNode(ClassOrNamespace *b) const
|
||||||
{
|
{
|
||||||
for (const ClassOrNamespace *u : b->usings()) {
|
for (const ClassOrNamespace *u : b->usings()) {
|
||||||
if (oo(u->symbols().first()->name()) == QLatin1String("AST"))
|
if (oo.prettyName(u->symbols().first()->name()) == QLatin1String("AST"))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ class MkVisitor: protected SymbolVisitor
|
|||||||
retType->clear();
|
retType->clear();
|
||||||
|
|
||||||
if (interfaces.contains(b) || isMiscNode(b)) {
|
if (interfaces.contains(b) || isMiscNode(b)) {
|
||||||
QString className = oo(b->symbols().first()->name());
|
QString className = oo.prettyName(b->symbols().first()->name());
|
||||||
|
|
||||||
if (className.endsWith(QLatin1String("AST"))) {
|
if (className.endsWith(QLatin1String("AST"))) {
|
||||||
className.chop(3);
|
className.chop(3);
|
||||||
@@ -114,7 +114,7 @@ public:
|
|||||||
|
|
||||||
Q_ASSERT(klass != 0);
|
Q_ASSERT(klass != 0);
|
||||||
|
|
||||||
QString className = oo(klass->name());
|
QString className = oo.prettyName(klass->name());
|
||||||
if (className == QLatin1String("AST"))
|
if (className == QLatin1String("AST"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -162,7 +162,7 @@ public:
|
|||||||
Q_ASSERT(klass != 0);
|
Q_ASSERT(klass != 0);
|
||||||
|
|
||||||
QString retTy ;
|
QString retTy ;
|
||||||
QString className = oo(klass->name());
|
QString className = oo.prettyName(klass->name());
|
||||||
std::cout << " void " << qPrintable(getAcceptFunctionName(b, &retTy)) << "(" << qPrintable(className) << " *ast);" << std::endl;
|
std::cout << " void " << qPrintable(getAcceptFunctionName(b, &retTy)) << "(" << qPrintable(className) << " *ast);" << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -170,7 +170,8 @@ public:
|
|||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
|
|
||||||
for (ClassOrNamespace *iface : std::as_const(interfaces)) {
|
for (ClassOrNamespace *iface : std::as_const(interfaces)) {
|
||||||
std::cout << " // " << qPrintable(oo(iface->symbols().first()->name())) << std::endl;
|
std::cout << " // " << qPrintable(oo.prettyName(iface->symbols().first()->name()))
|
||||||
|
<< std::endl;
|
||||||
const QList<ClassOrNamespace *> values = implements.value(iface);
|
const QList<ClassOrNamespace *> values = implements.value(iface);
|
||||||
for (ClassOrNamespace *b : values) {
|
for (ClassOrNamespace *b : values) {
|
||||||
Class *klass = 0;
|
Class *klass = 0;
|
||||||
@@ -180,7 +181,7 @@ public:
|
|||||||
|
|
||||||
Q_ASSERT(klass != 0);
|
Q_ASSERT(klass != 0);
|
||||||
|
|
||||||
QString className = oo(klass->name());
|
QString className = oo.prettyName(klass->name());
|
||||||
std::cout << " virtual bool visit(" << qPrintable(className) << " *ast);" << std::endl;
|
std::cout << " virtual bool visit(" << qPrintable(className) << " *ast);" << std::endl;
|
||||||
}
|
}
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
@@ -197,7 +198,7 @@ public:
|
|||||||
|
|
||||||
Q_ASSERT(klass != 0);
|
Q_ASSERT(klass != 0);
|
||||||
|
|
||||||
QString className = oo(klass->name());
|
QString className = oo.prettyName(klass->name());
|
||||||
if (className == QLatin1String("AST"))
|
if (className == QLatin1String("AST"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -230,7 +231,7 @@ public:
|
|||||||
|
|
||||||
Q_ASSERT(klass != 0);
|
Q_ASSERT(klass != 0);
|
||||||
|
|
||||||
QString className = oo(klass->name());
|
QString className = oo.prettyName(klass->name());
|
||||||
if (className == QLatin1String("AST"))
|
if (className == QLatin1String("AST"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -256,7 +257,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (ClassOrNamespace *iface : std::as_const(interfaces)) {
|
for (ClassOrNamespace *iface : std::as_const(interfaces)) {
|
||||||
std::cout << "// " << qPrintable(oo(iface->symbols().first()->name())) << std::endl;
|
std::cout << "// " << qPrintable(oo.prettyName(iface->symbols().first()->name())) << std::endl;
|
||||||
const QList<ClassOrNamespace *> values = implements.value(iface);
|
const QList<ClassOrNamespace *> values = implements.value(iface);
|
||||||
for (ClassOrNamespace *b : values) {
|
for (ClassOrNamespace *b : values) {
|
||||||
Class *klass = 0;
|
Class *klass = 0;
|
||||||
@@ -266,7 +267,7 @@ public:
|
|||||||
|
|
||||||
Q_ASSERT(klass != 0);
|
Q_ASSERT(klass != 0);
|
||||||
|
|
||||||
QString className = oo(klass->name());
|
QString className = oo.prettyName(klass->name());
|
||||||
std::cout << "bool Semantic::visit(" << qPrintable(className) << " *ast)" << std::endl
|
std::cout << "bool Semantic::visit(" << qPrintable(className) << " *ast)" << std::endl
|
||||||
<< "{" << std::endl;
|
<< "{" << std::endl;
|
||||||
|
|
||||||
@@ -293,12 +294,12 @@ public:
|
|||||||
Declaration *decl = klass->memberAt(i)->asDeclaration();
|
Declaration *decl = klass->memberAt(i)->asDeclaration();
|
||||||
if (! decl)
|
if (! decl)
|
||||||
continue;
|
continue;
|
||||||
if (decl->type()->isFunctionType())
|
if (decl->type()->asFunctionType())
|
||||||
continue;
|
continue;
|
||||||
const QString declName = oo(decl->name());
|
const QString declName = oo.prettyName(decl->name());
|
||||||
if (PointerType *ptrTy = decl->type()->asPointerType()) {
|
if (PointerType *ptrTy = decl->type()->asPointerType()) {
|
||||||
if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) {
|
if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) {
|
||||||
const QString eltTyName = oo(namedTy->name());
|
const QString eltTyName = oo.prettyName(namedTy->name());
|
||||||
if (eltTyName.endsWith(QLatin1String("ListAST"))) {
|
if (eltTyName.endsWith(QLatin1String("ListAST"))) {
|
||||||
QString name = eltTyName;
|
QString name = eltTyName;
|
||||||
name.chop(7);
|
name.chop(7);
|
||||||
@@ -327,7 +328,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ClassOrNamespace *ty = context.lookupType(namedTy->name(), klass)) {
|
if (ClassOrNamespace *ty = context.lookupType(namedTy->name(), klass)) {
|
||||||
QString className = oo(ty->symbols().first()->name());
|
QString className = oo.prettyName(ty->symbols().first()->name());
|
||||||
QString baseClassName = className;
|
QString baseClassName = className;
|
||||||
if (baseClassName.endsWith(QLatin1String("AST"))) {
|
if (baseClassName.endsWith(QLatin1String("AST"))) {
|
||||||
baseClassName.chop(3);
|
baseClassName.chop(3);
|
||||||
@@ -370,7 +371,7 @@ protected:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual bool visit(Class *klass) {
|
virtual bool visit(Class *klass) {
|
||||||
const QString className = oo(klass->name());
|
const QString className = oo.prettyName(klass->name());
|
||||||
if (! className.endsWith(QLatin1String("AST")))
|
if (! className.endsWith(QLatin1String("AST")))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ protected:
|
|||||||
Class *klass = ast->symbol;
|
Class *klass = ast->symbol;
|
||||||
Q_ASSERT(klass != nullptr);
|
Q_ASSERT(klass != nullptr);
|
||||||
|
|
||||||
const QString className = oo(klass->name());
|
const QString className = oo.prettyName(klass->name());
|
||||||
|
|
||||||
if (className.endsWith(QLatin1String("AST"))) {
|
if (className.endsWith(QLatin1String("AST"))) {
|
||||||
if (className == QLatin1String("AST"))
|
if (className == QLatin1String("AST"))
|
||||||
@@ -271,7 +271,7 @@ protected:
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
const QByteArray memberName = QByteArray::fromRawData(id->chars(), id->size());
|
const QByteArray memberName = QByteArray::fromRawData(id->chars(), id->size());
|
||||||
if (member->type()->isIntegerType() && memberName.endsWith("_token")) {
|
if (member->type()->asIntegerType() && memberName.endsWith("_token")) {
|
||||||
// nothing to do. The member is a token.
|
// nothing to do. The member is a token.
|
||||||
|
|
||||||
} else if (PointerType *ptrTy = member->type()->asPointerType()) {
|
} else if (PointerType *ptrTy = member->type()->asPointerType()) {
|
||||||
@@ -394,7 +394,7 @@ protected:
|
|||||||
void visitMembers(Class *klass)
|
void visitMembers(Class *klass)
|
||||||
{
|
{
|
||||||
Overview oo;
|
Overview oo;
|
||||||
const QString className = oo(klass->name());
|
const QString className = oo.prettyName(klass->name());
|
||||||
|
|
||||||
*out << " if (" << className << " *_other = pattern->as"
|
*out << " if (" << className << " *_other = pattern->as"
|
||||||
<< className.left(className.length() - 3) << "())" << Qt::endl;
|
<< className.left(className.length() - 3) << "())" << Qt::endl;
|
||||||
@@ -518,7 +518,7 @@ protected:
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
const QByteArray memberName = QByteArray::fromRawData(id->chars(), id->size());
|
const QByteArray memberName = QByteArray::fromRawData(id->chars(), id->size());
|
||||||
if (member->type()->isIntegerType() && memberName.endsWith("_token")) {
|
if (member->type()->asIntegerType() && memberName.endsWith("_token")) {
|
||||||
*out << " pattern->" << memberName << " = node->" << memberName << ";" << Qt::endl
|
*out << " pattern->" << memberName << " = node->" << memberName << ";" << Qt::endl
|
||||||
<< Qt::endl;
|
<< Qt::endl;
|
||||||
|
|
||||||
@@ -657,7 +657,7 @@ protected:
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
const QByteArray memberName = QByteArray::fromRawData(id->chars(), id->size());
|
const QByteArray memberName = QByteArray::fromRawData(id->chars(), id->size());
|
||||||
if (member->type()->isIntegerType() && memberName.endsWith("_token")) {
|
if (member->type()->asIntegerType() && memberName.endsWith("_token")) {
|
||||||
*out << " ast->" << memberName << " = " << memberName << ";" << Qt::endl;
|
*out << " ast->" << memberName << " = " << memberName << ";" << Qt::endl;
|
||||||
} else if (PointerType *ptrTy = member->type()->asPointerType()) {
|
} else if (PointerType *ptrTy = member->type()->asPointerType()) {
|
||||||
if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) {
|
if (NamedType *namedTy = ptrTy->elementType()->asNamedType()) {
|
||||||
@@ -789,7 +789,7 @@ protected:
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
const QByteArray memberName = QByteArray::fromRawData(id->chars(), id->size());
|
const QByteArray memberName = QByteArray::fromRawData(id->chars(), id->size());
|
||||||
if (member->type()->isIntegerType() && memberName.endsWith("_token")) {
|
if (member->type()->asIntegerType() && memberName.endsWith("_token")) {
|
||||||
out << " if (ast->" << memberName << ")" << Qt::endl;
|
out << " if (ast->" << memberName << ")" << Qt::endl;
|
||||||
out << " terminal(ast->" << memberName << ", ast);" << Qt::endl;
|
out << " terminal(ast->" << memberName << ", ast);" << Qt::endl;
|
||||||
} else if (PointerType *ptrTy = member->type()->asPointerType()) {
|
} else if (PointerType *ptrTy = member->type()->asPointerType()) {
|
||||||
@@ -881,7 +881,7 @@ protected:
|
|||||||
virtual bool visit(FunctionDefinitionAST *ast)
|
virtual bool visit(FunctionDefinitionAST *ast)
|
||||||
{
|
{
|
||||||
Function *fun = ast->symbol;
|
Function *fun = ast->symbol;
|
||||||
const QString functionName = oo(fun->name());
|
const QString functionName = oo.prettyName(fun->name());
|
||||||
|
|
||||||
if (functionName.length() > 3 && functionName.startsWith(QLatin1String("as"))
|
if (functionName.length() > 3 && functionName.startsWith(QLatin1String("as"))
|
||||||
&& functionName.at(2).isUpper()) {
|
&& functionName.at(2).isUpper()) {
|
||||||
@@ -909,18 +909,18 @@ static QStringList collectFieldNames(ClassSpecifierAST *classAST, bool onlyToken
|
|||||||
for (int i = 0; i < clazz->memberCount(); ++i) {
|
for (int i = 0; i < clazz->memberCount(); ++i) {
|
||||||
Symbol *s = clazz->memberAt(i);
|
Symbol *s = clazz->memberAt(i);
|
||||||
if (Declaration *decl = s->asDeclaration()) {
|
if (Declaration *decl = s->asDeclaration()) {
|
||||||
const QString declName = oo(decl->name());
|
const QString declName = oo.prettyName(decl->name());
|
||||||
const FullySpecifiedType ty = decl->type();
|
const FullySpecifiedType ty = decl->type();
|
||||||
if (const PointerType *ptrTy = ty->asPointerType()) {
|
if (const PointerType *ptrTy = ty->asPointerType()) {
|
||||||
if (onlyTokensAndASTNodes) {
|
if (onlyTokensAndASTNodes) {
|
||||||
if (const NamedType *namedTy = ptrTy->elementType()->asNamedType()) {
|
if (const NamedType *namedTy = ptrTy->elementType()->asNamedType()) {
|
||||||
if (oo(namedTy->name()).endsWith(QLatin1String("AST")))
|
if (oo.prettyName(namedTy->name()).endsWith(QLatin1String("AST")))
|
||||||
fields.append(declName);
|
fields.append(declName);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fields.append(declName);
|
fields.append(declName);
|
||||||
}
|
}
|
||||||
} else if (ty->isIntegerType()) {
|
} else if (ty->asIntegerType()) {
|
||||||
fields.append(declName);
|
fields.append(declName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1021,7 +1021,7 @@ void generateAST_cpp(const Snapshot &snapshot, const QDir &cplusplusDir)
|
|||||||
|
|
||||||
// find all classes with method declarations for firstToken/lastToken
|
// find all classes with method declarations for firstToken/lastToken
|
||||||
for (ClassSpecifierAST *classAST : std::as_const(astNodes.deriveds)) {
|
for (ClassSpecifierAST *classAST : std::as_const(astNodes.deriveds)) {
|
||||||
const QString className = oo(classAST->symbol->name());
|
const QString className = oo.prettyName(classAST->symbol->name());
|
||||||
if (className.isEmpty())
|
if (className.isEmpty())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -1032,7 +1032,7 @@ void generateAST_cpp(const Snapshot &snapshot, const QDir &cplusplusDir)
|
|||||||
std::cerr << "Found simple declaration with multiple symbols in " << className.toLatin1().data() << std::endl;
|
std::cerr << "Found simple declaration with multiple symbols in " << className.toLatin1().data() << std::endl;
|
||||||
|
|
||||||
Symbol *s = decl->symbols->value;
|
Symbol *s = decl->symbols->value;
|
||||||
const QString funName = oo(s->name());
|
const QString funName = oo.prettyName(s->name());
|
||||||
if (funName == QLatin1String("firstToken")) {
|
if (funName == QLatin1String("firstToken")) {
|
||||||
// found it:
|
// found it:
|
||||||
classesNeedingFirstToken.insert(className, classAST);
|
classesNeedingFirstToken.insert(className, classAST);
|
||||||
@@ -1052,8 +1052,8 @@ void generateAST_cpp(const Snapshot &snapshot, const QDir &cplusplusDir)
|
|||||||
if (FunctionDefinitionAST *funDef = iter->value->asFunctionDefinition()) {
|
if (FunctionDefinitionAST *funDef = iter->value->asFunctionDefinition()) {
|
||||||
if (const Name *name = funDef->symbol->name()) {
|
if (const Name *name = funDef->symbol->name()) {
|
||||||
if (const QualifiedNameId *qName = name->asQualifiedNameId()) {
|
if (const QualifiedNameId *qName = name->asQualifiedNameId()) {
|
||||||
const QString className = oo(qName->base());
|
const QString className = oo.prettyName(qName->base());
|
||||||
const QString methodName = oo(qName->name());
|
const QString methodName = oo.prettyName(qName->name());
|
||||||
|
|
||||||
QTextCursor cursor(&cpp_document);
|
QTextCursor cursor(&cpp_document);
|
||||||
|
|
||||||
@@ -1121,7 +1121,7 @@ void generateAST_cpp(const Snapshot &snapshot, const QDir &cplusplusDir)
|
|||||||
|
|
||||||
Overview oo;
|
Overview oo;
|
||||||
|
|
||||||
const QString className = oo(info.classAST->symbol->name());
|
const QString className = oo.prettyName(info.classAST->symbol->name());
|
||||||
|
|
||||||
QString method;
|
QString method;
|
||||||
QTextStream os(&method);
|
QTextStream os(&method);
|
||||||
@@ -1320,7 +1320,7 @@ QStringList generateAST_H(const Snapshot &snapshot, const QDir &cplusplusDir, co
|
|||||||
QStringList castMethods;
|
QStringList castMethods;
|
||||||
for (ClassSpecifierAST *classAST : std::as_const(astNodes.deriveds)) {
|
for (ClassSpecifierAST *classAST : std::as_const(astNodes.deriveds)) {
|
||||||
cursors[classAST] = removeCastMethods(classAST);
|
cursors[classAST] = removeCastMethods(classAST);
|
||||||
const QString className = oo(classAST->symbol->name());
|
const QString className = oo.prettyName(classAST->symbol->name());
|
||||||
const QString methodName = QLatin1String("as") + className.mid(0, className.length() - 3);
|
const QString methodName = QLatin1String("as") + className.mid(0, className.length() - 3);
|
||||||
replacementCastMethods[classAST]
|
replacementCastMethods[classAST]
|
||||||
= QString::fromLatin1(" virtual %1 *%2() { return this; }\n")
|
= QString::fromLatin1(" virtual %1 *%2() { return this; }\n")
|
||||||
@@ -1401,7 +1401,7 @@ protected:
|
|||||||
|
|
||||||
if (ElaboratedTypeSpecifierAST *e = ast->decl_specifier_list->value->asElaboratedTypeSpecifier()) {
|
if (ElaboratedTypeSpecifierAST *e = ast->decl_specifier_list->value->asElaboratedTypeSpecifier()) {
|
||||||
if (tokenKind(e->classkey_token) == T_CLASS && !ast->declarator_list) {
|
if (tokenKind(e->classkey_token) == T_CLASS && !ast->declarator_list) {
|
||||||
QString className = oo(e->name->name);
|
QString className = oo.prettyName(e->name->name);
|
||||||
|
|
||||||
if (className.length() > 3 && className.endsWith(QLatin1String("AST"))) {
|
if (className.length() > 3 && className.endsWith(QLatin1String("AST"))) {
|
||||||
QTextCursor tc = createCursor(translationUnit(), ast, document);
|
QTextCursor tc = createCursor(translationUnit(), ast, document);
|
||||||
@@ -1499,7 +1499,7 @@ void generateASTPatternBuilder_h(const QDir &cplusplusDir)
|
|||||||
if (! match0Method)
|
if (! match0Method)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const QString className = oo(klass->name());
|
const QString className = oo.prettyName(klass->name());
|
||||||
|
|
||||||
if (! className.endsWith(QLatin1String("AST")))
|
if (! className.endsWith(QLatin1String("AST")))
|
||||||
continue;
|
continue;
|
||||||
@@ -1521,14 +1521,14 @@ void generateASTPatternBuilder_h(const QDir &cplusplusDir)
|
|||||||
if (! ptrTy)
|
if (! ptrTy)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const QString tyName = oo(ptrTy->elementType());
|
const QString tyName = oo.prettyType(ptrTy->elementType());
|
||||||
if (tyName.endsWith(QLatin1String("ListAST")))
|
if (tyName.endsWith(QLatin1String("ListAST")))
|
||||||
classesSet.insert(tyName);
|
classesSet.insert(tyName);
|
||||||
if (tyName.endsWith(QLatin1String("AST"))) {
|
if (tyName.endsWith(QLatin1String("AST"))) {
|
||||||
if (! first)
|
if (! first)
|
||||||
out << ", ";
|
out << ", ";
|
||||||
|
|
||||||
const QString memberName = oo(member->name());
|
const QString memberName = oo.prettyName(member->name());
|
||||||
|
|
||||||
out << tyName << " *" << memberName << " = nullptr";
|
out << tyName << " *" << memberName << " = nullptr";
|
||||||
args.append(qMakePair(tyName, memberName));
|
args.append(qMakePair(tyName, memberName));
|
||||||
|
|||||||
Reference in New Issue
Block a user