blob: 67416e49b29aeb404551ba4f0a872fc3397fda38 [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/* Class object interface */
12
Guido van Rossumb3f72581993-05-21 19:56:10 +000013/* Revealing some structures (not for general use) */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000014
Fred Drakeea9cb5a2000-07-09 00:20:36 +000015#ifndef Py_CLASSOBJECT_H
16#define Py_CLASSOBJECT_H
17#ifdef __cplusplus
18extern "C" {
19#endif
20
Guido van Rossum81daa321993-05-20 14:24:46 +000021typedef struct {
Fred Drakeea9cb5a2000-07-09 00:20:36 +000022 PyObject_HEAD
23 PyObject *cl_bases; /* A tuple of class objects */
24 PyObject *cl_dict; /* A dictionary */
25 PyObject *cl_name; /* A string */
26 /* The following three are functions or NULL */
27 PyObject *cl_getattr;
28 PyObject *cl_setattr;
29 PyObject *cl_delattr;
Guido van Rossumcaa63801995-01-12 11:45:45 +000030} PyClassObject;
Guido van Rossum81daa321993-05-20 14:24:46 +000031
Guido van Rossumb3f72581993-05-21 19:56:10 +000032typedef struct {
Fred Drakeea9cb5a2000-07-09 00:20:36 +000033 PyObject_HEAD
34 PyClassObject *in_class; /* The class object */
35 PyObject *in_dict; /* A dictionary */
Guido van Rossumcaa63801995-01-12 11:45:45 +000036} PyInstanceObject;
Guido van Rossumb3f72581993-05-21 19:56:10 +000037
Guido van Rossumd4ba73c1998-07-10 15:46:33 +000038typedef struct {
Fred Drakeea9cb5a2000-07-09 00:20:36 +000039 PyObject_HEAD
40 PyObject *im_func; /* The callable object implementing the method */
41 PyObject *im_self; /* The instance it is bound to, or NULL */
42 PyObject *im_class; /* The class that defined the method */
Guido van Rossumd4ba73c1998-07-10 15:46:33 +000043} PyMethodObject;
44
Guido van Rossum051ab121995-02-27 10:17:52 +000045extern DL_IMPORT(PyTypeObject) PyClass_Type, PyInstance_Type, PyMethod_Type;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000046
Guido van Rossumcaa63801995-01-12 11:45:45 +000047#define PyClass_Check(op) ((op)->ob_type == &PyClass_Type)
48#define PyInstance_Check(op) ((op)->ob_type == &PyInstance_Type)
49#define PyMethod_Check(op) ((op)->ob_type == &PyMethod_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000050
Fred Drakeea9cb5a2000-07-09 00:20:36 +000051extern DL_IMPORT(PyObject *) PyClass_New(PyObject *, PyObject *, PyObject *);
52extern DL_IMPORT(PyObject *) PyInstance_New(PyObject *, PyObject *,
53 PyObject *);
54extern DL_IMPORT(PyObject *) PyMethod_New(PyObject *, PyObject *, PyObject *);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000055
Fred Drakeea9cb5a2000-07-09 00:20:36 +000056extern DL_IMPORT(PyObject *) PyMethod_Function(PyObject *);
57extern DL_IMPORT(PyObject *) PyMethod_Self(PyObject *);
58extern DL_IMPORT(PyObject *) PyMethod_Class(PyObject *);
Guido van Rossum04691fc1992-08-12 15:35:34 +000059
Guido van Rossumd4ba73c1998-07-10 15:46:33 +000060/* Macros for direct access to these values. Type checks are *not*
61 done, so use with care. */
62#define PyMethod_GET_FUNCTION(meth) \
63 (((PyMethodObject *)meth) -> im_func)
64#define PyMethod_GET_SELF(meth) \
65 (((PyMethodObject *)meth) -> im_self)
66#define PyMethod_GET_CLASS(meth) \
67 (((PyMethodObject *)meth) -> im_class)
68
Fred Drakeea9cb5a2000-07-09 00:20:36 +000069extern DL_IMPORT(int) PyClass_IsSubclass(PyObject *, PyObject *);
Guido van Rossuma3309961993-07-28 09:05:47 +000070
Fred Drakeea9cb5a2000-07-09 00:20:36 +000071extern DL_IMPORT(PyObject *) PyInstance_DoBinOp(PyObject *, PyObject *,
72 char *, char *,
73 PyObject * (*)(PyObject *,
74 PyObject *));
Guido van Rossumc5d92e11994-09-28 15:44:39 +000075
Thomas Woutersdd8dbdb2000-08-24 20:09:45 +000076extern DL_IMPORT(int)
77PyInstance_HalfBinOp(PyObject *, PyObject *, char *, PyObject **,
78 PyObject * (*)(PyObject *, PyObject *), int);
79
Guido van Rossuma3309961993-07-28 09:05:47 +000080#ifdef __cplusplus
81}
82#endif
83#endif /* !Py_CLASSOBJECT_H */