blob: fe92d303c8bc43e6c7f0a6e1b7d8e9d4d271a695 [file] [log] [blame]
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001
2/* Python interpreter top-level routines, including init/exit */
3
Guido van Rossum82598051997-03-05 00:20:32 +00004#include "Python.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +00005
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "Python-ast.h"
Guido van Rossumd8faa362007-04-27 19:54:29 +00007#undef Yield /* undefine macro conflicting with winbase.h */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00008#include "grammar.h"
9#include "node.h"
Fred Drake85f36392000-07-11 17:53:00 +000010#include "token.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000011#include "parsetok.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000012#include "errcode.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000013#include "code.h"
Jeremy Hylton4b38da62001-02-02 18:19:15 +000014#include "symtable.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000015#include "ast.h"
Guido van Rossumfdef2711994-09-14 13:31:04 +000016#include "marshal.h"
Martin v. Löwis790465f2008-04-05 20:41:37 +000017#include "osdefs.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000018
Thomas Wouters0e3f5912006-08-11 14:57:12 +000019#ifdef HAVE_SIGNAL_H
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000020#include <signal.h>
Thomas Wouters0e3f5912006-08-11 14:57:12 +000021#endif
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000022
Benjamin Peterson80a50ac2009-01-02 21:24:04 +000023#ifdef MS_WINDOWS
Martin v. Löwis5c88d812009-01-02 20:47:48 +000024#include "malloc.h" /* for alloca */
Benjamin Peterson80a50ac2009-01-02 21:24:04 +000025#endif
Martin v. Löwis5c88d812009-01-02 20:47:48 +000026
Martin v. Löwis73d538b2003-03-05 15:13:47 +000027#ifdef HAVE_LANGINFO_H
28#include <locale.h>
29#include <langinfo.h>
30#endif
31
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000032#ifdef MS_WINDOWS
Guido van Rossuma44823b1995-03-14 15:01:17 +000033#undef BYTE
34#include "windows.h"
Martin v. Löwis790465f2008-04-05 20:41:37 +000035#define PATH_MAX MAXPATHLEN
Guido van Rossuma44823b1995-03-14 15:01:17 +000036#endif
37
Neal Norwitz4281cef2006-03-04 19:58:13 +000038#ifndef Py_REF_DEBUG
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000039#define PRINT_TOTAL_REFS()
Neal Norwitz4281cef2006-03-04 19:58:13 +000040#else /* Py_REF_DEBUG */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000041#define PRINT_TOTAL_REFS() fprintf(stderr, \
42 "[%" PY_FORMAT_SIZE_T "d refs]\n", \
43 _Py_GetRefTotal())
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000044#endif
45
46#ifdef __cplusplus
47extern "C" {
Neal Norwitz4281cef2006-03-04 19:58:13 +000048#endif
49
Martin v. Löwis790465f2008-04-05 20:41:37 +000050extern wchar_t *Py_GetPath(void);
Guido van Rossum1984f1e1992-08-04 12:41:02 +000051
Guido van Rossum82598051997-03-05 00:20:32 +000052extern grammar _PyParser_Grammar; /* From graminit.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000053
Guido van Rossumb73cc041993-11-01 16:28:59 +000054/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000055static void initmain(void);
Victor Stinner3cbf14b2011-04-27 00:24:21 +020056static int initfsencoding(PyInterpreterState *interp);
Tim Petersdbd9ba62000-07-09 03:09:57 +000057static void initsite(void);
Guido van Rossumce3a72a2007-10-19 23:16:50 +000058static int initstdio(void);
Amaury Forgeot d'Arc7fedbe52008-04-10 21:03:09 +000059static void flush_io(void);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000060static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000061 PyCompilerFlags *, PyArena *);
Martin v. Löwis95292d62002-12-11 14:04:59 +000062static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000063 PyCompilerFlags *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000064static void err_input(perrdetail *);
65static void initsigs(void);
Collin Winter670e6922007-03-21 02:57:17 +000066static void call_py_exitfuncs(void);
Antoine Pitrou011bd622009-10-20 21:52:47 +000067static void wait_for_thread_shutdown(void);
Tim Petersdbd9ba62000-07-09 03:09:57 +000068static void call_ll_exitfuncs(void);
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000069extern void _PyUnicode_Init(void);
70extern void _PyUnicode_Fini(void);
Guido van Rossumddefaf32007-01-14 03:31:43 +000071extern int _PyLong_Init(void);
72extern void PyLong_Fini(void);
Guido van Rossumc94044c2000-03-10 23:03:54 +000073
Mark Hammond8d98d2c2003-04-19 15:41:53 +000074#ifdef WITH_THREAD
75extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
76extern void _PyGILState_Fini(void);
77#endif /* WITH_THREAD */
78
Guido van Rossum82598051997-03-05 00:20:32 +000079int Py_DebugFlag; /* Needed by parser.c */
80int Py_VerboseFlag; /* Needed by import.c */
Georg Brandl8aa7e992010-12-28 18:30:18 +000081int Py_QuietFlag; /* Needed by sysmodule.c */
Guido van Rossum7433b121997-02-14 19:45:36 +000082int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Georg Brandl0b2489e2011-05-15 08:49:12 +020083int Py_InspectFlag; /* Needed to determine whether to exit at SystemExit */
Guido van Rossumdcc0c131997-08-29 22:32:42 +000084int Py_NoSiteFlag; /* Suppress 'import site' */
Guido van Rossum98297ee2007-11-06 21:34:58 +000085int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */
Christian Heimes790c8232008-01-07 21:14:23 +000086int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.py[co]) */
Barry Warsaw3ce09642000-05-02 19:18:59 +000087int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
Guido van Rossuma61691e1998-02-06 22:27:24 +000088int Py_FrozenFlag; /* Needed by getpath.c */
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +000089int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Christian Heimes8dc226f2008-05-06 23:45:46 +000090int Py_NoUserSiteDirectory = 0; /* for -s and site.py */
Antoine Pitrou05608432009-01-09 18:53:14 +000091int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000092
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +020093PyThreadState *_Py_Finalizing = NULL;
94
Christian Heimes33fe8092008-04-13 13:53:33 +000095/* PyModule_GetWarningsModule is no longer necessary as of 2.6
96since _warnings is builtin. This API should not be used. */
97PyObject *
98PyModule_GetWarningsModule(void)
Mark Hammondedd07732003-07-15 23:03:55 +000099{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000100 return PyImport_ImportModule("warnings");
Mark Hammondedd07732003-07-15 23:03:55 +0000101}
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000102
Guido van Rossum25ce5661997-08-02 03:10:38 +0000103static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000104
Thomas Wouters7e474022000-07-16 12:04:32 +0000105/* API to access the initialized flag -- useful for esoteric use */
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000106
107int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000108Py_IsInitialized(void)
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000109{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000110 return initialized;
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000111}
112
Guido van Rossum25ce5661997-08-02 03:10:38 +0000113/* Global initializations. Can be undone by Py_Finalize(). Don't
114 call this twice without an intervening Py_Finalize() call. When
115 initializations fail, a fatal error is issued and the function does
116 not return. On return, the first thread and interpreter state have
117 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000118
Guido van Rossum25ce5661997-08-02 03:10:38 +0000119 Locking: you must hold the interpreter lock while calling this.
120 (If the lock has not yet been initialized, that's equivalent to
121 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000122
Guido van Rossum25ce5661997-08-02 03:10:38 +0000123*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000124
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000125static int
126add_flag(int flag, const char *envs)
127{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000128 int env = atoi(envs);
129 if (flag < env)
130 flag = env;
131 if (flag < 1)
132 flag = 1;
133 return flag;
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000134}
135
Christian Heimes5833a2f2008-10-30 21:40:04 +0000136static char*
Victor Stinner94908bb2010-08-18 21:23:25 +0000137get_codec_name(const char *encoding)
Christian Heimes5833a2f2008-10-30 21:40:04 +0000138{
Victor Stinner94908bb2010-08-18 21:23:25 +0000139 char *name_utf8, *name_str;
Victor Stinner386fe712010-05-19 00:34:15 +0000140 PyObject *codec, *name = NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000141
Victor Stinner94908bb2010-08-18 21:23:25 +0000142 codec = _PyCodec_Lookup(encoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000143 if (!codec)
144 goto error;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000145
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000146 name = PyObject_GetAttrString(codec, "name");
147 Py_CLEAR(codec);
148 if (!name)
149 goto error;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000150
Victor Stinner94908bb2010-08-18 21:23:25 +0000151 name_utf8 = _PyUnicode_AsString(name);
Victor Stinner9c4efe52011-03-20 23:23:22 +0100152 if (name_utf8 == NULL)
Victor Stinner386fe712010-05-19 00:34:15 +0000153 goto error;
Victor Stinner94908bb2010-08-18 21:23:25 +0000154 name_str = strdup(name_utf8);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000155 Py_DECREF(name);
Victor Stinner94908bb2010-08-18 21:23:25 +0000156 if (name_str == NULL) {
157 PyErr_NoMemory();
158 return NULL;
159 }
160 return name_str;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000161
162error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000163 Py_XDECREF(codec);
Victor Stinner386fe712010-05-19 00:34:15 +0000164 Py_XDECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000165 return NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000166}
Victor Stinner94908bb2010-08-18 21:23:25 +0000167
168#if defined(HAVE_LANGINFO_H) && defined(CODESET)
169static char*
170get_codeset(void)
171{
172 char* codeset = nl_langinfo(CODESET);
173 if (!codeset || codeset[0] == '\0') {
174 PyErr_SetString(PyExc_ValueError, "CODESET is not set or empty");
175 return NULL;
176 }
177 return get_codec_name(codeset);
178}
Christian Heimes5833a2f2008-10-30 21:40:04 +0000179#endif
180
Guido van Rossuma027efa1997-05-05 20:56:21 +0000181void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000182Py_InitializeEx(int install_sigs)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000183{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000184 PyInterpreterState *interp;
185 PyThreadState *tstate;
186 PyObject *bimod, *sysmod, *pstderr;
187 char *p;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000188 extern void _Py_ReadyTypes(void);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000189
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000190 if (initialized)
191 return;
192 initialized = 1;
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200193 _Py_Finalizing = NULL;
Tim Petersd08e3822003-04-17 15:24:21 +0000194
Andrew M. Kuchlingb2ceb3a2010-02-22 23:26:10 +0000195#if defined(HAVE_LANGINFO_H) && defined(HAVE_SETLOCALE)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000196 /* Set up the LC_CTYPE locale, so we can obtain
197 the locale's charset without having to switch
198 locales. */
199 setlocale(LC_CTYPE, "");
Martin v. Löwisd1cd4d42007-08-11 14:02:14 +0000200#endif
201
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000202 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
203 Py_DebugFlag = add_flag(Py_DebugFlag, p);
204 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
205 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
206 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
207 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
208 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0')
209 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000210
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000211 interp = PyInterpreterState_New();
212 if (interp == NULL)
213 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000214
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000215 tstate = PyThreadState_New(interp);
216 if (tstate == NULL)
217 Py_FatalError("Py_Initialize: can't make first thread");
218 (void) PyThreadState_Swap(tstate);
Guido van Rossuma027efa1997-05-05 20:56:21 +0000219
Victor Stinner6961bd62010-08-17 22:26:51 +0000220#ifdef WITH_THREAD
Antoine Pitroub0b384b2010-09-20 20:13:48 +0000221 /* We can't call _PyEval_FiniThreads() in Py_Finalize because
222 destroying the GIL might fail when it is being referenced from
223 another running thread (see issue #9901).
224 Instead we destroy the previously created GIL here, which ensures
225 that we can call Py_Initialize / Py_Finalize multiple times. */
226 _PyEval_FiniThreads();
227
228 /* Auto-thread-state API */
Victor Stinner6961bd62010-08-17 22:26:51 +0000229 _PyGILState_Init(interp, tstate);
230#endif /* WITH_THREAD */
231
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000232 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000233
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000234 if (!_PyFrame_Init())
235 Py_FatalError("Py_Initialize: can't init frames");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000236
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000237 if (!_PyLong_Init())
238 Py_FatalError("Py_Initialize: can't init longs");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000239
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000240 if (!PyByteArray_Init())
241 Py_FatalError("Py_Initialize: can't init bytearray");
Neal Norwitz6968b052007-02-27 19:02:19 +0000242
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000243 _PyFloat_Init();
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000244
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000245 interp->modules = PyDict_New();
246 if (interp->modules == NULL)
247 Py_FatalError("Py_Initialize: can't make modules dictionary");
248 interp->modules_reloading = PyDict_New();
249 if (interp->modules_reloading == NULL)
250 Py_FatalError("Py_Initialize: can't make modules_reloading dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000251
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000252 /* Init Unicode implementation; relies on the codec registry */
253 _PyUnicode_Init();
Guido van Rossumc94044c2000-03-10 23:03:54 +0000254
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000255 bimod = _PyBuiltin_Init();
256 if (bimod == NULL)
257 Py_FatalError("Py_Initialize: can't initialize builtins modules");
Victor Stinner49d3f252010-10-17 01:24:53 +0000258 _PyImport_FixupBuiltin(bimod, "builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000259 interp->builtins = PyModule_GetDict(bimod);
260 if (interp->builtins == NULL)
261 Py_FatalError("Py_Initialize: can't initialize builtins dict");
262 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000263
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000264 /* initialize builtin exceptions */
265 _PyExc_Init();
Christian Heimes9a68f8c2007-11-14 00:16:07 +0000266
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000267 sysmod = _PySys_Init();
268 if (sysmod == NULL)
269 Py_FatalError("Py_Initialize: can't initialize sys");
270 interp->sysdict = PyModule_GetDict(sysmod);
271 if (interp->sysdict == NULL)
272 Py_FatalError("Py_Initialize: can't initialize sys dict");
273 Py_INCREF(interp->sysdict);
Victor Stinner49d3f252010-10-17 01:24:53 +0000274 _PyImport_FixupBuiltin(sysmod, "sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000275 PySys_SetPath(Py_GetPath());
276 PyDict_SetItemString(interp->sysdict, "modules",
277 interp->modules);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000278
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000279 /* Set up a preliminary stderr printer until we have enough
280 infrastructure for the io module in place. */
281 pstderr = PyFile_NewStdPrinter(fileno(stderr));
282 if (pstderr == NULL)
283 Py_FatalError("Py_Initialize: can't set preliminary stderr");
284 PySys_SetObject("stderr", pstderr);
285 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000286 Py_DECREF(pstderr);
Guido van Rossum826d8972007-10-30 18:34:07 +0000287
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000288 _PyImport_Init();
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000289
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000290 _PyImportHooks_Init();
Just van Rossum52e14d62002-12-30 22:08:05 +0000291
Victor Stinner7d79b8b2010-05-19 20:40:50 +0000292 /* Initialize _warnings. */
293 _PyWarnings_Init();
294
Alexander Belopolsky6fc4ade2010-08-05 17:34:27 +0000295 _PyTime_Init();
296
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200297 if (initfsencoding(interp) < 0)
298 Py_FatalError("Py_Initialize: unable to load the file system codec");
Martin v. Löwis011e8422009-05-05 04:43:17 +0000299
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000300 if (install_sigs)
301 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000302
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000303 initmain(); /* Module __main__ */
304 if (initstdio() < 0)
305 Py_FatalError(
306 "Py_Initialize: can't initialize sys standard streams");
307
Antoine Pitroucf9f9802010-11-10 13:55:25 +0000308 /* Initialize warnings. */
309 if (PySys_HasWarnOptions()) {
310 PyObject *warnings_module = PyImport_ImportModule("warnings");
311 if (warnings_module == NULL) {
312 fprintf(stderr, "'import warnings' failed; traceback:\n");
313 PyErr_Print();
314 }
315 Py_XDECREF(warnings_module);
316 }
317
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000318 if (!Py_NoSiteFlag)
319 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000320}
321
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000322void
323Py_Initialize(void)
324{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000325 Py_InitializeEx(1);
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000326}
327
328
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000329#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000330extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000331#endif
332
Guido van Rossume8432ac2007-07-09 15:04:50 +0000333/* Flush stdout and stderr */
334
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100335static int
336file_is_closed(PyObject *fobj)
337{
338 int r;
339 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
340 if (tmp == NULL) {
341 PyErr_Clear();
342 return 0;
343 }
344 r = PyObject_IsTrue(tmp);
345 Py_DECREF(tmp);
346 if (r < 0)
347 PyErr_Clear();
348 return r > 0;
349}
350
Neal Norwitz2bad9702007-08-27 06:19:22 +0000351static void
Guido van Rossum1bd21222007-07-10 20:14:13 +0000352flush_std_files(void)
Guido van Rossume8432ac2007-07-09 15:04:50 +0000353{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000354 PyObject *fout = PySys_GetObject("stdout");
355 PyObject *ferr = PySys_GetObject("stderr");
356 PyObject *tmp;
Guido van Rossume8432ac2007-07-09 15:04:50 +0000357
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100358 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000359 tmp = PyObject_CallMethod(fout, "flush", "");
360 if (tmp == NULL)
Antoine Pitroubddc9fe2010-08-08 20:46:42 +0000361 PyErr_WriteUnraisable(fout);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000362 else
363 Py_DECREF(tmp);
364 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000365
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100366 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000367 tmp = PyObject_CallMethod(ferr, "flush", "");
368 if (tmp == NULL)
369 PyErr_Clear();
370 else
371 Py_DECREF(tmp);
372 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000373}
374
Guido van Rossum25ce5661997-08-02 03:10:38 +0000375/* Undo the effect of Py_Initialize().
376
377 Beware: if multiple interpreter and/or thread states exist, these
378 are not wiped out; only the current thread and interpreter state
379 are deleted. But since everything else is deleted, those other
380 interpreter and thread states should no longer be used.
381
382 (XXX We should do better, e.g. wipe out all interpreters and
383 threads.)
384
385 Locking: as above.
386
387*/
388
389void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000390Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000391{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000392 PyInterpreterState *interp;
393 PyThreadState *tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000394
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000395 if (!initialized)
396 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000397
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000398 wait_for_thread_shutdown();
Antoine Pitrou011bd622009-10-20 21:52:47 +0000399
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000400 /* The interpreter is still entirely intact at this point, and the
401 * exit funcs may be relying on that. In particular, if some thread
402 * or exit func is still waiting to do an import, the import machinery
403 * expects Py_IsInitialized() to return true. So don't say the
404 * interpreter is uninitialized until after the exit funcs have run.
405 * Note that Threading.py uses an exit func to do a join on all the
406 * threads created thru it, so this also protects pending imports in
407 * the threads created via Threading.
408 */
409 call_py_exitfuncs();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000410
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000411 /* Get current thread state and interpreter pointer */
412 tstate = PyThreadState_GET();
413 interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000414
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200415 /* Remaining threads (e.g. daemon threads) will automatically exit
416 after taking the GIL (in PyEval_RestoreThread()). */
417 _Py_Finalizing = tstate;
418 initialized = 0;
419
420 /* Flush stdout+stderr */
421 flush_std_files();
422
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000423 /* Disable signal handling */
424 PyOS_FiniInterrupts();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000425
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000426 /* Clear type lookup cache */
427 PyType_ClearCache();
Christian Heimes26855632008-01-27 23:50:43 +0000428
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000429 /* Collect garbage. This may call finalizers; it's nice to call these
430 * before all modules are destroyed.
431 * XXX If a __del__ or weakref callback is triggered here, and tries to
432 * XXX import a module, bad things can happen, because Python no
433 * XXX longer believes it's initialized.
434 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
435 * XXX is easy to provoke that way. I've also seen, e.g.,
436 * XXX Exception exceptions.ImportError: 'No module named sha'
437 * XXX in <function callback at 0x008F5718> ignored
438 * XXX but I'm unclear on exactly how that one happens. In any case,
439 * XXX I haven't seen a real-life report of either of these.
440 */
441 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000442#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000443 /* With COUNT_ALLOCS, it helps to run GC multiple times:
444 each collection might release some types from the type
445 list, so they become garbage. */
446 while (PyGC_Collect() > 0)
447 /* nothing */;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000448#endif
Antoine Pitrou696e0352010-08-08 22:18:46 +0000449 /* We run this while most interpreter state is still alive, so that
450 debug information can be printed out */
451 _PyGC_Fini();
Guido van Rossume13ddc92003-04-17 17:29:22 +0000452
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000453 /* Destroy all modules */
454 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000455
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000456 /* Flush stdout+stderr (again, in case more was printed) */
457 flush_std_files();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000458
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000459 /* Collect final garbage. This disposes of cycles created by
460 * new-style class definitions, for example.
461 * XXX This is disabled because it caused too many problems. If
462 * XXX a __del__ or weakref callback triggers here, Python code has
463 * XXX a hard time running, because even the sys module has been
464 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
465 * XXX One symptom is a sequence of information-free messages
466 * XXX coming from threads (if a __del__ or callback is invoked,
467 * XXX other threads can execute too, and any exception they encounter
468 * XXX triggers a comedy of errors as subsystem after subsystem
469 * XXX fails to find what it *expects* to find in sys to help report
470 * XXX the exception and consequent unexpected failures). I've also
471 * XXX seen segfaults then, after adding print statements to the
472 * XXX Python code getting called.
473 */
Tim Peters1d7323e2003-12-01 21:35:27 +0000474#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000475 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000476#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000477
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000478 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
479 _PyImport_Fini();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000480
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000481 /* Debugging stuff */
Guido van Rossum1707aad1997-12-08 23:43:45 +0000482#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000483 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000484#endif
485
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000486 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000487
Tim Peters9cf25ce2003-04-17 15:21:01 +0000488#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000489 /* Display all objects still alive -- this can invoke arbitrary
490 * __repr__ overrides, so requires a mostly-intact interpreter.
491 * Alas, a lot of stuff may still be alive now that will be cleaned
492 * up later.
493 */
494 if (Py_GETENV("PYTHONDUMPREFS"))
495 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000496#endif /* Py_TRACE_REFS */
497
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000498 /* Clear interpreter state */
499 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000500
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000501 /* Now we decref the exception classes. After this point nothing
502 can raise an exception. That's okay, because each Fini() method
503 below has been checked to make sure no exceptions are ever
504 raised.
505 */
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000506
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000507 _PyExc_Fini();
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000508
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000509 /* Cleanup auto-thread-state */
Christian Heimes7d2ff882007-11-30 14:35:04 +0000510#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000511 _PyGILState_Fini();
Christian Heimes7d2ff882007-11-30 14:35:04 +0000512#endif /* WITH_THREAD */
513
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000514 /* Delete current thread */
515 PyThreadState_Swap(NULL);
516 PyInterpreterState_Delete(interp);
Barry Warsawf242aa02000-05-25 23:09:49 +0000517
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000518 /* Sundry finalizers */
519 PyMethod_Fini();
520 PyFrame_Fini();
521 PyCFunction_Fini();
522 PyTuple_Fini();
523 PyList_Fini();
524 PySet_Fini();
525 PyBytes_Fini();
526 PyByteArray_Fini();
527 PyLong_Fini();
528 PyFloat_Fini();
529 PyDict_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000530
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000531 /* Cleanup Unicode implementation */
532 _PyUnicode_Fini();
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000533
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000534 /* reset file system default encoding */
Victor Stinnerb744ba12010-05-15 12:27:16 +0000535 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 free((char*)Py_FileSystemDefaultEncoding);
537 Py_FileSystemDefaultEncoding = NULL;
538 }
Christian Heimesc8967002007-11-30 10:18:26 +0000539
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000540 /* XXX Still allocated:
541 - various static ad-hoc pointers to interned strings
542 - int and float free list blocks
543 - whatever various modules and libraries allocate
544 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000545
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000546 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000547
Tim Peters269b2a62003-04-17 19:52:29 +0000548#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000549 /* Display addresses (& refcnts) of all objects still alive.
550 * An address can be used to find the repr of the object, printed
551 * above by _Py_PrintReferences.
552 */
553 if (Py_GETENV("PYTHONDUMPREFS"))
554 _Py_PrintReferenceAddresses(stderr);
Tim Peters269b2a62003-04-17 19:52:29 +0000555#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000556#ifdef PYMALLOC_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000557 if (Py_GETENV("PYTHONMALLOCSTATS"))
558 _PyObject_DebugMallocStats();
Tim Peters0e871182002-04-13 08:29:14 +0000559#endif
560
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000561 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000562}
563
564/* Create and initialize a new interpreter and thread, and return the
565 new thread. This requires that Py_Initialize() has been called
566 first.
567
568 Unsuccessful initialization yields a NULL pointer. Note that *no*
569 exception information is available even in this case -- the
570 exception information is held in the thread, and there is no
571 thread.
572
573 Locking: as above.
574
575*/
576
577PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000578Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000579{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000580 PyInterpreterState *interp;
581 PyThreadState *tstate, *save_tstate;
582 PyObject *bimod, *sysmod;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000583
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000584 if (!initialized)
585 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000586
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000587 interp = PyInterpreterState_New();
588 if (interp == NULL)
589 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000590
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000591 tstate = PyThreadState_New(interp);
592 if (tstate == NULL) {
593 PyInterpreterState_Delete(interp);
594 return NULL;
595 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000596
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000597 save_tstate = PyThreadState_Swap(tstate);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000598
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000599 /* XXX The following is lax in error checking */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000600
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000601 interp->modules = PyDict_New();
602 interp->modules_reloading = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000603
Victor Stinner49d3f252010-10-17 01:24:53 +0000604 bimod = _PyImport_FindBuiltin("builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000605 if (bimod != NULL) {
606 interp->builtins = PyModule_GetDict(bimod);
607 if (interp->builtins == NULL)
608 goto handle_error;
609 Py_INCREF(interp->builtins);
610 }
Christian Heimes6a27efa2008-10-30 21:48:26 +0000611
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000612 /* initialize builtin exceptions */
613 _PyExc_Init();
Christian Heimes6a27efa2008-10-30 21:48:26 +0000614
Victor Stinner49d3f252010-10-17 01:24:53 +0000615 sysmod = _PyImport_FindBuiltin("sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000616 if (bimod != NULL && sysmod != NULL) {
617 PyObject *pstderr;
618 interp->sysdict = PyModule_GetDict(sysmod);
619 if (interp->sysdict == NULL)
620 goto handle_error;
621 Py_INCREF(interp->sysdict);
622 PySys_SetPath(Py_GetPath());
623 PyDict_SetItemString(interp->sysdict, "modules",
624 interp->modules);
625 /* Set up a preliminary stderr printer until we have enough
626 infrastructure for the io module in place. */
627 pstderr = PyFile_NewStdPrinter(fileno(stderr));
628 if (pstderr == NULL)
629 Py_FatalError("Py_Initialize: can't set preliminary stderr");
630 PySys_SetObject("stderr", pstderr);
631 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000632 Py_DECREF(pstderr);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000633
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000634 _PyImportHooks_Init();
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200635
636 if (initfsencoding(interp) < 0)
637 goto handle_error;
638
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000639 if (initstdio() < 0)
640 Py_FatalError(
641 "Py_Initialize: can't initialize sys standard streams");
642 initmain();
643 if (!Py_NoSiteFlag)
644 initsite();
645 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000646
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000647 if (!PyErr_Occurred())
648 return tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000649
Thomas Wouters89f507f2006-12-13 04:49:30 +0000650handle_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000651 /* Oops, it didn't work. Undo it all. */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000652
Victor Stinner11889352011-04-27 00:20:27 +0200653 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000654 PyThreadState_Clear(tstate);
655 PyThreadState_Swap(save_tstate);
656 PyThreadState_Delete(tstate);
657 PyInterpreterState_Delete(interp);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000658
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000659 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000660}
661
662/* Delete an interpreter and its last thread. This requires that the
663 given thread state is current, that the thread has no remaining
664 frames, and that it is its interpreter's only remaining thread.
665 It is a fatal error to violate these constraints.
666
667 (Py_Finalize() doesn't have these constraints -- it zaps
668 everything, regardless.)
669
670 Locking: as above.
671
672*/
673
674void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000675Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000676{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000677 PyInterpreterState *interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000678
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000679 if (tstate != PyThreadState_GET())
680 Py_FatalError("Py_EndInterpreter: thread is not current");
681 if (tstate->frame != NULL)
682 Py_FatalError("Py_EndInterpreter: thread still has a frame");
683 if (tstate != interp->tstate_head || tstate->next != NULL)
684 Py_FatalError("Py_EndInterpreter: not the last thread");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000685
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000686 PyImport_Cleanup();
687 PyInterpreterState_Clear(interp);
688 PyThreadState_Swap(NULL);
689 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000690}
691
Martin v. Löwis790465f2008-04-05 20:41:37 +0000692static wchar_t *progname = L"python";
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000693
694void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000695Py_SetProgramName(wchar_t *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000696{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000697 if (pn && *pn)
698 progname = pn;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000699}
700
Martin v. Löwis790465f2008-04-05 20:41:37 +0000701wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000702Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000703{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000704 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000705}
706
Martin v. Löwis790465f2008-04-05 20:41:37 +0000707static wchar_t *default_home = NULL;
708static wchar_t env_home[PATH_MAX+1];
Guido van Rossuma61691e1998-02-06 22:27:24 +0000709
710void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000711Py_SetPythonHome(wchar_t *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000712{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000713 default_home = home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000714}
715
Martin v. Löwis790465f2008-04-05 20:41:37 +0000716wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000717Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000718{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000719 wchar_t *home = default_home;
720 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
721 char* chome = Py_GETENV("PYTHONHOME");
722 if (chome) {
723 size_t r = mbstowcs(env_home, chome, PATH_MAX+1);
724 if (r != (size_t)-1 && r <= PATH_MAX)
725 home = env_home;
726 }
Martin v. Löwis790465f2008-04-05 20:41:37 +0000727
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000728 }
729 return home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000730}
731
Guido van Rossum6135a871995-01-09 17:53:26 +0000732/* Create __main__ module */
733
734static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000735initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000736{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000737 PyObject *m, *d;
738 m = PyImport_AddModule("__main__");
739 if (m == NULL)
740 Py_FatalError("can't create __main__ module");
741 d = PyModule_GetDict(m);
742 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
743 PyObject *bimod = PyImport_ImportModule("builtins");
744 if (bimod == NULL ||
745 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
746 Py_FatalError("can't add __builtins__ to __main__");
747 Py_DECREF(bimod);
748 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000749}
750
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200751static int
752initfsencoding(PyInterpreterState *interp)
Victor Stinnerb744ba12010-05-15 12:27:16 +0000753{
754 PyObject *codec;
755#if defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94908bb2010-08-18 21:23:25 +0000756 char *codeset = NULL;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000757
Victor Stinner7f84ab52010-06-11 00:36:33 +0000758 if (Py_FileSystemDefaultEncoding == NULL) {
Victor Stinner8f6b6b02010-10-13 22:02:27 +0000759 /* On Unix, set the file system encoding according to the
760 user's preference, if the CODESET names a well-known
761 Python codec, and Py_FileSystemDefaultEncoding isn't
Victor Stinnere4743092010-10-19 00:05:51 +0000762 initialized by other means. */
Victor Stinner8f6b6b02010-10-13 22:02:27 +0000763 codeset = get_codeset();
Victor Stinnere4743092010-10-19 00:05:51 +0000764 if (codeset == NULL)
765 Py_FatalError("Py_Initialize: Unable to get the locale encoding");
Victor Stinnerb744ba12010-05-15 12:27:16 +0000766
Victor Stinnere4743092010-10-19 00:05:51 +0000767 Py_FileSystemDefaultEncoding = codeset;
768 Py_HasFileSystemDefaultEncoding = 0;
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200769 interp->fscodec_initialized = 1;
770 return 0;
Victor Stinner7f84ab52010-06-11 00:36:33 +0000771 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000772#endif
773
774 /* the encoding is mbcs, utf-8 or ascii */
775 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
776 if (!codec) {
777 /* Such error can only occurs in critical situations: no more
778 * memory, import a module of the standard library failed,
779 * etc. */
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200780 return -1;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000781 }
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200782 Py_DECREF(codec);
783 interp->fscodec_initialized = 1;
784 return 0;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000785}
786
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000787/* Import the site module (not into __main__ though) */
788
789static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000790initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000791{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000792 PyObject *m;
793 m = PyImport_ImportModule("site");
794 if (m == NULL) {
795 PyErr_Print();
796 Py_Finalize();
797 exit(1);
798 }
799 else {
800 Py_DECREF(m);
801 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000802}
803
Antoine Pitrou05608432009-01-09 18:53:14 +0000804static PyObject*
805create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000806 int fd, int write_mode, char* name,
807 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +0000808{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000809 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
810 const char* mode;
Victor Stinner02bfdb32011-02-23 12:10:23 +0000811 const char* newline;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000812 PyObject *line_buffering;
813 int buffering, isatty;
Antoine Pitrou05608432009-01-09 18:53:14 +0000814
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000815 /* stdin is always opened in buffered mode, first because it shouldn't
816 make a difference in common use cases, second because TextIOWrapper
817 depends on the presence of a read1() method which only exists on
818 buffered streams.
819 */
820 if (Py_UnbufferedStdioFlag && write_mode)
821 buffering = 0;
822 else
823 buffering = -1;
824 if (write_mode)
825 mode = "wb";
826 else
827 mode = "rb";
828 buf = PyObject_CallMethod(io, "open", "isiOOOi",
829 fd, mode, buffering,
830 Py_None, Py_None, Py_None, 0);
831 if (buf == NULL)
832 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000833
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000834 if (buffering) {
835 raw = PyObject_GetAttrString(buf, "raw");
836 if (raw == NULL)
837 goto error;
838 }
839 else {
840 raw = buf;
841 Py_INCREF(raw);
842 }
Antoine Pitrou05608432009-01-09 18:53:14 +0000843
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000844 text = PyUnicode_FromString(name);
845 if (text == NULL || PyObject_SetAttrString(raw, "name", text) < 0)
846 goto error;
847 res = PyObject_CallMethod(raw, "isatty", "");
848 if (res == NULL)
849 goto error;
850 isatty = PyObject_IsTrue(res);
851 Py_DECREF(res);
852 if (isatty == -1)
853 goto error;
854 if (isatty || Py_UnbufferedStdioFlag)
855 line_buffering = Py_True;
856 else
857 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +0000858
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000859 Py_CLEAR(raw);
860 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +0000861
Victor Stinner02bfdb32011-02-23 12:10:23 +0000862 newline = "\n";
863#ifdef MS_WINDOWS
864 if (!write_mode) {
865 /* translate \r\n to \n for sys.stdin on Windows */
866 newline = NULL;
867 }
868#endif
869
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000870 stream = PyObject_CallMethod(io, "TextIOWrapper", "OsssO",
871 buf, encoding, errors,
Victor Stinner02bfdb32011-02-23 12:10:23 +0000872 newline, line_buffering);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000873 Py_CLEAR(buf);
874 if (stream == NULL)
875 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000876
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000877 if (write_mode)
878 mode = "w";
879 else
880 mode = "r";
881 text = PyUnicode_FromString(mode);
882 if (!text || PyObject_SetAttrString(stream, "mode", text) < 0)
883 goto error;
884 Py_CLEAR(text);
885 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +0000886
887error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000888 Py_XDECREF(buf);
889 Py_XDECREF(stream);
890 Py_XDECREF(text);
891 Py_XDECREF(raw);
892 return NULL;
Antoine Pitrou05608432009-01-09 18:53:14 +0000893}
894
Georg Brandl1a3284e2007-12-02 09:40:06 +0000895/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000896static int
897initstdio(void)
898{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000899 PyObject *iomod = NULL, *wrapper;
900 PyObject *bimod = NULL;
901 PyObject *m;
902 PyObject *std = NULL;
903 int status = 0, fd;
904 PyObject * encoding_attr;
905 char *encoding = NULL, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000906
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000907 /* Hack to avoid a nasty recursion issue when Python is invoked
908 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
909 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
910 goto error;
911 }
912 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000913
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000914 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
915 goto error;
916 }
917 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000918
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000919 if (!(bimod = PyImport_ImportModule("builtins"))) {
920 goto error;
921 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000922
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000923 if (!(iomod = PyImport_ImportModule("io"))) {
924 goto error;
925 }
926 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
927 goto error;
928 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000929
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000930 /* Set builtins.open */
931 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
Antoine Pitrou5a96b522010-11-20 19:50:57 +0000932 Py_DECREF(wrapper);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000933 goto error;
934 }
Antoine Pitrou5a96b522010-11-20 19:50:57 +0000935 Py_DECREF(wrapper);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000936
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000937 encoding = Py_GETENV("PYTHONIOENCODING");
938 errors = NULL;
939 if (encoding) {
940 encoding = strdup(encoding);
941 errors = strchr(encoding, ':');
942 if (errors) {
943 *errors = '\0';
944 errors++;
945 }
946 }
Martin v. Löwis0f599892008-06-02 11:13:03 +0000947
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000948 /* Set sys.stdin */
949 fd = fileno(stdin);
950 /* Under some conditions stdin, stdout and stderr may not be connected
951 * and fileno() may point to an invalid file descriptor. For example
952 * GUI apps don't have valid standard streams by default.
953 */
954 if (fd < 0) {
Christian Heimes58cb1b82007-11-13 02:19:40 +0000955#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000956 std = Py_None;
957 Py_INCREF(std);
Christian Heimes58cb1b82007-11-13 02:19:40 +0000958#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000959 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000960#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000961 }
962 else {
963 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
964 if (std == NULL)
965 goto error;
966 } /* if (fd < 0) */
967 PySys_SetObject("__stdin__", std);
968 PySys_SetObject("stdin", std);
969 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000970
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000971 /* Set sys.stdout */
972 fd = fileno(stdout);
973 if (fd < 0) {
Christian Heimes58cb1b82007-11-13 02:19:40 +0000974#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000975 std = Py_None;
976 Py_INCREF(std);
Christian Heimes58cb1b82007-11-13 02:19:40 +0000977#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000978 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000979#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000980 }
981 else {
982 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
983 if (std == NULL)
984 goto error;
985 } /* if (fd < 0) */
986 PySys_SetObject("__stdout__", std);
987 PySys_SetObject("stdout", std);
988 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000989
Guido van Rossum98297ee2007-11-06 21:34:58 +0000990#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000991 /* Set sys.stderr, replaces the preliminary stderr */
992 fd = fileno(stderr);
993 if (fd < 0) {
Christian Heimes58cb1b82007-11-13 02:19:40 +0000994#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000995 std = Py_None;
996 Py_INCREF(std);
Christian Heimes58cb1b82007-11-13 02:19:40 +0000997#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000998 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000999#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001000 }
1001 else {
1002 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1003 if (std == NULL)
1004 goto error;
1005 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +00001006
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001007 /* Same as hack above, pre-import stderr's codec to avoid recursion
1008 when import.c tries to write to stderr in verbose mode. */
1009 encoding_attr = PyObject_GetAttrString(std, "encoding");
1010 if (encoding_attr != NULL) {
1011 const char * encoding;
1012 encoding = _PyUnicode_AsString(encoding_attr);
1013 if (encoding != NULL) {
1014 _PyCodec_Lookup(encoding);
1015 }
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +00001016 Py_DECREF(encoding_attr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001017 }
1018 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +00001019
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001020 PySys_SetObject("__stderr__", std);
1021 PySys_SetObject("stderr", std);
1022 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001023#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001024
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001025 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001026 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001027 status = -1;
1028 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001029
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001030 if (encoding)
1031 free(encoding);
1032 Py_XDECREF(bimod);
1033 Py_XDECREF(iomod);
1034 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001035}
1036
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001037/* Parse input from a file and execute it */
1038
1039int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001040PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001041 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001042{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001043 if (filename == NULL)
1044 filename = "???";
1045 if (Py_FdIsInteractive(fp, filename)) {
1046 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1047 if (closeit)
1048 fclose(fp);
1049 return err;
1050 }
1051 else
1052 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001053}
1054
1055int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001056PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001057{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001058 PyObject *v;
1059 int ret;
1060 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001061
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001062 if (flags == NULL) {
1063 flags = &local_flags;
1064 local_flags.cf_flags = 0;
1065 }
1066 v = PySys_GetObject("ps1");
1067 if (v == NULL) {
1068 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
1069 Py_XDECREF(v);
1070 }
1071 v = PySys_GetObject("ps2");
1072 if (v == NULL) {
1073 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
1074 Py_XDECREF(v);
1075 }
1076 for (;;) {
1077 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
1078 PRINT_TOTAL_REFS();
1079 if (ret == E_EOF)
1080 return 0;
1081 /*
1082 if (ret == E_NOMEM)
1083 return -1;
1084 */
1085 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001086}
1087
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001088/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001089static int PARSER_FLAGS(PyCompilerFlags *flags)
1090{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001091 int parser_flags = 0;
1092 if (!flags)
1093 return 0;
1094 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1095 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1096 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1097 parser_flags |= PyPARSE_IGNORE_COOKIE;
1098 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1099 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1100 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001101}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001102
Thomas Wouters89f507f2006-12-13 04:49:30 +00001103#if 0
1104/* Keep an example of flags with future keyword support. */
1105#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001106 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1107 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1108 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1109 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001110#endif
1111
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001112int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001113PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001114{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001115 PyObject *m, *d, *v, *w, *oenc = NULL;
1116 mod_ty mod;
1117 PyArena *arena;
1118 char *ps1 = "", *ps2 = "", *enc = NULL;
1119 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +00001120
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001121 if (fp == stdin) {
1122 /* Fetch encoding from sys.stdin */
1123 v = PySys_GetObject("stdin");
1124 if (v == NULL || v == Py_None)
1125 return -1;
1126 oenc = PyObject_GetAttrString(v, "encoding");
1127 if (!oenc)
1128 return -1;
1129 enc = _PyUnicode_AsString(oenc);
Victor Stinner386fe712010-05-19 00:34:15 +00001130 if (enc == NULL)
1131 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001132 }
1133 v = PySys_GetObject("ps1");
1134 if (v != NULL) {
1135 v = PyObject_Str(v);
1136 if (v == NULL)
1137 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001138 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001139 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001140 if (ps1 == NULL) {
1141 PyErr_Clear();
1142 ps1 = "";
1143 }
1144 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001145 }
1146 w = PySys_GetObject("ps2");
1147 if (w != NULL) {
1148 w = PyObject_Str(w);
1149 if (w == NULL)
1150 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001151 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001152 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001153 if (ps2 == NULL) {
1154 PyErr_Clear();
1155 ps2 = "";
1156 }
1157 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001158 }
1159 arena = PyArena_New();
1160 if (arena == NULL) {
1161 Py_XDECREF(v);
1162 Py_XDECREF(w);
1163 Py_XDECREF(oenc);
1164 return -1;
1165 }
1166 mod = PyParser_ASTFromFile(fp, filename, enc,
1167 Py_single_input, ps1, ps2,
1168 flags, &errcode, arena);
1169 Py_XDECREF(v);
1170 Py_XDECREF(w);
1171 Py_XDECREF(oenc);
1172 if (mod == NULL) {
1173 PyArena_Free(arena);
1174 if (errcode == E_EOF) {
1175 PyErr_Clear();
1176 return E_EOF;
1177 }
1178 PyErr_Print();
1179 return -1;
1180 }
1181 m = PyImport_AddModule("__main__");
1182 if (m == NULL) {
1183 PyArena_Free(arena);
1184 return -1;
1185 }
1186 d = PyModule_GetDict(m);
1187 v = run_mod(mod, filename, d, d, flags, arena);
1188 PyArena_Free(arena);
1189 flush_io();
1190 if (v == NULL) {
1191 PyErr_Print();
1192 return -1;
1193 }
1194 Py_DECREF(v);
1195 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001196}
1197
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001198/* Check whether a file maybe a pyc file: Look at the extension,
1199 the file type, and, if we may close it, at the first few bytes. */
1200
1201static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001202maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001203{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001204 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1205 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001206
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001207 /* Only look into the file if we are allowed to close it, since
1208 it then should also be seekable. */
1209 if (closeit) {
1210 /* Read only two bytes of the magic. If the file was opened in
1211 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1212 be read as they are on disk. */
1213 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1214 unsigned char buf[2];
1215 /* Mess: In case of -x, the stream is NOT at its start now,
1216 and ungetc() was used to push back the first newline,
1217 which makes the current stream position formally undefined,
1218 and a x-platform nightmare.
1219 Unfortunately, we have no direct way to know whether -x
1220 was specified. So we use a terrible hack: if the current
1221 stream position is not 0, we assume -x was specified, and
1222 give up. Bug 132850 on SourceForge spells out the
1223 hopelessness of trying anything else (fseek and ftell
1224 don't work predictably x-platform for text-mode files).
1225 */
1226 int ispyc = 0;
1227 if (ftell(fp) == 0) {
1228 if (fread(buf, 1, 2, fp) == 2 &&
1229 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1230 ispyc = 1;
1231 rewind(fp);
1232 }
1233 return ispyc;
1234 }
1235 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001236}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001237
Guido van Rossum0df002c2000-08-27 19:21:52 +00001238int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001239PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001240 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001241{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001242 PyObject *m, *d, *v;
1243 const char *ext;
Victor Stinner0fcab4a2011-01-04 12:59:15 +00001244 int set_file_name = 0, ret;
1245 size_t len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001246
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001247 m = PyImport_AddModule("__main__");
1248 if (m == NULL)
1249 return -1;
1250 d = PyModule_GetDict(m);
1251 if (PyDict_GetItemString(d, "__file__") == NULL) {
1252 PyObject *f;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001253 f = PyUnicode_DecodeFSDefault(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001254 if (f == NULL)
1255 return -1;
1256 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1257 Py_DECREF(f);
1258 return -1;
1259 }
Barry Warsaw916048d2011-09-20 14:45:44 -04001260 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0) {
1261 Py_DECREF(f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001262 return -1;
Barry Warsaw916048d2011-09-20 14:45:44 -04001263 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001264 set_file_name = 1;
1265 Py_DECREF(f);
1266 }
1267 len = strlen(filename);
1268 ext = filename + len - (len > 4 ? 4 : 0);
1269 if (maybe_pyc_file(fp, filename, ext, closeit)) {
1270 /* Try to run a pyc file. First, re-open in binary */
1271 if (closeit)
1272 fclose(fp);
1273 if ((fp = fopen(filename, "rb")) == NULL) {
1274 fprintf(stderr, "python: Can't reopen .pyc file\n");
1275 ret = -1;
1276 goto done;
1277 }
1278 /* Turn on optimization if a .pyo file is given */
1279 if (strcmp(ext, ".pyo") == 0)
1280 Py_OptimizeFlag = 1;
1281 v = run_pyc_file(fp, filename, d, d, flags);
1282 } else {
1283 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1284 closeit, flags);
1285 }
1286 flush_io();
1287 if (v == NULL) {
1288 PyErr_Print();
1289 ret = -1;
1290 goto done;
1291 }
1292 Py_DECREF(v);
1293 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001294 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001295 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1296 PyErr_Clear();
1297 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001298}
1299
1300int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001301PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001302{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001303 PyObject *m, *d, *v;
1304 m = PyImport_AddModule("__main__");
1305 if (m == NULL)
1306 return -1;
1307 d = PyModule_GetDict(m);
1308 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1309 if (v == NULL) {
1310 PyErr_Print();
1311 return -1;
1312 }
1313 Py_DECREF(v);
1314 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001315}
1316
Barry Warsaw035574d1997-08-29 22:07:17 +00001317static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001318parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001319 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001320{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001321 long hold;
1322 PyObject *v;
Barry Warsaw035574d1997-08-29 22:07:17 +00001323
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001324 /* old style errors */
1325 if (PyTuple_Check(err))
1326 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
1327 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001328
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001329 /* new style errors. `err' is an instance */
Barry Warsaw035574d1997-08-29 22:07:17 +00001330
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001331 if (! (v = PyObject_GetAttrString(err, "msg")))
1332 goto finally;
1333 *message = v;
Barry Warsaw035574d1997-08-29 22:07:17 +00001334
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001335 if (!(v = PyObject_GetAttrString(err, "filename")))
1336 goto finally;
1337 if (v == Py_None)
1338 *filename = NULL;
1339 else if (! (*filename = _PyUnicode_AsString(v)))
1340 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001341
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001342 Py_DECREF(v);
1343 if (!(v = PyObject_GetAttrString(err, "lineno")))
1344 goto finally;
1345 hold = PyLong_AsLong(v);
1346 Py_DECREF(v);
1347 v = NULL;
1348 if (hold < 0 && PyErr_Occurred())
1349 goto finally;
1350 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001351
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001352 if (!(v = PyObject_GetAttrString(err, "offset")))
1353 goto finally;
1354 if (v == Py_None) {
1355 *offset = -1;
1356 Py_DECREF(v);
1357 v = NULL;
1358 } else {
1359 hold = PyLong_AsLong(v);
1360 Py_DECREF(v);
1361 v = NULL;
1362 if (hold < 0 && PyErr_Occurred())
1363 goto finally;
1364 *offset = (int)hold;
1365 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001366
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001367 if (!(v = PyObject_GetAttrString(err, "text")))
1368 goto finally;
1369 if (v == Py_None)
1370 *text = NULL;
1371 else if (!PyUnicode_Check(v) ||
1372 !(*text = _PyUnicode_AsString(v)))
1373 goto finally;
1374 Py_DECREF(v);
1375 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001376
1377finally:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001378 Py_XDECREF(v);
1379 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001380}
1381
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001382void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001383PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001384{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001385 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001386}
1387
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001388static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001389print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001390{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001391 char *nl;
1392 if (offset >= 0) {
Benjamin Petersona95e9772010-10-29 03:28:14 +00001393 if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n')
1394 offset--;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001395 for (;;) {
1396 nl = strchr(text, '\n');
1397 if (nl == NULL || nl-text >= offset)
1398 break;
1399 offset -= (int)(nl+1-text);
1400 text = nl+1;
1401 }
1402 while (*text == ' ' || *text == '\t') {
1403 text++;
1404 offset--;
1405 }
1406 }
1407 PyFile_WriteString(" ", f);
1408 PyFile_WriteString(text, f);
1409 if (*text == '\0' || text[strlen(text)-1] != '\n')
1410 PyFile_WriteString("\n", f);
1411 if (offset == -1)
1412 return;
1413 PyFile_WriteString(" ", f);
Benjamin Petersona95e9772010-10-29 03:28:14 +00001414 while (--offset > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001415 PyFile_WriteString(" ", f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001416 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001417}
1418
Guido van Rossum66e8e862001-03-23 17:54:43 +00001419static void
1420handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001421{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001422 PyObject *exception, *value, *tb;
1423 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001424
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001425 if (Py_InspectFlag)
1426 /* Don't exit if -i flag was given. This flag is set to 0
1427 * when entering interactive mode for inspecting. */
1428 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001429
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001430 PyErr_Fetch(&exception, &value, &tb);
1431 fflush(stdout);
1432 if (value == NULL || value == Py_None)
1433 goto done;
1434 if (PyExceptionInstance_Check(value)) {
1435 /* The error code should be in the `code' attribute. */
1436 PyObject *code = PyObject_GetAttrString(value, "code");
1437 if (code) {
1438 Py_DECREF(value);
1439 value = code;
1440 if (value == Py_None)
1441 goto done;
1442 }
1443 /* If we failed to dig out the 'code' attribute,
1444 just let the else clause below print the error. */
1445 }
1446 if (PyLong_Check(value))
1447 exitcode = (int)PyLong_AsLong(value);
1448 else {
Victor Stinnere9fb3192010-05-17 08:58:51 +00001449 PyObject *sys_stderr = PySys_GetObject("stderr");
Victor Stinner7126dbc2010-05-21 23:45:42 +00001450 if (sys_stderr != NULL && sys_stderr != Py_None) {
1451 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1452 } else {
1453 PyObject_Print(value, stderr, Py_PRINT_RAW);
1454 fflush(stderr);
1455 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001456 PySys_WriteStderr("\n");
1457 exitcode = 1;
1458 }
Tim Peterscf615b52003-04-19 18:47:02 +00001459 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001460 /* Restore and clear the exception info, in order to properly decref
1461 * the exception, value, and traceback. If we just exit instead,
1462 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1463 * some finalizers from running.
1464 */
1465 PyErr_Restore(exception, value, tb);
1466 PyErr_Clear();
1467 Py_Exit(exitcode);
1468 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001469}
1470
1471void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001472PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001473{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001474 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001475
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001476 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1477 handle_system_exit();
1478 }
1479 PyErr_Fetch(&exception, &v, &tb);
1480 if (exception == NULL)
1481 return;
1482 PyErr_NormalizeException(&exception, &v, &tb);
1483 if (tb == NULL) {
1484 tb = Py_None;
1485 Py_INCREF(tb);
1486 }
1487 PyException_SetTraceback(v, tb);
1488 if (exception == NULL)
1489 return;
1490 /* Now we know v != NULL too */
1491 if (set_sys_last_vars) {
1492 PySys_SetObject("last_type", exception);
1493 PySys_SetObject("last_value", v);
1494 PySys_SetObject("last_traceback", tb);
1495 }
1496 hook = PySys_GetObject("excepthook");
1497 if (hook) {
1498 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1499 PyObject *result = PyEval_CallObject(hook, args);
1500 if (result == NULL) {
1501 PyObject *exception2, *v2, *tb2;
1502 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1503 handle_system_exit();
1504 }
1505 PyErr_Fetch(&exception2, &v2, &tb2);
1506 PyErr_NormalizeException(&exception2, &v2, &tb2);
1507 /* It should not be possible for exception2 or v2
1508 to be NULL. However PyErr_Display() can't
1509 tolerate NULLs, so just be safe. */
1510 if (exception2 == NULL) {
1511 exception2 = Py_None;
1512 Py_INCREF(exception2);
1513 }
1514 if (v2 == NULL) {
1515 v2 = Py_None;
1516 Py_INCREF(v2);
1517 }
1518 fflush(stdout);
1519 PySys_WriteStderr("Error in sys.excepthook:\n");
1520 PyErr_Display(exception2, v2, tb2);
1521 PySys_WriteStderr("\nOriginal exception was:\n");
1522 PyErr_Display(exception, v, tb);
1523 Py_DECREF(exception2);
1524 Py_DECREF(v2);
1525 Py_XDECREF(tb2);
1526 }
1527 Py_XDECREF(result);
1528 Py_XDECREF(args);
1529 } else {
1530 PySys_WriteStderr("sys.excepthook is missing\n");
1531 PyErr_Display(exception, v, tb);
1532 }
1533 Py_XDECREF(exception);
1534 Py_XDECREF(v);
1535 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001536}
1537
Benjamin Petersone6528212008-07-15 15:32:09 +00001538static void
1539print_exception(PyObject *f, PyObject *value)
1540{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001541 int err = 0;
1542 PyObject *type, *tb;
Benjamin Petersone6528212008-07-15 15:32:09 +00001543
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001544 if (!PyExceptionInstance_Check(value)) {
1545 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1546 PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1547 PyFile_WriteString(" found\n", f);
1548 return;
1549 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001550
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001551 Py_INCREF(value);
1552 fflush(stdout);
1553 type = (PyObject *) Py_TYPE(value);
1554 tb = PyException_GetTraceback(value);
1555 if (tb && tb != Py_None)
1556 err = PyTraceBack_Print(tb, f);
1557 if (err == 0 &&
1558 PyObject_HasAttrString(value, "print_file_and_line"))
1559 {
1560 PyObject *message;
1561 const char *filename, *text;
1562 int lineno, offset;
1563 if (!parse_syntax_error(value, &message, &filename,
1564 &lineno, &offset, &text))
1565 PyErr_Clear();
1566 else {
1567 char buf[10];
1568 PyFile_WriteString(" File \"", f);
1569 if (filename == NULL)
1570 PyFile_WriteString("<string>", f);
1571 else
1572 PyFile_WriteString(filename, f);
1573 PyFile_WriteString("\", line ", f);
1574 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
1575 PyFile_WriteString(buf, f);
1576 PyFile_WriteString("\n", f);
1577 if (text != NULL)
1578 print_error_text(f, offset, text);
1579 Py_DECREF(value);
1580 value = message;
1581 /* Can't be bothered to check all those
1582 PyFile_WriteString() calls */
1583 if (PyErr_Occurred())
1584 err = -1;
1585 }
1586 }
1587 if (err) {
1588 /* Don't do anything else */
1589 }
1590 else {
1591 PyObject* moduleName;
1592 char* className;
1593 assert(PyExceptionClass_Check(type));
1594 className = PyExceptionClass_Name(type);
1595 if (className != NULL) {
1596 char *dot = strrchr(className, '.');
1597 if (dot != NULL)
1598 className = dot+1;
1599 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001600
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001601 moduleName = PyObject_GetAttrString(type, "__module__");
1602 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1603 {
1604 Py_DECREF(moduleName);
1605 err = PyFile_WriteString("<unknown>", f);
1606 }
1607 else {
1608 char* modstr = _PyUnicode_AsString(moduleName);
1609 if (modstr && strcmp(modstr, "builtins"))
1610 {
1611 err = PyFile_WriteString(modstr, f);
1612 err += PyFile_WriteString(".", f);
1613 }
1614 Py_DECREF(moduleName);
1615 }
1616 if (err == 0) {
1617 if (className == NULL)
1618 err = PyFile_WriteString("<unknown>", f);
1619 else
1620 err = PyFile_WriteString(className, f);
1621 }
1622 }
1623 if (err == 0 && (value != Py_None)) {
1624 PyObject *s = PyObject_Str(value);
1625 /* only print colon if the str() of the
1626 object is not the empty string
1627 */
1628 if (s == NULL)
1629 err = -1;
1630 else if (!PyUnicode_Check(s) ||
1631 PyUnicode_GetSize(s) != 0)
1632 err = PyFile_WriteString(": ", f);
1633 if (err == 0)
1634 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1635 Py_XDECREF(s);
1636 }
1637 /* try to write a newline in any case */
1638 err += PyFile_WriteString("\n", f);
1639 Py_XDECREF(tb);
1640 Py_DECREF(value);
1641 /* If an error happened here, don't show it.
1642 XXX This is wrong, but too many callers rely on this behavior. */
1643 if (err != 0)
1644 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001645}
1646
1647static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001648 "\nThe above exception was the direct cause "
1649 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001650
1651static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001652 "\nDuring handling of the above exception, "
1653 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001654
1655static void
1656print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
1657{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001658 int err = 0, res;
1659 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00001660
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001661 if (seen != NULL) {
1662 /* Exception chaining */
1663 if (PySet_Add(seen, value) == -1)
1664 PyErr_Clear();
1665 else if (PyExceptionInstance_Check(value)) {
1666 cause = PyException_GetCause(value);
1667 context = PyException_GetContext(value);
1668 if (cause) {
1669 res = PySet_Contains(seen, cause);
1670 if (res == -1)
1671 PyErr_Clear();
1672 if (res == 0) {
1673 print_exception_recursive(
1674 f, cause, seen);
1675 err |= PyFile_WriteString(
1676 cause_message, f);
1677 }
1678 }
1679 else if (context) {
1680 res = PySet_Contains(seen, context);
1681 if (res == -1)
1682 PyErr_Clear();
1683 if (res == 0) {
1684 print_exception_recursive(
1685 f, context, seen);
1686 err |= PyFile_WriteString(
1687 context_message, f);
1688 }
1689 }
1690 Py_XDECREF(context);
1691 Py_XDECREF(cause);
1692 }
1693 }
1694 print_exception(f, value);
1695 if (err != 0)
1696 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001697}
1698
Thomas Wouters477c8d52006-05-27 19:21:47 +00001699void
1700PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001701{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001702 PyObject *seen;
1703 PyObject *f = PySys_GetObject("stderr");
1704 if (f == Py_None) {
1705 /* pass */
1706 }
1707 else if (f == NULL) {
1708 _PyObject_Dump(value);
1709 fprintf(stderr, "lost sys.stderr\n");
1710 }
1711 else {
1712 /* We choose to ignore seen being possibly NULL, and report
1713 at least the main exception (it could be a MemoryError).
1714 */
1715 seen = PySet_New(NULL);
1716 if (seen == NULL)
1717 PyErr_Clear();
1718 print_exception_recursive(f, value, seen);
1719 Py_XDECREF(seen);
1720 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001721}
1722
Guido van Rossum82598051997-03-05 00:20:32 +00001723PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001724PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001725 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001726{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001727 PyObject *ret = NULL;
1728 mod_ty mod;
1729 PyArena *arena = PyArena_New();
1730 if (arena == NULL)
1731 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001732
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001733 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
1734 if (mod != NULL)
1735 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
1736 PyArena_Free(arena);
1737 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001738}
1739
1740PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001741PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001742 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001743{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001744 PyObject *ret;
1745 mod_ty mod;
1746 PyArena *arena = PyArena_New();
1747 if (arena == NULL)
1748 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001749
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001750 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
1751 flags, NULL, arena);
1752 if (closeit)
1753 fclose(fp);
1754 if (mod == NULL) {
1755 PyArena_Free(arena);
1756 return NULL;
1757 }
1758 ret = run_mod(mod, filename, globals, locals, flags, arena);
1759 PyArena_Free(arena);
1760 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001761}
1762
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001763static void
1764flush_io(void)
1765{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001766 PyObject *f, *r;
1767 PyObject *type, *value, *traceback;
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001768
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001769 /* Save the current exception */
1770 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001771
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001772 f = PySys_GetObject("stderr");
1773 if (f != NULL) {
1774 r = PyObject_CallMethod(f, "flush", "");
1775 if (r)
1776 Py_DECREF(r);
1777 else
1778 PyErr_Clear();
1779 }
1780 f = PySys_GetObject("stdout");
1781 if (f != NULL) {
1782 r = PyObject_CallMethod(f, "flush", "");
1783 if (r)
1784 Py_DECREF(r);
1785 else
1786 PyErr_Clear();
1787 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001788
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001789 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001790}
1791
Guido van Rossum82598051997-03-05 00:20:32 +00001792static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001793run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001794 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001795{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001796 PyCodeObject *co;
1797 PyObject *v;
1798 co = PyAST_Compile(mod, filename, flags, arena);
1799 if (co == NULL)
1800 return NULL;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001801 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001802 Py_DECREF(co);
1803 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001804}
1805
Guido van Rossum82598051997-03-05 00:20:32 +00001806static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001807run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001808 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001809{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001810 PyCodeObject *co;
1811 PyObject *v;
1812 long magic;
1813 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001814
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001815 magic = PyMarshal_ReadLongFromFile(fp);
1816 if (magic != PyImport_GetMagicNumber()) {
1817 PyErr_SetString(PyExc_RuntimeError,
1818 "Bad magic number in .pyc file");
1819 return NULL;
1820 }
1821 (void) PyMarshal_ReadLongFromFile(fp);
1822 v = PyMarshal_ReadLastObjectFromFile(fp);
1823 fclose(fp);
1824 if (v == NULL || !PyCode_Check(v)) {
1825 Py_XDECREF(v);
1826 PyErr_SetString(PyExc_RuntimeError,
1827 "Bad code object in .pyc file");
1828 return NULL;
1829 }
1830 co = (PyCodeObject *)v;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001831 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001832 if (v && flags)
1833 flags->cf_flags |= (co->co_flags & PyCF_MASK);
1834 Py_DECREF(co);
1835 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001836}
1837
Guido van Rossum82598051997-03-05 00:20:32 +00001838PyObject *
Georg Brandl8334fd92010-12-04 10:26:46 +00001839Py_CompileStringExFlags(const char *str, const char *filename, int start,
1840 PyCompilerFlags *flags, int optimize)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001841{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001842 PyCodeObject *co;
1843 mod_ty mod;
1844 PyArena *arena = PyArena_New();
1845 if (arena == NULL)
1846 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001847
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001848 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
1849 if (mod == NULL) {
1850 PyArena_Free(arena);
1851 return NULL;
1852 }
1853 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
1854 PyObject *result = PyAST_mod2obj(mod);
1855 PyArena_Free(arena);
1856 return result;
1857 }
Georg Brandl8334fd92010-12-04 10:26:46 +00001858 co = PyAST_CompileEx(mod, filename, flags, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001859 PyArena_Free(arena);
1860 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001861}
1862
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001863/* For use in Py_LIMITED_API */
1864#undef Py_CompileString
1865PyObject *
1866PyCompileString(const char *str, const char *filename, int start)
1867{
1868 return Py_CompileStringFlags(str, filename, start, NULL);
1869}
1870
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001871struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001872Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001873{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001874 struct symtable *st;
1875 mod_ty mod;
1876 PyCompilerFlags flags;
1877 PyArena *arena = PyArena_New();
1878 if (arena == NULL)
1879 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001880
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001881 flags.cf_flags = 0;
1882 mod = PyParser_ASTFromString(str, filename, start, &flags, arena);
1883 if (mod == NULL) {
1884 PyArena_Free(arena);
1885 return NULL;
1886 }
1887 st = PySymtable_Build(mod, filename, 0);
1888 PyArena_Free(arena);
1889 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001890}
1891
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001892/* Preferred access to parser is through AST. */
1893mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001894PyParser_ASTFromString(const char *s, const char *filename, int start,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001895 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001896{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001897 mod_ty mod;
1898 PyCompilerFlags localflags;
1899 perrdetail err;
1900 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00001901
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001902 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename,
1903 &_PyParser_Grammar, start, &err,
1904 &iflags);
1905 if (flags == NULL) {
1906 localflags.cf_flags = 0;
1907 flags = &localflags;
1908 }
1909 if (n) {
1910 flags->cf_flags |= iflags & PyCF_MASK;
1911 mod = PyAST_FromNode(n, flags, filename, arena);
1912 PyNode_Free(n);
1913 return mod;
1914 }
1915 else {
1916 err_input(&err);
1917 return NULL;
1918 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001919}
1920
1921mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001922PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001923 int start, char *ps1,
1924 char *ps2, PyCompilerFlags *flags, int *errcode,
1925 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001926{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001927 mod_ty mod;
1928 PyCompilerFlags localflags;
1929 perrdetail err;
1930 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00001931
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001932 node *n = PyParser_ParseFileFlagsEx(fp, filename, enc,
1933 &_PyParser_Grammar,
1934 start, ps1, ps2, &err, &iflags);
1935 if (flags == NULL) {
1936 localflags.cf_flags = 0;
1937 flags = &localflags;
1938 }
1939 if (n) {
1940 flags->cf_flags |= iflags & PyCF_MASK;
1941 mod = PyAST_FromNode(n, flags, filename, arena);
1942 PyNode_Free(n);
1943 return mod;
1944 }
1945 else {
1946 err_input(&err);
1947 if (errcode)
1948 *errcode = err.error;
1949 return NULL;
1950 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001951}
1952
Guido van Rossuma110aa61994-08-29 12:50:44 +00001953/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001954
Guido van Rossuma110aa61994-08-29 12:50:44 +00001955node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001956PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001957{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001958 perrdetail err;
1959 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
1960 &_PyParser_Grammar,
1961 start, NULL, NULL, &err, flags);
1962 if (n == NULL)
1963 err_input(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001964
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001965 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001966}
1967
Guido van Rossuma110aa61994-08-29 12:50:44 +00001968/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001969
Guido van Rossuma110aa61994-08-29 12:50:44 +00001970node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001971PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001972{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001973 perrdetail err;
1974 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1975 start, &err, flags);
1976 if (n == NULL)
1977 err_input(&err);
1978 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00001979}
1980
1981node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001982PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001983 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001984{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001985 perrdetail err;
1986 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1987 &_PyParser_Grammar, start, &err, flags);
1988 if (n == NULL)
1989 err_input(&err);
1990 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00001991}
1992
1993node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001994PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001995{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001996 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001997}
1998
Guido van Rossum66ebd912003-04-17 16:02:26 +00001999/* May want to move a more generalized form of this to parsetok.c or
2000 even parser modules. */
2001
2002void
2003PyParser_SetError(perrdetail *err)
2004{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002005 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00002006}
2007
Guido van Rossuma110aa61994-08-29 12:50:44 +00002008/* Set the error appropriate to the given input error code (see errcode.h) */
2009
2010static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002011err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00002012{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002013 PyObject *v, *w, *errtype, *errtext;
2014 PyObject *msg_obj = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002015 PyObject *filename;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002016 char *msg = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002017
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002018 errtype = PyExc_SyntaxError;
2019 switch (err->error) {
2020 case E_ERROR:
2021 return;
2022 case E_SYNTAX:
2023 errtype = PyExc_IndentationError;
2024 if (err->expected == INDENT)
2025 msg = "expected an indented block";
2026 else if (err->token == INDENT)
2027 msg = "unexpected indent";
2028 else if (err->token == DEDENT)
2029 msg = "unexpected unindent";
2030 else {
2031 errtype = PyExc_SyntaxError;
2032 msg = "invalid syntax";
2033 }
2034 break;
2035 case E_TOKEN:
2036 msg = "invalid token";
2037 break;
2038 case E_EOFS:
2039 msg = "EOF while scanning triple-quoted string literal";
2040 break;
2041 case E_EOLS:
2042 msg = "EOL while scanning string literal";
2043 break;
2044 case E_INTR:
2045 if (!PyErr_Occurred())
2046 PyErr_SetNone(PyExc_KeyboardInterrupt);
2047 goto cleanup;
2048 case E_NOMEM:
2049 PyErr_NoMemory();
2050 goto cleanup;
2051 case E_EOF:
2052 msg = "unexpected EOF while parsing";
2053 break;
2054 case E_TABSPACE:
2055 errtype = PyExc_TabError;
2056 msg = "inconsistent use of tabs and spaces in indentation";
2057 break;
2058 case E_OVERFLOW:
2059 msg = "expression too long";
2060 break;
2061 case E_DEDENT:
2062 errtype = PyExc_IndentationError;
2063 msg = "unindent does not match any outer indentation level";
2064 break;
2065 case E_TOODEEP:
2066 errtype = PyExc_IndentationError;
2067 msg = "too many levels of indentation";
2068 break;
2069 case E_DECODE: {
2070 PyObject *type, *value, *tb;
2071 PyErr_Fetch(&type, &value, &tb);
2072 msg = "unknown decode error";
2073 if (value != NULL)
2074 msg_obj = PyObject_Str(value);
2075 Py_XDECREF(type);
2076 Py_XDECREF(value);
2077 Py_XDECREF(tb);
2078 break;
2079 }
2080 case E_LINECONT:
2081 msg = "unexpected character after line continuation character";
2082 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002083
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002084 case E_IDENTIFIER:
2085 msg = "invalid character in identifier";
2086 break;
2087 default:
2088 fprintf(stderr, "error=%d\n", err->error);
2089 msg = "unknown parsing error";
2090 break;
2091 }
2092 /* err->text may not be UTF-8 in case of decoding errors.
2093 Explicitly convert to an object. */
2094 if (!err->text) {
2095 errtext = Py_None;
2096 Py_INCREF(Py_None);
2097 } else {
2098 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
2099 "replace");
2100 }
Victor Stinner2f2ed1f2010-10-16 13:42:53 +00002101 if (err->filename != NULL)
2102 filename = PyUnicode_DecodeFSDefault(err->filename);
2103 else {
2104 Py_INCREF(Py_None);
2105 filename = Py_None;
2106 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002107 if (filename != NULL)
2108 v = Py_BuildValue("(NiiN)", filename,
2109 err->lineno, err->offset, errtext);
2110 else
2111 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002112 if (v != NULL) {
2113 if (msg_obj)
2114 w = Py_BuildValue("(OO)", msg_obj, v);
2115 else
2116 w = Py_BuildValue("(sO)", msg, v);
2117 } else
2118 w = NULL;
2119 Py_XDECREF(v);
2120 PyErr_SetObject(errtype, w);
2121 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002122cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002123 Py_XDECREF(msg_obj);
2124 if (err->text != NULL) {
2125 PyObject_FREE(err->text);
2126 err->text = NULL;
2127 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002128}
2129
2130/* Print fatal error message and abort */
2131
2132void
Tim Peters7c321a82002-07-09 02:57:01 +00002133Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002134{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002135 fprintf(stderr, "Fatal Python error: %s\n", msg);
2136 fflush(stderr); /* it helps in Windows debug build */
2137 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002138 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002139 }
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002140#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002141 {
2142 size_t len = strlen(msg);
2143 WCHAR* buffer;
2144 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002145
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002146 /* Convert the message to wchar_t. This uses a simple one-to-one
2147 conversion, assuming that the this error message actually uses ASCII
2148 only. If this ceases to be true, we will have to convert. */
2149 buffer = alloca( (len+1) * (sizeof *buffer));
2150 for( i=0; i<=len; ++i)
2151 buffer[i] = msg[i];
2152 OutputDebugStringW(L"Fatal Python error: ");
2153 OutputDebugStringW(buffer);
2154 OutputDebugStringW(L"\n");
2155 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002156#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002157 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002158#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002159#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002160 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002161}
2162
2163/* Clean up and exit */
2164
Guido van Rossuma110aa61994-08-29 12:50:44 +00002165#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002166#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002167#endif
2168
Collin Winter670e6922007-03-21 02:57:17 +00002169static void (*pyexitfunc)(void) = NULL;
2170/* For the atexit module. */
2171void _Py_PyAtExit(void (*func)(void))
2172{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002173 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002174}
2175
2176static void
2177call_py_exitfuncs(void)
2178{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002179 if (pyexitfunc == NULL)
2180 return;
Collin Winter670e6922007-03-21 02:57:17 +00002181
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002182 (*pyexitfunc)();
2183 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002184}
2185
Antoine Pitrou011bd622009-10-20 21:52:47 +00002186/* Wait until threading._shutdown completes, provided
2187 the threading module was imported in the first place.
2188 The shutdown routine will wait until all non-daemon
2189 "threading" threads have completed. */
2190static void
2191wait_for_thread_shutdown(void)
2192{
2193#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002194 PyObject *result;
2195 PyThreadState *tstate = PyThreadState_GET();
2196 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2197 "threading");
2198 if (threading == NULL) {
2199 /* threading not imported */
2200 PyErr_Clear();
2201 return;
2202 }
2203 result = PyObject_CallMethod(threading, "_shutdown", "");
2204 if (result == NULL) {
2205 PyErr_WriteUnraisable(threading);
2206 }
2207 else {
2208 Py_DECREF(result);
2209 }
2210 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002211#endif
2212}
2213
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002214#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002215static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002216static int nexitfuncs = 0;
2217
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002218int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002219{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002220 if (nexitfuncs >= NEXITFUNCS)
2221 return -1;
2222 exitfuncs[nexitfuncs++] = func;
2223 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002224}
2225
Guido van Rossumcc283f51997-08-05 02:22:03 +00002226static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002227call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002228{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002229 while (nexitfuncs > 0)
2230 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002231
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002232 fflush(stdout);
2233 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002234}
2235
2236void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002237Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002238{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002239 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002240
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002241 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002242}
2243
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002244static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002245initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002246{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002247#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002248 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002249#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002250#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002251 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002252#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002253#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002254 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002255#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002256 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002257}
2258
Guido van Rossum7433b121997-02-14 19:45:36 +00002259
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002260/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2261 *
2262 * All of the code in this function must only use async-signal-safe functions,
2263 * listed at `man 7 signal` or
2264 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2265 */
2266void
2267_Py_RestoreSignals(void)
2268{
2269#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002270 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002271#endif
2272#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002273 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002274#endif
2275#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002276 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002277#endif
2278}
2279
2280
Guido van Rossum7433b121997-02-14 19:45:36 +00002281/*
2282 * The file descriptor fd is considered ``interactive'' if either
2283 * a) isatty(fd) is TRUE, or
2284 * b) the -i flag was given, and the filename associated with
2285 * the descriptor is NULL or "<stdin>" or "???".
2286 */
2287int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002288Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002289{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002290 if (isatty((int)fileno(fp)))
2291 return 1;
2292 if (!Py_InteractiveFlag)
2293 return 0;
2294 return (filename == NULL) ||
2295 (strcmp(filename, "<stdin>") == 0) ||
2296 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002297}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002298
2299
Tim Petersd08e3822003-04-17 15:24:21 +00002300#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002301#if defined(WIN32) && defined(_MSC_VER)
2302
2303/* Stack checking for Microsoft C */
2304
2305#include <malloc.h>
2306#include <excpt.h>
2307
Fred Drakee8de31c2000-08-31 05:38:39 +00002308/*
2309 * Return non-zero when we run out of memory on the stack; zero otherwise.
2310 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002311int
Fred Drake399739f2000-08-31 05:52:44 +00002312PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002313{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002314 __try {
2315 /* alloca throws a stack overflow exception if there's
2316 not enough space left on the stack */
2317 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2318 return 0;
2319 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2320 EXCEPTION_EXECUTE_HANDLER :
2321 EXCEPTION_CONTINUE_SEARCH) {
2322 int errcode = _resetstkoflw();
2323 if (errcode == 0)
2324 {
2325 Py_FatalError("Could not reset the stack!");
2326 }
2327 }
2328 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002329}
2330
2331#endif /* WIN32 && _MSC_VER */
2332
2333/* Alternate implementations can be added here... */
2334
2335#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002336
2337
2338/* Wrappers around sigaction() or signal(). */
2339
2340PyOS_sighandler_t
2341PyOS_getsig(int sig)
2342{
2343#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002344 struct sigaction context;
2345 if (sigaction(sig, NULL, &context) == -1)
2346 return SIG_ERR;
2347 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002348#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002349 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002350/* Special signal handling for the secure CRT in Visual Studio 2005 */
2351#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002352 switch (sig) {
2353 /* Only these signals are valid */
2354 case SIGINT:
2355 case SIGILL:
2356 case SIGFPE:
2357 case SIGSEGV:
2358 case SIGTERM:
2359 case SIGBREAK:
2360 case SIGABRT:
2361 break;
2362 /* Don't call signal() with other values or it will assert */
2363 default:
2364 return SIG_ERR;
2365 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002366#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002367 handler = signal(sig, SIG_IGN);
2368 if (handler != SIG_ERR)
2369 signal(sig, handler);
2370 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002371#endif
2372}
2373
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002374/*
2375 * All of the code in this function must only use async-signal-safe functions,
2376 * listed at `man 7 signal` or
2377 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2378 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002379PyOS_sighandler_t
2380PyOS_setsig(int sig, PyOS_sighandler_t handler)
2381{
2382#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002383 /* Some code in Modules/signalmodule.c depends on sigaction() being
2384 * used here if HAVE_SIGACTION is defined. Fix that if this code
2385 * changes to invalidate that assumption.
2386 */
2387 struct sigaction context, ocontext;
2388 context.sa_handler = handler;
2389 sigemptyset(&context.sa_mask);
2390 context.sa_flags = 0;
2391 if (sigaction(sig, &context, &ocontext) == -1)
2392 return SIG_ERR;
2393 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002394#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002395 PyOS_sighandler_t oldhandler;
2396 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002397#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002398 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002399#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002400 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002401#endif
2402}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002403
2404/* Deprecated C API functions still provided for binary compatiblity */
2405
2406#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002407PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002408PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2409{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002410 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002411}
2412
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002413#undef PyParser_SimpleParseString
2414PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002415PyParser_SimpleParseString(const char *str, int start)
2416{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002417 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002418}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002419
2420#undef PyRun_AnyFile
2421PyAPI_FUNC(int)
2422PyRun_AnyFile(FILE *fp, const char *name)
2423{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002424 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002425}
2426
2427#undef PyRun_AnyFileEx
2428PyAPI_FUNC(int)
2429PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2430{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002431 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002432}
2433
2434#undef PyRun_AnyFileFlags
2435PyAPI_FUNC(int)
2436PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2437{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002438 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002439}
2440
2441#undef PyRun_File
2442PyAPI_FUNC(PyObject *)
2443PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2444{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002445 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002446}
2447
2448#undef PyRun_FileEx
2449PyAPI_FUNC(PyObject *)
2450PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2451{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002452 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002453}
2454
2455#undef PyRun_FileFlags
2456PyAPI_FUNC(PyObject *)
2457PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002458 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002459{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002460 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002461}
2462
2463#undef PyRun_SimpleFile
2464PyAPI_FUNC(int)
2465PyRun_SimpleFile(FILE *f, const char *p)
2466{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002467 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002468}
2469
2470#undef PyRun_SimpleFileEx
2471PyAPI_FUNC(int)
2472PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2473{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002474 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002475}
2476
2477
2478#undef PyRun_String
2479PyAPI_FUNC(PyObject *)
2480PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2481{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002482 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002483}
2484
2485#undef PyRun_SimpleString
2486PyAPI_FUNC(int)
2487PyRun_SimpleString(const char *s)
2488{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002489 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002490}
2491
2492#undef Py_CompileString
2493PyAPI_FUNC(PyObject *)
2494Py_CompileString(const char *str, const char *p, int s)
2495{
Georg Brandl8334fd92010-12-04 10:26:46 +00002496 return Py_CompileStringExFlags(str, p, s, NULL, -1);
2497}
2498
2499#undef Py_CompileStringFlags
2500PyAPI_FUNC(PyObject *)
2501Py_CompileStringFlags(const char *str, const char *p, int s,
2502 PyCompilerFlags *flags)
2503{
2504 return Py_CompileStringExFlags(str, p, s, flags, -1);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002505}
2506
2507#undef PyRun_InteractiveOne
2508PyAPI_FUNC(int)
2509PyRun_InteractiveOne(FILE *f, const char *p)
2510{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002511 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002512}
2513
2514#undef PyRun_InteractiveLoop
2515PyAPI_FUNC(int)
2516PyRun_InteractiveLoop(FILE *f, const char *p)
2517{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002518 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002519}
2520
2521#ifdef __cplusplus
2522}
2523#endif