blob: 288b68edd12845bb92294cb351292c119fbfbe41 [file] [log] [blame]
Guido van Rossuma3309961993-07-28 09:05:47 +00001#ifndef Py_CLASSOBJECT_H
2#define Py_CLASSOBJECT_H
3#ifdef __cplusplus
4extern "C" {
5#endif
6
Guido van Rossumf70e43a1991-02-19 12:39:46 +00007/***********************************************************
Guido van Rossum5799b521995-01-04 19:06:22 +00008Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
9The Netherlands.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000010
11 All Rights Reserved
12
Guido van Rossumfd71b9e2000-06-30 23:50:40 +000013Copyright (c) 2000, BeOpen.com.
14Copyright (c) 1995-2000, Corporation for National Research Initiatives.
15Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
16All rights reserved.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000017
Guido van Rossumfd71b9e2000-06-30 23:50:40 +000018See the file "Misc/COPYRIGHT" for information on usage and
19redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000020
21******************************************************************/
22
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000023/* Class object interface */
24
Guido van Rossumb3f72581993-05-21 19:56:10 +000025/* Revealing some structures (not for general use) */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000026
Guido van Rossum81daa321993-05-20 14:24:46 +000027typedef struct {
Guido van Rossumcaa63801995-01-12 11:45:45 +000028 PyObject_HEAD
29 PyObject *cl_bases; /* A tuple of class objects */
30 PyObject *cl_dict; /* A dictionary */
31 PyObject *cl_name; /* A string */
Guido van Rossum03a90961994-09-06 09:48:43 +000032 /* The following three are functions or NULL */
Guido van Rossumcaa63801995-01-12 11:45:45 +000033 PyObject *cl_getattr;
34 PyObject *cl_setattr;
35 PyObject *cl_delattr;
36} PyClassObject;
Guido van Rossum81daa321993-05-20 14:24:46 +000037
Guido van Rossumb3f72581993-05-21 19:56:10 +000038typedef struct {
Guido van Rossumcaa63801995-01-12 11:45:45 +000039 PyObject_HEAD
40 PyClassObject *in_class; /* The class object */
41 PyObject *in_dict; /* A dictionary */
42} PyInstanceObject;
Guido van Rossumb3f72581993-05-21 19:56:10 +000043
Guido van Rossumd4ba73c1998-07-10 15:46:33 +000044typedef struct {
45 PyObject_HEAD
46 PyObject *im_func; /* The callable object implementing the method */
47 PyObject *im_self; /* The instance it is bound to, or NULL */
48 PyObject *im_class; /* The class that defined the method */
49} PyMethodObject;
50
Guido van Rossum051ab121995-02-27 10:17:52 +000051extern DL_IMPORT(PyTypeObject) PyClass_Type, PyInstance_Type, PyMethod_Type;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000052
Guido van Rossumcaa63801995-01-12 11:45:45 +000053#define PyClass_Check(op) ((op)->ob_type == &PyClass_Type)
54#define PyInstance_Check(op) ((op)->ob_type == &PyInstance_Type)
55#define PyMethod_Check(op) ((op)->ob_type == &PyMethod_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000056
Guido van Rossum43466ec1998-12-04 18:48:25 +000057extern DL_IMPORT(PyObject *) PyClass_New Py_PROTO((PyObject *, PyObject *, PyObject *));
58extern DL_IMPORT(PyObject *) PyInstance_New Py_PROTO((PyObject *, PyObject *, PyObject *));
59extern DL_IMPORT(PyObject *) PyMethod_New Py_PROTO((PyObject *, PyObject *, PyObject *));
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000060
Guido van Rossum43466ec1998-12-04 18:48:25 +000061extern DL_IMPORT(PyObject *) PyMethod_Function Py_PROTO((PyObject *));
62extern DL_IMPORT(PyObject *) PyMethod_Self Py_PROTO((PyObject *));
63extern DL_IMPORT(PyObject *) PyMethod_Class Py_PROTO((PyObject *));
Guido van Rossum04691fc1992-08-12 15:35:34 +000064
Guido van Rossumd4ba73c1998-07-10 15:46:33 +000065/* Macros for direct access to these values. Type checks are *not*
66 done, so use with care. */
67#define PyMethod_GET_FUNCTION(meth) \
68 (((PyMethodObject *)meth) -> im_func)
69#define PyMethod_GET_SELF(meth) \
70 (((PyMethodObject *)meth) -> im_self)
71#define PyMethod_GET_CLASS(meth) \
72 (((PyMethodObject *)meth) -> im_class)
73
Guido van Rossum43466ec1998-12-04 18:48:25 +000074extern DL_IMPORT(int) PyClass_IsSubclass Py_PROTO((PyObject *, PyObject *));
Guido van Rossuma3309961993-07-28 09:05:47 +000075
Guido van Rossum43466ec1998-12-04 18:48:25 +000076extern DL_IMPORT(PyObject *) PyInstance_DoBinOp
Guido van Rossumcaa63801995-01-12 11:45:45 +000077 Py_PROTO((PyObject *, PyObject *,
78 char *, char *,
79 PyObject * (*) Py_PROTO((PyObject *, PyObject *)) ));
Guido van Rossumc5d92e11994-09-28 15:44:39 +000080
Guido van Rossuma3309961993-07-28 09:05:47 +000081#ifdef __cplusplus
82}
83#endif
84#endif /* !Py_CLASSOBJECT_H */