blob: 1cf068f091f882ed9e14f49392eeb7d9899206c6 [file] [log] [blame]
Guido van Rossumf9888eb1995-01-07 11:50:36 +00001/***********************************************************
2Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
4
5 All Rights Reserved
6
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00007Copyright (c) 2000, BeOpen.com.
8Copyright (c) 1995-2000, Corporation for National Research Initiatives.
9Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
10All rights reserved.
Guido van Rossumf9888eb1995-01-07 11:50:36 +000011
Guido van Rossumfd71b9e2000-06-30 23:50:40 +000012See the file "Misc/COPYRIGHT" for information on usage and
13redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumf9888eb1995-01-07 11:50:36 +000014
15******************************************************************/
16
17/* Module new -- create new objects of various types */
18
Barry Warsawa6b7c711996-12-10 16:25:56 +000019#include "Python.h"
Guido van Rossum34162a11994-05-23 12:37:57 +000020#include "compile.h"
Guido van Rossum34162a11994-05-23 12:37:57 +000021
Guido van Rossum26b310a1996-06-17 16:56:56 +000022static char new_instance_doc[] =
23"Create an instance object from (CLASS, DICT) without calling its __init__().";
24
Barry Warsawa6b7c711996-12-10 16:25:56 +000025static PyObject *
Guido van Rossum26b310a1996-06-17 16:56:56 +000026new_instance(unused, args)
Barry Warsawa6b7c711996-12-10 16:25:56 +000027 PyObject* unused;
28 PyObject* args;
Guido van Rossum26b310a1996-06-17 16:56:56 +000029{
Barry Warsawa6b7c711996-12-10 16:25:56 +000030 PyObject* klass;
31 PyObject *dict;
32 PyInstanceObject *inst;
Guido van Rossum43713e52000-02-29 13:59:29 +000033 if (!PyArg_ParseTuple(args, "O!O!:instance",
Barry Warsawa6b7c711996-12-10 16:25:56 +000034 &PyClass_Type, &klass,
35 &PyDict_Type, &dict))
Guido van Rossum26b310a1996-06-17 16:56:56 +000036 return NULL;
Guido van Rossumb18618d2000-05-03 23:44:39 +000037 inst = PyObject_New(PyInstanceObject, &PyInstance_Type);
Guido van Rossum26b310a1996-06-17 16:56:56 +000038 if (inst == NULL)
39 return NULL;
Barry Warsawa6b7c711996-12-10 16:25:56 +000040 Py_INCREF(klass);
41 Py_INCREF(dict);
42 inst->in_class = (PyClassObject *)klass;
Guido van Rossum26b310a1996-06-17 16:56:56 +000043 inst->in_dict = dict;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000044 PyObject_GC_Init(inst);
Barry Warsawa6b7c711996-12-10 16:25:56 +000045 return (PyObject *)inst;
Guido van Rossum26b310a1996-06-17 16:56:56 +000046}
47
Guido van Rossumf9888eb1995-01-07 11:50:36 +000048static char new_im_doc[] =
49"Create a instance method object from (FUNCTION, INSTANCE, CLASS).";
Guido van Rossum34162a11994-05-23 12:37:57 +000050
Barry Warsawa6b7c711996-12-10 16:25:56 +000051static PyObject *
Guido van Rossum34162a11994-05-23 12:37:57 +000052new_instancemethod(unused, args)
Barry Warsawa6b7c711996-12-10 16:25:56 +000053 PyObject* unused;
54 PyObject* args;
Guido van Rossum34162a11994-05-23 12:37:57 +000055{
Barry Warsawa6b7c711996-12-10 16:25:56 +000056 PyObject* func;
57 PyObject* self;
58 PyObject* classObj;
Guido van Rossum34162a11994-05-23 12:37:57 +000059
Guido van Rossum43713e52000-02-29 13:59:29 +000060 if (!PyArg_ParseTuple(args, "OOO!:instancemethod",
Guido van Rossum7859f871998-07-08 14:58:16 +000061 &func,
62 &self,
Barry Warsawa6b7c711996-12-10 16:25:56 +000063 &PyClass_Type, &classObj))
Guido van Rossumf9888eb1995-01-07 11:50:36 +000064 return NULL;
Guido van Rossum7859f871998-07-08 14:58:16 +000065 if (!PyCallable_Check(func)) {
66 PyErr_SetString(PyExc_TypeError,
67 "first argument must be callable");
68 return NULL;
69 }
70 if (self == Py_None)
71 self = NULL;
72 else if (!PyInstance_Check(self)) {
73 PyErr_SetString(PyExc_TypeError,
74 "second argument must be instance or None");
75 return NULL;
76 }
Barry Warsawa6b7c711996-12-10 16:25:56 +000077 return PyMethod_New(func, self, classObj);
Guido van Rossumf9888eb1995-01-07 11:50:36 +000078}
79
80static char new_function_doc[] =
Guido van Rossumb916faf1996-11-21 16:02:12 +000081"Create a function object from (CODE, GLOBALS, [NAME, ARGDEFS]).";
Guido van Rossumf9888eb1995-01-07 11:50:36 +000082
Barry Warsawa6b7c711996-12-10 16:25:56 +000083static PyObject *
Guido van Rossum34162a11994-05-23 12:37:57 +000084new_function(unused, args)
Barry Warsawa6b7c711996-12-10 16:25:56 +000085 PyObject* unused;
86 PyObject* args;
Guido van Rossum34162a11994-05-23 12:37:57 +000087{
Barry Warsawa6b7c711996-12-10 16:25:56 +000088 PyObject* code;
89 PyObject* globals;
90 PyObject* name = Py_None;
91 PyObject* defaults = Py_None;
92 PyFunctionObject* newfunc;
Guido van Rossum34162a11994-05-23 12:37:57 +000093
Guido van Rossum43713e52000-02-29 13:59:29 +000094 if (!PyArg_ParseTuple(args, "O!O!|SO!:function",
Barry Warsawa6b7c711996-12-10 16:25:56 +000095 &PyCode_Type, &code,
96 &PyDict_Type, &globals,
97 &name,
98 &PyTuple_Type, &defaults))
Guido van Rossumf9888eb1995-01-07 11:50:36 +000099 return NULL;
Guido van Rossum34162a11994-05-23 12:37:57 +0000100
Barry Warsawa6b7c711996-12-10 16:25:56 +0000101 newfunc = (PyFunctionObject *)PyFunction_New(code, globals);
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000102 if (newfunc == NULL)
103 return NULL;
Guido van Rossum34162a11994-05-23 12:37:57 +0000104
Barry Warsawa6b7c711996-12-10 16:25:56 +0000105 if (name != Py_None) {
106 Py_XINCREF(name);
107 Py_XDECREF(newfunc->func_name);
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000108 newfunc->func_name = name;
109 }
Guido van Rossumb88679b1998-05-22 00:57:31 +0000110 if (defaults != Py_None) {
Barry Warsawa6b7c711996-12-10 16:25:56 +0000111 Py_XINCREF(defaults);
112 Py_XDECREF(newfunc->func_defaults);
Guido van Rossumb916faf1996-11-21 16:02:12 +0000113 newfunc->func_defaults = defaults;
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000114 }
Guido van Rossum34162a11994-05-23 12:37:57 +0000115
Barry Warsawa6b7c711996-12-10 16:25:56 +0000116 return (PyObject *)newfunc;
Guido van Rossum34162a11994-05-23 12:37:57 +0000117}
Guido van Rossum34162a11994-05-23 12:37:57 +0000118
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000119static char new_code_doc[] =
Guido van Rossum463e55a1997-01-24 03:58:52 +0000120"Create a code object from (ARGCOUNT, NLOCALS, STACKSIZE, FLAGS, CODESTRING, CONSTANTS, NAMES, VARNAMES, FILENAME, NAME, FIRSTLINENO, LNOTAB).";
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000121
Barry Warsawa6b7c711996-12-10 16:25:56 +0000122static PyObject *
Guido van Rossum34162a11994-05-23 12:37:57 +0000123new_code(unused, args)
Barry Warsawa6b7c711996-12-10 16:25:56 +0000124 PyObject* unused;
125 PyObject* args;
Guido van Rossum34162a11994-05-23 12:37:57 +0000126{
Guido van Rossum896fc7e1995-09-30 17:01:02 +0000127 int argcount;
128 int nlocals;
Guido van Rossume9fd28d1997-01-17 21:12:06 +0000129 int stacksize;
Guido van Rossum896fc7e1995-09-30 17:01:02 +0000130 int flags;
Barry Warsawa6b7c711996-12-10 16:25:56 +0000131 PyObject* code;
132 PyObject* consts;
133 PyObject* names;
134 PyObject* varnames;
135 PyObject* filename;
136 PyObject* name;
Guido van Rossum463e55a1997-01-24 03:58:52 +0000137 int firstlineno;
138 PyObject* lnotab;
Guido van Rossumd076c731998-10-07 19:42:25 +0000139 PyBufferProcs *pb;
140
Guido van Rossum43713e52000-02-29 13:59:29 +0000141 if (!PyArg_ParseTuple(args, "iiiiOO!O!O!SSiS:code",
Guido van Rossume9fd28d1997-01-17 21:12:06 +0000142 &argcount, &nlocals, &stacksize, &flags,
Barry Warsawa6b7c711996-12-10 16:25:56 +0000143 &code,
144 &PyTuple_Type, &consts,
145 &PyTuple_Type, &names,
Guido van Rossume9fd28d1997-01-17 21:12:06 +0000146 &PyTuple_Type, &varnames,
Guido van Rossum463e55a1997-01-24 03:58:52 +0000147 &filename, &name,
148 &firstlineno, &lnotab))
Guido van Rossum896fc7e1995-09-30 17:01:02 +0000149 return NULL;
Guido van Rossumd076c731998-10-07 19:42:25 +0000150
151 pb = code->ob_type->tp_as_buffer;
152 if (pb == NULL ||
153 pb->bf_getreadbuffer == NULL ||
154 pb->bf_getsegcount == NULL ||
155 (*pb->bf_getsegcount)(code, NULL) != 1)
156 {
157 PyErr_SetString(PyExc_TypeError,
158 "bytecode object must be a single-segment read-only buffer");
159 return NULL;
160 }
161
Guido van Rossume9fd28d1997-01-17 21:12:06 +0000162 return (PyObject *)PyCode_New(argcount, nlocals, stacksize, flags,
Barry Warsawa6b7c711996-12-10 16:25:56 +0000163 code, consts, names, varnames,
Guido van Rossum463e55a1997-01-24 03:58:52 +0000164 filename, name, firstlineno, lnotab);
Guido van Rossum896fc7e1995-09-30 17:01:02 +0000165}
Guido van Rossum34162a11994-05-23 12:37:57 +0000166
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000167static char new_module_doc[] =
168"Create a module object from (NAME).";
169
Barry Warsawa6b7c711996-12-10 16:25:56 +0000170static PyObject *
Guido van Rossum34162a11994-05-23 12:37:57 +0000171new_module(unused, args)
Barry Warsawa6b7c711996-12-10 16:25:56 +0000172 PyObject* unused;
173 PyObject* args;
Guido van Rossum34162a11994-05-23 12:37:57 +0000174{
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000175 char *name;
Guido van Rossum34162a11994-05-23 12:37:57 +0000176
Guido van Rossum43713e52000-02-29 13:59:29 +0000177 if (!PyArg_ParseTuple(args, "s:module", &name))
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000178 return NULL;
Barry Warsawa6b7c711996-12-10 16:25:56 +0000179 return PyModule_New(name);
Guido van Rossum34162a11994-05-23 12:37:57 +0000180}
Guido van Rossum34162a11994-05-23 12:37:57 +0000181
Guido van Rossumb28911c1996-01-12 01:38:22 +0000182static char new_class_doc[] =
183"Create a class object from (NAME, BASE_CLASSES, DICT).";
184
Barry Warsawa6b7c711996-12-10 16:25:56 +0000185static PyObject *
Guido van Rossumb28911c1996-01-12 01:38:22 +0000186new_class(unused, args)
Barry Warsawa6b7c711996-12-10 16:25:56 +0000187 PyObject* unused;
188 PyObject* args;
Guido van Rossumb28911c1996-01-12 01:38:22 +0000189{
Barry Warsawa6b7c711996-12-10 16:25:56 +0000190 PyObject * name;
191 PyObject * classes;
192 PyObject * dict;
Guido van Rossumb28911c1996-01-12 01:38:22 +0000193
Guido van Rossum43713e52000-02-29 13:59:29 +0000194 if (!PyArg_ParseTuple(args, "SO!O!:class", &name, &PyTuple_Type, &classes,
Barry Warsawa6b7c711996-12-10 16:25:56 +0000195 &PyDict_Type, &dict))
Guido van Rossumb28911c1996-01-12 01:38:22 +0000196 return NULL;
Barry Warsawa6b7c711996-12-10 16:25:56 +0000197 return PyClass_New(classes, dict, name);
Guido van Rossumb28911c1996-01-12 01:38:22 +0000198}
199
Barry Warsawa6b7c711996-12-10 16:25:56 +0000200static PyMethodDef new_methods[] = {
Guido van Rossum26b310a1996-06-17 16:56:56 +0000201 {"instance", new_instance, 1, new_instance_doc},
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000202 {"instancemethod", new_instancemethod, 1, new_im_doc},
203 {"function", new_function, 1, new_function_doc},
Guido van Rossum896fc7e1995-09-30 17:01:02 +0000204 {"code", new_code, 1, new_code_doc},
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000205 {"module", new_module, 1, new_module_doc},
Guido van Rossumb28911c1996-01-12 01:38:22 +0000206 {"classobj", new_class, 1, new_class_doc},
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000207 {NULL, NULL} /* sentinel */
Guido van Rossum34162a11994-05-23 12:37:57 +0000208};
209
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000210char new_doc[] =
211"Functions to create new objects used by the interpreter.\n\
212\n\
213You need to know a great deal about the interpreter to use this!";
214
Guido van Rossum3886bb61998-12-04 18:50:17 +0000215DL_EXPORT(void)
Guido van Rossum34162a11994-05-23 12:37:57 +0000216initnew()
217{
Barry Warsawa6b7c711996-12-10 16:25:56 +0000218 Py_InitModule4("new", new_methods, new_doc, (PyObject *)NULL,
219 PYTHON_API_VERSION);
Guido van Rossum34162a11994-05-23 12:37:57 +0000220}