blob: c96c0aa729974d794f3764ea11a8883960223494 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Type object implementation */
3
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00005
6/* Type object implementation */
7
Guido van Rossumc0b618a1997-05-02 03:12:38 +00008static PyObject *
Fred Drake45cfbcc2000-07-09 06:21:27 +00009type_getattr(PyTypeObject *t, char *name)
Guido van Rossum29ca26e1995-01-07 11:58:15 +000010{
11 if (strcmp(name, "__name__") == 0)
Guido van Rossumc0b618a1997-05-02 03:12:38 +000012 return PyString_FromString(t->tp_name);
Guido van Rossum29ca26e1995-01-07 11:58:15 +000013 if (strcmp(name, "__doc__") == 0) {
14 char *doc = t->tp_doc;
15 if (doc != NULL)
Guido van Rossumc0b618a1997-05-02 03:12:38 +000016 return PyString_FromString(doc);
17 Py_INCREF(Py_None);
18 return Py_None;
Guido van Rossum29ca26e1995-01-07 11:58:15 +000019 }
20 if (strcmp(name, "__members__") == 0)
Guido van Rossumc0b618a1997-05-02 03:12:38 +000021 return Py_BuildValue("[ss]", "__doc__", "__name__");
22 PyErr_SetString(PyExc_AttributeError, name);
Guido van Rossum29ca26e1995-01-07 11:58:15 +000023 return NULL;
24}
25
Guido van Rossumc0b618a1997-05-02 03:12:38 +000026static PyObject *
Fred Drake45cfbcc2000-07-09 06:21:27 +000027type_repr(PyTypeObject *v)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000028{
29 char buf[100];
30 sprintf(buf, "<type '%.80s'>", v->tp_name);
Guido van Rossumc0b618a1997-05-02 03:12:38 +000031 return PyString_FromString(buf);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000032}
33
Guido van Rossumc0b618a1997-05-02 03:12:38 +000034PyTypeObject PyType_Type = {
35 PyObject_HEAD_INIT(&PyType_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000036 0, /* Number of items for varobject */
37 "type", /* Name of this type */
Guido van Rossumc0b618a1997-05-02 03:12:38 +000038 sizeof(PyTypeObject), /* Basic object size */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000039 0, /* Item size for varobject */
Guido van Rossum3f5da241990-12-20 15:06:42 +000040 0, /*tp_dealloc*/
Guido van Rossum7066dd71992-09-17 17:54:56 +000041 0, /*tp_print*/
Guido van Rossum29ca26e1995-01-07 11:58:15 +000042 (getattrfunc)type_getattr, /*tp_getattr*/
Guido van Rossum3f5da241990-12-20 15:06:42 +000043 0, /*tp_setattr*/
44 0, /*tp_compare*/
Guido van Rossum29ca26e1995-01-07 11:58:15 +000045 (reprfunc)type_repr, /*tp_repr*/
46 0, /*tp_as_number*/
47 0, /*tp_as_sequence*/
48 0, /*tp_as_mapping*/
49 0, /*tp_hash*/
50 0, /*tp_call*/
51 0, /*tp_str*/
52 0, /*tp_xxx1*/
53 0, /*tp_xxx2*/
54 0, /*tp_xxx3*/
55 0, /*tp_xxx4*/
Guido van Rossum80c2a161997-06-02 14:43:07 +000056 "Define the behavior of a particular type of object.",
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000057};