Skip to content

Commit 7c9d965

Browse files
author
florianlink
committed
improved __nonzero__ behaviour
git-svn-id: http://svn.code.sf.net/p/pythonqt/code/trunk@439 ea8d5007-eb21-0410-b261-ccb3ea6e24a9
1 parent ec5d8e0 commit 7c9d965

File tree

4 files changed

+19
-7
lines changed

4 files changed

+19
-7
lines changed

generator/abstractmetalang.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -838,11 +838,21 @@ AbstractMetaFunctionList AbstractMetaClass::queryFunctionsByName(const QString &
838838
return returned;
839839
}
840840

841-
bool AbstractMetaClass::hasDefaultIsNull() const
841+
QString AbstractMetaClass::getDefaultNonZeroFunction() const
842842
{
843+
foreach(const AbstractMetaFunction* fun, queryFunctionsByName("isEmpty")) {
844+
if (fun->actualMinimumArgumentCount()==0 && fun->isPublic()) {
845+
return "isEmpty";
846+
}
847+
}
848+
foreach(const AbstractMetaFunction* fun, queryFunctionsByName("isValid")) {
849+
if (fun->actualMinimumArgumentCount() == 0 && fun->isPublic()) {
850+
return "isValid";
851+
}
852+
}
843853
foreach(const AbstractMetaFunction* fun, queryFunctionsByName("isNull")) {
844-
if (fun->actualMinimumArgumentCount()==0) {
845-
return true;
854+
if (fun->actualMinimumArgumentCount() == 0 && fun->isPublic()) {
855+
return "isNull";
846856
}
847857
}
848858
return false;

generator/abstractmetalang.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -800,7 +800,8 @@ class AbstractMetaClass : public AbstractMetaAttributes
800800
void setHasCloneOperator(bool on) { m_has_clone_operator = on; }
801801
bool hasCloneOperator() const { return m_has_clone_operator; }
802802

803-
bool hasDefaultIsNull() const;
803+
QString getDefaultNonZeroFunction() const;
804+
804805
void addPropertySpec(QPropertySpec *spec) { m_property_specs << spec; }
805806
QList<QPropertySpec *> propertySpecs() const { return m_property_specs; }
806807

generator/setupgenerator.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ static QStringList getOperatorCodes(const AbstractMetaClass* cls) {
105105
r.insert("PythonQt::Type_InplaceXor");
106106
}
107107
}
108-
if (cls->hasDefaultIsNull()) {
108+
if (!cls->getDefaultNonZeroFunction().isEmpty()) {
109109
r.insert("PythonQt::Type_NonZero");
110110
}
111111

generator/shellheadergenerator.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -395,8 +395,9 @@ void ShellHeaderGenerator::write(QTextStream &s, const AbstractMetaClass *meta_c
395395
if (meta_class->hasDefaultToStringFunction() || meta_class->hasToStringCapability()) {
396396
s << " QString py_toString(" << meta_class->qualifiedCppName() << "*);" << endl;
397397
}
398-
if (meta_class->hasDefaultIsNull()) {
399-
s << " bool __nonzero__(" << meta_class->qualifiedCppName() << "* obj) { return !obj->isNull(); }" << endl;
398+
QString nonZeroFunc = meta_class->getDefaultNonZeroFunction();
399+
if (!nonZeroFunc.isEmpty()) {
400+
s << " bool __nonzero__(" << meta_class->qualifiedCppName() << "* obj) { return !obj->" << nonZeroFunc << "(); }" << endl;
400401
}
401402

402403
AbstractMetaFieldList fields = meta_class->fields();

0 commit comments

Comments
 (0)