aboutsummaryrefslogtreecommitdiffstats
path: root/cppgenerator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cppgenerator.cpp')
-rw-r--r--cppgenerator.cpp134
1 files changed, 67 insertions, 67 deletions
diff --git a/cppgenerator.cpp b/cppgenerator.cpp
index 6d92b112e..c78eae86d 100644
--- a/cppgenerator.cpp
+++ b/cppgenerator.cpp
@@ -398,8 +398,8 @@ void CppGenerator::writeNonVirtualModifiedFunctionNative(QTextStream& s, const A
void CppGenerator::writeConstructorWrapper(QTextStream& s, const AbstractMetaFunctionList overloads)
{
- PolymorphicData polymorphicData(overloads);
- const AbstractMetaFunction* rfunc = polymorphicData.referenceFunction();
+ OverloadData overloadData(overloads);
+ const AbstractMetaFunction* rfunc = overloadData.referenceFunction();
QString className = rfunc->ownerClass()->qualifiedCppName();
s << "PyObject*" << endl;
@@ -424,14 +424,14 @@ void CppGenerator::writeConstructorWrapper(QTextStream& s, const AbstractMetaFun
s << INDENT << "if (!PyType_IsSubtype(type, &Py" << className << "_Type))" << endl;
s << INDENT << INDENT << "return 0;" << endl << endl;
- if (polymorphicData.maxArgs() > 0) {
+ if (overloadData.maxArgs() > 0) {
s << endl << INDENT << "int numArgs = ";
- writeArgumentsInitializer(s, polymorphicData);
+ writeArgumentsInitializer(s, overloadData);
}
writeCodeSnips(s, getCodeSnips(rfunc), CodeSnip::Beginning, TypeSystem::All, rfunc);
- writePolymorphicDecisor(s, &polymorphicData);
+ writeOverloadedMethodDecisor(s, &overloadData);
s << endl;
s << INDENT << "self = Shiboken::PyBaseWrapper_New(type, &Py" << className << "_Type, cptr);" << endl;
@@ -446,8 +446,8 @@ void CppGenerator::writeConstructorWrapper(QTextStream& s, const AbstractMetaFun
writeCodeSnips(s, getCodeSnips(rfunc), CodeSnip::End, TypeSystem::All, rfunc);
s << endl << INDENT << "return self;" << endl;
- if (polymorphicData.maxArgs() > 0)
- writeErrorSection(s, polymorphicData);
+ if (overloadData.maxArgs() > 0)
+ writeErrorSection(s, overloadData);
s << '}' << endl << endl;
}
@@ -487,13 +487,13 @@ void CppGenerator::writeMinimalConstructorCallArguments(QTextStream& s, const Ab
void CppGenerator::writeMethodWrapper(QTextStream& s, const AbstractMetaFunctionList overloads)
{
- PolymorphicData polymorphicData(overloads);
- const AbstractMetaFunction* rfunc = polymorphicData.referenceFunction();
+ OverloadData overloadData(overloads);
+ const AbstractMetaFunction* rfunc = overloadData.referenceFunction();
//DEBUG
//if (rfunc->isOperatorOverload()) {
// QString dumpFile = QString("%1_%2.dot").arg(m_packageName).arg(pythonOperatorFunctionName(rfunc)).toLower();
- // polymorphicData.dumpGraph(dumpFile);
+ // overloadData.dumpGraph(dumpFile);
//}
//DEBUG
@@ -502,8 +502,8 @@ void CppGenerator::writeMethodWrapper(QTextStream& s, const AbstractMetaFunction
// if (rfunc->isInplaceOperator())
// s << "/*" << endl;
- int minArgs = polymorphicData.minArgs();
- int maxArgs = polymorphicData.maxArgs();
+ int minArgs = overloadData.minArgs();
+ int maxArgs = overloadData.maxArgs();
if (ShibokenGenerator::isReverseOperator(rfunc)) {
minArgs--;
maxArgs--;
@@ -541,10 +541,10 @@ void CppGenerator::writeMethodWrapper(QTextStream& s, const AbstractMetaFunction
if (minArgs == 0 && maxArgs == 1)
s << "(arg == 0 ? 0 : 1);" << endl;
else
- writeArgumentsInitializer(s, polymorphicData);
+ writeArgumentsInitializer(s, overloadData);
}
- writePolymorphicDecisor(s, &polymorphicData);
+ writeOverloadedMethodDecisor(s, &overloadData);
s << endl << INDENT << "if (PyErr_Occurred()";
if (rfunc->type() && !rfunc->isInplaceOperator())
@@ -569,26 +569,26 @@ void CppGenerator::writeMethodWrapper(QTextStream& s, const AbstractMetaFunction
s << ';' << endl;
if (maxArgs > 0)
- writeErrorSection(s, polymorphicData);
+ writeErrorSection(s, overloadData);
}
s << '}' << endl << endl;
}
-void CppGenerator::writeArgumentsInitializer(QTextStream& s, PolymorphicData& polymorphicData)
+void CppGenerator::writeArgumentsInitializer(QTextStream& s, OverloadData& overloadData)
{
- const AbstractMetaFunction* rfunc = polymorphicData.referenceFunction();
+ const AbstractMetaFunction* rfunc = overloadData.referenceFunction();
s << "PyTuple_GET_SIZE(args);" << endl;
s << INDENT << "PyObject* pyargs[] = {";
- s << QString(polymorphicData.maxArgs(), '0').split("", QString::SkipEmptyParts).join(", ");
+ s << QString(overloadData.maxArgs(), '0').split("", QString::SkipEmptyParts).join(", ");
s << "};" << endl << endl;
QStringList palist;
- for (int i = 0; i < polymorphicData.maxArgs(); i++)
+ for (int i = 0; i < overloadData.maxArgs(); i++)
palist << QString("&(pyargs[%1])").arg(i);
QString pyargs = palist.join(", ");
- QList<int> invalidArgsLength = polymorphicData.invalidArgumentLengths();
+ QList<int> invalidArgsLength = overloadData.invalidArgumentLengths();
if (!invalidArgsLength.isEmpty()) {
QStringList invArgsLen;
foreach (int i, invalidArgsLength)
@@ -605,7 +605,7 @@ void CppGenerator::writeArgumentsInitializer(QTextStream& s, PolymorphicData& po
funcName = rfunc->name();
s << INDENT << "if (!PyArg_UnpackTuple(args, \"" << funcName << "\", ";
- s << polymorphicData.minArgs() << ", " << polymorphicData.maxArgs();
+ s << overloadData.minArgs() << ", " << overloadData.maxArgs();
s << ", " << pyargs << "))" << endl;
{
Indentation indent(INDENT);
@@ -614,9 +614,9 @@ void CppGenerator::writeArgumentsInitializer(QTextStream& s, PolymorphicData& po
s << endl;
}
-void CppGenerator::writeErrorSection(QTextStream& s, PolymorphicData& polymorphicData)
+void CppGenerator::writeErrorSection(QTextStream& s, OverloadData& overloadData)
{
- const AbstractMetaFunction* rfunc = polymorphicData.referenceFunction();
+ const AbstractMetaFunction* rfunc = overloadData.referenceFunction();
s << endl << INDENT << cpythonFunctionName(rfunc) << "_TypeError:" << endl;
Indentation indentation(INDENT);
QString funcName;
@@ -629,9 +629,9 @@ void CppGenerator::writeErrorSection(QTextStream& s, PolymorphicData& polymorphi
s << INDENT << "return 0;" << endl;
}
-void CppGenerator::writeTypeCheck(QTextStream& s, const PolymorphicData* polyData, QString argumentName)
+void CppGenerator::writeTypeCheck(QTextStream& s, const OverloadData* overloadData, QString argumentName)
{
- const AbstractMetaType* argType = polyData->argType();
+ const AbstractMetaType* argType = overloadData->argType();
AbstractMetaFunctionList implicitConverters;
if (argType->isValue()) {
const AbstractMetaClass* metaClass = classes().findClass(argType->name());
@@ -640,15 +640,15 @@ void CppGenerator::writeTypeCheck(QTextStream& s, const PolymorphicData* polyDat
}
int alternativeNumericTypes = 0;
- foreach (PolymorphicData* pd, polyData->polymorphicDataOnPosition(polyData->argPos())) {
+ foreach (OverloadData* pd, overloadData->overloadDataOnPosition(overloadData->argPos())) {
if (!pd->argType()->isPrimitive())
continue;
if (ShibokenGenerator::isNumber(pd->argType()->typeEntry()))
alternativeNumericTypes++;
}
- // This condition trusts that the PolymorphicData object will arrange for
- // PyInt type to be the last entry on a list of polymorphic argument data.
+ // This condition trusts that the OverloadData object will arrange for
+ // PyInt type to be the last entry on a list of overload argument data.
bool numberType = alternativeNumericTypes == 1 || ShibokenGenerator::isPyInt(argType);
if (implicitConverters.size() > 0)
@@ -666,33 +666,33 @@ void CppGenerator::writeTypeCheck(QTextStream& s, const PolymorphicData* polyDat
s << ')';
}
-void CppGenerator::writePolymorphicDecisor(QTextStream& s, PolymorphicData* parentPolymorphicData)
+void CppGenerator::writeOverloadedMethodDecisor(QTextStream& s, OverloadData* parentOverloadData)
{
- bool hasDefaultCall = parentPolymorphicData->nextArgumentHasDefaultValue();
- if (!hasDefaultCall && parentPolymorphicData->isHeadPolymorphicData()) {
- foreach (const AbstractMetaFunction* func, parentPolymorphicData->overloads()) {
- if (parentPolymorphicData->isFinalOccurrence(func)) {
+ bool hasDefaultCall = parentOverloadData->nextArgumentHasDefaultValue();
+ if (!hasDefaultCall && parentOverloadData->isHeadOverloadData()) {
+ foreach (const AbstractMetaFunction* func, parentOverloadData->overloads()) {
+ if (parentOverloadData->isFinalOccurrence(func)) {
hasDefaultCall = true;
break;
}
}
}
- const AbstractMetaFunction* rfunc = parentPolymorphicData->referenceFunction();
+ const AbstractMetaFunction* rfunc = parentOverloadData->referenceFunction();
- int minArgs = parentPolymorphicData->minArgs();
- int maxArgs = parentPolymorphicData->maxArgs();
+ int minArgs = parentOverloadData->minArgs();
+ int maxArgs = parentOverloadData->maxArgs();
if (ShibokenGenerator::isReverseOperator(rfunc)) {
minArgs--;
maxArgs--;
}
if (maxArgs == 0
- || (!parentPolymorphicData->isHeadPolymorphicData()
- && (parentPolymorphicData->nextPolymorphicData().isEmpty()
- || (!hasDefaultCall && parentPolymorphicData->overloads().size() == 1)))) {
- const AbstractMetaFunction* func = parentPolymorphicData->overloads()[0];
- int removed = PolymorphicData::numberOfRemovedArguments(func);
+ || (!parentOverloadData->isHeadOverloadData()
+ && (parentOverloadData->nextOverloadData().isEmpty()
+ || (!hasDefaultCall && parentOverloadData->overloads().size() == 1)))) {
+ const AbstractMetaFunction* func = parentOverloadData->overloads()[0];
+ int removed = OverloadData::numberOfRemovedArguments(func);
writeMethodCall(s, func, func->arguments().size() - removed);
return;
}
@@ -703,19 +703,19 @@ void CppGenerator::writePolymorphicDecisor(QTextStream& s, PolymorphicData* pare
// can make a default call
if (hasDefaultCall) {
- s << "if (numArgs == " << parentPolymorphicData->argPos() + 1 << ") { // hasDefaultCall" << endl;
+ s << "if (numArgs == " << parentOverloadData->argPos() + 1 << ") { // hasDefaultCall" << endl;
{
Indentation indent(INDENT);
- writeMethodCall(s, rfunc, parentPolymorphicData->argPos() + 1);
+ writeMethodCall(s, rfunc, parentOverloadData->argPos() + 1);
}
s << INDENT << "} else ";
}
// last occurrence of function signature
- if (!parentPolymorphicData->isHeadPolymorphicData()) {
- foreach (const AbstractMetaFunction* func, parentPolymorphicData->overloads()) {
- if (parentPolymorphicData->isFinalOccurrence(func)) {
- int lastArg = parentPolymorphicData->argPos() + 1;
+ if (!parentOverloadData->isHeadOverloadData()) {
+ foreach (const AbstractMetaFunction* func, parentOverloadData->overloads()) {
+ if (parentOverloadData->isFinalOccurrence(func)) {
+ int lastArg = parentOverloadData->argPos() + 1;
s << "if (numArgs == " << lastArg << ") { // final:" << func->minimalSignature() << endl;
{
Indentation indent(INDENT);
@@ -726,33 +726,33 @@ void CppGenerator::writePolymorphicDecisor(QTextStream& s, PolymorphicData* pare
}
}
- foreach (PolymorphicData* polymorphicData, parentPolymorphicData->nextPolymorphicData()) {
+ foreach (OverloadData* overloadData, parentOverloadData->nextOverloadData()) {
if (maxArgs > 0) {
- bool signatureFound = polymorphicData->overloads().size() == 1 &&
- !polymorphicData->nextArgumentHasDefaultValue();
- const AbstractMetaFunction* func = polymorphicData->overloads()[0];
- QString pyArgName = varargs ? QString("pyargs[%1]").arg(polymorphicData->argPos()) : "arg";
+ bool signatureFound = overloadData->overloads().size() == 1 &&
+ !overloadData->nextArgumentHasDefaultValue();
+ const AbstractMetaFunction* func = overloadData->overloads()[0];
+ QString pyArgName = varargs ? QString("pyargs[%1]").arg(overloadData->argPos()) : "arg";
s << "if (";
if (signatureFound && varargs) {
s << "numArgs == ";
- s << func->arguments().size() - PolymorphicData::numberOfRemovedArguments(func);
+ s << func->arguments().size() - OverloadData::numberOfRemovedArguments(func);
s << " && ";
}
- writeTypeCheck(s, polymorphicData, pyArgName);
+ writeTypeCheck(s, overloadData, pyArgName);
- if (polymorphicData->argType()->isContainer() &&
- ((ContainerTypeEntry*)polymorphicData->argType()->typeEntry())->type()
+ if (overloadData->argType()->isContainer() &&
+ ((ContainerTypeEntry*)overloadData->argType()->typeEntry())->type()
== ContainerTypeEntry::PairContainer) {
s << " && PySequence_Size(" << pyArgName << ") == 2";
}
if (signatureFound && varargs) {
- int numArgs = func->arguments().size() - PolymorphicData::numberOfRemovedArguments(func);
- PolymorphicData* tmp = polymorphicData;
- for (int i = polymorphicData->argPos() + 1; i < numArgs; i++) {
- tmp = tmp->nextPolymorphicData()[0];
+ int numArgs = func->arguments().size() - OverloadData::numberOfRemovedArguments(func);
+ OverloadData* tmp = overloadData;
+ for (int i = overloadData->argPos() + 1; i < numArgs; i++) {
+ tmp = tmp->nextOverloadData()[0];
s << " && ";
writeTypeCheck(s, tmp, QString("pyargs[%1]").arg(i));
}
@@ -760,11 +760,11 @@ void CppGenerator::writePolymorphicDecisor(QTextStream& s, PolymorphicData* pare
s << ") {" << endl;
{
Indentation indent(INDENT);
- int allRemoved = PolymorphicData::numberOfRemovedArguments(func);
+ int allRemoved = OverloadData::numberOfRemovedArguments(func);
int lastArg = signatureFound ? func->arguments().size() - allRemoved
- : polymorphicData->argPos() + 1;
+ : overloadData->argPos() + 1;
int removed = 0;
- for (int i = polymorphicData->argPos(); i < lastArg; i++) {
+ for (int i = overloadData->argPos(); i < lastArg; i++) {
if (func->argumentRemoved(i + 1))
removed++;
QString argName = QString("cpp_arg%1").arg(i);
@@ -781,7 +781,7 @@ void CppGenerator::writePolymorphicDecisor(QTextStream& s, PolymorphicData* pare
{
Indentation indent(INDENT);
- writePolymorphicDecisor(s, polymorphicData);
+ writeOverloadedMethodDecisor(s, overloadData);
}
s << INDENT << "} else ";
@@ -1107,12 +1107,12 @@ void CppGenerator::writeRichCompareFunction(QTextStream& s, const AbstractMetaCl
{
Indentation indent(INDENT);
foreach (AbstractMetaFunctionList overloads, cmpOverloads) {
- PolymorphicData polyData(overloads);
+ OverloadData overloadData(overloads);
const AbstractMetaFunction* rfunc = overloads[0];
// DEBUG
// QString dumpFile = QString("%1_%2.dot").arg(rfunc->ownerClass()->name()).arg(pythonOperatorFunctionName(rfunc)).toLower();
- // polyData.dumpGraph(dumpFile);
+ // overloadData.dumpGraph(dumpFile);
// DEBUG
s << INDENT << "case " << ShibokenGenerator::pythonRichCompareOperatorId(rfunc) << ':' << endl;
@@ -1192,7 +1192,7 @@ void CppGenerator::writeRichCompareFunction(QTextStream& s, const AbstractMetaCl
void CppGenerator::writeMethodDefinition(QTextStream& s, const AbstractMetaFunctionList overloads)
{
- QPair<int, int> minMax = PolymorphicData::getMinMaxArguments(overloads);
+ QPair<int, int> minMax = OverloadData::getMinMaxArguments(overloads);
const AbstractMetaFunction* func = overloads[0];
s << INDENT << "{const_cast<char*>(\"" << func->name() << "\"), (PyCFunction)";