#include "sysmodule.h"
#include "intrcheck.h"
#include "import.h"
-#include "bltinmodule.h"
#include "abstract.h"
+++ /dev/null
-#ifndef Py_BLTINMODULE_H
-#define Py_BLTINMODULE_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/***********************************************************
-Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
-The Netherlands.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the names of Stichting Mathematisch
-Centrum or CWI or Corporation for National Research Initiatives or
-CNRI not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-While CWI is the initial source for this software, a modified version
-is made available by the Corporation for National Research Initiatives
-(CNRI) at the Internet address ftp://ftp.python.org.
-
-STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
-CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
-DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-
-******************************************************************/
-
-/* Built-in module interface */
-
-extern void PyBuiltin_Init Py_PROTO((void));
-extern PyObject *PyBuiltin_GetDict Py_PROTO(());
-extern PyObject *PyBuiltin_GetModule Py_PROTO(());
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* !Py_BLTINMODULE_H */
#ifdef WITH_THREAD
extern void PyEval_InitThreads Py_PROTO((void));
+extern void PyEval_AcquireLock Py_PROTO((void));
+extern void PyEval_ReleaseLock Py_PROTO((void));
extern void PyEval_AcquireThread Py_PROTO((PyThreadState *tstate));
extern void PyEval_ReleaseThread Py_PROTO((PyThreadState *tstate));
/* Module definition and import interface */
-void PyImport_Init Py_PROTO((void));
long PyImport_GetMagicNumber Py_PROTO((void));
PyObject *PyImport_ExecCodeModule Py_PROTO((char *name, PyObject *co));
PyObject *PyImport_GetModuleDict Py_PROTO((void));
void PyImport_Cleanup Py_PROTO((void));
int PyImport_ImportFrozenModule Py_PROTO((char *));
+extern PyObject *_PyImport_FindExtension Py_PROTO((char *, char *));
+extern PyObject *_PyImport_FixupExtension Py_PROTO((char *, char *));
+
struct _inittab {
char *name;
void (*initfunc)();
#define NEXITFUNCS 32
+struct _ts; /* Forward */
+struct _is; /* Forward */
+
typedef struct _is {
- PyObject *import_modules;
- PyObject *sysdict;
+ struct _is *next;
+ struct _ts *tstate_head;
- int nthreads;
+ PyObject *modules;
+ PyObject *sysdict;
+ PyObject *builtins;
- void (*exitfuncs[NEXITFUNCS])();
- int nexitfuncs;
+ int checkinterval;
} PyInterpreterState;
typedef struct _ts {
- PyInterpreterState *interpreter_state;
+ struct _ts *next;
+ PyInterpreterState *interp;
struct _frame *frame;
int recursion_depth;
PyObject *sys_profilefunc;
PyObject *sys_tracefunc;
- int sys_checkinterval;
PyObject *curexc_type;
PyObject *curexc_value;
PyObject *exc_value;
PyObject *exc_traceback;
- /* XXX Other state that should be here:
- - signal handlers
- - low-level "pending calls"
- Problem with both is that they may be referenced from
- interrupt handlers where there is no clear concept of a
- "current thread"???
- */
+ /* XXX signal handlers should also be here */
} PyThreadState;
PyInterpreterState *PyInterpreterState_New Py_PROTO((void));
+void PyInterpreterState_Clear Py_PROTO((PyInterpreterState *));
void PyInterpreterState_Delete Py_PROTO((PyInterpreterState *));
PyThreadState *PyThreadState_New Py_PROTO((PyInterpreterState *));
+void PyThreadState_Clear Py_PROTO((PyThreadState *));
void PyThreadState_Delete Py_PROTO((PyThreadState *));
PyThreadState *PyThreadState_Get Py_PROTO((void));
PyThreadState *PyThreadState_Swap Py_PROTO((PyThreadState *));
-/* Some background.
-
- There are lots of issues here.
-
- First, we can build Python without threads, with threads, or (when
- Greg Stein's mods are out of beta, on some platforms) with free
- threading.
-
- Next, assuming some form of threading is used, there can be several
- kinds of threads. Python code can create threads with the thread
- module. C code can create threads with the interface defined in
- python's "thread.h". Or C code can create threads directly with
- the OS threads interface (e.g. Solaris threads, SGI threads or
- pthreads, whatever is being used, as long as it's the same that
- Python is configured for).
-
- Next, let's discuss sharing of interpreter state between threads.
- The exception state (sys.exc_* currently) should never be shared
- between threads, because it is stack frame specific. The contents
- of the sys module, in particular sys.modules and sys.path, are
- generally shared between threads. But occasionally it is useful to
- have separate module collections, e.g. when threads originate in C
- code and are used to execute unrelated Python scripts.
- (Traditionally, one would use separate processes for this, but
- there are lots of reasons why threads are attractive.)
-
-*/
-
#ifdef __cplusplus
}
#endif
void Py_SetProgramName Py_PROTO((char *));
char *Py_GetProgramName Py_PROTO((void));
-void Py_Setup Py_PROTO((void));
void Py_Initialize Py_PROTO((void));
+PyThreadState *Py_NewInterpreter Py_PROTO((void));
+void Py_EndInterpreter Py_PROTO((PyThreadState *));
int PyRun_AnyFile Py_PROTO((FILE *, char *));
void Py_Exit Py_PROTO((int));
-void Py_Cleanup Py_PROTO((void));
-
-void PyImport_Init Py_PROTO((void));
-void PyBuiltin_Init Py_PROTO((void));
-
int Py_FdIsInteractive Py_PROTO((FILE *, char *));
/* In getpath.c */
const char *Py_GetCompiler Py_PROTO((void));
const char *Py_GetBuildInfo Py_PROTO((void));
+/* Internal -- various one-time initializations */
+
+PyObject *_PyBuiltin_Init Py_PROTO((void));
+PyObject *_PySys_Init Py_PROTO((void));
+void _PyImport_Init Py_PROTO((void));
+
#ifdef __cplusplus
}
#endif
PyObject *PySys_GetObject Py_PROTO((char *));
int PySys_SetObject Py_PROTO((char *, PyObject *));
FILE *PySys_GetFile Py_PROTO((char *, FILE *));
-void PySys_Init Py_PROTO((void));
void PySys_SetArgv Py_PROTO((int, char **));
void PySys_SetPath Py_PROTO((char *));