blob: 0a0760ae233da1c85d3276f1c88293e6b8e2351a [file] [log] [blame]
Guido van Rossumf9888eb1995-01-07 11:50:36 +00001/***********************************************************
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00002Copyright (c) 2000, BeOpen.com.
3Copyright (c) 1995-2000, Corporation for National Research Initiatives.
4Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
5All rights reserved.
Guido van Rossumf9888eb1995-01-07 11:50:36 +00006
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00007See the file "Misc/COPYRIGHT" for information on usage and
8redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumf9888eb1995-01-07 11:50:36 +00009******************************************************************/
10
11/* Module new -- create new objects of various types */
12
Barry Warsawa6b7c711996-12-10 16:25:56 +000013#include "Python.h"
Guido van Rossum34162a11994-05-23 12:37:57 +000014#include "compile.h"
Guido van Rossum34162a11994-05-23 12:37:57 +000015
Guido van Rossum26b310a1996-06-17 16:56:56 +000016static char new_instance_doc[] =
17"Create an instance object from (CLASS, DICT) without calling its __init__().";
18
Barry Warsawa6b7c711996-12-10 16:25:56 +000019static PyObject *
Guido van Rossum26b310a1996-06-17 16:56:56 +000020new_instance(unused, args)
Barry Warsawa6b7c711996-12-10 16:25:56 +000021 PyObject* unused;
22 PyObject* args;
Guido van Rossum26b310a1996-06-17 16:56:56 +000023{
Barry Warsawa6b7c711996-12-10 16:25:56 +000024 PyObject* klass;
25 PyObject *dict;
26 PyInstanceObject *inst;
Guido van Rossum43713e52000-02-29 13:59:29 +000027 if (!PyArg_ParseTuple(args, "O!O!:instance",
Barry Warsawa6b7c711996-12-10 16:25:56 +000028 &PyClass_Type, &klass,
29 &PyDict_Type, &dict))
Guido van Rossum26b310a1996-06-17 16:56:56 +000030 return NULL;
Guido van Rossumb18618d2000-05-03 23:44:39 +000031 inst = PyObject_New(PyInstanceObject, &PyInstance_Type);
Guido van Rossum26b310a1996-06-17 16:56:56 +000032 if (inst == NULL)
33 return NULL;
Barry Warsawa6b7c711996-12-10 16:25:56 +000034 Py_INCREF(klass);
35 Py_INCREF(dict);
36 inst->in_class = (PyClassObject *)klass;
Guido van Rossum26b310a1996-06-17 16:56:56 +000037 inst->in_dict = dict;
Jeremy Hyltonc5007aa2000-06-30 05:02:53 +000038 PyObject_GC_Init(inst);
Barry Warsawa6b7c711996-12-10 16:25:56 +000039 return (PyObject *)inst;
Guido van Rossum26b310a1996-06-17 16:56:56 +000040}
41
Guido van Rossumf9888eb1995-01-07 11:50:36 +000042static char new_im_doc[] =
43"Create a instance method object from (FUNCTION, INSTANCE, CLASS).";
Guido van Rossum34162a11994-05-23 12:37:57 +000044
Barry Warsawa6b7c711996-12-10 16:25:56 +000045static PyObject *
Guido van Rossum34162a11994-05-23 12:37:57 +000046new_instancemethod(unused, args)
Barry Warsawa6b7c711996-12-10 16:25:56 +000047 PyObject* unused;
48 PyObject* args;
Guido van Rossum34162a11994-05-23 12:37:57 +000049{
Barry Warsawa6b7c711996-12-10 16:25:56 +000050 PyObject* func;
51 PyObject* self;
52 PyObject* classObj;
Guido van Rossum34162a11994-05-23 12:37:57 +000053
Guido van Rossum43713e52000-02-29 13:59:29 +000054 if (!PyArg_ParseTuple(args, "OOO!:instancemethod",
Guido van Rossum7859f871998-07-08 14:58:16 +000055 &func,
56 &self,
Barry Warsawa6b7c711996-12-10 16:25:56 +000057 &PyClass_Type, &classObj))
Guido van Rossumf9888eb1995-01-07 11:50:36 +000058 return NULL;
Guido van Rossum7859f871998-07-08 14:58:16 +000059 if (!PyCallable_Check(func)) {
60 PyErr_SetString(PyExc_TypeError,
61 "first argument must be callable");
62 return NULL;
63 }
64 if (self == Py_None)
65 self = NULL;
66 else if (!PyInstance_Check(self)) {
67 PyErr_SetString(PyExc_TypeError,
68 "second argument must be instance or None");
69 return NULL;
70 }
Barry Warsawa6b7c711996-12-10 16:25:56 +000071 return PyMethod_New(func, self, classObj);
Guido van Rossumf9888eb1995-01-07 11:50:36 +000072}
73
74static char new_function_doc[] =
Guido van Rossumb916faf1996-11-21 16:02:12 +000075"Create a function object from (CODE, GLOBALS, [NAME, ARGDEFS]).";
Guido van Rossumf9888eb1995-01-07 11:50:36 +000076
Barry Warsawa6b7c711996-12-10 16:25:56 +000077static PyObject *
Guido van Rossum34162a11994-05-23 12:37:57 +000078new_function(unused, args)
Barry Warsawa6b7c711996-12-10 16:25:56 +000079 PyObject* unused;
80 PyObject* args;
Guido van Rossum34162a11994-05-23 12:37:57 +000081{
Barry Warsawa6b7c711996-12-10 16:25:56 +000082 PyObject* code;
83 PyObject* globals;
84 PyObject* name = Py_None;
85 PyObject* defaults = Py_None;
86 PyFunctionObject* newfunc;
Guido van Rossum34162a11994-05-23 12:37:57 +000087
Guido van Rossum43713e52000-02-29 13:59:29 +000088 if (!PyArg_ParseTuple(args, "O!O!|SO!:function",
Barry Warsawa6b7c711996-12-10 16:25:56 +000089 &PyCode_Type, &code,
90 &PyDict_Type, &globals,
91 &name,
92 &PyTuple_Type, &defaults))
Guido van Rossumf9888eb1995-01-07 11:50:36 +000093 return NULL;
Guido van Rossum34162a11994-05-23 12:37:57 +000094
Barry Warsawa6b7c711996-12-10 16:25:56 +000095 newfunc = (PyFunctionObject *)PyFunction_New(code, globals);
Guido van Rossumf9888eb1995-01-07 11:50:36 +000096 if (newfunc == NULL)
97 return NULL;
Guido van Rossum34162a11994-05-23 12:37:57 +000098
Barry Warsawa6b7c711996-12-10 16:25:56 +000099 if (name != Py_None) {
100 Py_XINCREF(name);
101 Py_XDECREF(newfunc->func_name);
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000102 newfunc->func_name = name;
103 }
Guido van Rossumb88679b1998-05-22 00:57:31 +0000104 if (defaults != Py_None) {
Barry Warsawa6b7c711996-12-10 16:25:56 +0000105 Py_XINCREF(defaults);
106 Py_XDECREF(newfunc->func_defaults);
Guido van Rossumb916faf1996-11-21 16:02:12 +0000107 newfunc->func_defaults = defaults;
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000108 }
Guido van Rossum34162a11994-05-23 12:37:57 +0000109
Barry Warsawa6b7c711996-12-10 16:25:56 +0000110 return (PyObject *)newfunc;
Guido van Rossum34162a11994-05-23 12:37:57 +0000111}
Guido van Rossum34162a11994-05-23 12:37:57 +0000112
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000113static char new_code_doc[] =
Guido van Rossum463e55a1997-01-24 03:58:52 +0000114"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 +0000115
Barry Warsawa6b7c711996-12-10 16:25:56 +0000116static PyObject *
Guido van Rossum34162a11994-05-23 12:37:57 +0000117new_code(unused, args)
Barry Warsawa6b7c711996-12-10 16:25:56 +0000118 PyObject* unused;
119 PyObject* args;
Guido van Rossum34162a11994-05-23 12:37:57 +0000120{
Guido van Rossum896fc7e1995-09-30 17:01:02 +0000121 int argcount;
122 int nlocals;
Guido van Rossume9fd28d1997-01-17 21:12:06 +0000123 int stacksize;
Guido van Rossum896fc7e1995-09-30 17:01:02 +0000124 int flags;
Barry Warsawa6b7c711996-12-10 16:25:56 +0000125 PyObject* code;
126 PyObject* consts;
127 PyObject* names;
128 PyObject* varnames;
129 PyObject* filename;
130 PyObject* name;
Guido van Rossum463e55a1997-01-24 03:58:52 +0000131 int firstlineno;
132 PyObject* lnotab;
Guido van Rossumd076c731998-10-07 19:42:25 +0000133 PyBufferProcs *pb;
134
Guido van Rossum43713e52000-02-29 13:59:29 +0000135 if (!PyArg_ParseTuple(args, "iiiiOO!O!O!SSiS:code",
Guido van Rossume9fd28d1997-01-17 21:12:06 +0000136 &argcount, &nlocals, &stacksize, &flags,
Barry Warsawa6b7c711996-12-10 16:25:56 +0000137 &code,
138 &PyTuple_Type, &consts,
139 &PyTuple_Type, &names,
Guido van Rossume9fd28d1997-01-17 21:12:06 +0000140 &PyTuple_Type, &varnames,
Guido van Rossum463e55a1997-01-24 03:58:52 +0000141 &filename, &name,
142 &firstlineno, &lnotab))
Guido van Rossum896fc7e1995-09-30 17:01:02 +0000143 return NULL;
Guido van Rossumd076c731998-10-07 19:42:25 +0000144
145 pb = code->ob_type->tp_as_buffer;
146 if (pb == NULL ||
147 pb->bf_getreadbuffer == NULL ||
148 pb->bf_getsegcount == NULL ||
149 (*pb->bf_getsegcount)(code, NULL) != 1)
150 {
151 PyErr_SetString(PyExc_TypeError,
152 "bytecode object must be a single-segment read-only buffer");
153 return NULL;
154 }
155
Guido van Rossume9fd28d1997-01-17 21:12:06 +0000156 return (PyObject *)PyCode_New(argcount, nlocals, stacksize, flags,
Barry Warsawa6b7c711996-12-10 16:25:56 +0000157 code, consts, names, varnames,
Guido van Rossum463e55a1997-01-24 03:58:52 +0000158 filename, name, firstlineno, lnotab);
Guido van Rossum896fc7e1995-09-30 17:01:02 +0000159}
Guido van Rossum34162a11994-05-23 12:37:57 +0000160
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000161static char new_module_doc[] =
162"Create a module object from (NAME).";
163
Barry Warsawa6b7c711996-12-10 16:25:56 +0000164static PyObject *
Guido van Rossum34162a11994-05-23 12:37:57 +0000165new_module(unused, args)
Barry Warsawa6b7c711996-12-10 16:25:56 +0000166 PyObject* unused;
167 PyObject* args;
Guido van Rossum34162a11994-05-23 12:37:57 +0000168{
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000169 char *name;
Guido van Rossum34162a11994-05-23 12:37:57 +0000170
Guido van Rossum43713e52000-02-29 13:59:29 +0000171 if (!PyArg_ParseTuple(args, "s:module", &name))
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000172 return NULL;
Barry Warsawa6b7c711996-12-10 16:25:56 +0000173 return PyModule_New(name);
Guido van Rossum34162a11994-05-23 12:37:57 +0000174}
Guido van Rossum34162a11994-05-23 12:37:57 +0000175
Guido van Rossumb28911c1996-01-12 01:38:22 +0000176static char new_class_doc[] =
177"Create a class object from (NAME, BASE_CLASSES, DICT).";
178
Barry Warsawa6b7c711996-12-10 16:25:56 +0000179static PyObject *
Guido van Rossumb28911c1996-01-12 01:38:22 +0000180new_class(unused, args)
Barry Warsawa6b7c711996-12-10 16:25:56 +0000181 PyObject* unused;
182 PyObject* args;
Guido van Rossumb28911c1996-01-12 01:38:22 +0000183{
Barry Warsawa6b7c711996-12-10 16:25:56 +0000184 PyObject * name;
185 PyObject * classes;
186 PyObject * dict;
Guido van Rossumb28911c1996-01-12 01:38:22 +0000187
Guido van Rossum43713e52000-02-29 13:59:29 +0000188 if (!PyArg_ParseTuple(args, "SO!O!:class", &name, &PyTuple_Type, &classes,
Barry Warsawa6b7c711996-12-10 16:25:56 +0000189 &PyDict_Type, &dict))
Guido van Rossumb28911c1996-01-12 01:38:22 +0000190 return NULL;
Barry Warsawa6b7c711996-12-10 16:25:56 +0000191 return PyClass_New(classes, dict, name);
Guido van Rossumb28911c1996-01-12 01:38:22 +0000192}
193
Barry Warsawa6b7c711996-12-10 16:25:56 +0000194static PyMethodDef new_methods[] = {
Guido van Rossum26b310a1996-06-17 16:56:56 +0000195 {"instance", new_instance, 1, new_instance_doc},
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000196 {"instancemethod", new_instancemethod, 1, new_im_doc},
197 {"function", new_function, 1, new_function_doc},
Guido van Rossum896fc7e1995-09-30 17:01:02 +0000198 {"code", new_code, 1, new_code_doc},
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000199 {"module", new_module, 1, new_module_doc},
Guido van Rossumb28911c1996-01-12 01:38:22 +0000200 {"classobj", new_class, 1, new_class_doc},
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000201 {NULL, NULL} /* sentinel */
Guido van Rossum34162a11994-05-23 12:37:57 +0000202};
203
Guido van Rossumf9888eb1995-01-07 11:50:36 +0000204char new_doc[] =
205"Functions to create new objects used by the interpreter.\n\
206\n\
207You need to know a great deal about the interpreter to use this!";
208
Guido van Rossum3886bb61998-12-04 18:50:17 +0000209DL_EXPORT(void)
Guido van Rossum34162a11994-05-23 12:37:57 +0000210initnew()
211{
Barry Warsawa6b7c711996-12-10 16:25:56 +0000212 Py_InitModule4("new", new_methods, new_doc, (PyObject *)NULL,
213 PYTHON_API_VERSION);
Guido van Rossum34162a11994-05-23 12:37:57 +0000214}