[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-bindings
Subject: [Kde-bindings] KDE/kdebindings
From: Arno Rehn <kde () arnorehn ! de>
Date: 2010-04-22 16:37:43
Message-ID: 20100422163743.ACA5CAC8A0 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1117631 by arnorehn:
Properly resolve QFlags. This shouldn't cause any trouble, but could need some \
testing.
CCMAIL: kde-bindings@kde.org
M +9 -4 generator/generators/smoke/helpers.cpp
M +5 -1 generator/generators/smoke/writeSmokeDataFile.cpp
M +13 -0 generator/generatorvisitor.cpp
M +1 -1 generator/type_compiler.cpp
M +1 -1 smoke/kio/smokeconfig.xml
--- trunk/KDE/kdebindings/generator/generators/smoke/helpers.cpp #1117630:1117631
@@ -456,7 +456,7 @@
QString ret = meth.name();
foreach (const Parameter& param, meth.parameters()) {
const Type* type = param.type();
- if (type->pointerDepth() > 1 || (type->getClass() && \
type->getClass()->isTemplate()) || + if (type->pointerDepth() > 1 || \
(type->getClass() && type->getClass()->isTemplate() && (!Options::qtMode || \
(Options::qtMode && type->getClass()->name() != "QFlags"))) ||
(Options::voidpTypes.contains(type->name()) && \
!Options::scalarTypes.contains(type->name())) ) {
// QString and QStringList are both mapped to Smoke::t_voidp, but \
QString is a scalar as well @@ -465,7 +465,9 @@
// reference to array or hash or unknown
ret += "?";
} else if (type->isIntegral() || type->getEnum() || \
Options::scalarTypes.contains(type->name()) ||
- (Options::qtMode && !type->isRef() && type->getTypedef() && \
flagTypes.contains(type->getTypedef())) ) + (Options::qtMode && \
!type->isRef() && type->pointerDepth() == 0 && + \
(type->getTypedef() && flagTypes.contains(type->getTypedef())) || + \
(type->getClass() && type->getClass()->isTemplate() && type->getClass()->name() == \
"QFlags"))) {
// plain scalar
ret += "$";
@@ -483,7 +485,8 @@
QString Util::stackItemField(const Type* type)
{
if (Options::qtMode && !type->isRef() && type->pointerDepth() == 0 &&
- type->getTypedef() && flagTypes.contains(type->getTypedef()))
+ ((type->getTypedef() && flagTypes.contains(type->getTypedef()))
+ || (type->getClass() && type->getClass()->isTemplate() && \
type->getClass()->name() == "QFlags"))) {
return "s_uint";
}
@@ -522,7 +525,9 @@
return var;
} else if (type->getEnum()) {
return var;
- } else if (Options::qtMode && type->getTypedef() && \
flagTypes.contains(type->getTypedef())) { + } else if (Options::qtMode && ( \
(type->getTypedef() && flagTypes.contains(type->getTypedef())) + \
|| (type->getClass() && type->getClass()->isTemplate() && type->getClass()->name() == \
"QFlags"))) + {
return "(uint)" + var;
} else {
QString ret = "(void*)new " + type->toString();
--- trunk/KDE/kdebindings/generator/generators/smoke/writeSmokeDataFile.cpp \
#1117630:1117631 @@ -316,7 +316,11 @@
flags += "|Smoke::t_voidp";
} else if (t->getClass()) {
if (t->getClass()->isTemplate()) {
- flags += "|Smoke::t_voidp";
+ if (Options::qtMode && t->getClass()->name() == "QFlags") {
+ flags += "|Smoke::t_uint";
+ } else {
+ flags += "|Smoke::t_voidp";
+ }
} else {
flags += "|Smoke::t_class";
classIdx = classIndex.value(t->getClass()->toString(), 0);
--- trunk/KDE/kdebindings/generator/generatorvisitor.cpp #1117630:1117631
@@ -104,6 +104,19 @@
// TODO: this might have to be improved for cases like 'Typedef::Nested foo'
BasicTypeDeclaration* GeneratorVisitor::resolveType(QString & name)
{
+ if (ParserOptions::qtMode && name.endsWith("::enum_type")) {
+ // strip off "::enum_type"
+ QString flags = name.left(name.length() - 11);
+ QHash<QString, Typedef>::iterator it = typedefs.find(flags);
+ if (it != typedefs.end()) {
+ QString enumType = \
it.value().resolve().toString().replace(QRegExp("QFlags<(.*)>"), "\\1"); + \
QHash<QString, Enum>::iterator it = enums.find(enumType); + if (it != \
enums.end()) { + return &it.value();
+ }
+ }
+ }
+
// check for 'using type;'
// if we use 'type', we can also access type::nested, take care of that
int index = name.indexOf("::");
--- trunk/KDE/kdebindings/generator/type_compiler.cpp #1117630:1117631
@@ -123,7 +123,7 @@
if ((klass = dynamic_cast<Class*>(type))) {
m_realType = Type(klass, isConstant(), isVolatile());
} else if ((tdef = dynamic_cast<Typedef*>(type))) {
- if (!ParserOptions::resolveTypedefs || (ParserOptions::qtMode && \
flagTypes.contains(tdef)) ) { + if (!ParserOptions::resolveTypedefs) {
m_realType = Type(tdef);
} else {
m_realType = tdef->resolve();
--- trunk/KDE/kdebindings/smoke/kio/smokeconfig.xml #1117630:1117631
@@ -34,7 +34,7 @@
<!-- operator(<<|>>)(QDataStream&, KDateTime*) - why are these operators not \
implemented/exported? -->
<signature>.*operator(<<|>>)\(QDataStream&, \
(const\s)?KDateTime.*</signature>
- <signature>.*KIO::file_move\(const KUrl&, const KUrl&, \
KIO::JobFlags.*</signature> + <signature>.*KIO::file_move\(const KUrl&, \
const KUrl&, QFlags<KIO::JobFlag>.*</signature> \
<signature>.*KIO::buildHTMLErrorString\(.*</signature> </exclude>
<functions>
_______________________________________________
Kde-bindings mailing list
Kde-bindings@kde.org
https://mail.kde.org/mailman/listinfo/kde-bindings
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic