[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(&lt;&lt;|&gt;&gt;)\(QDataStream&amp;, \
(const\s)?KDateTime.*</signature>  
-        <signature>.*KIO::file_move\(const KUrl&amp;, const KUrl&amp;, \
KIO::JobFlags.*</signature> +        <signature>.*KIO::file_move\(const KUrl&amp;, \
const KUrl&amp;, QFlags&lt;KIO::JobFlag&gt;.*</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