source: trunk/essentials/dev-lang/python/Objects/moduleobject.c@ 3407

Last change on this file since 3407 was 3225, checked in by bird, 19 years ago

Python 2.5

File size: 6.2 KB
Line 
1
2/* Module object implementation */
3
4#include "Python.h"
5#include "structmember.h"
6
7typedef struct {
8 PyObject_HEAD
9 PyObject *md_dict;
10} PyModuleObject;
11
12static PyMemberDef module_members[] = {
13 {"__dict__", T_OBJECT, offsetof(PyModuleObject, md_dict), READONLY},
14 {0}
15};
16
17PyObject *
18PyModule_New(const char *name)
19{
20 PyModuleObject *m;
21 PyObject *nameobj;
22 m = PyObject_GC_New(PyModuleObject, &PyModule_Type);
23 if (m == NULL)
24 return NULL;
25 nameobj = PyString_FromString(name);
26 m->md_dict = PyDict_New();
27 if (m->md_dict == NULL || nameobj == NULL)
28 goto fail;
29 if (PyDict_SetItemString(m->md_dict, "__name__", nameobj) != 0)
30 goto fail;
31 if (PyDict_SetItemString(m->md_dict, "__doc__", Py_None) != 0)
32 goto fail;
33 Py_DECREF(nameobj);
34 PyObject_GC_Track(m);
35 return (PyObject *)m;
36
37 fail:
38 Py_XDECREF(nameobj);
39 Py_DECREF(m);
40 return NULL;
41}
42
43PyObject *
44PyModule_GetDict(PyObject *m)
45{
46 PyObject *d;
47 if (!PyModule_Check(m)) {
48 PyErr_BadInternalCall();
49 return NULL;
50 }
51 d = ((PyModuleObject *)m) -> md_dict;
52 if (d == NULL)
53 ((PyModuleObject *)m) -> md_dict = d = PyDict_New();
54 return d;
55}
56
57char *
58PyModule_GetName(PyObject *m)
59{
60 PyObject *d;
61 PyObject *nameobj;
62 if (!PyModule_Check(m)) {
63 PyErr_BadArgument();
64 return NULL;