mirror of
https://github.com/python/cpython.git
synced 2025-10-28 01:00:34 +00:00
New newmethodobject() interface takes struct methodlist pointer
instead of individual components; initmodule3() now has doc string argument as well
This commit is contained in:
parent
1f4fa50176
commit
50620fa9b8
1 changed files with 14 additions and 15 deletions
|
|
@ -33,40 +33,39 @@ typedef extended va_double;
|
|||
typedef double va_double;
|
||||
#endif
|
||||
|
||||
|
||||
/* initmodule2() has an additional parameter, 'passthrough', which is
|
||||
passed as 'self' to functions defined in the module. This is used
|
||||
e.g. by dynamically loaded modules on the Mac. */
|
||||
/* initmodule3() has two additional parameters:
|
||||
- doc is the documentation string;
|
||||
- passthrough is passed as self to functions defined in the module.
|
||||
*/
|
||||
|
||||
object *
|
||||
initmodule2(name, methods, passthrough)
|
||||
initmodule3(name, methods, doc, passthrough)
|
||||
char *name;
|
||||
struct methodlist *methods;
|
||||
char *doc;
|
||||
object *passthrough;
|
||||
{
|
||||
object *m, *d, *v;
|
||||
struct methodlist *ml;
|
||||
char *namebuf;
|
||||
if ((m = add_module(name)) == NULL) {
|
||||
fprintf(stderr, "initializing module: %s\n", name);
|
||||
fatal("can't create a module");
|
||||
}
|
||||
d = getmoduledict(m);
|
||||
for (ml = methods; ml->ml_name != NULL; ml++) {
|
||||
namebuf = NEW(char, strlen(name) + strlen(ml->ml_name) + 2);
|
||||
if (namebuf == NULL)
|
||||
fatal("out of mem for method name");
|
||||
sprintf(namebuf, "%s.%s", name, ml->ml_name);
|
||||
v = newmethodobject(namebuf, ml->ml_meth,
|
||||
(object *)passthrough,
|
||||
(ml->ml_varargs ? METH_VARARGS : 0) |
|
||||
METH_FREENAME);
|
||||
v = newmethodobject(ml, passthrough);
|
||||
if (v == NULL || dictinsert(d, ml->ml_name, v) != 0) {
|
||||
fprintf(stderr, "initializing module: %s\n", name);
|
||||
fatal("can't initialize module");
|
||||
}
|
||||
DECREF(v);
|
||||
}
|
||||
if (doc != NULL) {
|
||||
v = newstringobject(doc);
|
||||
if (v == NULL || dictinsert(d, "__doc__", v) != 0)
|
||||
fatal("can't add doc string");
|
||||
DECREF(v);
|
||||
}
|
||||
return m;
|
||||
}
|
||||
|
||||
|
|
@ -77,7 +76,7 @@ initmodule(name, methods)
|
|||
char *name;
|
||||
struct methodlist *methods;
|
||||
{
|
||||
return initmodule2(name, methods, (object *)NULL);
|
||||
return initmodule3(name, methods, (char *)NULL, (object *)NULL);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue