diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-09-14 19:47:20 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-09-14 19:47:20 +0000 |
commit | 875ae8e38bc3663e5057ca910e7ebe4b2994edb9 (patch) | |
tree | ddd3b3bc4d6f0343bae986aebbf9555c20f8e558 /python/sip/sipgen/export.c | |
parent | cb61a0436524f8ceba31db51ce3f1c5d4afbbb0e (diff) | |
download | tdebindings-875ae8e38bc3663e5057ca910e7ebe4b2994edb9.tar.gz tdebindings-875ae8e38bc3663e5057ca910e7ebe4b2994edb9.zip |
Updated python directory
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebindings@1175349 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'python/sip/sipgen/export.c')
-rw-r--r-- | python/sip/sipgen/export.c | 998 |
1 files changed, 0 insertions, 998 deletions
diff --git a/python/sip/sipgen/export.c b/python/sip/sipgen/export.c deleted file mode 100644 index 5200b2cf..00000000 --- a/python/sip/sipgen/export.c +++ /dev/null @@ -1,998 +0,0 @@ -/* - * The XML and API file generator module for SIP. - * - * Copyright (c) 2007 - * Riverbank Computing Limited <info@riverbankcomputing.co.uk> - * - * This file is part of SIP. - * - * This copy of SIP is licensed for use under the terms of the SIP License - * Agreement. See the file LICENSE for more details. - * - * SIP is supplied WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ - - -#include <stdio.h> - -#include "sip.h" - - -#define XML_VERSION_NR 0 /* The schema version number. */ - - -static void apiEnums(sipSpec *pt, classDef *scope, FILE *fp); -static void apiVars(sipSpec *pt, classDef *scope, FILE *fp); -static int apiCtor(sipSpec *pt, classDef *scope, ctorDef *ct, int sec, - FILE *fp); -static int apiOverload(sipSpec *pt, classDef *scope, overDef *od, int sec, - FILE *fp); -static int apiArgument(argDef *ad, int out, int need_comma, int sec, FILE *fp); -static void xmlClass(sipSpec *pt, classDef *cd, FILE *fp); -static void xmlEnums(sipSpec *pt, classDef *scope, int indent, FILE *fp); -static void xmlVars(sipSpec *pt, classDef *scope, int indent, FILE *fp); -static void xmlFunction(classDef *scope, memberDef *md, overDef *oloads, - int indent, FILE *fp); -static int xmlCtor(classDef *scope, ctorDef *ct, int sec, int indent, FILE *fp); -static int xmlOverload(classDef *scope, memberDef *md, overDef *od, - classDef *xtnds, int stat, int sec, int indent, FILE *fp); -static void xmlCppSignature(FILE *fp, overDef *od); -static void xmlArgument(argDef *ad, const char *dir, int res_xfer, int sec, - int indent, FILE *fp); -static void xmlType(argDef *ad, int sec, FILE *fp); -static void xmlIndent(int indent, FILE *fp); -static const char *dirAttribute(argDef *ad); -static void exportDefaultValue(argDef *ad, FILE *fp); -static const char *pyType(argDef *ad, int sec, classDef **scope); - - -/* - * Generate the API file. - */ -void generateAPI(sipSpec *pt, const char *apiFile) -{ - overDef *od; - classDef *cd; - FILE *fp; - - /* Generate the file. */ - if ((fp = fopen(apiFile, "w")) == NULL) - fatal("Unable to create file \"%s\"\n", apiFile); - - apiEnums(pt, NULL, fp); - apiVars(pt, NULL, fp); - - for (od = pt->overs; od != NULL; od = od->next) - { - if (od->common->module != pt->module) - continue; - - if (od->common->slot != no_slot) - continue; - - if (apiOverload(pt, NULL, od, FALSE, fp)) - apiOverload(pt, NULL, od, TRUE, fp); - } - - for (cd = pt->classes; cd != NULL; cd = cd->next) - { - ctorDef *ct; - - if (cd->iff->module != pt->module) - continue; - - if (isExternal(cd)) - continue; - - apiEnums(pt, cd, fp); - apiVars(pt, cd, fp); - - for (ct = cd->ctors; ct != NULL; ct = ct->next) - { - if (isPrivateCtor(ct)) - continue; - - if (apiCtor(pt, cd, ct, FALSE, fp)) - apiCtor(pt, cd, ct, TRUE, fp); - } - - for (od = cd->overs; od != NULL; od = od->next) - { - if (isPrivate(od)) - continue; - - if (od->common->slot != no_slot) - continue; - - if (apiOverload(pt, cd, od, FALSE, fp)) - apiOverload(pt, cd, od, TRUE, fp); - } - } - - fclose(fp); -} - - -/* - * Generate an API ctor. - */ -static int apiCtor(sipSpec *pt, classDef *scope, ctorDef *ct, int sec, - FILE *fp) -{ - int need_sec = FALSE, need_comma, a; - - /* Do the callable type form. */ - fprintf(fp, "%s.", pt->module->name); - prScopedPythonName(fp, scope->ecd, scope->pyname); - fprintf(fp, "("); - - need_comma = FALSE; - - for (a = 0; a < ct->pysig.nrArgs; ++a) - { - argDef *ad = &ct->pysig.args[a]; - - need_comma = apiArgument(ad, FALSE, need_comma, sec, fp); - - if (ad->atype == rxcon_type || ad->atype == rxdis_type) - need_sec = TRUE; - } - - fprintf(fp, ")\n"); - - /* Do the call __init__ form. */ - fprintf(fp, "%s.", pt->module->name); - prScopedPythonName(fp, scope->ecd, scope->pyname); - fprintf(fp, ".__init__(self"); - - for (a = 0; a < ct->pysig.nrArgs; ++a) - apiArgument(&ct->pysig.args[a], FALSE, TRUE, sec, fp); - - fprintf(fp, ")\n"); - - return need_sec; -} - - -/* - * Generate the APIs for all the enums in a scope. - */ -static void apiEnums(sipSpec *pt, classDef *scope, FILE *fp) -{ - enumDef *ed; - - for (ed = pt->enums; ed != NULL; ed = ed->next) - { - enumMemberDef *emd; - - if (ed->module != pt->module) - continue; - - if (ed->ecd != scope) - continue; - - if (ed->pyname != NULL) - { - fprintf(fp, "%s.", pt->module->name); - prScopedPythonName(fp, ed->ecd, ed->pyname->text); - fprintf(fp, "\n"); - } - - for (emd = ed->members; emd != NULL; emd = emd->next) - { - fprintf(fp, "%s.", pt->module->name); - prScopedPythonName(fp, ed->ecd, emd->pyname->text); - fprintf(fp, "\n"); - } - } -} - - -/* - * Generate the APIs for all the variables in a scope. - */ -static void apiVars(sipSpec *pt, classDef *scope, FILE *fp) -{ - varDef *vd; - - for (vd = pt->vars; vd != NULL; vd = vd->next) - { - if (vd->module != pt->module) - continue; - - if (vd->ecd != scope) - continue; - - fprintf(fp, "%s.", pt->module->name); - prScopedPythonName(fp, vd->ecd, vd->pyname->text); - fprintf(fp, "\n"); - } -} - - -/* - * Generate a single API overload. - */ -static int apiOverload(sipSpec *pt, classDef *scope, overDef *od, int sec, - FILE *fp) -{ - int need_sec = FALSE, need_comma = FALSE, is_res, nr_out, a; - - fprintf(fp, "%s.", pt->module->name); - prScopedPythonName(fp, scope, od->common->pyname->text); - fprintf(fp, "("); - - if (scope != NULL && scope->iff->type != namespace_iface && !isStatic(od)) - { - fprintf(fp, "self"); - need_comma = TRUE; - } - - nr_out = 0; - - for (a = 0; a < od->pysig.nrArgs; ++a) - { - argDef *ad = &od->pysig.args[a]; - - if (isOutArg(ad)) - ++nr_out; - - if (!isInArg(ad)) - continue; - - need_comma = apiArgument(ad, FALSE, need_comma, sec, fp); - - if (ad->atype == rxcon_type || ad->atype == rxdis_type) - need_sec = TRUE; - } - - fprintf(fp, ")"); - - is_res = (od->pysig.result.atype != void_type || od->pysig.result.nrderefs != 0); - - if (is_res || nr_out > 0) - { - fprintf(fp, " -> "); - - if ((is_res && nr_out > 0) || nr_out > 1) - fprintf(fp, "("); - - if (is_res) - need_comma = apiArgument(&od->pysig.result, TRUE, FALSE, sec, fp); - else - need_comma = FALSE; - - for (a = 0; a < od->pysig.nrArgs; ++a) - { - argDef *ad = &od->pysig.args[a]; - - if (!isOutArg(ad)) - continue; - - need_comma = apiArgument(ad, TRUE, need_comma, sec, fp); - } - - if ((is_res && nr_out > 0) || nr_out > 1) - fprintf(fp, ")"); - } - - fprintf(fp, "\n"); - - return need_sec; -} - - -/* - * Generate the API for an argument. - */ -static int apiArgument(argDef *ad, int out, int need_comma, int sec, FILE *fp) -{ - const char *tname; - classDef *tscope; - - if (isArraySize(ad)) - return need_comma; - - if (sec && (ad->atype == slotcon_type || ad->atype == slotdis_type)) - return need_comma; - - if ((tname = pyType(ad, sec, &tscope)) == NULL) - return need_comma; - - if (need_comma) - fprintf(fp, ", "); - - prScopedPythonName(fp, tscope, tname); - - if (ad->name != NULL) - fprintf(fp, " %s", ad->name); - - /* - * Handle the default value, but ignore it if it is an output only - * argument. - */ - if (ad->defval && !out) - { - fprintf(fp, "="); - prcode(fp, "%M"); - exportDefaultValue(ad, fp); - prcode(fp, "%M"); - } - - return TRUE; -} - - -/* - * Generate the XML export file. - */ -void generateXML(sipSpec *pt, const char *xmlFile) -{ - FILE *fp; - classDef *cd; - memberDef *md; - - if ((fp = fopen(xmlFile, "w")) == NULL) - fatal("Unable to create file \"%s\"\n", xmlFile); - - fprintf(fp, "<?xml version=\"1.0\"?>\n"); - fprintf(fp, "<Module version=\"%u\" name=\"%s\">\n", - XML_VERSION_NR, pt->module->name); - - /* - * Note that we don't yet handle mapped types, templates or exceptions. - */ - - for (cd = pt->classes; cd != NULL; cd = cd->next) - { - if (cd->iff->module != pt->module) - continue; - - if (isExternal(cd)) - continue; - - xmlClass(pt, cd, fp); - } - - for (cd = pt->proxies; cd != NULL; cd = cd->next) - xmlClass(pt, cd, fp); - - xmlEnums(pt, NULL, 1, fp); - xmlVars(pt, NULL, 1, fp); - - for (md = pt->othfuncs; md != NULL; md = md->next) - { - if (md->module != pt->module) - continue; - - xmlFunction(NULL, md, pt->overs, 1, fp); - } - - fprintf(fp, "</Module>\n"); - - fclose(fp); -} - - -/* - * Generate the XML for a class. - */ -static void xmlClass(sipSpec *pt, classDef *cd, FILE *fp) -{ - int indent = 1; - ctorDef *ct; - memberDef *md; - - if (isOpaque(cd)) - { - xmlIndent(indent, fp); - fprintf(fp, "<OpaqueClass name=\"", cd->pyname); - prScopedPythonName(fp, cd->ecd, cd->pyname); - fprintf(fp, "\"/>\n"); - - return; - } - - xmlIndent(indent++, fp); - fprintf(fp, "<Class name=\"", cd->pyname); - prScopedPythonName(fp, cd->ecd, cd->pyname); - fprintf(fp, "\""); - - if (cd->convtocode != NULL) - fprintf(fp, " convert=\"1\""); - - if (cd->real != NULL) - fprintf(fp, " extends=\"%s\"", cd->real->iff->module->name); - - if (cd->supers != NULL) - { - classList *cl; - - fprintf(fp, " inherits=\""); - - for (cl = cd->supers; cl != NULL; cl = cl->next) - { - if (cl != cd->supers) - fprintf(fp, " "); - - prScopedPythonName(fp, cl->cd->ecd, cl->cd->pyname); - } - - fprintf(fp, "\""); - } - - fprintf(fp, ">\n"); - - xmlEnums(pt, cd, indent, fp); - xmlVars(pt, cd, indent, fp); - - for (ct = cd->ctors; ct != NULL; ct = ct->next) - { - if (isPrivateCtor(ct)) - continue; - - if (xmlCtor(cd, ct, FALSE, indent, fp)) - xmlCtor(cd, ct, TRUE, indent, fp); - } - - for (md = cd->members; md != NULL; md = md->next) - xmlFunction(cd, md, cd->overs, indent, fp); - - xmlIndent(--indent, fp); - fprintf(fp, "</Class>\n"); -} - - -/* - * Generate the XML for all the enums in a scope. - */ -static void xmlEnums(sipSpec *pt, classDef *scope, int indent, FILE *fp) -{ - enumDef *ed; - - for (ed = pt->enums; ed != NULL; ed = ed->next) - { - if (ed->module != pt->module) - continue; - - if (ed->ecd != scope) - continue; - - if (ed->pyname != NULL) - { - enumMemberDef *emd; - - xmlIndent(indent++, fp); - fprintf(fp, "<Enum name=\""); - prScopedPythonName(fp, ed->ecd, ed->pyname->text); - fprintf(fp, "\">\n"); - - for (emd = ed->members; emd != NULL; emd = emd->next) - { - xmlIndent(indent, fp); - fprintf(fp, "<EnumMember name=\""); - prScopedPythonName(fp, ed->ecd, emd->pyname->text); - fprintf(fp, "\"/>\n"); - } - - xmlIndent(--indent, fp); - fprintf(fp, "</Enum>\n"); - } - else - { - enumMemberDef *emd; - - for (emd = ed->members; emd != NULL; emd = emd->next) - { - xmlIndent(indent, fp); - fprintf(fp, "<Member name=\""); - prScopedPythonName(fp, ed->ecd, emd->pyname->text); - fprintf(fp, "\" const=\"1\" typename=\"int\"/>\n"); - } - } - } -} - - -/* - * Generate the XML for all the variables in a scope. - */ -static void xmlVars(sipSpec *pt, classDef *scope, int indent, FILE *fp) -{ - varDef *vd; - - for (vd = pt->vars; vd != NULL; vd = vd->next) - { - if (vd->module != pt->module) - continue; - - if (vd->ecd != scope) - continue; - - xmlIndent(indent, fp); - fprintf(fp, "<Member name=\""); - prScopedPythonName(fp, vd->ecd, vd->pyname->text); - fprintf(fp, "\""); - - if (isConstArg(&vd->type) || scope == NULL) - fprintf(fp, " const=\"1\""); - - if (isStaticVar(vd)) - fprintf(fp, " static=\"1\""); - - xmlType(&vd->type, FALSE, fp); - fprintf(fp, "/>\n"); - } -} - - -/* - * Generate the XML for a ctor. - */ -static int xmlCtor(classDef *scope, ctorDef *ct, int sec, int indent, FILE *fp) -{ - int a, need_sec; - - xmlIndent(indent++, fp); - fprintf(fp, "<Function name=\""); - prScopedPythonName(fp, scope, "__init__"); - fprintf(fp, "\""); - - /* Handle the trivial case. */ - if (ct->pysig.nrArgs == 0) - { - fprintf(fp, "/>\n"); - return FALSE; - } - - fprintf(fp, ">\n"); - - need_sec = FALSE; - - for (a = 0; a < ct->pysig.nrArgs; ++a) - { - argDef *ad = &ct->pysig.args[a]; - - xmlArgument(ad, dirAttribute(ad), FALSE, sec, indent, fp); - - if (ad->atype == rxcon_type || ad->atype == rxdis_type) - need_sec = TRUE; - } - - xmlIndent(--indent, fp); - fprintf(fp, "</Function>\n"); - - return need_sec; -} - - -/* - * Generate the XML for a function. - */ -static void xmlFunction(classDef *scope, memberDef *md, overDef *oloads, - int indent, FILE *fp) -{ - overDef *od; - - for (od = oloads; od != NULL; od = od->next) - { - int isstat; - classDef *xtnds; - - if (od->common != md) - continue; - - if (isPrivate(od)) - continue; - - if (isSignal(od)) - { - xmlIndent(indent, fp); - fprintf(fp, "<Signal name=\""); - prScopedPythonName(fp, scope, md->pyname->text); - fprintf(fp, "\" sig=\""); - xmlCppSignature(fp, od); - fprintf(fp, "\"/>\n", md->pyname->text); - - continue; - } - - xtnds = NULL; - isstat = (scope == NULL || scope->iff->type == namespace_iface || isStatic(od)); - - if (scope == NULL && md->slot != no_slot && od->pysig.args[0].atype == class_type) - { - xtnds = od->pysig.args[0].u.cd; - isstat = FALSE; - } - - if (xmlOverload(scope, md, od, xtnds, isstat, FALSE, indent, fp)) - xmlOverload(scope, md, od, xtnds, isstat, TRUE, indent, fp); - } -} - - -/* - * Generate the XML for an overload. - */ -static int xmlOverload(classDef *scope, memberDef *md, overDef *od, - classDef *xtnds, int stat, int sec, int indent, FILE *fp) -{ - int a, need_sec, no_res; - - xmlIndent(indent++, fp); - fprintf(fp, "<Function name=\""); - prScopedPythonName(fp, scope, md->pyname->text); - fprintf(fp, "\""); - - if (isAbstract(od)) - fprintf(fp, " abstract=\"1\""); - - if (stat) - fprintf(fp, " static=\"1\""); - - if (isSlot(od)) - { - fprintf(fp, " slot=\""); - xmlCppSignature(fp, od); - fprintf(fp, "\""); - } - - if (xtnds != NULL) - { - fprintf(fp, " extends=\""); - prScopedPythonName(fp, xtnds->ecd, xtnds->pyname); - fprintf(fp, "\""); - } - - no_res = (od->pysig.result.atype == void_type && od->pysig.result.nrderefs == 0); - - /* Handle the trivial case. */ - if (no_res && od->pysig.nrArgs == 0) - { - fprintf(fp, "/>\n"); - return FALSE; - } - - fprintf(fp, ">\n"); - - if (!no_res) - xmlArgument(&od->pysig.result, "out", isResultTransferredBack(od), FALSE, indent, fp); - - need_sec = FALSE; - - for (a = 0; a < od->pysig.nrArgs; ++a) - { - argDef *ad = &od->pysig.args[a]; - - /* Ignore the first argument of number slots. */ - if (isNumberSlot(md) && a == 0 && od->pysig.nrArgs == 2) - continue; - - xmlArgument(ad, dirAttribute(ad), FALSE, sec, indent, fp); - - if (ad->atype == rxcon_type || ad->atype == rxdis_type) - need_sec = TRUE; - } - - xmlIndent(--indent, fp); - fprintf(fp, "</Function>\n"); - - return need_sec; -} - - -/* - * Generate the XML for a C++ signature. - */ -static void xmlCppSignature(FILE *fp, overDef *od) -{ - prcode(fp, "%M"); - prOverloadDecl(fp, od, TRUE); - prcode(fp, "%M"); -} - - -/* - * Convert an arguments direction to an XML attribute value. - */ -static const char *dirAttribute(argDef *ad) -{ - if (isInArg(ad)) - { - if (isOutArg(ad)) - return "inout"; - - return NULL; - } - - return "out"; -} - - -/* - * Generate the XML for an argument. - */ -static void xmlArgument(argDef *ad, const char *dir, int res_xfer, int sec, - int indent, FILE *fp) -{ - if (isArraySize(ad)) - return; - - if (sec && (ad->atype == slotcon_type || ad->atype == slotdis_type)) - return; - - xmlIndent(indent, fp); - fprintf(fp, "<Argument"); - xmlType(ad, sec, fp); - - if (dir != NULL) - fprintf(fp, " dir=\"%s\"", dir); - - if (isAllowNone(ad)) - fprintf(fp, " allownone=\"1\""); - - if (isTransferred(ad)) - fprintf(fp, " transfer=\"to\""); - else if (isThisTransferred(ad)) - fprintf(fp, " transfer=\"this\""); - else if (res_xfer || isTransferredBack(ad)) - fprintf(fp, " transfer=\"back\""); - - /* - * Handle the default value, but ignore it if it is an output only - * argument. - */ - if (ad->defval && (dir == NULL || strcmp(dir, "out") != 0)) - { - prcode(fp, " default=\"%M"); - exportDefaultValue(ad, fp); - prcode(fp, "%M\""); - } - - fprintf(fp, "/>\n"); -} - - -/* - * Generate the XML for a type. - */ -static void xmlType(argDef *ad, int sec, FILE *fp) -{ - const char *type_type = NULL, *type_name; - classDef *type_scope; - - fprintf(fp, " typename=\""); - - switch (ad->atype) - { - case class_type: - type_type = (isOpaque(ad->u.cd) ? "opaque" : "class"); - break; - - case enum_type: - if (ad->u.ed->pyname != NULL) - type_type = "enum"; - break; - - case rxcon_type: - case rxdis_type: - if (!sec) - type_type = "class"; - break; - - case qobject_type: - type_type = "class"; - break; - - case slotcon_type: - case slotdis_type: - { - int a; - - prcode(fp, "TQT_SLOT("); - - for (a = 0; a < ad->u.sa->nrArgs; ++a) - { - if (a > 0) - prcode(fp, ", "); - - prcode(fp, "%M%B%M", &ad->u.sa->args[a]); - } - - prcode(fp, ")"); - } - - break; - - case mapped_type: - prcode(fp, "%M%B%M", &ad->u.mtd->type); - type_type = "mappedtype"; - break; - } - - if ((type_name = pyType(ad, sec, &type_scope)) != NULL) - prScopedPythonName(fp, type_scope, type_name); - - fprintf(fp, "\""); - - if (type_type != NULL) - fprintf(fp, " typetype=\"%s\"", type_type); - - if (ad->name != NULL) - fprintf(fp, " name=\"%s\"", ad->name); -} - - -/* - * Generate the indentation for a line. - */ -static void xmlIndent(int indent, FILE *fp) -{ - while (indent-- > 0) - fprintf(fp, " "); -} - - -/* - * Export the default value of an argument. - */ -static void exportDefaultValue(argDef *ad, FILE *fp) -{ - /* Translate some special cases. */ - if (ad->defval->next == NULL && ad->defval->vtype == numeric_value) - { - if (ad->nrderefs > 0 && ad->defval->u.vnum == 0) - { - prcode(fp, "None"); - return; - } - - if (ad->atype == bool_type || ad->atype == cbool_type) - { - prcode(fp, ad->defval->u.vnum ? "True" : "False"); - return; - } - } - - generateExpression(ad->defval, fp); -} - - -/* - * Get the Python representation of a type. - */ -static const char *pyType(argDef *ad, int sec, classDef **scope) -{ - const char *type_name; - - *scope = NULL; - - switch (ad->atype) - { - case class_type: - type_name = ad->u.cd->pyname; - *scope = ad->u.cd->ecd; - break; - - case struct_type: - case void_type: - type_name = "sip.voidptr"; - break; - - case enum_type: - if (ad->u.ed->pyname != NULL) - { - type_name = ad->u.ed->pyname->text; - *scope = ad->u.ed->ecd; - } - else - type_name = "int"; - break; - - case signal_type: - type_name = "TQT_SIGNAL()"; - break; - - case slot_type: - type_name = "TQT_SLOT()"; - break; - - case rxcon_type: - case rxdis_type: - if (sec) - type_name = "callable"; - else - type_name = "TQObject"; - - break; - - case qobject_type: - type_name = "TQObject"; - break; - - case ustring_type: - case string_type: - case sstring_type: - case wstring_type: - if (ad->nrderefs > 0) - type_name = "str"; - else - type_name = "char"; - - break; - - case short_type: - case int_type: - case cint_type: - type_name = "int"; - break; - - case ushort_type: - case uint_type: - case ulong_type: - case ulonglong_type: - type_name = "unsigned long"; - break; - - case long_type: - case longlong_type: - type_name = "long"; - break; - - case float_type: - case cfloat_type: - case double_type: - case cdouble_type: - type_name = "float"; - break; - - case bool_type: - case cbool_type: - type_name = "bool"; - break; - - case pyobject_type: - type_name = "object"; - break; - - case pytuple_type: - type_name = "tuple"; - break; - - case pylist_type: - type_name = "list"; - break; - - case pydict_type: - type_name = "dict"; - break; - - case pycallable_type: - type_name = "callable"; - break; - - case pyslice_type: - type_name = "slice"; - break; - - case pytype_type: - type_name = "type"; - break; - - case ellipsis_type: - type_name = "..."; - break; - - case anyslot_type: - /* Need to check if this is enough. */ - type_name = "TQT_SLOT()"; - break; - - default: - type_name = NULL; - } - - return type_name; -} |