blob: 103ac8314270eeadc2245b135ca02439812a6423 [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);
120 if (n == NULL)
121 return NULL;
122 for (ml = module->m_methods; ml->ml_name != NULL; ml++) {
123 if ((ml->ml_flags & METH_CLASS) ||
124 (ml->ml_flags & METH_STATIC)) {
125 PyErr_SetString(PyExc_ValueError,
126 "module functions cannot set"
127 " METH_CLASS or METH_STATIC");
128 Py_DECREF(n);
129 return NULL;
130 }
131 v = PyCFunction_NewEx(ml, (PyObject*)m, n);
132 if (v == NULL) {
133 Py_DECREF(n);
134 return NULL;
135 }
136 if (PyDict_SetItemString(d, ml->ml_name, v) != 0) {
137 Py_DECREF(v);
138 Py_DECREF(n);
139 return NULL;
140 }
141 Py_DECREF(v);
142 }
143 Py_DECREF(n);
144 }
145 if (module->m_doc != NULL) {
146 v = PyUnicode_FromString(module->m_doc);
147 if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0) {
148 Py_XDECREF(v);
149 return NULL;
150 }
151 Py_DECREF(v);
152 }
153 m->md_def = module;
154 return (PyObject*)m;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000155}
156
157
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000158PyObject *
Fred Drakeee238b92000-07-09 06:03:25 +0000159PyModule_GetDict(PyObject *m)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000160{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000161 PyObject *d;
162 if (!PyModule_Check(m)) {
163 PyErr_BadInternalCall();
164 return NULL;
165 }
166 d = ((PyModuleObject *)m) -> md_dict;
167 if (d == NULL)
168 ((PyModuleObject *)m) -> md_dict = d = PyDict_New();
169 return d;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000170}
171
Victor Stinnerbd475112011-02-23 00:21:43 +0000172PyObject*
173PyModule_GetNameObject(PyObject *m)
Guido van Rossum0558a201990-10-26 15:00:11 +0000174{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000175 PyObject *d;
Victor Stinnerbd475112011-02-23 00:21:43 +0000176 PyObject *name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000177 if (!PyModule_Check(m)) {
178 PyErr_BadArgument();
179 return NULL;
180 }
181 d = ((PyModuleObject *)m)->md_dict;
182 if (d == NULL ||
Victor Stinnerbd475112011-02-23 00:21:43 +0000183 (name = PyDict_GetItemString(d, "__name__")) == NULL ||
184 !PyUnicode_Check(name))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000185 {
186 PyErr_SetString(PyExc_SystemError, "nameless module");
187 return NULL;
188 }
Victor Stinnerbd475112011-02-23 00:21:43 +0000189 Py_INCREF(name);
190 return name;
191}
192
193const char *
194PyModule_GetName(PyObject *m)
195{
196 PyObject *name = PyModule_GetNameObject(m);
197 if (name == NULL)
198 return NULL;
199 Py_DECREF(name); /* module dict has still a reference */
200 return _PyUnicode_AsString(name);
Guido van Rossum0558a201990-10-26 15:00:11 +0000201}
202
Victor Stinner6c00c142010-08-17 23:37:11 +0000203PyObject*
204PyModule_GetFilenameObject(PyObject *m)
Guido van Rossum98cc19f1999-02-15 14:47:16 +0000205{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000206 PyObject *d;
207 PyObject *fileobj;
208 if (!PyModule_Check(m)) {
209 PyErr_BadArgument();
210 return NULL;
211 }
212 d = ((PyModuleObject *)m)->md_dict;
213 if (d == NULL ||
214 (fileobj = PyDict_GetItemString(d, "__file__")) == NULL ||
215 !PyUnicode_Check(fileobj))
216 {
217 PyErr_SetString(PyExc_SystemError, "module filename missing");
218 return NULL;
219 }
Victor Stinner6c00c142010-08-17 23:37:11 +0000220 Py_INCREF(fileobj);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000221 return fileobj;
Victor Stinner8124feb2010-05-07 00:50:12 +0000222}
223
224const char *
225PyModule_GetFilename(PyObject *m)
226{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000227 PyObject *fileobj;
Victor Stinner6c00c142010-08-17 23:37:11 +0000228 char *utf8;
229 fileobj = PyModule_GetFilenameObject(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000230 if (fileobj == NULL)
231 return NULL;
Victor Stinner6c00c142010-08-17 23:37:11 +0000232 utf8 = _PyUnicode_AsString(fileobj);
Victor Stinnerbd475112011-02-23 00:21:43 +0000233 Py_DECREF(fileobj); /* module dict has still a reference */
Victor Stinner6c00c142010-08-17 23:37:11 +0000234 return utf8;
Guido van Rossum98cc19f1999-02-15 14:47:16 +0000235}
236
Martin v. Löwis1a214512008-06-11 05:26:20 +0000237PyModuleDef*
238PyModule_GetDef(PyObject* m)
239{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000240 if (!PyModule_Check(m)) {
241 PyErr_BadArgument();
242 return NULL;
243 }
244 return ((PyModuleObject *)m)->md_def;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000245}
246
247void*
248PyModule_GetState(PyObject* m)
249{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000250 if (!PyModule_Check(m)) {
251 PyErr_BadArgument();
252 return NULL;
253 }
254 return ((PyModuleObject *)m)->md_state;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000255}
256
Guido van Rossumf1dc0611998-02-19 20:51:52 +0000257void
Fred Drakeee238b92000-07-09 06:03:25 +0000258_PyModule_Clear(PyObject *m)
Guido van Rossumf1dc0611998-02-19 20:51:52 +0000259{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000260 /* To make the execution order of destructors for global
261 objects a bit more predictable, we first zap all objects
262 whose name starts with a single underscore, before we clear
263 the entire dictionary. We zap them by replacing them with
264 None, rather than deleting them from the dictionary, to
265 avoid rehashing the dictionary (to some extent). */
Guido van Rossumf1dc0611998-02-19 20:51:52 +0000266
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000267 Py_ssize_t pos;
268 PyObject *key, *value;
269 PyObject *d;
Guido van Rossumf1dc0611998-02-19 20:51:52 +0000270
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000271 d = ((PyModuleObject *)m)->md_dict;
272 if (d == NULL)
273 return;
Guido van Rossumf1dc0611998-02-19 20:51:52 +0000274
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000275 /* First, clear only names starting with a single underscore */
276 pos = 0;
277 while (PyDict_Next(d, &pos, &key, &value)) {
278 if (value != Py_None && PyUnicode_Check(key)) {
Victor Stinnerf3f22a22010-05-19 00:03:09 +0000279 Py_UNICODE *u = PyUnicode_AS_UNICODE(key);
280 if (u[0] == '_' && u[1] != '_') {
281 if (Py_VerboseFlag > 1) {
282 const char *s = _PyUnicode_AsString(key);
283 if (s != NULL)
284 PySys_WriteStderr("# clear[1] %s\n", s);
285 else
286 PyErr_Clear();
287 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000288 PyDict_SetItem(d, key, Py_None);
289 }
290 }
291 }
Guido van Rossumf1dc0611998-02-19 20:51:52 +0000292
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000293 /* Next, clear all names except for __builtins__ */
294 pos = 0;
295 while (PyDict_Next(d, &pos, &key, &value)) {
296 if (value != Py_None && PyUnicode_Check(key)) {
Victor Stinnerf3f22a22010-05-19 00:03:09 +0000297 Py_UNICODE *u = PyUnicode_AS_UNICODE(key);
298 if (u[0] != '_'
299 || PyUnicode_CompareWithASCIIString(key, "__builtins__") != 0)
300 {
301 if (Py_VerboseFlag > 1) {
302 const char *s = _PyUnicode_AsString(key);
303 if (s != NULL)
304 PySys_WriteStderr("# clear[2] %s\n", s);
305 else
306 PyErr_Clear();
307 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000308 PyDict_SetItem(d, key, Py_None);
309 }
310 }
311 }
Guido van Rossumf1dc0611998-02-19 20:51:52 +0000312
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000313 /* Note: we leave __builtins__ in place, so that destructors
314 of non-global objects defined in this module can still use
315 builtins, in particularly 'None'. */
Guido van Rossumf1dc0611998-02-19 20:51:52 +0000316
317}
318
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000319/* Methods */
320
Tim Peters6d6c1a32001-08-02 04:15:00 +0000321static int
Guido van Rossumc3a787e2002-06-04 05:52:47 +0000322module_init(PyModuleObject *m, PyObject *args, PyObject *kwds)
Tim Peters6d6c1a32001-08-02 04:15:00 +0000323{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000324 static char *kwlist[] = {"name", "doc", NULL};
325 PyObject *dict, *name = Py_None, *doc = Py_None;
326 if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|O:module.__init__",
327 kwlist, &name, &doc))
328 return -1;
329 dict = m->md_dict;
330 if (dict == NULL) {
331 dict = PyDict_New();
332 if (dict == NULL)
333 return -1;
334 m->md_dict = dict;
335 }
336 if (PyDict_SetItemString(dict, "__name__", name) < 0)
337 return -1;
338 if (PyDict_SetItemString(dict, "__doc__", doc) < 0)
339 return -1;
340 return 0;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000341}
342
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000343static void
Fred Drakeee238b92000-07-09 06:03:25 +0000344module_dealloc(PyModuleObject *m)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000345{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000346 PyObject_GC_UnTrack(m);
347 if (m->md_def && m->md_def->m_free)
348 m->md_def->m_free(m);
349 if (m->md_dict != NULL) {
Benjamin Peterson5c4bfc42010-10-12 22:57:59 +0000350 _PyModule_Clear((PyObject *)m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000351 Py_DECREF(m->md_dict);
352 }
353 if (m->md_state != NULL)
354 PyMem_FREE(m->md_state);
355 Py_TYPE(m)->tp_free((PyObject *)m);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000356}
357
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000358static PyObject *
Fred Drakeee238b92000-07-09 06:03:25 +0000359module_repr(PyModuleObject *m)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000360{
Victor Stinnerbd475112011-02-23 00:21:43 +0000361 PyObject *name, *filename, *repr;
Barry Warsaw2907fe62001-08-16 20:39:24 +0000362
Victor Stinnerbd475112011-02-23 00:21:43 +0000363 name = PyModule_GetNameObject((PyObject *)m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000364 if (name == NULL) {
365 PyErr_Clear();
Victor Stinnerbd475112011-02-23 00:21:43 +0000366 name = PyUnicode_FromStringAndSize("?", 1);
367 if (name == NULL)
368 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000369 }
Victor Stinner6c00c142010-08-17 23:37:11 +0000370 filename = PyModule_GetFilenameObject((PyObject *)m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000371 if (filename == NULL) {
372 PyErr_Clear();
Victor Stinnerbd475112011-02-23 00:21:43 +0000373 repr = PyUnicode_FromFormat("<module %R (built-in)>", name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000374 }
Victor Stinnerbd475112011-02-23 00:21:43 +0000375 else {
376 repr = PyUnicode_FromFormat("<module %R from %R>", name, filename);
377 Py_DECREF(filename);
378 }
379 Py_DECREF(name);
Victor Stinner6c00c142010-08-17 23:37:11 +0000380 return repr;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000381}
382
Neil Schemenauer10e31cf2001-01-02 15:58:27 +0000383static int
384module_traverse(PyModuleObject *m, visitproc visit, void *arg)
385{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000386 if (m->md_def && m->md_def->m_traverse) {
387 int res = m->md_def->m_traverse((PyObject*)m, visit, arg);
388 if (res)
389 return res;
390 }
391 Py_VISIT(m->md_dict);
392 return 0;
Neil Schemenauer10e31cf2001-01-02 15:58:27 +0000393}
394
Martin v. Löwis1a214512008-06-11 05:26:20 +0000395static int
396module_clear(PyModuleObject *m)
397{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000398 if (m->md_def && m->md_def->m_clear) {
399 int res = m->md_def->m_clear((PyObject*)m);
400 if (res)
401 return res;
402 }
403 Py_CLEAR(m->md_dict);
404 return 0;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000405}
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000406
Martin v. Löwis1a214512008-06-11 05:26:20 +0000407
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000408PyDoc_STRVAR(module_doc,
Guido van Rossumed3e09f2002-06-04 06:02:35 +0000409"module(name[, doc])\n\
410\n\
411Create a module object.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000412The name must be a string; the optional doc argument can have any type.");
Guido van Rossumed3e09f2002-06-04 06:02:35 +0000413
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000414PyTypeObject PyModule_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000415 PyVarObject_HEAD_INIT(&PyType_Type, 0)
416 "module", /* tp_name */
417 sizeof(PyModuleObject), /* tp_size */
418 0, /* tp_itemsize */
419 (destructor)module_dealloc, /* tp_dealloc */
420 0, /* tp_print */
421 0, /* tp_getattr */
422 0, /* tp_setattr */
423 0, /* tp_reserved */
424 (reprfunc)module_repr, /* tp_repr */
425 0, /* tp_as_number */
426 0, /* tp_as_sequence */
427 0, /* tp_as_mapping */
428 0, /* tp_hash */
429 0, /* tp_call */
430 0, /* tp_str */
431 PyObject_GenericGetAttr, /* tp_getattro */
432 PyObject_GenericSetAttr, /* tp_setattro */
433 0, /* tp_as_buffer */
434 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
435 Py_TPFLAGS_BASETYPE, /* tp_flags */
436 module_doc, /* tp_doc */
437 (traverseproc)module_traverse, /* tp_traverse */
438 (inquiry)module_clear, /* tp_clear */
439 0, /* tp_richcompare */
440 0, /* tp_weaklistoffset */
441 0, /* tp_iter */
442 0, /* tp_iternext */
443 0, /* tp_methods */
444 module_members, /* tp_members */
445 0, /* tp_getset */
446 0, /* tp_base */
447 0, /* tp_dict */
448 0, /* tp_descr_get */
449 0, /* tp_descr_set */
450 offsetof(PyModuleObject, md_dict), /* tp_dictoffset */
451 (initproc)module_init, /* tp_init */
452 PyType_GenericAlloc, /* tp_alloc */
453 PyType_GenericNew, /* tp_new */
454 PyObject_GC_Del, /* tp_free */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000455};