|
|
|
|
@ -47,11 +47,13 @@ static Hash *f_shadow_imports = 0;
|
|
|
|
|
static String *f_shadow_builtin_imports = 0;
|
|
|
|
|
static String *f_shadow_stubs = 0;
|
|
|
|
|
static Hash *builtin_getset = 0;
|
|
|
|
|
static Hash *builtin_closures = 0;
|
|
|
|
|
static Hash *class_members = 0;
|
|
|
|
|
static File *f_builtins = 0;
|
|
|
|
|
static String *builtin_tp_init = 0;
|
|
|
|
|
static String *builtin_methods = 0;
|
|
|
|
|
static String *builtin_default_unref = 0;
|
|
|
|
|
static String *builtin_closures_code = 0;
|
|
|
|
|
|
|
|
|
|
static String *methods;
|
|
|
|
|
static String *class_name;
|
|
|
|
|
@ -167,19 +169,19 @@ static const char *usage3 = "\
|
|
|
|
|
Function annotation \n\
|
|
|
|
|
\n";
|
|
|
|
|
|
|
|
|
|
static String *getSlot(Node *n = NULL, const char *key = NULL) {
|
|
|
|
|
static String *slot_default = NewString("0");
|
|
|
|
|
String *val = key && *key ? Getattr(n, key) : NULL;
|
|
|
|
|
return val ? val : slot_default;
|
|
|
|
|
static String *getSlot(Node *n = NULL, const char *key = NULL, String *default_slot = NULL) {
|
|
|
|
|
static String *zero = NewString("0");
|
|
|
|
|
String *val = n && key && *key ? Getattr(n, key) : NULL;
|
|
|
|
|
return val ? val : default_slot ? default_slot : zero;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void printSlot(File *f, const String *slotval, const char *slotname, const char *functype = NULL) {
|
|
|
|
|
String *slotval_override = functype ? NewStringf("(%s) %s", functype, slotval) : 0;
|
|
|
|
|
if (slotval_override)
|
|
|
|
|
slotval = slotval_override;
|
|
|
|
|
static void printSlot(File *f, String *slotval, const char *slotname, const char *functype = NULL) {
|
|
|
|
|
String *slotval_override = 0;
|
|
|
|
|
if (functype)
|
|
|
|
|
slotval = slotval_override = NewStringf("(%s) %s", functype, slotval);
|
|
|
|
|
int len = Len(slotval);
|
|
|
|
|
int fieldwidth = len > 40 ? 0 : 40 - len;
|
|
|
|
|
Printf(f, " %s, %*s/* %s */\n", slotval, fieldwidth, "", slotname);
|
|
|
|
|
int fieldwidth = len > 41 ? (len > 61 ? 0 : 61 - len) : 41 - len;
|
|
|
|
|
Printf(f, " %s,%*s/* %s */\n", slotval, fieldwidth, "", slotname);
|
|
|
|
|
Delete(slotval_override);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -188,7 +190,7 @@ static String *getClosure(String *functype, String *wrapper, int funpack = 0) {
|
|
|
|
|
"unaryfunc", "SWIGPY_UNARYFUNC_CLOSURE",
|
|
|
|
|
"destructor", "SWIGPY_DESTRUCTOR_CLOSURE",
|
|
|
|
|
"inquiry", "SWIGPY_INQUIRY_CLOSURE",
|
|
|
|
|
"getiterfunc", "SWIGPY_UNARYFUNC_CLOSURE",
|
|
|
|
|
"getiterfunc", "SWIGPY_GETITERFUNC_CLOSURE",
|
|
|
|
|
"binaryfunc", "SWIGPY_BINARYFUNC_CLOSURE",
|
|
|
|
|
"ternaryfunc", "SWIGPY_TERNARYFUNC_CLOSURE",
|
|
|
|
|
"ternarycallfunc", "SWIGPY_TERNARYCALLFUNC_CLOSURE",
|
|
|
|
|
@ -200,7 +202,7 @@ static String *getClosure(String *functype, String *wrapper, int funpack = 0) {
|
|
|
|
|
"objobjargproc", "SWIGPY_OBJOBJARGPROC_CLOSURE",
|
|
|
|
|
"reprfunc", "SWIGPY_REPRFUNC_CLOSURE",
|
|
|
|
|
"hashfunc", "SWIGPY_HASHFUNC_CLOSURE",
|
|
|
|
|
"iternextfunc", "SWIGPY_ITERNEXT_CLOSURE",
|
|
|
|
|
"iternextfunc", "SWIGPY_ITERNEXTFUNC_CLOSURE",
|
|
|
|
|
NULL
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
@ -208,7 +210,7 @@ static String *getClosure(String *functype, String *wrapper, int funpack = 0) {
|
|
|
|
|
"unaryfunc", "SWIGPY_UNARYFUNC_CLOSURE",
|
|
|
|
|
"destructor", "SWIGPY_DESTRUCTOR_CLOSURE",
|
|
|
|
|
"inquiry", "SWIGPY_INQUIRY_CLOSURE",
|
|
|
|
|
"getiterfunc", "SWIGPY_UNARYFUNC_CLOSURE",
|
|
|
|
|
"getiterfunc", "SWIGPY_GETITERFUNC_CLOSURE",
|
|
|
|
|
"ternaryfunc", "SWIGPY_TERNARYFUNC_CLOSURE",
|
|
|
|
|
"ternarycallfunc", "SWIGPY_TERNARYCALLFUNC_CLOSURE",
|
|
|
|
|
"lenfunc", "SWIGPY_LENFUNC_CLOSURE",
|
|
|
|
|
@ -219,7 +221,7 @@ static String *getClosure(String *functype, String *wrapper, int funpack = 0) {
|
|
|
|
|
"objobjargproc", "SWIGPY_OBJOBJARGPROC_CLOSURE",
|
|
|
|
|
"reprfunc", "SWIGPY_REPRFUNC_CLOSURE",
|
|
|
|
|
"hashfunc", "SWIGPY_HASHFUNC_CLOSURE",
|
|
|
|
|
"iternextfunc", "SWIGPY_ITERNEXT_CLOSURE",
|
|
|
|
|
"iternextfunc", "SWIGPY_ITERNEXTFUNC_CLOSURE",
|
|
|
|
|
NULL
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
@ -626,6 +628,8 @@ public:
|
|
|
|
|
f_directors_h = NewString("");
|
|
|
|
|
f_directors = NewString("");
|
|
|
|
|
builtin_getset = NewHash();
|
|
|
|
|
builtin_closures = NewHash();
|
|
|
|
|
builtin_closures_code = NewString("");
|
|
|
|
|
class_members = NewHash();
|
|
|
|
|
builtin_methods = NewString("");
|
|
|
|
|
builtin_default_unref = NewString("delete $self;");
|
|
|
|
|
@ -861,12 +865,13 @@ public:
|
|
|
|
|
/* At here, the module may already loaded, so simply import it. */
|
|
|
|
|
Printf(f_shadow, tab4 tab8 "import %s\n", module);
|
|
|
|
|
Printf(f_shadow, tab4 tab8 "return %s\n", module);
|
|
|
|
|
Printv(f_shadow, tab8 "if fp is not None:\n", NULL);
|
|
|
|
|
Printv(f_shadow, tab4 tab8 "try:\n", NULL);
|
|
|
|
|
Printf(f_shadow, tab8 tab8 "_mod = imp.load_module('%s', fp, pathname, description)\n", module);
|
|
|
|
|
Printv(f_shadow, tab4 tab8, "finally:\n", NULL);
|
|
|
|
|
Printv(f_shadow, tab8 "try:\n", NULL);
|
|
|
|
|
/* imp.load_module() handles fp being None. */
|
|
|
|
|
Printf(f_shadow, tab4 tab8 "_mod = imp.load_module('%s', fp, pathname, description)\n", module);
|
|
|
|
|
Printv(f_shadow, tab8, "finally:\n", NULL);
|
|
|
|
|
Printv(f_shadow, tab4 tab8 "if fp is not None:\n", NULL);
|
|
|
|
|
Printv(f_shadow, tab8 tab8, "fp.close()\n", NULL);
|
|
|
|
|
Printv(f_shadow, tab4 tab8, "return _mod\n", NULL);
|
|
|
|
|
Printv(f_shadow, tab8, "return _mod\n", NULL);
|
|
|
|
|
Printf(f_shadow, tab4 "%s = swig_import_helper()\n", module);
|
|
|
|
|
Printv(f_shadow, tab4, "del swig_import_helper\n", NULL);
|
|
|
|
|
Printv(f_shadow, "else:\n", NULL);
|
|
|
|
|
@ -2037,7 +2042,7 @@ public:
|
|
|
|
|
|
|
|
|
|
// Disregard optional "f" suffix, it can be just dropped in Python as it
|
|
|
|
|
// uses doubles for everything anyhow.
|
|
|
|
|
for (char* p = end; *p != '\0'; ++p) {
|
|
|
|
|
for (char * p = end; *p != '\0'; ++p) {
|
|
|
|
|
switch (*p) {
|
|
|
|
|
case 'f':
|
|
|
|
|
case 'F':
|
|
|
|
|
@ -2083,7 +2088,7 @@ public:
|
|
|
|
|
// combination of "l" and "u", but not anything else (again, stuff like
|
|
|
|
|
// "LL" could be handled, but we don't bother to do it currently).
|
|
|
|
|
bool seen_long = false;
|
|
|
|
|
for (char* p = end; *p != '\0'; ++p) {
|
|
|
|
|
for (char * p = end; *p != '\0'; ++p) {
|
|
|
|
|
switch (*p) {
|
|
|
|
|
case 'l':
|
|
|
|
|
case 'L':
|
|
|
|
|
@ -3321,17 +3326,18 @@ public:
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (in_class && builtin) {
|
|
|
|
|
/* Handle operator overloads overloads for builtin types */
|
|
|
|
|
/* Handle operator overloads for builtin types */
|
|
|
|
|
String *slot = Getattr(n, "feature:python:slot");
|
|
|
|
|
if (slot) {
|
|
|
|
|
String *func_type = Getattr(n, "feature:python:slot:functype");
|
|
|
|
|
String *closure_decl = getClosure(func_type, wrapper_name, overname ? 0 : funpack);
|
|
|
|
|
String *feature_name = NewStringf("feature:python:%s", slot);
|
|
|
|
|
String *closure_name = Copy(wrapper_name);
|
|
|
|
|
String *closure_name = 0;
|
|
|
|
|
if (closure_decl) {
|
|
|
|
|
if (!Getattr(n, "sym:overloaded") || !Getattr(n, "sym:nextSibling"))
|
|
|
|
|
Printv(f_wrappers, closure_decl, "\n\n", NIL);
|
|
|
|
|
Append(closure_name, "_closure");
|
|
|
|
|
closure_name = NewStringf("%s_%s_closure", wrapper_name, func_type);
|
|
|
|
|
if (!GetFlag(builtin_closures, closure_name))
|
|
|
|
|
Printf(builtin_closures_code, "%s /* defines %s */\n\n", closure_decl, closure_name);
|
|
|
|
|
SetFlag(builtin_closures, closure_name);
|
|
|
|
|
Delete(closure_decl);
|
|
|
|
|
}
|
|
|
|
|
if (func_type) {
|
|
|
|
|
@ -3392,7 +3398,7 @@ public:
|
|
|
|
|
Python dictionary. */
|
|
|
|
|
|
|
|
|
|
if (!have_globals) {
|
|
|
|
|
Printf(f_init, "\t PyDict_SetItemString(md,(char*)\"%s\", SWIG_globals());\n", global_name);
|
|
|
|
|
Printf(f_init, "\t PyDict_SetItemString(md,(char *)\"%s\", SWIG_globals());\n", global_name);
|
|
|
|
|
if (builtin)
|
|
|
|
|
Printf(f_init, "\t SwigPyBuiltin_AddPublicSymbol(public_interface, \"%s\");\n", global_name);
|
|
|
|
|
have_globals = 1;
|
|
|
|
|
@ -3480,9 +3486,9 @@ public:
|
|
|
|
|
Wrapper_print(getf, f_wrappers);
|
|
|
|
|
|
|
|
|
|
/* Now add this to the variable linking mechanism */
|
|
|
|
|
Printf(f_init, "\t SWIG_addvarlink(SWIG_globals(),(char*)\"%s\",%s, %s);\n", iname, vargetname, varsetname);
|
|
|
|
|
Printf(f_init, "\t SWIG_addvarlink(SWIG_globals(),(char *)\"%s\",%s, %s);\n", iname, vargetname, varsetname);
|
|
|
|
|
if (builtin && shadow && !assignable && !in_class) {
|
|
|
|
|
Printf(f_init, "\t PyDict_SetItemString(md, (char*)\"%s\", PyObject_GetAttrString(SWIG_globals(), \"%s\"));\n", iname, iname);
|
|
|
|
|
Printf(f_init, "\t PyDict_SetItemString(md, (char *)\"%s\", PyObject_GetAttrString(SWIG_globals(), \"%s\"));\n", iname, iname);
|
|
|
|
|
Printf(f_init, "\t SwigPyBuiltin_AddPublicSymbol(public_interface, \"%s\");\n", iname);
|
|
|
|
|
}
|
|
|
|
|
Delete(vargetname);
|
|
|
|
|
@ -3499,7 +3505,7 @@ public:
|
|
|
|
|
* ------------------------------------------------------------ */
|
|
|
|
|
|
|
|
|
|
/* Determine if the node requires the _swigconstant code to be generated */
|
|
|
|
|
bool needs_swigconstant(Node* n) {
|
|
|
|
|
bool needs_swigconstant(Node *n) {
|
|
|
|
|
SwigType *type = Getattr(n, "type");
|
|
|
|
|
SwigType *qtype = SwigType_typedef_resolve_all(type);
|
|
|
|
|
SwigType *uqtype = SwigType_strip_qualifiers(qtype);
|
|
|
|
|
@ -3576,12 +3582,12 @@ public:
|
|
|
|
|
Printf(f_wrappers, tab2 "PyObject *d;\n");
|
|
|
|
|
if (modernargs) {
|
|
|
|
|
if (fastunpack) {
|
|
|
|
|
Printf(f_wrappers, tab2 "if (!SWIG_Python_UnpackTuple(args,(char*)\"swigconstant\", 1, 1,&module)) return NULL;\n");
|
|
|
|
|
Printf(f_wrappers, tab2 "if (!SWIG_Python_UnpackTuple(args,(char *)\"swigconstant\", 1, 1,&module)) return NULL;\n");
|
|
|
|
|
} else {
|
|
|
|
|
Printf(f_wrappers, tab2 "if (!PyArg_UnpackTuple(args,(char*)\"swigconstant\", 1, 1,&module)) return NULL;\n");
|
|
|
|
|
Printf(f_wrappers, tab2 "if (!PyArg_UnpackTuple(args,(char *)\"swigconstant\", 1, 1,&module)) return NULL;\n");
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
Printf(f_wrappers, tab2 "if (!PyArg_ParseTuple(args,(char*)\"O:swigconstant\", &module)) return NULL;\n");
|
|
|
|
|
Printf(f_wrappers, tab2 "if (!PyArg_ParseTuple(args,(char *)\"O:swigconstant\", &module)) return NULL;\n");
|
|
|
|
|
}
|
|
|
|
|
Printf(f_wrappers, tab2 "d = PyModule_GetDict(module);\n");
|
|
|
|
|
Printf(f_wrappers, tab2 "if (!d) return NULL;\n");
|
|
|
|
|
@ -3737,13 +3743,13 @@ public:
|
|
|
|
|
Node *parent = Swig_methodclass(n);
|
|
|
|
|
String *basetype = Getattr(parent, "classtype");
|
|
|
|
|
Wrapper *w = NewWrapper();
|
|
|
|
|
Printf(w->def, "SwigDirector_%s::SwigDirector_%s(PyObject* self) : Swig::Director(self) { \n", classname, classname);
|
|
|
|
|
Printf(w->def, "SwigDirector_%s::SwigDirector_%s(PyObject *self) : Swig::Director(self) { \n", classname, classname);
|
|
|
|
|
Printf(w->def, " SWIG_DIRECTOR_RGTR((%s *)this, this); \n", basetype);
|
|
|
|
|
Append(w->def, "}\n");
|
|
|
|
|
Wrapper_print(w, f_directors);
|
|
|
|
|
DelWrapper(w);
|
|
|
|
|
}
|
|
|
|
|
Printf(f_directors_h, " SwigDirector_%s(PyObject* self);\n", classname);
|
|
|
|
|
Printf(f_directors_h, " SwigDirector_%s(PyObject *self);\n", classname);
|
|
|
|
|
Delete(classname);
|
|
|
|
|
return Language::classDirectorDefaultConstructor(n);
|
|
|
|
|
}
|
|
|
|
|
@ -3919,7 +3925,6 @@ public:
|
|
|
|
|
int funpack = modernargs && fastunpack;
|
|
|
|
|
|
|
|
|
|
Printv(f_init, " SwigPyBuiltin_SetMetaType(builtin_pytype, metatype);\n", NIL);
|
|
|
|
|
Printf(f_init, " builtin_pytype->tp_new = PyType_GenericNew;\n");
|
|
|
|
|
Printv(f_init, " builtin_base_count = 0;\n", NIL);
|
|
|
|
|
List *baselist = Getattr(n, "bases");
|
|
|
|
|
if (baselist) {
|
|
|
|
|
@ -3933,8 +3938,8 @@ public:
|
|
|
|
|
SwigType_add_pointer(base_name);
|
|
|
|
|
String *base_mname = SwigType_manglestr(base_name);
|
|
|
|
|
Printf(f_init, " builtin_basetype = SWIG_MangledTypeQuery(\"%s\");\n", base_mname);
|
|
|
|
|
Printv(f_init, " if (builtin_basetype && builtin_basetype->clientdata && ((SwigPyClientData*) builtin_basetype->clientdata)->pytype) {\n", NIL);
|
|
|
|
|
Printv(f_init, " builtin_bases[builtin_base_count++] = ((SwigPyClientData*) builtin_basetype->clientdata)->pytype;\n", NIL);
|
|
|
|
|
Printv(f_init, " if (builtin_basetype && builtin_basetype->clientdata && ((SwigPyClientData *) builtin_basetype->clientdata)->pytype) {\n", NIL);
|
|
|
|
|
Printv(f_init, " builtin_bases[builtin_base_count++] = ((SwigPyClientData *) builtin_basetype->clientdata)->pytype;\n", NIL);
|
|
|
|
|
Printv(f_init, " } else {\n", NIL);
|
|
|
|
|
Printf(f_init, " PyErr_SetString(PyExc_TypeError, \"Could not create type '%s' as base '%s' has not been initialized.\\n\");\n", symname, bname);
|
|
|
|
|
Printv(f_init, "#if PY_VERSION_HEX >= 0x03000000\n", NIL);
|
|
|
|
|
@ -3956,13 +3961,7 @@ public:
|
|
|
|
|
// Check for non-public destructor, in which case tp_dealloc will issue
|
|
|
|
|
// a warning and allow the memory to leak. Any class that doesn't explicitly
|
|
|
|
|
// have a private/protected destructor has an implicit public destructor.
|
|
|
|
|
String *tp_dealloc = Getattr(n, "feature:python:tp_dealloc");
|
|
|
|
|
if (tp_dealloc) {
|
|
|
|
|
Printf(f, "SWIGPY_DESTRUCTOR_CLOSURE(%s)\n", tp_dealloc);
|
|
|
|
|
tp_dealloc = NewStringf("%s_closure", tp_dealloc);
|
|
|
|
|
} else {
|
|
|
|
|
tp_dealloc = NewString("SwigPyBuiltin_BadDealloc");
|
|
|
|
|
}
|
|
|
|
|
static String *tp_dealloc_bad = NewString("SwigPyBuiltin_BadDealloc");
|
|
|
|
|
|
|
|
|
|
String *getset_name = NewStringf("%s_getset", templ);
|
|
|
|
|
String *methods_name = NewStringf("%s_methods", templ);
|
|
|
|
|
@ -3984,12 +3983,12 @@ public:
|
|
|
|
|
String *gspair = NewStringf("%s_%s_getset", symname, memname);
|
|
|
|
|
Printf(f, "static SwigPyGetSet %s = { %s, %s };\n", gspair, getter ? getter : "0", setter ? setter : "0");
|
|
|
|
|
String *entry =
|
|
|
|
|
NewStringf("{ (char*) \"%s\", (getter) %s, (setter) %s, (char*)\"%s.%s\", (void*) &%s }\n", memname, getter_closure,
|
|
|
|
|
NewStringf("{ (char *) \"%s\", (getter) %s, (setter) %s, (char *)\"%s.%s\", (void *) &%s }\n", memname, getter_closure,
|
|
|
|
|
setter_closure, name, memname, gspair);
|
|
|
|
|
if (GetFlag(mgetset, "static")) {
|
|
|
|
|
Printf(f, "static PyGetSetDef %s_def = %s;\n", gspair, entry);
|
|
|
|
|
Printf(f_init, "static_getset = SwigPyStaticVar_new_getset(metatype, &%s_def);\n", gspair);
|
|
|
|
|
Printf(f_init, "PyDict_SetItemString(d, static_getset->d_getset->name, (PyObject*) static_getset);\n", memname);
|
|
|
|
|
Printf(f_init, "PyDict_SetItemString(d, static_getset->d_getset->name, (PyObject *) static_getset);\n", memname);
|
|
|
|
|
Printf(f_init, "Py_DECREF(static_getset);\n");
|
|
|
|
|
} else {
|
|
|
|
|
Printf(getset_def, " %s,\n", entry);
|
|
|
|
|
@ -4057,10 +4056,18 @@ public:
|
|
|
|
|
quoted_symname = NewStringf("\"%s\"", symname);
|
|
|
|
|
}
|
|
|
|
|
String *quoted_tp_doc_str = NewStringf("\"%s\"", getSlot(n, "feature:python:tp_doc"));
|
|
|
|
|
char const *tp_init = builtin_tp_init ? Char(builtin_tp_init) : Swig_directorclass(n) ? "0" : "SwigPyBuiltin_BadInit";
|
|
|
|
|
String *tp_init = NewString(builtin_tp_init ? Char(builtin_tp_init) : Swig_directorclass(n) ? "0" : "SwigPyBuiltin_BadInit");
|
|
|
|
|
String *tp_flags = NewString("Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_CHECKTYPES");
|
|
|
|
|
String *py3_tp_flags = NewString("Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE");
|
|
|
|
|
String *tp_flags_py3 = NewString("Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE");
|
|
|
|
|
|
|
|
|
|
static String *tp_basicsize = NewStringf("sizeof(SwigPyObject)");
|
|
|
|
|
static String *tp_dictoffset_default = NewString("offsetof(SwigPyObject, dict)");
|
|
|
|
|
static String *tp_new = NewString("PyType_GenericNew");
|
|
|
|
|
static String *tp_hash = NewString("SwigPyObject_hash");
|
|
|
|
|
String *tp_as_number = NewStringf("&%s_type.as_number", templ);
|
|
|
|
|
String *tp_as_sequence = NewStringf("&%s_type.as_sequence", templ);
|
|
|
|
|
String *tp_as_mapping = NewStringf("&%s_type.as_mapping", templ);
|
|
|
|
|
String *tp_as_buffer = NewStringf("&%s_type.as_buffer", templ);
|
|
|
|
|
|
|
|
|
|
Printf(f, "static PyHeapTypeObject %s_type = {\n", templ);
|
|
|
|
|
|
|
|
|
|
@ -4073,9 +4080,9 @@ public:
|
|
|
|
|
printSlot(f, getSlot(), "ob_size");
|
|
|
|
|
Printv(f, "#endif\n", NIL);
|
|
|
|
|
printSlot(f, quoted_symname, "tp_name");
|
|
|
|
|
printSlot(f, "sizeof(SwigPyObject)", "tp_basicsize");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_basicsize", tp_basicsize), "tp_basicsize");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_itemsize"), "tp_itemsize");
|
|
|
|
|
printSlot(f, tp_dealloc, "tp_dealloc", "destructor");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_dealloc", tp_dealloc_bad), "tp_dealloc", "destructor");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_print"), "tp_print", "printfunc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_getattr"), "tp_getattr", "getattrfunc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_setattr"), "tp_setattr", "setattrfunc");
|
|
|
|
|
@ -4085,46 +4092,46 @@ public:
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_compare"), "tp_compare", "cmpfunc");
|
|
|
|
|
Printv(f, "#endif\n", NIL);
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_repr"), "tp_repr", "reprfunc");
|
|
|
|
|
Printf(f, " &%s_type.as_number, /* tp_as_number */\n", templ);
|
|
|
|
|
Printf(f, " &%s_type.as_sequence, /* tp_as_sequence */\n", templ);
|
|
|
|
|
Printf(f, " &%s_type.as_mapping, /* tp_as_mapping */\n", templ);
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_hash"), "tp_hash", "hashfunc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_as_number", tp_as_number), "tp_as_number");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_as_sequence", tp_as_sequence), "tp_as_sequence");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_as_mapping", tp_as_mapping), "tp_as_mapping");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_hash", tp_hash), "tp_hash", "hashfunc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_call"), "tp_call", "ternaryfunc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_str"), "tp_str", "reprfunc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_getattro"), "tp_getattro", "getattrofunc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_setattro"), "tp_setattro", "setattrofunc");
|
|
|
|
|
Printf(f, " &%s_type.as_buffer, /* tp_as_buffer */\n", templ);
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_as_buffer", tp_as_buffer), "tp_as_buffer");
|
|
|
|
|
Printv(f, "#if PY_VERSION_HEX >= 0x03000000\n", NIL);
|
|
|
|
|
printSlot(f, py3_tp_flags, "tp_flags");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_flags", tp_flags_py3), "tp_flags");
|
|
|
|
|
Printv(f, "#else\n", NIL);
|
|
|
|
|
printSlot(f, tp_flags, "tp_flags");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_flags", tp_flags), "tp_flags");
|
|
|
|
|
Printv(f, "#endif\n", NIL);
|
|
|
|
|
printSlot(f, quoted_tp_doc_str, "tp_doc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_traverse"), "tp_traverse", "traverseproc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_clear"), "tp_clear", "inquiry");
|
|
|
|
|
printSlot(f, richcompare_func, "feature:python:tp_richcompare", "richcmpfunc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_richcompare", richcompare_func), "tp_richcompare", "richcmpfunc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_weaklistoffset"), "tp_weaklistoffset");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_iter"), "tp_iter", "getiterfunc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_iternext"), "tp_iternext", "iternextfunc");
|
|
|
|
|
printSlot(f, methods_name, "tp_methods");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_methods", methods_name), "tp_methods");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_members"), "tp_members");
|
|
|
|
|
printSlot(f, getset_name, "tp_getset");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_getset", getset_name), "tp_getset");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_base"), "tp_base");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_dict"), "tp_dict");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_descr_get"), "tp_descr_get", "descrgetfunc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_descr_set"), "tp_descr_set", "descrsetfunc");
|
|
|
|
|
Printf(f, " (Py_ssize_t)offsetof(SwigPyObject, dict), /* tp_dictoffset */\n");
|
|
|
|
|
printSlot(f, tp_init, "tp_init", "initproc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_dictoffset", tp_dictoffset_default), "tp_dictoffset", "Py_ssize_t");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_init", tp_init), "tp_init", "initproc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_alloc"), "tp_alloc", "allocfunc");
|
|
|
|
|
printSlot(f, "0", "tp_new", "newfunc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_new", tp_new), "tp_new", "newfunc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_free"), "tp_free", "freefunc");
|
|
|
|
|
printSlot(f, getSlot(), "tp_is_gc", "inquiry");
|
|
|
|
|
printSlot(f, getSlot(), "tp_bases", "PyObject*");
|
|
|
|
|
printSlot(f, getSlot(), "tp_mro", "PyObject*");
|
|
|
|
|
printSlot(f, getSlot(), "tp_cache", "PyObject*");
|
|
|
|
|
printSlot(f, getSlot(), "tp_subclasses", "PyObject*");
|
|
|
|
|
printSlot(f, getSlot(), "tp_weaklist", "PyObject*");
|
|
|
|
|
printSlot(f, getSlot(), "tp_del", "destructor");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_is_gc"), "tp_is_gc", "inquiry");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_bases"), "tp_bases", "PyObject *");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_mro"), "tp_mro", "PyObject *");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_cache"), "tp_cache", "PyObject *");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_subclasses"), "tp_subclasses", "PyObject *");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_weaklist"), "tp_weaklist", "PyObject *");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_del"), "tp_del", "destructor");
|
|
|
|
|
Printv(f, "#if PY_VERSION_HEX >= 0x02060000\n", NIL);
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_version_tag"), "tp_version_tag", "int");
|
|
|
|
|
Printv(f, "#endif\n", NIL);
|
|
|
|
|
@ -4132,13 +4139,13 @@ public:
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_finalize"), "tp_finalize", "destructor");
|
|
|
|
|
Printv(f, "#endif\n", NIL);
|
|
|
|
|
Printv(f, "#ifdef COUNT_ALLOCS\n", NIL);
|
|
|
|
|
printSlot(f, getSlot(), "tp_allocs", "Py_ssize_t");
|
|
|
|
|
printSlot(f, getSlot(), "tp_frees", "Py_ssize_t");
|
|
|
|
|
printSlot(f, getSlot(), "tp_maxalloc", "Py_ssize_t");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_allocs"), "tp_allocs", "Py_ssize_t");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_frees"), "tp_frees", "Py_ssize_t");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_maxalloc"), "tp_maxalloc", "Py_ssize_t");
|
|
|
|
|
Printv(f, "#if PY_VERSION_HEX >= 0x02050000\n", NIL);
|
|
|
|
|
printSlot(f, getSlot(), "tp_prev", "struct _typeobject*");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_prev"), "tp_prev");
|
|
|
|
|
Printv(f, "#endif\n", NIL);
|
|
|
|
|
printSlot(f, getSlot(), "tp_next", "struct _typeobject*");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:tp_next"), "tp_next");
|
|
|
|
|
Printv(f, "#endif\n", NIL);
|
|
|
|
|
Printf(f, " },\n");
|
|
|
|
|
|
|
|
|
|
@ -4177,7 +4184,7 @@ public:
|
|
|
|
|
Printv(f, "#endif\n", NIL);
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:nb_int"), "nb_int", "unaryfunc");
|
|
|
|
|
Printv(f, "#if PY_VERSION_HEX >= 0x03000000\n", NIL);
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:nb_reserved"), "nb_reserved", "void*");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:nb_reserved"), "nb_reserved", "void *");
|
|
|
|
|
Printv(f, "#else\n", NIL);
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:nb_long"), "nb_long", "unaryfunc");
|
|
|
|
|
Printv(f, "#endif\n", NIL);
|
|
|
|
|
@ -4226,13 +4233,13 @@ public:
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:sq_repeat"), "sq_repeat", "ssizeargfunc");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:sq_item"), "sq_item", "ssizeargfunc");
|
|
|
|
|
Printv(f, "#if PY_VERSION_HEX >= 0x03000000\n", NIL);
|
|
|
|
|
printSlot(f, getSlot(n, "feature:was_sq_slice"), "was_sq_slice", "void*");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:was_sq_slice"), "was_sq_slice", "void *");
|
|
|
|
|
Printv(f, "#else\n", NIL);
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:sq_slice"), "sq_slice", "ssizessizeargfunc");
|
|
|
|
|
Printv(f, "#endif\n", NIL);
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:sq_ass_item"), "sq_ass_item", "ssizeobjargproc");
|
|
|
|
|
Printv(f, "#if PY_VERSION_HEX >= 0x03000000\n", NIL);
|
|
|
|
|
printSlot(f, getSlot(n, "feature:was_sq_ass_slice"), "was_sq_ass_slice", "void*");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:was_sq_ass_slice"), "was_sq_ass_slice", "void *");
|
|
|
|
|
Printv(f, "#else\n", NIL);
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:sq_ass_slice"), "sq_ass_slice", "ssizessizeobjargproc");
|
|
|
|
|
Printv(f, "#endif\n", NIL);
|
|
|
|
|
@ -4256,13 +4263,13 @@ public:
|
|
|
|
|
Printf(f, " },\n");
|
|
|
|
|
|
|
|
|
|
// PyObject *ht_name, *ht_slots, *ht_qualname;
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:ht_name"), "ht_name", "PyObject*");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:ht_slots"), "ht_slots", "PyObject*");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:ht_name"), "ht_name", "PyObject *");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:ht_slots"), "ht_slots", "PyObject *");
|
|
|
|
|
Printv(f, "#if PY_VERSION_HEX >= 0x03030000\n", NIL);
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:ht_qualname"), "ht_qualname", "PyObject*");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:ht_qualname"), "ht_qualname", "PyObject *");
|
|
|
|
|
|
|
|
|
|
// struct _dictkeysobject *ht_cached_keys;
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:ht_cached_keys"), "ht_cached_keys", "struct _dictkeysobject*");
|
|
|
|
|
printSlot(f, getSlot(n, "feature:python:ht_cached_keys"), "ht_cached_keys");
|
|
|
|
|
Printv(f, "#endif\n", NIL);
|
|
|
|
|
Printf(f, "};\n\n");
|
|
|
|
|
|
|
|
|
|
@ -4281,7 +4288,7 @@ public:
|
|
|
|
|
String *clientdata_klass = NewString("0");
|
|
|
|
|
if (GetFlag(n, "feature:implicitconv")) {
|
|
|
|
|
Clear(clientdata_klass);
|
|
|
|
|
Printf(clientdata_klass, "(PyObject*) &%s_type", templ);
|
|
|
|
|
Printf(clientdata_klass, "(PyObject *) &%s_type", templ);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Printf(f, "SWIGINTERN SwigPyClientData %s_clientdata = {%s, 0, 0, 0, 0, 0, (PyTypeObject *)&%s_type};\n\n", templ, clientdata_klass, templ);
|
|
|
|
|
@ -4295,7 +4302,7 @@ public:
|
|
|
|
|
Printv(f_init, "#endif\n", NIL);
|
|
|
|
|
Printv(f_init, " }\n", NIL);
|
|
|
|
|
Printv(f_init, " Py_INCREF(builtin_pytype);\n", NIL);
|
|
|
|
|
Printf(f_init, " PyModule_AddObject(m, \"%s\", (PyObject*) builtin_pytype);\n", symname);
|
|
|
|
|
Printf(f_init, " PyModule_AddObject(m, \"%s\", (PyObject *)builtin_pytype);\n", symname);
|
|
|
|
|
Printf(f_init, " SwigPyBuiltin_AddPublicSymbol(public_interface, \"%s\");\n", symname);
|
|
|
|
|
Printv(f_init, " d = md;\n", NIL);
|
|
|
|
|
|
|
|
|
|
@ -4306,11 +4313,15 @@ public:
|
|
|
|
|
Delete(mname);
|
|
|
|
|
Delete(pmname);
|
|
|
|
|
Delete(templ);
|
|
|
|
|
Delete(tp_dealloc);
|
|
|
|
|
Delete(tp_flags);
|
|
|
|
|
Delete(py3_tp_flags);
|
|
|
|
|
Delete(tp_flags_py3);
|
|
|
|
|
Delete(tp_as_buffer);
|
|
|
|
|
Delete(tp_as_mapping);
|
|
|
|
|
Delete(tp_as_sequence);
|
|
|
|
|
Delete(tp_as_number);
|
|
|
|
|
Delete(quoted_symname);
|
|
|
|
|
Delete(quoted_tp_doc_str);
|
|
|
|
|
Delete(tp_init);
|
|
|
|
|
Delete(clientdata_klass);
|
|
|
|
|
Delete(richcompare_func);
|
|
|
|
|
Delete(getset_name);
|
|
|
|
|
@ -4483,7 +4494,7 @@ public:
|
|
|
|
|
SwigType_add_pointer(p_real_classname);
|
|
|
|
|
String *mangle = SwigType_manglestr(p_real_classname);
|
|
|
|
|
String *descriptor = NewStringf("SWIGTYPE%s", mangle);
|
|
|
|
|
Printv(none_comparison, "self->ob_type != ((SwigPyClientData*) (", descriptor, ")->clientdata)->pytype", NIL);
|
|
|
|
|
Printv(none_comparison, "self->ob_type != ((SwigPyClientData *)(", descriptor, ")->clientdata)->pytype", NIL);
|
|
|
|
|
Delete(descriptor);
|
|
|
|
|
Delete(mangle);
|
|
|
|
|
Delete(p_real_classname);
|
|
|
|
|
@ -4505,17 +4516,22 @@ public:
|
|
|
|
|
SwigType *realct = Copy(real_classname);
|
|
|
|
|
SwigType_add_pointer(realct);
|
|
|
|
|
SwigType_remember(realct);
|
|
|
|
|
if (!builtin) {
|
|
|
|
|
if (builtin) {
|
|
|
|
|
Printv(f_wrappers, builtin_closures_code, NIL);
|
|
|
|
|
Delete(builtin_closures_code);
|
|
|
|
|
builtin_closures_code = NewString("");
|
|
|
|
|
Clear(builtin_closures);
|
|
|
|
|
} else {
|
|
|
|
|
Printv(f_wrappers, "SWIGINTERN PyObject *", class_name, "_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {\n", NIL);
|
|
|
|
|
Printv(f_wrappers, " PyObject *obj;\n", NIL);
|
|
|
|
|
if (modernargs) {
|
|
|
|
|
if (fastunpack) {
|
|
|
|
|
Printv(f_wrappers, " if (!SWIG_Python_UnpackTuple(args,(char*)\"swigregister\", 1, 1,&obj)) return NULL;\n", NIL);
|
|
|
|
|
Printv(f_wrappers, " if (!SWIG_Python_UnpackTuple(args,(char *)\"swigregister\", 1, 1,&obj)) return NULL;\n", NIL);
|
|
|
|
|
} else {
|
|
|
|
|
Printv(f_wrappers, " if (!PyArg_UnpackTuple(args,(char*)\"swigregister\", 1, 1,&obj)) return NULL;\n", NIL);
|
|
|
|
|
Printv(f_wrappers, " if (!PyArg_UnpackTuple(args,(char *)\"swigregister\", 1, 1,&obj)) return NULL;\n", NIL);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
Printv(f_wrappers, " if (!PyArg_ParseTuple(args,(char*)\"O:swigregister\", &obj)) return NULL;\n", NIL);
|
|
|
|
|
Printv(f_wrappers, " if (!PyArg_ParseTuple(args,(char *)\"O:swigregister\", &obj)) return NULL;\n", NIL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Printv(f_wrappers,
|
|
|
|
|
@ -4658,13 +4674,13 @@ public:
|
|
|
|
|
int argcount = Getattr(n, "python:argcount") ? atoi(Char(Getattr(n, "python:argcount"))) : 2;
|
|
|
|
|
String *ds = have_docstring(n) ? cdocstring(n, AUTODOC_FUNC) : NewString("");
|
|
|
|
|
if (check_kwargs(n)) {
|
|
|
|
|
Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, METH_VARARGS|METH_KEYWORDS, (char*) \"%s\" },\n", symname, wname, ds);
|
|
|
|
|
Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, METH_VARARGS|METH_KEYWORDS, (char *) \"%s\" },\n", symname, wname, ds);
|
|
|
|
|
} else if (argcount == 0) {
|
|
|
|
|
Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, METH_NOARGS, (char*) \"%s\" },\n", symname, wname, ds);
|
|
|
|
|
Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, METH_NOARGS, (char *) \"%s\" },\n", symname, wname, ds);
|
|
|
|
|
} else if (argcount == 1) {
|
|
|
|
|
Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, METH_O, (char*) \"%s\" },\n", symname, wname, ds);
|
|
|
|
|
Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, METH_O, (char *) \"%s\" },\n", symname, wname, ds);
|
|
|
|
|
} else {
|
|
|
|
|
Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, METH_VARARGS, (char*) \"%s\" },\n", symname, wname, ds);
|
|
|
|
|
Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, METH_VARARGS, (char *) \"%s\" },\n", symname, wname, ds);
|
|
|
|
|
}
|
|
|
|
|
Delete(fullname);
|
|
|
|
|
Delete(wname);
|
|
|
|
|
@ -4765,7 +4781,7 @@ public:
|
|
|
|
|
Append(pyflags, "METH_VARARGS");
|
|
|
|
|
if (have_docstring(n)) {
|
|
|
|
|
String *ds = cdocstring(n, AUTODOC_STATICFUNC);
|
|
|
|
|
Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, %s, (char*) \"%s\" },\n", symname, wname, pyflags, ds);
|
|
|
|
|
Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, %s, (char *) \"%s\" },\n", symname, wname, pyflags, ds);
|
|
|
|
|
Delete(ds);
|
|
|
|
|
} else {
|
|
|
|
|
Printf(builtin_methods, " { \"%s\", (PyCFunction) %s, %s, \"\" },\n", symname, wname, pyflags);
|
|
|
|
|
@ -4967,12 +4983,10 @@ public:
|
|
|
|
|
|
|
|
|
|
if (builtin && in_class) {
|
|
|
|
|
Node *cls = Swig_methodclass(n);
|
|
|
|
|
// Use the destructor for the tp_dealloc slot unless a user overrides it with another method
|
|
|
|
|
if (!Getattr(cls, "feature:python:tp_dealloc")) {
|
|
|
|
|
String *dealloc = Swig_name_destroy(NSPACE_TODO, symname);
|
|
|
|
|
String *wdealloc = Swig_name_wrapper(dealloc);
|
|
|
|
|
Setattr(cls, "feature:python:tp_dealloc", wdealloc);
|
|
|
|
|
Delete(wdealloc);
|
|
|
|
|
Delete(dealloc);
|
|
|
|
|
Setattr(n, "feature:python:slot", "tp_dealloc");
|
|
|
|
|
Setattr(n, "feature:python:slot:functype", "destructor");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -5552,9 +5566,9 @@ int PYTHON::classDirectorMethod(Node *n, Node *parent, String *super) {
|
|
|
|
|
Append(w->code, "}\n");
|
|
|
|
|
Append(w->code, "#if defined(SWIG_PYTHON_DIRECTOR_VTABLE)\n");
|
|
|
|
|
Printf(w->code, "const size_t swig_method_index = %d;\n", director_method_index++);
|
|
|
|
|
Printf(w->code, "const char * const swig_method_name = \"%s\";\n", pyname);
|
|
|
|
|
Printf(w->code, "const char *const swig_method_name = \"%s\";\n", pyname);
|
|
|
|
|
|
|
|
|
|
Append(w->code, "PyObject* method = swig_get_method(swig_method_index, swig_method_name);\n");
|
|
|
|
|
Append(w->code, "PyObject *method = swig_get_method(swig_method_index, swig_method_name);\n");
|
|
|
|
|
if (Len(parse_args) > 0) {
|
|
|
|
|
if (use_parse || !modernargs) {
|
|
|
|
|
Printf(w->code, "swig::SwigVar_PyObject %s = PyObject_CallFunction(method, (char *)\"(%s)\" %s);\n", Swig_cresult_name(), parse_args, arglist);
|
|
|
|
|
@ -5564,7 +5578,7 @@ int PYTHON::classDirectorMethod(Node *n, Node *parent, String *super) {
|
|
|
|
|
} else {
|
|
|
|
|
if (modernargs) {
|
|
|
|
|
Append(w->code, "swig::SwigVar_PyObject args = PyTuple_New(0);\n");
|
|
|
|
|
Printf(w->code, "swig::SwigVar_PyObject %s = PyObject_Call(method, (PyObject*) args, NULL);\n", Swig_cresult_name());
|
|
|
|
|
Printf(w->code, "swig::SwigVar_PyObject %s = PyObject_Call(method, (PyObject *) args, NULL);\n", Swig_cresult_name());
|
|
|
|
|
} else {
|
|
|
|
|
Printf(w->code, "swig::SwigVar_PyObject %s = PyObject_CallFunction(method, NULL, NULL);\n", Swig_cresult_name());
|
|
|
|
|
}
|
|
|
|
|
|