blob: 533db46efa81c07c468be97f4c1f7b316bb676f8 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Module object implementation */
3
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004#include "Python.h"
Tim Peters6d6c1a32001-08-02 04:15:00 +00005#include "structmember.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00006
Martin v. Löwis1a214512008-06-11 05:26:20 +00007static Py_ssize_t max_module_number;
8
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00009typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000010 PyObject_HEAD
11 PyObject *md_dict;
12 struct PyModuleDef *md_def;
13 void *md_state;
Guido van Rossumc0b618a1997-05-02 03:12:38 +000014} PyModuleObject;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000015
Neil Schemenauerf23473f2001-10-21 22:28:58 +000016static PyMemberDef module_members[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000017 {"__dict__", T_OBJECT, offsetof(PyModuleObject, md_dict), READONLY},
18 {0}
Tim Peters6d6c1a32001-08-02 04:15:00 +000019};
20
Martin v. Löwis1a214512008-06-11 05:26:20 +000021static PyTypeObject moduledef_type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000022 PyVarObject_HEAD_INIT(&PyType_Type, 0)
23 "moduledef", /* tp_name */
24 sizeof(struct PyModuleDef), /* tp_size */
25 0, /* tp_itemsize */
Martin v. Löwis1a214512008-06-11 05:26:20 +000026};
27
28
Guido van Rossumc0b618a1997-05-02 03:12:38 +000029PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +000030PyModule_New(const char *name)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000031{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000032 PyModuleObject *m;
33 PyObject *nameobj;
34 m = PyObject_GC_New(PyModuleObject, &PyModule_Type);
35 if (m == NULL)
36 return NULL;
37 m->md_def = NULL;
38 m->md_state = NULL;
39 nameobj = PyUnicode_FromString(name);
40 m->md_dict = PyDict_New();
41 if (m->md_dict == NULL || nameobj == NULL)
42 goto fail;
43 if (PyDict_SetItemString(m->md_dict, "__name__", nameobj) != 0)
44 goto fail;
45 if (PyDict_SetItemString(m->md_dict, "__doc__", Py_None) != 0)
46 goto fail;
47 if (PyDict_SetItemString(m->md_dict, "__package__", Py_None) != 0)
48 goto fail;
49 Py_DECREF(nameobj);
50 PyObject_GC_Track(m);
51 return (PyObject *)m;
Guido van Rossumc45611d1993-11-17 22:58:56 +000052
53 fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000054 Py_XDECREF(nameobj);
55 Py_DECREF(m);
56 return NULL;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000057}
58
Martin v. Löwis1a214512008-06-11 05:26:20 +000059PyObject *
60PyModule_Create2(struct PyModuleDef* module, int module_api_version)
61{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000062 PyObject *d, *v, *n;
63 PyMethodDef *ml;
64 const char* name;
65 PyModuleObject *m;
R. David Murrayce4b1702010-12-14 23:06:25 +000066 PyInterpreterState *interp = PyThreadState_Get()->interp;
67 if (interp->modules == NULL)
68 Py_FatalError("Python import machinery not initialized");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000069 if (PyType_Ready(&moduledef_type) < 0)
70 return NULL;
71 if (module->m_base.m_index == 0) {
72 max_module_number++;
73 Py_REFCNT(module) = 1;
74 Py_TYPE(module) = &moduledef_type;
75 module->m_base.m_index = max_module_number;
76 }
77 name = module->m_name;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000078 if (module_api_version != PYTHON_API_VERSION && module_api_version != PYTHON_ABI_VERSION) {
Victor Stinner4a2b7a12010-08-13 14:03:48 +000079 int err;
80 err = PyErr_WarnFormat(PyExc_RuntimeWarning, 1,
81 "Python C API version mismatch for module %.100s: "
82 "This Python has API version %d, module %.100s has version %d.",
83 name,
84 PYTHON_API_VERSION, name, module_api_version);
85 if (err)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000086 return NULL;
87 }
88 /* Make sure name is fully qualified.
Martin v. Löwis1a214512008-06-11 05:26:20 +000089
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000090 This is a bit of a hack: when the shared library is loaded,
91 the module name is "package.module", but the module calls
92 PyModule_Create*() with just "module" for the name. The shared
93 library loader squirrels away the true name of the module in
94 _Py_PackageContext, and PyModule_Create*() will substitute this
95 (if the name actually matches).
96 */
97 if (_Py_PackageContext != NULL) {
98 char *p = strrchr(_Py_PackageContext, '.');
99 if (p != NULL && strcmp(module->m_name, p+1) == 0) {
100 name = _Py_PackageContext;
101 _Py_PackageContext = NULL;
102 }
103 }
104 if ((m = (PyModuleObject*)PyModule_New(name)) == NULL)
105 return NULL;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000106
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000107 if (module->m_size > 0) {
108 m->md_state = PyMem_MALLOC(module->m_size);
109 if (!m->md_state) {
110 PyErr_NoMemory();
111 Py_DECREF(m);
112 return NULL;
113 }
114 memset(m->md_state, 0, module->m_size);
115 }
116
117 d = PyModule_GetDict((PyObject*)m);
118 if (module->m_methods != NULL) {
119 n = PyUnicode_FromString(name);
Meador Inge29e49d62012-07-19 13:45:43 -0500120 if (n == NULL) {
121 Py_DECREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000122 return NULL;
Meador Inge29e49d62012-07-19 13:45:43 -0500123 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000124 for (ml = module->m_methods; ml->ml_name != NULL; ml++) {
125 if ((ml->ml_flags & METH_CLASS) ||
126 (ml->ml_flags & METH_STATIC)) {
127 PyErr_SetString(PyExc_ValueError,
128 "module functions cannot set"
129 " METH_CLASS or METH_STATIC");
130 Py_DECREF(n);
Meador Inge29e49d62012-07-19 13:45:43 -0500131 Py_DECREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000132 return NULL;
133 }
134 v = PyCFunction_NewEx(ml, (PyObject*)m, n);
135 if (v == NULL) {
136 Py_DECREF(n);
Meador Inge29e49d62012-07-19 13:45:43 -0500137 Py_DECREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000138 return NULL;
139 }
140 if (PyDict_SetItemString(d, ml->ml_name, v) != 0) {
141 Py_DECREF(v);
142 Py_DECREF(n);
Meador Inge29e49d62012-07-19 13:45:43 -0500143 Py_DECREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000144 return NULL;
145 }
146 Py_DECREF(v);
147 }
148 Py_DECREF(n);
149 }
150 if (module->m_doc != NULL) {
151 v = PyUnicode_FromString(module->m_doc);
152 if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0) {
153 Py_XDECREF(v);
Meador Inge29e49d62012-07-19 13:45:43 -0500154 Py_DECREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000155 return NULL;
156 }
157 Py_DECREF(v);
158 }
159 m->md_def = module;
160 return (PyObject*)m;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000161}
162
163
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000164PyObject *
Fred Drakeee238b92000-07-09 06:03:25 +0000165PyModule_GetDict(PyObject *m)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000166{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000167 PyObject *d;
168 if (!PyModule_Check(m)) {
169 PyErr_BadInternalCall();
170 return NULL;
171 }
172 d = ((PyModuleObject *)m) -> md_dict;
173 if (d == NULL)
174 ((PyModuleObject *)m) -> md_dict = d = PyDict_New();
175 return d;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000176}
177
Alexander Belopolsky532d0912010-12-10 18:14:16 +0000178const char *
179PyModule_GetName(PyObject *m)
Guido van Rossum0558a201990-10-26 15:00:11 +0000180{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000181 PyObject *d;
182 PyObject *nameobj;
183 if (!PyModule_Check(m)) {
184 PyErr_BadArgument();
185 return NULL;
186 }
187 d = ((PyModuleObject *)m)->md_dict;
188 if (d == NULL ||
189 (nameobj = PyDict_GetItemString(d, "__name__")) == NULL ||
190 !PyUnicode_Check(nameobj))
191 {
192 PyErr_SetString(PyExc_SystemError, "nameless module");
193 return NULL;
194 }
Alexander Belopolsky532d0912010-12-10 18:14:16 +0000195 return _PyUnicode_AsString(nameobj);
Guido van Rossum0558a201990-10-26 15:00:11 +0000196}
197
Victor Stinner6c00c142010-08-17 23:37:11 +0000198PyObject*
199PyModule_GetFilenameObject(PyObject *m)
Guido van Rossum98cc19f1999-02-15 14:47:16 +0000200{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000201 PyObject *d;
202 PyObject *fileobj;
203 if (!PyModule_Check(m)) {
204 PyErr_BadArgument();
205 return NULL;
206 }
207 d = ((PyModuleObject *)m)->md_dict;
208 if (d == NULL ||
209 (fileobj = PyDict_GetItemString(d, "__file__")) == NULL ||
210 !PyUnicode_Check(fileobj))
211 {
212 PyErr_SetString(PyExc_SystemError, "module filename missing");
213 return NULL;
214 }
Victor Stinner6c00c142010-08-17 23:37:11 +0000215 Py_INCREF(fileobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000216 return fileobj;
Victor Stinner8124feb2010-05-07 00:50:12 +0000217}
218
219const char *
220PyModule_GetFilename(PyObject *m)
221{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000222 PyObject *fileobj;
Victor Stinner6c00c142010-08-17 23:37:11 +0000223 char *utf8;
224 fileobj = PyModule_GetFilenameObject(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000225 if (fileobj == NULL)
226 return NULL;
Victor Stinner6c00c142010-08-17 23:37:11 +0000227 utf8 = _PyUnicode_AsString(fileobj);
228 Py_DECREF(fileobj);
229 return utf8;
Guido van Rossum98cc19f1999-02-15 14:47:16 +0000230}
231
Martin v. Löwis1a214512008-06-11 05:26:20 +0000232PyModuleDef*
233PyModule_GetDef(PyObject* m)
234{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000235 if (!PyModule_Check(m)) {
236 PyErr_BadArgument();
237 return NULL;
238 }
239 return ((PyModuleObject *)m)->md_def;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000240}
241
242void*
243PyModule_GetState(PyObject* m)
244{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000245 if (!PyModule_Check(m)) {
246 PyErr_BadArgument();
247 return NULL;
248 }
249 return ((PyModuleObject *)m)->md_state;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000250}
251
Guido van Rossumf1dc0611998-02-19 20:51:52 +0000252void
Fred Drakeee238b92000-07-09 06:03:25 +0000253_PyModule_Clear(PyObject *m)
Guido van Rossumf1dc0611998-02-19 20:51:52 +0000254{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000255 /* To make the execution order of destructors for global
256 objects a bit more predictable, we first zap all objects
257 whose name starts with a single underscore, before we clear
258 the entire dictionary. We zap them by replacing them with
259 None, rather than deleting them from the dictionary, to
260 avoid rehashing the dictionary (to some extent). */
Guido van Rossumf1dc0611998-02-19 20:51:52 +0000261
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000262 Py_ssize_t pos;
263 PyObject *key, *value;
264 PyObject *d;
Guido van Rossumf1dc0611998-02-19 20:51:52 +0000265
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000266 d = ((PyModuleObject *)m)->md_dict;
267 if (d == NULL)
268 return;
Guido van Rossumf1dc0611998-02-19 20:51:52 +0000269
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000270 /* First, clear only names starting with a single underscore */
271 pos = 0;
272 while (PyDict_Next(d, &pos, &key, &value)) {
273 if (value != Py_None && PyUnicode_Check(key)) {
Victor Stinnerf3f22a22010-05-19 00:03:09 +0000274 Py_UNICODE *u = PyUnicode_AS_UNICODE(key);
275 if (u[0] == '_' && u[1] != '_') {
276 if (Py_VerboseFlag > 1) {
277 const char *s = _PyUnicode_AsString(key);
278 if (s != NULL)
279 PySys_WriteStderr("# clear[1] %s\n", s);
280 else
281 PyErr_Clear();
282 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000283 PyDict_SetItem(d, key, Py_None);
284 }
285 }
286 }
Guido van Rossumf1dc0611998-02-19 20:51:52 +0000287
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000288 /* Next, clear all names except for __builtins__ */
289 pos = 0;
290 while (PyDict_Next(d, &pos, &key, &value)) {
291 if (value != Py_None && PyUnicode_Check(key)) {
Victor Stinnerf3f22a22010-05-19 00:03:09 +0000292 Py_UNICODE *u = PyUnicode_AS_UNICODE(key);
293 if (u[0] != '_'
294 || PyUnicode_CompareWithASCIIString(key, "__builtins__") != 0)
295 {
296 if (Py_VerboseFlag > 1) {
297 const char *s = _PyUnicode_AsString(key);
298 if (s != NULL)
299 PySys_WriteStderr("# clear[2] %s\n", s);
300 else
301 PyErr_Clear();
302 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000303 PyDict_SetItem(d, key, Py_None);
304 }
305 }
306 }
Guido van Rossumf1dc0611998-02-19 20:51:52 +0000307
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000308 /* Note: we leave __builtins__ in place, so that destructors
309 of non-global objects defined in this module can still use
310 builtins, in particularly 'None'. */
Guido van Rossumf1dc0611998-02-19 20:51:52 +0000311
312}
313
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000314/* Methods */
315
Tim Peters6d6c1a32001-08-02 04:15:00 +0000316static int
Guido van Rossumc3a787e2002-06-04 05:52:47 +0000317module_init(PyModuleObject *m, PyObject *args, PyObject *kwds)
Tim Peters6d6c1a32001-08-02 04:15:00 +0000318{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000319 static char *kwlist[] = {"name", "doc", NULL};
320 PyObject *dict, *name = Py_None, *doc = Py_None;
321 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|O:module.__init__",
322 kwlist, &name, &doc))
323 return -1;
324 dict = m->md_dict;
325 if (dict == NULL) {
326 dict = PyDict_New();
327 if (dict == NULL)
328 return -1;
329 m->md_dict = dict;
330 }
331 if (PyDict_SetItemString(dict, "__name__", name) < 0)
332 return -1;
333 if (PyDict_SetItemString(dict, "__doc__", doc) < 0)
334 return -1;
335 return 0;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000336}
337
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000338static void
Fred Drakeee238b92000-07-09 06:03:25 +0000339module_dealloc(PyModuleObject *m)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000340{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000341 PyObject_GC_UnTrack(m);
342 if (m->md_def && m->md_def->m_free)
343 m->md_def->m_free(m);
344 if (m->md_dict != NULL) {
Benjamin Peterson5c4bfc42010-10-12 22:57:59 +0000345 _PyModule_Clear((PyObject *)m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000346 Py_DECREF(m->md_dict);
347 }
348 if (m->md_state != NULL)
349 PyMem_FREE(m->md_state);
350 Py_TYPE(m)->tp_free((PyObject *)m);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000351}
352
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000353static PyObject *
Fred Drakeee238b92000-07-09 06:03:25 +0000354module_repr(PyModuleObject *m)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000355{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000356 const char *name;
Victor Stinner6c00c142010-08-17 23:37:11 +0000357 PyObject *filename, *repr;
Barry Warsaw2907fe62001-08-16 20:39:24 +0000358
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000359 name = PyModule_GetName((PyObject *)m);
360 if (name == NULL) {
361 PyErr_Clear();
362 name = "?";
363 }
Victor Stinner6c00c142010-08-17 23:37:11 +0000364 filename = PyModule_GetFilenameObject((PyObject *)m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000365 if (filename == NULL) {
366 PyErr_Clear();
367 return PyUnicode_FromFormat("<module '%s' (built-in)>", name);
368 }
Victor Stinner6c00c142010-08-17 23:37:11 +0000369 repr = PyUnicode_FromFormat("<module '%s' from '%U'>", name, filename);
370 Py_DECREF(filename);
371 return repr;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000372}
373
Neil Schemenauer10e31cf2001-01-02 15:58:27 +0000374static int
375module_traverse(PyModuleObject *m, visitproc visit, void *arg)
376{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000377 if (m->md_def && m->md_def->m_traverse) {
378 int res = m->md_def->m_traverse((PyObject*)m, visit, arg);
379 if (res)
380 return res;
381 }
382 Py_VISIT(m->md_dict);
383 return 0;
Neil Schemenauer10e31cf2001-01-02 15:58:27 +0000384}
385
Martin v. Löwis1a214512008-06-11 05:26:20 +0000386static int
387module_clear(PyModuleObject *m)
388{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000389 if (m->md_def && m->md_def->m_clear) {
390 int res = m->md_def->m_clear((PyObject*)m);
391 if (res)
392 return res;
393 }
394 Py_CLEAR(m->md_dict);
395 return 0;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000396}
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000397
Martin v. Löwis1a214512008-06-11 05:26:20 +0000398
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000399PyDoc_STRVAR(module_doc,
Guido van Rossumed3e09f2002-06-04 06:02:35 +0000400"module(name[, doc])\n\
401\n\
402Create a module object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000403The name must be a string; the optional doc argument can have any type.");
Guido van Rossumed3e09f2002-06-04 06:02:35 +0000404
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000405PyTypeObject PyModule_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000406 PyVarObject_HEAD_INIT(&PyType_Type, 0)
407 "module", /* tp_name */
408 sizeof(PyModuleObject), /* tp_size */
409 0, /* tp_itemsize */
410 (destructor)module_dealloc, /* tp_dealloc */
411 0, /* tp_print */
412 0, /* tp_getattr */
413 0, /* tp_setattr */
414 0, /* tp_reserved */
415 (reprfunc)module_repr, /* tp_repr */
416 0, /* tp_as_number */
417 0, /* tp_as_sequence */
418 0, /* tp_as_mapping */
419 0, /* tp_hash */
420 0, /* tp_call */
421 0, /* tp_str */
422 PyObject_GenericGetAttr, /* tp_getattro */
423 PyObject_GenericSetAttr, /* tp_setattro */
424 0, /* tp_as_buffer */
425 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
426 Py_TPFLAGS_BASETYPE, /* tp_flags */
427 module_doc, /* tp_doc */
428 (traverseproc)module_traverse, /* tp_traverse */
429 (inquiry)module_clear, /* tp_clear */
430 0, /* tp_richcompare */
431 0, /* tp_weaklistoffset */
432 0, /* tp_iter */
433 0, /* tp_iternext */
434 0, /* tp_methods */
435 module_members, /* tp_members */
436 0, /* tp_getset */
437 0, /* tp_base */
438 0, /* tp_dict */
439 0, /* tp_descr_get */
440 0, /* tp_descr_set */
441 offsetof(PyModuleObject, md_dict), /* tp_dictoffset */
442 (initproc)module_init, /* tp_init */
443 PyType_GenericAlloc, /* tp_alloc */
444 PyType_GenericNew, /* tp_new */
445 PyObject_GC_Del, /* tp_free */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000446};