blob: de821f50764e8b945f54996bba0c5c3f734e642e [file] [log] [blame]
Guido van Rossuma027efa1997-05-05 20:56:21 +00001#ifndef Py_PYSTATE_H
2#define Py_PYSTATE_H
3#ifdef __cplusplus
4extern "C" {
5#endif
6
7/***********************************************************
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00008Copyright (c) 2000, BeOpen.com.
9Copyright (c) 1995-2000, Corporation for National Research Initiatives.
10Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
11All rights reserved.
Guido van Rossuma027efa1997-05-05 20:56:21 +000012
Guido van Rossumfd71b9e2000-06-30 23:50:40 +000013See the file "Misc/COPYRIGHT" for information on usage and
14redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossuma027efa1997-05-05 20:56:21 +000015******************************************************************/
16
17/* Thread and interpreter state structures and their interfaces */
18
19
20/* State shared between threads */
21
Guido van Rossum29e46a91997-08-02 02:56:48 +000022struct _ts; /* Forward */
23struct _is; /* Forward */
24
Guido van Rossuma027efa1997-05-05 20:56:21 +000025typedef struct _is {
26
Guido van Rossum29e46a91997-08-02 02:56:48 +000027 struct _is *next;
28 struct _ts *tstate_head;
29
30 PyObject *modules;
Guido van Rossuma027efa1997-05-05 20:56:21 +000031 PyObject *sysdict;
Guido van Rossum29e46a91997-08-02 02:56:48 +000032 PyObject *builtins;
Guido van Rossuma027efa1997-05-05 20:56:21 +000033
Guido van Rossum29e46a91997-08-02 02:56:48 +000034 int checkinterval;
Guido van Rossuma027efa1997-05-05 20:56:21 +000035
36} PyInterpreterState;
37
38
39/* State unique per thread */
40
41struct _frame; /* Avoid including frameobject.h */
42
43typedef struct _ts {
44
Guido van Rossum29e46a91997-08-02 02:56:48 +000045 struct _ts *next;
46 PyInterpreterState *interp;
Guido van Rossuma027efa1997-05-05 20:56:21 +000047
48 struct _frame *frame;
49 int recursion_depth;
50 int ticker;
51 int tracing;
52
53 PyObject *sys_profilefunc;
54 PyObject *sys_tracefunc;
Guido van Rossuma027efa1997-05-05 20:56:21 +000055
56 PyObject *curexc_type;
57 PyObject *curexc_value;
58 PyObject *curexc_traceback;
59
60 PyObject *exc_type;
61 PyObject *exc_value;
62 PyObject *exc_traceback;
63
Guido van Rossumee0a63b1998-04-13 20:24:05 +000064 PyObject *dict;
65
Guido van Rossum29e46a91997-08-02 02:56:48 +000066 /* XXX signal handlers should also be here */
Guido van Rossuma027efa1997-05-05 20:56:21 +000067
68} PyThreadState;
69
70
Guido van Rossum43466ec1998-12-04 18:48:25 +000071DL_IMPORT(PyInterpreterState *) PyInterpreterState_New Py_PROTO((void));
72DL_IMPORT(void) PyInterpreterState_Clear Py_PROTO((PyInterpreterState *));
73DL_IMPORT(void) PyInterpreterState_Delete Py_PROTO((PyInterpreterState *));
Guido van Rossuma027efa1997-05-05 20:56:21 +000074
Guido van Rossum43466ec1998-12-04 18:48:25 +000075DL_IMPORT(PyThreadState *) PyThreadState_New Py_PROTO((PyInterpreterState *));
76DL_IMPORT(void) PyThreadState_Clear Py_PROTO((PyThreadState *));
77DL_IMPORT(void) PyThreadState_Delete Py_PROTO((PyThreadState *));
Guido van Rossuma027efa1997-05-05 20:56:21 +000078
Guido van Rossum43466ec1998-12-04 18:48:25 +000079DL_IMPORT(PyThreadState *) PyThreadState_Get Py_PROTO((void));
80DL_IMPORT(PyThreadState *) PyThreadState_Swap Py_PROTO((PyThreadState *));
81DL_IMPORT(PyObject *) PyThreadState_GetDict Py_PROTO((void));
Guido van Rossuma027efa1997-05-05 20:56:21 +000082
Guido van Rossum275ea671998-12-21 18:28:10 +000083
84/* Variable and macro for in-line access to current thread state */
85
Guido van Rossuma8b47fe1998-12-21 20:21:19 +000086extern DL_IMPORT(PyThreadState *) _PyThreadState_Current;
Guido van Rossum275ea671998-12-21 18:28:10 +000087
88#ifdef Py_DEBUG
89#define PyThreadState_GET() PyThreadState_Get()
90#else
91#define PyThreadState_GET() (_PyThreadState_Current)
92#endif
93
Guido van Rossuma027efa1997-05-05 20:56:21 +000094#ifdef __cplusplus
95}
96#endif
97#endif /* !Py_PYSTATE_H */