blob: 9d589b749c6475969005db8f072921dcfd6c4719 [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/***********************************************************
8Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
9The Netherlands.
10
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 Rossuma027efa1997-05-05 20:56:21 +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 Rossuma027efa1997-05-05 20:56:21 +000020
21******************************************************************/
22
23/* Thread and interpreter state structures and their interfaces */
24
25
26/* State shared between threads */
27
Guido van Rossum29e46a91997-08-02 02:56:48 +000028struct _ts; /* Forward */
29struct _is; /* Forward */
30
Guido van Rossuma027efa1997-05-05 20:56:21 +000031typedef struct _is {
32
Guido van Rossum29e46a91997-08-02 02:56:48 +000033 struct _is *next;
34 struct _ts *tstate_head;
35
36 PyObject *modules;
Guido van Rossuma027efa1997-05-05 20:56:21 +000037 PyObject *sysdict;
Guido van Rossum29e46a91997-08-02 02:56:48 +000038 PyObject *builtins;
Guido van Rossuma027efa1997-05-05 20:56:21 +000039
Guido van Rossum29e46a91997-08-02 02:56:48 +000040 int checkinterval;
Guido van Rossuma027efa1997-05-05 20:56:21 +000041
42} PyInterpreterState;
43
44
45/* State unique per thread */
46
47struct _frame; /* Avoid including frameobject.h */
48
49typedef struct _ts {
50
Guido van Rossum29e46a91997-08-02 02:56:48 +000051 struct _ts *next;
52 PyInterpreterState *interp;
Guido van Rossuma027efa1997-05-05 20:56:21 +000053
54 struct _frame *frame;
55 int recursion_depth;
56 int ticker;
57 int tracing;
58
59 PyObject *sys_profilefunc;
60 PyObject *sys_tracefunc;
Guido van Rossuma027efa1997-05-05 20:56:21 +000061
62 PyObject *curexc_type;
63 PyObject *curexc_value;
64 PyObject *curexc_traceback;
65
66 PyObject *exc_type;
67 PyObject *exc_value;
68 PyObject *exc_traceback;
69
Guido van Rossumee0a63b1998-04-13 20:24:05 +000070 PyObject *dict;
71
Guido van Rossum29e46a91997-08-02 02:56:48 +000072 /* XXX signal handlers should also be here */
Guido van Rossuma027efa1997-05-05 20:56:21 +000073
74} PyThreadState;
75
76
Guido van Rossum43466ec1998-12-04 18:48:25 +000077DL_IMPORT(PyInterpreterState *) PyInterpreterState_New Py_PROTO((void));
78DL_IMPORT(void) PyInterpreterState_Clear Py_PROTO((PyInterpreterState *));
79DL_IMPORT(void) PyInterpreterState_Delete Py_PROTO((PyInterpreterState *));
Guido van Rossuma027efa1997-05-05 20:56:21 +000080
Guido van Rossum43466ec1998-12-04 18:48:25 +000081DL_IMPORT(PyThreadState *) PyThreadState_New Py_PROTO((PyInterpreterState *));
82DL_IMPORT(void) PyThreadState_Clear Py_PROTO((PyThreadState *));
83DL_IMPORT(void) PyThreadState_Delete Py_PROTO((PyThreadState *));
Guido van Rossuma027efa1997-05-05 20:56:21 +000084
Guido van Rossum43466ec1998-12-04 18:48:25 +000085DL_IMPORT(PyThreadState *) PyThreadState_Get Py_PROTO((void));
86DL_IMPORT(PyThreadState *) PyThreadState_Swap Py_PROTO((PyThreadState *));
87DL_IMPORT(PyObject *) PyThreadState_GetDict Py_PROTO((void));
Guido van Rossuma027efa1997-05-05 20:56:21 +000088
Guido van Rossum275ea671998-12-21 18:28:10 +000089
90/* Variable and macro for in-line access to current thread state */
91
Guido van Rossuma8b47fe1998-12-21 20:21:19 +000092extern DL_IMPORT(PyThreadState *) _PyThreadState_Current;
Guido van Rossum275ea671998-12-21 18:28:10 +000093
94#ifdef Py_DEBUG
95#define PyThreadState_GET() PyThreadState_Get()
96#else
97#define PyThreadState_GET() (_PyThreadState_Current)
98#endif
99
Guido van Rossuma027efa1997-05-05 20:56:21 +0000100#ifdef __cplusplus
101}
102#endif
103#endif /* !Py_PYSTATE_H */