blob: 250350497d7e76f730e67819b0ae5e87a8895822 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +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 Rossumf70e43a1991-02-19 12:39:46 +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 Rossumf70e43a1991-02-19 12:39:46 +00009******************************************************************/
10
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000011/* Type object implementation */
12
Guido van Rossumc0b618a1997-05-02 03:12:38 +000013#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000014
15/* Type object implementation */
16
Guido van Rossumc0b618a1997-05-02 03:12:38 +000017static PyObject *
Fred Drake45cfbcc2000-07-09 06:21:27 +000018type_getattr(PyTypeObject *t, char *name)
Guido van Rossum29ca26e1995-01-07 11:58:15 +000019{
20 if (strcmp(name, "__name__") == 0)
Guido van Rossumc0b618a1997-05-02 03:12:38 +000021 return PyString_FromString(t->tp_name);
Guido van Rossum29ca26e1995-01-07 11:58:15 +000022 if (strcmp(name, "__doc__") == 0) {
23 char *doc = t->tp_doc;
24 if (doc != NULL)
Guido van Rossumc0b618a1997-05-02 03:12:38 +000025 return PyString_FromString(doc);
26 Py_INCREF(Py_None);
27 return Py_None;
Guido van Rossum29ca26e1995-01-07 11:58:15 +000028 }
29 if (strcmp(name, "__members__") == 0)
Guido van Rossumc0b618a1997-05-02 03:12:38 +000030 return Py_BuildValue("[ss]", "__doc__", "__name__");
31 PyErr_SetString(PyExc_AttributeError, name);
Guido van Rossum29ca26e1995-01-07 11:58:15 +000032 return NULL;
33}
34
Guido van Rossumc0b618a1997-05-02 03:12:38 +000035static PyObject *
Fred Drake45cfbcc2000-07-09 06:21:27 +000036type_repr(PyTypeObject *v)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000037{
38 char buf[100];
39 sprintf(buf, "<type '%.80s'>", v->tp_name);
Guido van Rossumc0b618a1997-05-02 03:12:38 +000040 return PyString_FromString(buf);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000041}
42
Guido van Rossumc0b618a1997-05-02 03:12:38 +000043PyTypeObject PyType_Type = {
44 PyObject_HEAD_INIT(&PyType_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000045 0, /* Number of items for varobject */
46 "type", /* Name of this type */
Guido van Rossumc0b618a1997-05-02 03:12:38 +000047 sizeof(PyTypeObject), /* Basic object size */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000048 0, /* Item size for varobject */
Guido van Rossum3f5da241990-12-20 15:06:42 +000049 0, /*tp_dealloc*/
Guido van Rossum7066dd71992-09-17 17:54:56 +000050 0, /*tp_print*/
Guido van Rossum29ca26e1995-01-07 11:58:15 +000051 (getattrfunc)type_getattr, /*tp_getattr*/
Guido van Rossum3f5da241990-12-20 15:06:42 +000052 0, /*tp_setattr*/
53 0, /*tp_compare*/
Guido van Rossum29ca26e1995-01-07 11:58:15 +000054 (reprfunc)type_repr, /*tp_repr*/
55 0, /*tp_as_number*/
56 0, /*tp_as_sequence*/
57 0, /*tp_as_mapping*/
58 0, /*tp_hash*/
59 0, /*tp_call*/
60 0, /*tp_str*/
61 0, /*tp_xxx1*/
62 0, /*tp_xxx2*/
63 0, /*tp_xxx3*/
64 0, /*tp_xxx4*/
Guido van Rossum80c2a161997-06-02 14:43:07 +000065 "Define the behavior of a particular type of object.",
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000066};