blob: 06b7d823b8cb65515903f658731aede63e8503fb [file] [log] [blame]
Guido van Rossumf9888eb1995-01-07 11:50:36 +00001
2/* Module new -- create new objects of various types */
3
Barry Warsawa6b7c711996-12-10 16:25:56 +00004#include "Python.h"
Guido van Rossum34162a11994-05-23 12:37:57 +00005#include "compile.h"
Guido van Rossum34162a11994-05-23 12:37:57 +00006
Guido van Rossum26b310a1996-06-17 16:56:56 +00007static char new_instance_doc[] =
8"Create an instance object from (CLASS, DICT) without calling its __init__().";
9
Barry Warsawa6b7c711996-12-10 16:25:56 +000010static PyObject *
Peter Schneider-Kampc4bc0e02000-07-10 11:56:03 +000011new_instance(PyObject* unused, PyObject* args)
Guido van Rossum26b310a1996-06-17 16:56:56 +000012{
Barry Warsawa6b7c711996-12-10 16:25:56 +000013 PyObject* klass;
14 PyObject *dict;
15 PyInstanceObject *inst;
Guido van Rossum43713e52000-02-29 13:59:29 +000016 if (!PyArg_ParseTuple(args, "O!O!:instance",
Barry Warsawa6b7c711996-12-10 16:25:56 +000017 &PyClass_Type, &klass,
18 &PyDict_Type, &dict))
Guido van Rossum26b310a1996-06-17 16:56:56 +000019 return NULL;
Guido van Rossumb18618d2000-05-03 23:44:39 +000020 inst = PyObject_New(PyInstanceObject, &PyInstance_Type);
Guido van Rossum26b310a1996-06-17 16:56:56 +000021 if (inst == NULL)
22 return NULL;
Barry Warsawa6b7c711996-12-10 16:25:56 +000023 Py_INCREF(klass);
24 Py_INCREF(dict);
25 inst->in_class = (PyClassObject *)klass;
Guido van Rossum26b310a1996-06-17 16:56:56 +000026 inst->in_dict = dict;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000027 PyObject_GC_Init(inst);
Barry Warsawa6b7c711996-12-10 16:25:56 +000028 return (PyObject *)inst;
Guido van Rossum26b310a1996-06-17 16:56:56 +000029}
30
Guido van Rossumf9888eb1995-01-07 11:50:36 +000031static char new_im_doc[] =
32"Create a instance method object from (FUNCTION, INSTANCE, CLASS).";
Guido van Rossum34162a11994-05-23 12:37:57 +000033
Barry Warsawa6b7c711996-12-10 16:25:56 +000034static PyObject *
Peter Schneider-Kampc4bc0e02000-07-10 11:56:03 +000035new_instancemethod(PyObject* unused, PyObject* args)
Guido van Rossum34162a11994-05-23 12:37:57 +000036{
Barry Warsawa6b7c711996-12-10 16:25:56 +000037 PyObject* func;
38 PyObject* self;
39 PyObject* classObj;
Guido van Rossum34162a11994-05-23 12:37:57 +000040
Guido van Rossum43713e52000-02-29 13:59:29 +000041 if (!PyArg_ParseTuple(args, "OOO!:instancemethod",
Guido van Rossum7859f871998-07-08 14:58:16 +000042 &func,
43 &self,
Barry Warsawa6b7c711996-12-10 16:25:56 +000044 &PyClass_Type, &classObj))
Guido van Rossumf9888eb1995-01-07 11:50:36 +000045 return NULL;
Guido van Rossum7859f871998-07-08 14:58:16 +000046 if (!PyCallable_Check(func)) {
47 PyErr_SetString(PyExc_TypeError,
48 "first argument must be callable");
49 return NULL;
50 }
51 if (self == Py_None)
52 self = NULL;
53 else if (!PyInstance_Check(self)) {
54 PyErr_SetString(PyExc_TypeError,
55 "second argument must be instance or None");
56 return NULL;
57 }
Barry Warsawa6b7c711996-12-10 16:25:56 +000058 return PyMethod_New(func, self, classObj);
Guido van Rossumf9888eb1995-01-07 11:50:36 +000059}
60
61static char new_function_doc[] =
Fred Drake5428c7d2000-10-10 22:07:18 +000062"Create a function object from (CODE, GLOBALS, [NAME [, ARGDEFS]]).";
Guido van Rossumf9888eb1995-01-07 11:50:36 +000063
Barry Warsawa6b7c711996-12-10 16:25:56 +000064static PyObject *
Peter Schneider-Kampc4bc0e02000-07-10 11:56:03 +000065new_function(PyObject* unused, PyObject* args)
Guido van Rossum34162a11994-05-23 12:37:57 +000066{
Barry Warsawa6b7c711996-12-10 16:25:56 +000067 PyObject* code;
68 PyObject* globals;
69 PyObject* name = Py_None;
70 PyObject* defaults = Py_None;
71 PyFunctionObject* newfunc;
Guido van Rossum34162a11994-05-23 12:37:57 +000072
Guido van Rossum1bff8832000-11-13 20:29:20 +000073 if (!PyArg_ParseTuple(args, "O!O!|OO!:function",
Barry Warsawa6b7c711996-12-10 16:25:56 +000074 &PyCode_Type, &code,
75 &PyDict_Type, &globals,
76 &name,
77 &PyTuple_Type, &defaults))
Guido van Rossumf9888eb1995-01-07 11:50:36 +000078 return NULL;
Guido van Rossum1bff8832000-11-13 20:29:20 +000079 if (name != Py_None && !PyString_Check(name)) {
80 PyErr_SetString(PyExc_TypeError,
81 "arg 3 (name) must be None or string");
82 return NULL;
83 }
Guido van Rossum34162a11994-05-23 12:37:57 +000084
Barry Warsawa6b7c711996-12-10 16:25:56 +000085 newfunc = (PyFunctionObject *)PyFunction_New(code, globals);
Guido van Rossumf9888eb1995-01-07 11:50:36 +000086 if (newfunc == NULL)
87 return NULL;
Guido van Rossum34162a11994-05-23 12:37:57 +000088
Barry Warsawa6b7c711996-12-10 16:25:56 +000089 if (name != Py_None) {
90 Py_XINCREF(name);
91 Py_XDECREF(newfunc->func_name);
Guido van Rossumf9888eb1995-01-07 11:50:36 +000092 newfunc->func_name = name;
93 }
Guido van Rossumb88679b1998-05-22 00:57:31 +000094 if (defaults != Py_None) {
Barry Warsawa6b7c711996-12-10 16:25:56 +000095 Py_XINCREF(defaults);
96 Py_XDECREF(newfunc->func_defaults);
Guido van Rossumb916faf1996-11-21 16:02:12 +000097 newfunc->func_defaults = defaults;
Guido van Rossumf9888eb1995-01-07 11:50:36 +000098 }
Guido van Rossum34162a11994-05-23 12:37:57 +000099
Barry Warsawa6b7c711996-12-10 16:25:56 +0000100 return (PyObject *)newfunc;
Guido van Rossum34162a11994-05-23 12:37:57 +0000101}
Guido van Rossum34162a11994-05-23 12:37:57 +0000102
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000103static char new_code_doc[] =
Jeremy Hylton903f6542001-01-25 20:07:56 +0000104"Create a code object from (ARGCOUNT, NLOCALS, STACKSIZE, FLAGS, CODESTRING, CONSTANTS, NAMES, VARNAMES, FREEVARS, CELLVARS, FILENAME, NAME, FIRSTLINENO, LNOTAB).";
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000105
Barry Warsawa6b7c711996-12-10 16:25:56 +0000106static PyObject *
Peter Schneider-Kampc4bc0e02000-07-10 11:56:03 +0000107new_code(PyObject* unused, PyObject* args)
Guido van Rossum34162a11994-05-23 12:37:57 +0000108{
Guido van Rossum896fc7e1995-09-30 17:01:02 +0000109 int argcount;
110 int nlocals;
Guido van Rossume9fd28d1997-01-17 21:12:06 +0000111 int stacksize;
Guido van Rossum896fc7e1995-09-30 17:01:02 +0000112 int flags;
Barry Warsawa6b7c711996-12-10 16:25:56 +0000113 PyObject* code;
114 PyObject* consts;
115 PyObject* names;
116 PyObject* varnames;
Jeremy Hylton903f6542001-01-25 20:07:56 +0000117 PyObject* freevars;
118 PyObject* cellvars;
Barry Warsawa6b7c711996-12-10 16:25:56 +0000119 PyObject* filename;
120 PyObject* name;
Guido van Rossum463e55a1997-01-24 03:58:52 +0000121 int firstlineno;
122 PyObject* lnotab;
Guido van Rossumd076c731998-10-07 19:42:25 +0000123 PyBufferProcs *pb;
124
Jeremy Hylton903f6542001-01-25 20:07:56 +0000125 if (!PyArg_ParseTuple(args, "iiiiOO!O!O!O!O!SSiS:code",
Guido van Rossume9fd28d1997-01-17 21:12:06 +0000126 &argcount, &nlocals, &stacksize, &flags,
Barry Warsawa6b7c711996-12-10 16:25:56 +0000127 &code,
128 &PyTuple_Type, &consts,
129 &PyTuple_Type, &names,
Guido van Rossume9fd28d1997-01-17 21:12:06 +0000130 &PyTuple_Type, &varnames,
Jeremy Hylton903f6542001-01-25 20:07:56 +0000131 &PyTuple_Type, &freevars,
132 &PyTuple_Type, &cellvars,
Guido van Rossum463e55a1997-01-24 03:58:52 +0000133 &filename, &name,
134 &firstlineno, &lnotab))
Guido van Rossum896fc7e1995-09-30 17:01:02 +0000135 return NULL;
Guido van Rossumd076c731998-10-07 19:42:25 +0000136
137 pb = code->ob_type->tp_as_buffer;
138 if (pb == NULL ||
139 pb->bf_getreadbuffer == NULL ||
140 pb->bf_getsegcount == NULL ||
141 (*pb->bf_getsegcount)(code, NULL) != 1)
142 {
143 PyErr_SetString(PyExc_TypeError,
144 "bytecode object must be a single-segment read-only buffer");
145 return NULL;
146 }
147
Guido van Rossume9fd28d1997-01-17 21:12:06 +0000148 return (PyObject *)PyCode_New(argcount, nlocals, stacksize, flags,
Barry Warsawa6b7c711996-12-10 16:25:56 +0000149 code, consts, names, varnames,
Jeremy Hylton903f6542001-01-25 20:07:56 +0000150 freevars, cellvars, filename, name,
151 firstlineno, lnotab);
Guido van Rossum896fc7e1995-09-30 17:01:02 +0000152}
Guido van Rossum34162a11994-05-23 12:37:57 +0000153
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000154static char new_module_doc[] =
155"Create a module object from (NAME).";
156
Barry Warsawa6b7c711996-12-10 16:25:56 +0000157static PyObject *
Peter Schneider-Kampc4bc0e02000-07-10 11:56:03 +0000158new_module(PyObject* unused, PyObject* args)
Guido van Rossum34162a11994-05-23 12:37:57 +0000159{
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000160 char *name;
Guido van Rossum34162a11994-05-23 12:37:57 +0000161
Guido van Rossum43713e52000-02-29 13:59:29 +0000162 if (!PyArg_ParseTuple(args, "s:module", &name))
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000163 return NULL;
Barry Warsawa6b7c711996-12-10 16:25:56 +0000164 return PyModule_New(name);
Guido van Rossum34162a11994-05-23 12:37:57 +0000165}
Guido van Rossum34162a11994-05-23 12:37:57 +0000166
Guido van Rossumb28911c1996-01-12 01:38:22 +0000167static char new_class_doc[] =
168"Create a class object from (NAME, BASE_CLASSES, DICT).";
169
Barry Warsawa6b7c711996-12-10 16:25:56 +0000170static PyObject *
Peter Schneider-Kampc4bc0e02000-07-10 11:56:03 +0000171new_class(PyObject* unused, PyObject* args)
Guido van Rossumb28911c1996-01-12 01:38:22 +0000172{
Barry Warsawa6b7c711996-12-10 16:25:56 +0000173 PyObject * name;
174 PyObject * classes;
175 PyObject * dict;
Guido van Rossumb28911c1996-01-12 01:38:22 +0000176
Guido van Rossum43713e52000-02-29 13:59:29 +0000177 if (!PyArg_ParseTuple(args, "SO!O!:class", &name, &PyTuple_Type, &classes,
Barry Warsawa6b7c711996-12-10 16:25:56 +0000178 &PyDict_Type, &dict))
Guido van Rossumb28911c1996-01-12 01:38:22 +0000179 return NULL;
Barry Warsawa6b7c711996-12-10 16:25:56 +0000180 return PyClass_New(classes, dict, name);
Guido van Rossumb28911c1996-01-12 01:38:22 +0000181}
182
Barry Warsawa6b7c711996-12-10 16:25:56 +0000183static PyMethodDef new_methods[] = {
Andrew M. Kuchlinge365fb82000-08-03 02:06:16 +0000184 {"instance", new_instance,
185 METH_VARARGS, new_instance_doc},
186 {"instancemethod", new_instancemethod,
187 METH_VARARGS, new_im_doc},
188 {"function", new_function,
189 METH_VARARGS, new_function_doc},
190 {"code", new_code,
191 METH_VARARGS, new_code_doc},
192 {"module", new_module,
193 METH_VARARGS, new_module_doc},
194 {"classobj", new_class,
195 METH_VARARGS, new_class_doc},
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000196 {NULL, NULL} /* sentinel */
Guido van Rossum34162a11994-05-23 12:37:57 +0000197};
198
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000199char new_doc[] =
200"Functions to create new objects used by the interpreter.\n\
201\n\
202You need to know a great deal about the interpreter to use this!";
203
Guido van Rossum3886bb61998-12-04 18:50:17 +0000204DL_EXPORT(void)
Thomas Woutersf3f33dc2000-07-21 06:00:07 +0000205initnew(void)
Guido van Rossum34162a11994-05-23 12:37:57 +0000206{
Barry Warsawa6b7c711996-12-10 16:25:56 +0000207 Py_InitModule4("new", new_methods, new_doc, (PyObject *)NULL,
208 PYTHON_API_VERSION);
Guido van Rossum34162a11994-05-23 12:37:57 +0000209}