annotate Modules/newmodule.c @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents ee3ac9e0a032
children f21867f8035b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
1 /***********************************************************
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
3 The Netherlands.
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
4
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
5 All Rights Reserved
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
6
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
7 Permission to use, copy, modify, and distribute this software and its
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
8 documentation for any purpose and without fee is hereby granted,
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
9 provided that the above copyright notice appear in all copies and that
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
10 both that copyright notice and this permission notice appear in
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
11 supporting documentation, and that the names of Stichting Mathematisch
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
12 Centrum or CWI or Corporation for National Research Initiatives or
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
13 CNRI not be used in advertising or publicity pertaining to
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
14 distribution of the software without specific, written prior
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
15 permission.
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
16
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
17 While CWI is the initial source for this software, a modified version
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
18 is made available by the Corporation for National Research Initiatives
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
19 (CNRI) at the Internet address ftp://ftp.python.org.
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
20
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
21 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
22 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
23 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
24 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
25 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
26 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
27 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 3678
diff changeset
28 PERFORMANCE OF THIS SOFTWARE.
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
29
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
30 ******************************************************************/
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
31
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
32 /* Module new -- create new objects of various types */
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
33
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
34 #include "Python.h"
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 #include "compile.h"
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
36
3678
bddbaa51aa5a Added new.instance(class, dict).
Guido van Rossum <guido@python.org>
parents: 3337
diff changeset
37 static char new_instance_doc[] =
bddbaa51aa5a Added new.instance(class, dict).
Guido van Rossum <guido@python.org>
parents: 3337
diff changeset
38 "Create an instance object from (CLASS, DICT) without calling its __init__().";
bddbaa51aa5a Added new.instance(class, dict).
Guido van Rossum <guido@python.org>
parents: 3337
diff changeset
39
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
40 static PyObject *
3678
bddbaa51aa5a Added new.instance(class, dict).
Guido van Rossum <guido@python.org>
parents: 3337
diff changeset
41 new_instance(unused, args)
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
42 PyObject* unused;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
43 PyObject* args;
3678
bddbaa51aa5a Added new.instance(class, dict).
Guido van Rossum <guido@python.org>
parents: 3337
diff changeset
44 {
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
45 PyObject* klass;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
46 PyObject *dict;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
47 PyInstanceObject *inst;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
48 if (!PyArg_ParseTuple(args, "O!O!",
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
49 &PyClass_Type, &klass,
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
50 &PyDict_Type, &dict))
3678
bddbaa51aa5a Added new.instance(class, dict).
Guido van Rossum <guido@python.org>
parents: 3337
diff changeset
51 return NULL;
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
52 inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
3678
bddbaa51aa5a Added new.instance(class, dict).
Guido van Rossum <guido@python.org>
parents: 3337
diff changeset
53 if (inst == NULL)
bddbaa51aa5a Added new.instance(class, dict).
Guido van Rossum <guido@python.org>
parents: 3337
diff changeset
54 return NULL;
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
55 Py_INCREF(klass);
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
56 Py_INCREF(dict);
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
57 inst->in_class = (PyClassObject *)klass;
3678
bddbaa51aa5a Added new.instance(class, dict).
Guido van Rossum <guido@python.org>
parents: 3337
diff changeset
58 inst->in_dict = dict;
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
59 return (PyObject *)inst;
3678
bddbaa51aa5a Added new.instance(class, dict).
Guido van Rossum <guido@python.org>
parents: 3337
diff changeset
60 }
bddbaa51aa5a Added new.instance(class, dict).
Guido van Rossum <guido@python.org>
parents: 3337
diff changeset
61
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
62 static char new_im_doc[] =
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
63 "Create a instance method object from (FUNCTION, INSTANCE, CLASS).";
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
64
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
65 static PyObject *
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 new_instancemethod(unused, args)
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
67 PyObject* unused;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
68 PyObject* args;
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 {
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
70 PyObject* func;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
71 PyObject* self;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
72 PyObject* classObj;
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
73
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
74 if (!PyArg_ParseTuple(args, "O!O!O!",
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
75 &PyFunction_Type, &func,
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
76 &PyInstance_Type, &self,
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
77 &PyClass_Type, &classObj))
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
78 return NULL;
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
79 return PyMethod_New(func, self, classObj);
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 }
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
81
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
82 static char new_function_doc[] =
4562
d030ea533e63 Upgraded new.function() contributed by Tommy. Also got rid of #if 0'ed code.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
83 "Create a function object from (CODE, GLOBALS, [NAME, ARGDEFS]).";
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
84
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
85 static PyObject *
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 new_function(unused, args)
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
87 PyObject* unused;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
88 PyObject* args;
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 {
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
90 PyObject* code;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
91 PyObject* globals;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
92 PyObject* name = Py_None;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
93 PyObject* defaults = Py_None;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
94 PyFunctionObject* newfunc;
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
95
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
96 if (!PyArg_ParseTuple(args, "O!O!|SO!",
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
97 &PyCode_Type, &code,
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
98 &PyDict_Type, &globals,
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
99 &name,
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
100 &PyTuple_Type, &defaults))
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
101 return NULL;
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
102
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
103 newfunc = (PyFunctionObject *)PyFunction_New(code, globals);
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
104 if (newfunc == NULL)
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
105 return NULL;
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
106
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
107 if (name != Py_None) {
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
108 Py_XINCREF(name);
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
109 Py_XDECREF(newfunc->func_name);
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
110 newfunc->func_name = name;
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
111 }
4562
d030ea533e63 Upgraded new.function() contributed by Tommy. Also got rid of #if 0'ed code.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
112 if (defaults != NULL) {
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
113 Py_XINCREF(defaults);
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
114 Py_XDECREF(newfunc->func_defaults);
4562
d030ea533e63 Upgraded new.function() contributed by Tommy. Also got rid of #if 0'ed code.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
115 newfunc->func_defaults = defaults;
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
116 }
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
117
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
118 return (PyObject *)newfunc;
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
119 }
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
120
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
121 static char new_code_doc[] =
5044
ee3ac9e0a032 Two more arguments to newcodeobject -- first lineno and lineno table.
Guido van Rossum <guido@python.org>
parents: 4997
diff changeset
122 "Create a code object from (ARGCOUNT, NLOCALS, STACKSIZE, FLAGS, CODESTRING, CONSTANTS, NAMES, VARNAMES, FILENAME, NAME, FIRSTLINENO, LNOTAB).";
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
123
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
124 static PyObject *
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 new_code(unused, args)
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
126 PyObject* unused;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
127 PyObject* args;
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 {
3135
999fcce496f8 re-enable new.code(...) with new args
Guido van Rossum <guido@python.org>
parents: 2871
diff changeset
129 int argcount;
999fcce496f8 re-enable new.code(...) with new args
Guido van Rossum <guido@python.org>
parents: 2871
diff changeset
130 int nlocals;
4997
58bbaf284ad6 Add stacksize argument to new.code().
Guido van Rossum <guido@python.org>
parents: 4661
diff changeset
131 int stacksize;
3135
999fcce496f8 re-enable new.code(...) with new args
Guido van Rossum <guido@python.org>
parents: 2871
diff changeset
132 int flags;
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
133 PyObject* code;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
134 PyObject* consts;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
135 PyObject* names;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
136 PyObject* varnames;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
137 PyObject* filename;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
138 PyObject* name;
5044
ee3ac9e0a032 Two more arguments to newcodeobject -- first lineno and lineno table.
Guido van Rossum <guido@python.org>
parents: 4997
diff changeset
139 int firstlineno;
ee3ac9e0a032 Two more arguments to newcodeobject -- first lineno and lineno table.
Guido van Rossum <guido@python.org>
parents: 4997
diff changeset
140 PyObject* lnotab;
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
141
5044
ee3ac9e0a032 Two more arguments to newcodeobject -- first lineno and lineno table.
Guido van Rossum <guido@python.org>
parents: 4997
diff changeset
142 if (!PyArg_ParseTuple(args, "iiiiSO!O!O!SSiS",
4997
58bbaf284ad6 Add stacksize argument to new.code().
Guido van Rossum <guido@python.org>
parents: 4661
diff changeset
143 &argcount, &nlocals, &stacksize, &flags,
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
144 &code,
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
145 &PyTuple_Type, &consts,
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
146 &PyTuple_Type, &names,
4997
58bbaf284ad6 Add stacksize argument to new.code().
Guido van Rossum <guido@python.org>
parents: 4661
diff changeset
147 &PyTuple_Type, &varnames,
5044
ee3ac9e0a032 Two more arguments to newcodeobject -- first lineno and lineno table.
Guido van Rossum <guido@python.org>
parents: 4997
diff changeset
148 &filename, &name,
ee3ac9e0a032 Two more arguments to newcodeobject -- first lineno and lineno table.
Guido van Rossum <guido@python.org>
parents: 4997
diff changeset
149 &firstlineno, &lnotab))
3135
999fcce496f8 re-enable new.code(...) with new args
Guido van Rossum <guido@python.org>
parents: 2871
diff changeset
150 return NULL;
4997
58bbaf284ad6 Add stacksize argument to new.code().
Guido van Rossum <guido@python.org>
parents: 4661
diff changeset
151 return (PyObject *)PyCode_New(argcount, nlocals, stacksize, flags,
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
152 code, consts, names, varnames,
5044
ee3ac9e0a032 Two more arguments to newcodeobject -- first lineno and lineno table.
Guido van Rossum <guido@python.org>
parents: 4997
diff changeset
153 filename, name, firstlineno, lnotab);
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
154 }
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
155
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
156 static char new_module_doc[] =
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
157 "Create a module object from (NAME).";
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
158
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
159 static PyObject *
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 new_module(unused, args)
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
161 PyObject* unused;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
162 PyObject* args;
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
163 {
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
164 char *name;
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
165
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
166 if (!PyArg_ParseTuple(args, "s", &name))
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
167 return NULL;
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
168 return PyModule_New(name);
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
169 }
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
170
3337
201de8455c2b added new.classobj()
Guido van Rossum <guido@python.org>
parents: 3135
diff changeset
171 static char new_class_doc[] =
201de8455c2b added new.classobj()
Guido van Rossum <guido@python.org>
parents: 3135
diff changeset
172 "Create a class object from (NAME, BASE_CLASSES, DICT).";
201de8455c2b added new.classobj()
Guido van Rossum <guido@python.org>
parents: 3135
diff changeset
173
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
174 static PyObject *
3337
201de8455c2b added new.classobj()
Guido van Rossum <guido@python.org>
parents: 3135
diff changeset
175 new_class(unused, args)
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
176 PyObject* unused;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
177 PyObject* args;
3337
201de8455c2b added new.classobj()
Guido van Rossum <guido@python.org>
parents: 3135
diff changeset
178 {
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
179 PyObject * name;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
180 PyObject * classes;
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
181 PyObject * dict;
3337
201de8455c2b added new.classobj()
Guido van Rossum <guido@python.org>
parents: 3135
diff changeset
182
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
183 if (!PyArg_ParseTuple(args, "SO!O!", &name, &PyTuple_Type, &classes,
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
184 &PyDict_Type, &dict))
3337
201de8455c2b added new.classobj()
Guido van Rossum <guido@python.org>
parents: 3135
diff changeset
185 return NULL;
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
186 return PyClass_New(classes, dict, name);
3337
201de8455c2b added new.classobj()
Guido van Rossum <guido@python.org>
parents: 3135
diff changeset
187 }
201de8455c2b added new.classobj()
Guido van Rossum <guido@python.org>
parents: 3135
diff changeset
188
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
189 static PyMethodDef new_methods[] = {
3678
bddbaa51aa5a Added new.instance(class, dict).
Guido van Rossum <guido@python.org>
parents: 3337
diff changeset
190 {"instance", new_instance, 1, new_instance_doc},
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
191 {"instancemethod", new_instancemethod, 1, new_im_doc},
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
192 {"function", new_function, 1, new_function_doc},
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
193 {"code", new_code, 1, new_code_doc},
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
194 {"module", new_module, 1, new_module_doc},
3337
201de8455c2b added new.classobj()
Guido van Rossum <guido@python.org>
parents: 3135
diff changeset
195 {"classobj", new_class, 1, new_class_doc},
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
196 {NULL, NULL} /* sentinel */
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
197 };
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
198
2077
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
199 char new_doc[] =
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
200 "Functions to create new objects used by the interpreter.\n\
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
201 \n\
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
202 You need to know a great deal about the interpreter to use this!";
3848094f259c totally revamped
Guido van Rossum <guido@python.org>
parents: 2008
diff changeset
203
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
204 void
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
205 initnew()
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
206 {
4661
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
207 Py_InitModule4("new", new_methods, new_doc, (PyObject *)NULL,
d5023d0c5502 Renamed.
Barry Warsaw <barry@python.org>
parents: 4562
diff changeset
208 PYTHON_API_VERSION);
1650
51a06fdfff78 Added some new modules
Guido van Rossum <guido@python.org>
parents:
diff changeset
209 }