desktop/kdebindings-smokegen/fix.patch
2012-06-10 14:53:07 +00:00

79 lines
3.2 KiB
Diff

--- 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*
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 Typ
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 + ')';
--- a/generators/smoke/writeSmokeDataFile.cpp
+++ b/generators/smoke/writeSmokeDataFile.cpp
@@ -118,7 +118,7 @@ QString SmokeDataFile::getTypeFlags(cons
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(cons
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;