[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [smokegen] generators/smoke: handle QFlags references as if they were normal uints.
From:       Arno Rehn <arno () arnorehn ! de>
Date:       2012-05-31 18:44:15
Message-ID: 20120531184415.4D1ABA60A9 () git ! kde ! org
[Download RAW message or body]

Git commit b295439071bca5dd29d9096cb8d372ade2f3c3be by Arno Rehn.
Committed on 31/05/2012 at 20:43.
Pushed by arnorehn into branch 'master'.

handle QFlags references as if they were normal uints.

M  +4    -5    generators/smoke/helpers.cpp
M  +13   -6    generators/smoke/writeSmokeDataFile.cpp

http://commits.kde.org/smokegen/b295439071bca5dd29d9096cb8d372ade2f3c3be

diff --git a/generators/smoke/helpers.cpp b/generators/smoke/helpers.cpp
index b15791d..a76ed54 100644
--- a/generators/smoke/helpers.cpp
+++ b/generators/smoke/helpers.cpp
@@ -472,7 +472,7 @@ QChar Util::munge(const Type *type) {
         // reference to array or hash or unknown
         return '?';
     } else if (type->isIntegral() || type->getEnum() || \
                Options::scalarTypes.contains(type->name()) ||
-                (Options::qtMode && !type->isRef() && type->pointerDepth() == 0 &&
+                (Options::qtMode && type->pointerDepth() == 0 &&
                 (type->getClass() && type->getClass()->isTemplate() && \
type->getClass()->name() == "QFlags")))  {
         // plain scalar
@@ -516,7 +516,7 @@ QString Util::stackItemField(const Type* type)
         return stackItemField(&resolved);
     }
 
-    if (Options::qtMode && !type->isRef() && type->pointerDepth() == 0 &&
+    if (Options::qtMode && type->pointerDepth() == 0 &&
         type->getClass() && type->getClass()->isTemplate() && \
type->getClass()->name() == "QFlags")  {
         return "s_uint";
@@ -555,15 +555,14 @@ QString Util::assignmentString(const Type* type, const QString& \
var)  
     if (type->pointerDepth() > 0 || type->isFunctionPointer()) {
         return "(void*)" + var;
+    } else if (Options::qtMode && type->getClass() && type->getClass()->isTemplate() \
&& type->getClass()->name() == "QFlags") { +        return "(uint)" + var;
     } else if (type->isRef()) {
         return "(void*)&" + var;
     } else if (type->isIntegral() && !Options::voidpTypes.contains(type->name())) {
         return var;
     } else if (type->getEnum()) {
         return var;
-    } else if (Options::qtMode && type->getClass() && type->getClass()->isTemplate() \
                && type->getClass()->name() == "QFlags")
-    {
-        return "(uint)" + var;
     } else {
         QString ret = "(void*)new " + type->toString();
         ret += '(' + var + ')';
diff --git a/generators/smoke/writeSmokeDataFile.cpp \
b/generators/smoke/writeSmokeDataFile.cpp index 6c15fd9..2445e6d 100644
--- a/generators/smoke/writeSmokeDataFile.cpp
+++ b/generators/smoke/writeSmokeDataFile.cpp
@@ -118,7 +118,7 @@ QString SmokeDataFile::getTypeFlags(const Type *t, int *classIdx)
         flags += "|Smoke::t_voidp";
     } else if (t->getClass()) {
         if (t->getClass()->isTemplate()) {
-            if (Options::qtMode && t->getClass()->name() == "QFlags" && !t->isRef() \
&& t->pointerDepth() == 0) { +            if (Options::qtMode && \
t->getClass()->name() == "QFlags" && t->pointerDepth() == 0) {  flags += \
"|Smoke::t_uint";  } else {
                 flags += "|Smoke::t_voidp";
@@ -157,14 +157,21 @@ QString SmokeDataFile::getTypeFlags(const Type *t, int \
*classIdx)  flags += "|Smoke::t_voidp";
     }
 
-    if (t->isRef())
-        flags += "|Smoke::tf_ref";
-    if (t->pointerDepth() > 0)
-        flags += "|Smoke::tf_ptr";
-    if (!t->isRef() && t->pointerDepth() == 0)
+    // special case QFlags references
+    if (Options::qtMode && t->pointerDepth() == 0 && t->getClass() && \
t->getClass()->isTemplate() && t->getClass()->name() == "QFlags") {  flags += \
"|Smoke::tf_stack"; +    } else {
+        if (t->isRef())
+            flags += "|Smoke::tf_ref";
+        if (t->pointerDepth() > 0)
+            flags += "|Smoke::tf_ptr";
+        if (!t->isRef() && t->pointerDepth() == 0)
+            flags += "|Smoke::tf_stack";
+    }
+
     if (t->isConst())
         flags += "|Smoke::tf_const";
+
     flags.replace("0|", "");
 
     return flags;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic