blob: bea7fe1544614bc6575c63d43352c093ab8eb077 [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
Neal Norwitz2bad9702007-08-27 06:19:22 +0000335static void
Guido van Rossum1bd21222007-07-10 20:14:13 +0000336flush_std_files(void)
Guido van Rossume8432ac2007-07-09 15:04:50 +0000337{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000338 PyObject *fout = PySys_GetObject("stdout");
339 PyObject *ferr = PySys_GetObject("stderr");
340 PyObject *tmp;
Guido van Rossume8432ac2007-07-09 15:04:50 +0000341
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000342 if (fout != NULL && fout != Py_None) {
343 tmp = PyObject_CallMethod(fout, "flush", "");
344 if (tmp == NULL)
Antoine Pitroubddc9fe2010-08-08 20:46:42 +0000345 PyErr_WriteUnraisable(fout);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000346 else
347 Py_DECREF(tmp);
348 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000349
Victor Stinner9467b212010-05-14 00:59:09 +0000350 if (ferr != NULL && ferr != Py_None) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000351 tmp = PyObject_CallMethod(ferr, "flush", "");
352 if (tmp == NULL)
353 PyErr_Clear();
354 else
355 Py_DECREF(tmp);
356 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000357}
358
Guido van Rossum25ce5661997-08-02 03:10:38 +0000359/* Undo the effect of Py_Initialize().
360
361 Beware: if multiple interpreter and/or thread states exist, these
362 are not wiped out; only the current thread and interpreter state
363 are deleted. But since everything else is deleted, those other
364 interpreter and thread states should no longer be used.
365
366 (XXX We should do better, e.g. wipe out all interpreters and
367 threads.)
368
369 Locking: as above.
370
371*/
372
373void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000374Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000375{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000376 PyInterpreterState *interp;
377 PyThreadState *tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000378
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000379 if (!initialized)
380 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000381
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000382 wait_for_thread_shutdown();
Antoine Pitrou011bd622009-10-20 21:52:47 +0000383
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000384 /* The interpreter is still entirely intact at this point, and the
385 * exit funcs may be relying on that. In particular, if some thread
386 * or exit func is still waiting to do an import, the import machinery
387 * expects Py_IsInitialized() to return true. So don't say the
388 * interpreter is uninitialized until after the exit funcs have run.
389 * Note that Threading.py uses an exit func to do a join on all the
390 * threads created thru it, so this also protects pending imports in
391 * the threads created via Threading.
392 */
393 call_py_exitfuncs();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000394
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000395 /* Get current thread state and interpreter pointer */
396 tstate = PyThreadState_GET();
397 interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000398
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200399 /* Remaining threads (e.g. daemon threads) will automatically exit
400 after taking the GIL (in PyEval_RestoreThread()). */
401 _Py_Finalizing = tstate;
402 initialized = 0;
403
404 /* Flush stdout+stderr */
405 flush_std_files();
406
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000407 /* Disable signal handling */
408 PyOS_FiniInterrupts();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000409
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000410 /* Clear type lookup cache */
411 PyType_ClearCache();
Christian Heimes26855632008-01-27 23:50:43 +0000412
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000413 /* Collect garbage. This may call finalizers; it's nice to call these
414 * before all modules are destroyed.
415 * XXX If a __del__ or weakref callback is triggered here, and tries to
416 * XXX import a module, bad things can happen, because Python no
417 * XXX longer believes it's initialized.
418 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
419 * XXX is easy to provoke that way. I've also seen, e.g.,
420 * XXX Exception exceptions.ImportError: 'No module named sha'
421 * XXX in <function callback at 0x008F5718> ignored
422 * XXX but I'm unclear on exactly how that one happens. In any case,
423 * XXX I haven't seen a real-life report of either of these.
424 */
425 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000426#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000427 /* With COUNT_ALLOCS, it helps to run GC multiple times:
428 each collection might release some types from the type
429 list, so they become garbage. */
430 while (PyGC_Collect() > 0)
431 /* nothing */;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000432#endif
Antoine Pitrou696e0352010-08-08 22:18:46 +0000433 /* We run this while most interpreter state is still alive, so that
434 debug information can be printed out */
435 _PyGC_Fini();
Guido van Rossume13ddc92003-04-17 17:29:22 +0000436
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000437 /* Destroy all modules */
438 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000439
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000440 /* Flush stdout+stderr (again, in case more was printed) */
441 flush_std_files();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000442
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000443 /* Collect final garbage. This disposes of cycles created by
444 * new-style class definitions, for example.
445 * XXX This is disabled because it caused too many problems. If
446 * XXX a __del__ or weakref callback triggers here, Python code has
447 * XXX a hard time running, because even the sys module has been
448 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
449 * XXX One symptom is a sequence of information-free messages
450 * XXX coming from threads (if a __del__ or callback is invoked,
451 * XXX other threads can execute too, and any exception they encounter
452 * XXX triggers a comedy of errors as subsystem after subsystem
453 * XXX fails to find what it *expects* to find in sys to help report
454 * XXX the exception and consequent unexpected failures). I've also
455 * XXX seen segfaults then, after adding print statements to the
456 * XXX Python code getting called.
457 */
Tim Peters1d7323e2003-12-01 21:35:27 +0000458#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000459 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000460#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000461
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000462 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
463 _PyImport_Fini();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000464
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000465 /* Debugging stuff */
Guido van Rossum1707aad1997-12-08 23:43:45 +0000466#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000467 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000468#endif
469
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000470 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000471
Tim Peters9cf25ce2003-04-17 15:21:01 +0000472#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000473 /* Display all objects still alive -- this can invoke arbitrary
474 * __repr__ overrides, so requires a mostly-intact interpreter.
475 * Alas, a lot of stuff may still be alive now that will be cleaned
476 * up later.
477 */
478 if (Py_GETENV("PYTHONDUMPREFS"))
479 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000480#endif /* Py_TRACE_REFS */
481
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000482 /* Clear interpreter state */
483 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000484
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000485 /* Now we decref the exception classes. After this point nothing
486 can raise an exception. That's okay, because each Fini() method
487 below has been checked to make sure no exceptions are ever
488 raised.
489 */
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000490
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000491 _PyExc_Fini();
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000492
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000493 /* Cleanup auto-thread-state */
Christian Heimes7d2ff882007-11-30 14:35:04 +0000494#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000495 _PyGILState_Fini();
Christian Heimes7d2ff882007-11-30 14:35:04 +0000496#endif /* WITH_THREAD */
497
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000498 /* Delete current thread */
499 PyThreadState_Swap(NULL);
500 PyInterpreterState_Delete(interp);
Barry Warsawf242aa02000-05-25 23:09:49 +0000501
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000502 /* Sundry finalizers */
503 PyMethod_Fini();
504 PyFrame_Fini();
505 PyCFunction_Fini();
506 PyTuple_Fini();
507 PyList_Fini();
508 PySet_Fini();
509 PyBytes_Fini();
510 PyByteArray_Fini();
511 PyLong_Fini();
512 PyFloat_Fini();
513 PyDict_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000514
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000515 /* Cleanup Unicode implementation */
516 _PyUnicode_Fini();
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000517
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000518 /* reset file system default encoding */
Victor Stinnerb744ba12010-05-15 12:27:16 +0000519 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000520 free((char*)Py_FileSystemDefaultEncoding);
521 Py_FileSystemDefaultEncoding = NULL;
522 }
Christian Heimesc8967002007-11-30 10:18:26 +0000523
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000524 /* XXX Still allocated:
525 - various static ad-hoc pointers to interned strings
526 - int and float free list blocks
527 - whatever various modules and libraries allocate
528 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000529
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000530 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000531
Tim Peters269b2a62003-04-17 19:52:29 +0000532#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000533 /* Display addresses (& refcnts) of all objects still alive.
534 * An address can be used to find the repr of the object, printed
535 * above by _Py_PrintReferences.
536 */
537 if (Py_GETENV("PYTHONDUMPREFS"))
538 _Py_PrintReferenceAddresses(stderr);
Tim Peters269b2a62003-04-17 19:52:29 +0000539#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000540#ifdef PYMALLOC_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000541 if (Py_GETENV("PYTHONMALLOCSTATS"))
542 _PyObject_DebugMallocStats();
Tim Peters0e871182002-04-13 08:29:14 +0000543#endif
544
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000545 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000546}
547
548/* Create and initialize a new interpreter and thread, and return the
549 new thread. This requires that Py_Initialize() has been called
550 first.
551
552 Unsuccessful initialization yields a NULL pointer. Note that *no*
553 exception information is available even in this case -- the
554 exception information is held in the thread, and there is no
555 thread.
556
557 Locking: as above.
558
559*/
560
561PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000562Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000563{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000564 PyInterpreterState *interp;
565 PyThreadState *tstate, *save_tstate;
566 PyObject *bimod, *sysmod;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000567
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000568 if (!initialized)
569 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000570
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000571 interp = PyInterpreterState_New();
572 if (interp == NULL)
573 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000574
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000575 tstate = PyThreadState_New(interp);
576 if (tstate == NULL) {
577 PyInterpreterState_Delete(interp);
578 return NULL;
579 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000580
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000581 save_tstate = PyThreadState_Swap(tstate);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000582
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000583 /* XXX The following is lax in error checking */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000584
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000585 interp->modules = PyDict_New();
586 interp->modules_reloading = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000587
Victor Stinner49d3f252010-10-17 01:24:53 +0000588 bimod = _PyImport_FindBuiltin("builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000589 if (bimod != NULL) {
590 interp->builtins = PyModule_GetDict(bimod);
591 if (interp->builtins == NULL)
592 goto handle_error;
593 Py_INCREF(interp->builtins);
594 }
Christian Heimes6a27efa2008-10-30 21:48:26 +0000595
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000596 /* initialize builtin exceptions */
597 _PyExc_Init();
Christian Heimes6a27efa2008-10-30 21:48:26 +0000598
Victor Stinner49d3f252010-10-17 01:24:53 +0000599 sysmod = _PyImport_FindBuiltin("sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000600 if (bimod != NULL && sysmod != NULL) {
601 PyObject *pstderr;
602 interp->sysdict = PyModule_GetDict(sysmod);
603 if (interp->sysdict == NULL)
604 goto handle_error;
605 Py_INCREF(interp->sysdict);
606 PySys_SetPath(Py_GetPath());
607 PyDict_SetItemString(interp->sysdict, "modules",
608 interp->modules);
609 /* Set up a preliminary stderr printer until we have enough
610 infrastructure for the io module in place. */
611 pstderr = PyFile_NewStdPrinter(fileno(stderr));
612 if (pstderr == NULL)
613 Py_FatalError("Py_Initialize: can't set preliminary stderr");
614 PySys_SetObject("stderr", pstderr);
615 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000616 Py_DECREF(pstderr);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000617
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000618 _PyImportHooks_Init();
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200619
620 if (initfsencoding(interp) < 0)
621 goto handle_error;
622
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000623 if (initstdio() < 0)
624 Py_FatalError(
625 "Py_Initialize: can't initialize sys standard streams");
626 initmain();
627 if (!Py_NoSiteFlag)
628 initsite();
629 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000630
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000631 if (!PyErr_Occurred())
632 return tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000633
Thomas Wouters89f507f2006-12-13 04:49:30 +0000634handle_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000635 /* Oops, it didn't work. Undo it all. */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000636
Victor Stinner11889352011-04-27 00:20:27 +0200637 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000638 PyThreadState_Clear(tstate);
639 PyThreadState_Swap(save_tstate);
640 PyThreadState_Delete(tstate);
641 PyInterpreterState_Delete(interp);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000642
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000643 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000644}
645
646/* Delete an interpreter and its last thread. This requires that the
647 given thread state is current, that the thread has no remaining
648 frames, and that it is its interpreter's only remaining thread.
649 It is a fatal error to violate these constraints.
650
651 (Py_Finalize() doesn't have these constraints -- it zaps
652 everything, regardless.)
653
654 Locking: as above.
655
656*/
657
658void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000659Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000660{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000661 PyInterpreterState *interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000662
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000663 if (tstate != PyThreadState_GET())
664 Py_FatalError("Py_EndInterpreter: thread is not current");
665 if (tstate->frame != NULL)
666 Py_FatalError("Py_EndInterpreter: thread still has a frame");
667 if (tstate != interp->tstate_head || tstate->next != NULL)
668 Py_FatalError("Py_EndInterpreter: not the last thread");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000669
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000670 PyImport_Cleanup();
671 PyInterpreterState_Clear(interp);
672 PyThreadState_Swap(NULL);
673 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000674}
675
Martin v. Löwis790465f2008-04-05 20:41:37 +0000676static wchar_t *progname = L"python";
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000677
678void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000679Py_SetProgramName(wchar_t *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000680{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000681 if (pn && *pn)
682 progname = pn;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000683}
684
Martin v. Löwis790465f2008-04-05 20:41:37 +0000685wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000686Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000687{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000688 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000689}
690
Martin v. Löwis790465f2008-04-05 20:41:37 +0000691static wchar_t *default_home = NULL;
692static wchar_t env_home[PATH_MAX+1];
Guido van Rossuma61691e1998-02-06 22:27:24 +0000693
694void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000695Py_SetPythonHome(wchar_t *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000696{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000697 default_home = home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000698}
699
Martin v. Löwis790465f2008-04-05 20:41:37 +0000700wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000701Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000702{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000703 wchar_t *home = default_home;
704 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
705 char* chome = Py_GETENV("PYTHONHOME");
706 if (chome) {
707 size_t r = mbstowcs(env_home, chome, PATH_MAX+1);
708 if (r != (size_t)-1 && r <= PATH_MAX)
709 home = env_home;
710 }
Martin v. Löwis790465f2008-04-05 20:41:37 +0000711
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000712 }
713 return home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000714}
715
Guido van Rossum6135a871995-01-09 17:53:26 +0000716/* Create __main__ module */
717
718static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000719initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000720{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000721 PyObject *m, *d;
722 m = PyImport_AddModule("__main__");
723 if (m == NULL)
724 Py_FatalError("can't create __main__ module");
725 d = PyModule_GetDict(m);
726 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
727 PyObject *bimod = PyImport_ImportModule("builtins");
728 if (bimod == NULL ||
729 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
730 Py_FatalError("can't add __builtins__ to __main__");
731 Py_DECREF(bimod);
732 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000733}
734
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200735static int
736initfsencoding(PyInterpreterState *interp)
Victor Stinnerb744ba12010-05-15 12:27:16 +0000737{
738 PyObject *codec;
739#if defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94908bb2010-08-18 21:23:25 +0000740 char *codeset = NULL;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000741
Victor Stinner7f84ab52010-06-11 00:36:33 +0000742 if (Py_FileSystemDefaultEncoding == NULL) {
Victor Stinner8f6b6b02010-10-13 22:02:27 +0000743 /* On Unix, set the file system encoding according to the
744 user's preference, if the CODESET names a well-known
745 Python codec, and Py_FileSystemDefaultEncoding isn't
Victor Stinnere4743092010-10-19 00:05:51 +0000746 initialized by other means. */
Victor Stinner8f6b6b02010-10-13 22:02:27 +0000747 codeset = get_codeset();
Victor Stinnere4743092010-10-19 00:05:51 +0000748 if (codeset == NULL)
749 Py_FatalError("Py_Initialize: Unable to get the locale encoding");
Victor Stinnerb744ba12010-05-15 12:27:16 +0000750
Victor Stinnere4743092010-10-19 00:05:51 +0000751 Py_FileSystemDefaultEncoding = codeset;
752 Py_HasFileSystemDefaultEncoding = 0;
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200753 interp->fscodec_initialized = 1;
754 return 0;
Victor Stinner7f84ab52010-06-11 00:36:33 +0000755 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000756#endif
757
758 /* the encoding is mbcs, utf-8 or ascii */
759 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
760 if (!codec) {
761 /* Such error can only occurs in critical situations: no more
762 * memory, import a module of the standard library failed,
763 * etc. */
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200764 return -1;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000765 }
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200766 Py_DECREF(codec);
767 interp->fscodec_initialized = 1;
768 return 0;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000769}
770
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000771/* Import the site module (not into __main__ though) */
772
773static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000774initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000775{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000776 PyObject *m;
777 m = PyImport_ImportModule("site");
778 if (m == NULL) {
779 PyErr_Print();
780 Py_Finalize();
781 exit(1);
782 }
783 else {
784 Py_DECREF(m);
785 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000786}
787
Antoine Pitrou05608432009-01-09 18:53:14 +0000788static PyObject*
789create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000790 int fd, int write_mode, char* name,
791 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +0000792{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000793 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
794 const char* mode;
Victor Stinner02bfdb32011-02-23 12:10:23 +0000795 const char* newline;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000796 PyObject *line_buffering;
797 int buffering, isatty;
Antoine Pitrou05608432009-01-09 18:53:14 +0000798
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000799 /* stdin is always opened in buffered mode, first because it shouldn't
800 make a difference in common use cases, second because TextIOWrapper
801 depends on the presence of a read1() method which only exists on
802 buffered streams.
803 */
804 if (Py_UnbufferedStdioFlag && write_mode)
805 buffering = 0;
806 else
807 buffering = -1;
808 if (write_mode)
809 mode = "wb";
810 else
811 mode = "rb";
812 buf = PyObject_CallMethod(io, "open", "isiOOOi",
813 fd, mode, buffering,
814 Py_None, Py_None, Py_None, 0);
815 if (buf == NULL)
816 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000817
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000818 if (buffering) {
819 raw = PyObject_GetAttrString(buf, "raw");
820 if (raw == NULL)
821 goto error;
822 }
823 else {
824 raw = buf;
825 Py_INCREF(raw);
826 }
Antoine Pitrou05608432009-01-09 18:53:14 +0000827
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000828 text = PyUnicode_FromString(name);
829 if (text == NULL || PyObject_SetAttrString(raw, "name", text) < 0)
830 goto error;
831 res = PyObject_CallMethod(raw, "isatty", "");
832 if (res == NULL)
833 goto error;
834 isatty = PyObject_IsTrue(res);
835 Py_DECREF(res);
836 if (isatty == -1)
837 goto error;
838 if (isatty || Py_UnbufferedStdioFlag)
839 line_buffering = Py_True;
840 else
841 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +0000842
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000843 Py_CLEAR(raw);
844 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +0000845
Victor Stinner02bfdb32011-02-23 12:10:23 +0000846 newline = "\n";
847#ifdef MS_WINDOWS
848 if (!write_mode) {
849 /* translate \r\n to \n for sys.stdin on Windows */
850 newline = NULL;
851 }
852#endif
853
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000854 stream = PyObject_CallMethod(io, "TextIOWrapper", "OsssO",
855 buf, encoding, errors,
Victor Stinner02bfdb32011-02-23 12:10:23 +0000856 newline, line_buffering);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000857 Py_CLEAR(buf);
858 if (stream == NULL)
859 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000860
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000861 if (write_mode)
862 mode = "w";
863 else
864 mode = "r";
865 text = PyUnicode_FromString(mode);
866 if (!text || PyObject_SetAttrString(stream, "mode", text) < 0)
867 goto error;
868 Py_CLEAR(text);
869 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +0000870
871error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000872 Py_XDECREF(buf);
873 Py_XDECREF(stream);
874 Py_XDECREF(text);
875 Py_XDECREF(raw);
876 return NULL;
Antoine Pitrou05608432009-01-09 18:53:14 +0000877}
878
Georg Brandl1a3284e2007-12-02 09:40:06 +0000879/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000880static int
881initstdio(void)
882{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000883 PyObject *iomod = NULL, *wrapper;
884 PyObject *bimod = NULL;
885 PyObject *m;
886 PyObject *std = NULL;
887 int status = 0, fd;
888 PyObject * encoding_attr;
889 char *encoding = NULL, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000890
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000891 /* Hack to avoid a nasty recursion issue when Python is invoked
892 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
893 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
894 goto error;
895 }
896 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000897
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000898 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
899 goto error;
900 }
901 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000902
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000903 if (!(bimod = PyImport_ImportModule("builtins"))) {
904 goto error;
905 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000906
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000907 if (!(iomod = PyImport_ImportModule("io"))) {
908 goto error;
909 }
910 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
911 goto error;
912 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000913
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000914 /* Set builtins.open */
915 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
Antoine Pitrou5a96b522010-11-20 19:50:57 +0000916 Py_DECREF(wrapper);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000917 goto error;
918 }
Antoine Pitrou5a96b522010-11-20 19:50:57 +0000919 Py_DECREF(wrapper);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000920
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000921 encoding = Py_GETENV("PYTHONIOENCODING");
922 errors = NULL;
923 if (encoding) {
924 encoding = strdup(encoding);
925 errors = strchr(encoding, ':');
926 if (errors) {
927 *errors = '\0';
928 errors++;
929 }
930 }
Martin v. Löwis0f599892008-06-02 11:13:03 +0000931
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000932 /* Set sys.stdin */
933 fd = fileno(stdin);
934 /* Under some conditions stdin, stdout and stderr may not be connected
935 * and fileno() may point to an invalid file descriptor. For example
936 * GUI apps don't have valid standard streams by default.
937 */
938 if (fd < 0) {
Christian Heimes58cb1b82007-11-13 02:19:40 +0000939#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000940 std = Py_None;
941 Py_INCREF(std);
Christian Heimes58cb1b82007-11-13 02:19:40 +0000942#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000943 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000944#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000945 }
946 else {
947 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
948 if (std == NULL)
949 goto error;
950 } /* if (fd < 0) */
951 PySys_SetObject("__stdin__", std);
952 PySys_SetObject("stdin", std);
953 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000954
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000955 /* Set sys.stdout */
956 fd = fileno(stdout);
957 if (fd < 0) {
Christian Heimes58cb1b82007-11-13 02:19:40 +0000958#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000959 std = Py_None;
960 Py_INCREF(std);
Christian Heimes58cb1b82007-11-13 02:19:40 +0000961#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000962 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000963#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000964 }
965 else {
966 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
967 if (std == NULL)
968 goto error;
969 } /* if (fd < 0) */
970 PySys_SetObject("__stdout__", std);
971 PySys_SetObject("stdout", std);
972 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000973
Guido van Rossum98297ee2007-11-06 21:34:58 +0000974#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000975 /* Set sys.stderr, replaces the preliminary stderr */
976 fd = fileno(stderr);
977 if (fd < 0) {
Christian Heimes58cb1b82007-11-13 02:19:40 +0000978#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000979 std = Py_None;
980 Py_INCREF(std);
Christian Heimes58cb1b82007-11-13 02:19:40 +0000981#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000982 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000983#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000984 }
985 else {
986 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
987 if (std == NULL)
988 goto error;
989 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +0000990
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000991 /* Same as hack above, pre-import stderr's codec to avoid recursion
992 when import.c tries to write to stderr in verbose mode. */
993 encoding_attr = PyObject_GetAttrString(std, "encoding");
994 if (encoding_attr != NULL) {
995 const char * encoding;
996 encoding = _PyUnicode_AsString(encoding_attr);
997 if (encoding != NULL) {
998 _PyCodec_Lookup(encoding);
999 }
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +00001000 Py_DECREF(encoding_attr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001001 }
1002 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +00001003
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001004 PySys_SetObject("__stderr__", std);
1005 PySys_SetObject("stderr", std);
1006 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001007#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001008
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001009 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001010 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001011 status = -1;
1012 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001013
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001014 if (encoding)
1015 free(encoding);
1016 Py_XDECREF(bimod);
1017 Py_XDECREF(iomod);
1018 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001019}
1020
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001021/* Parse input from a file and execute it */
1022
1023int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001024PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001025 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001026{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001027 if (filename == NULL)
1028 filename = "???";
1029 if (Py_FdIsInteractive(fp, filename)) {
1030 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1031 if (closeit)
1032 fclose(fp);
1033 return err;
1034 }
1035 else
1036 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001037}
1038
1039int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001040PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001041{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001042 PyObject *v;
1043 int ret;
1044 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001045
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001046 if (flags == NULL) {
1047 flags = &local_flags;
1048 local_flags.cf_flags = 0;
1049 }
1050 v = PySys_GetObject("ps1");
1051 if (v == NULL) {
1052 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
1053 Py_XDECREF(v);
1054 }
1055 v = PySys_GetObject("ps2");
1056 if (v == NULL) {
1057 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
1058 Py_XDECREF(v);
1059 }
1060 for (;;) {
1061 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
1062 PRINT_TOTAL_REFS();
1063 if (ret == E_EOF)
1064 return 0;
1065 /*
1066 if (ret == E_NOMEM)
1067 return -1;
1068 */
1069 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001070}
1071
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001072/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001073static int PARSER_FLAGS(PyCompilerFlags *flags)
1074{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001075 int parser_flags = 0;
1076 if (!flags)
1077 return 0;
1078 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1079 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1080 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1081 parser_flags |= PyPARSE_IGNORE_COOKIE;
1082 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1083 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1084 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001085}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001086
Thomas Wouters89f507f2006-12-13 04:49:30 +00001087#if 0
1088/* Keep an example of flags with future keyword support. */
1089#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001090 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1091 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1092 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1093 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001094#endif
1095
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001096int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001097PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001098{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001099 PyObject *m, *d, *v, *w, *oenc = NULL;
1100 mod_ty mod;
1101 PyArena *arena;
1102 char *ps1 = "", *ps2 = "", *enc = NULL;
1103 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +00001104
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001105 if (fp == stdin) {
1106 /* Fetch encoding from sys.stdin */
1107 v = PySys_GetObject("stdin");
1108 if (v == NULL || v == Py_None)
1109 return -1;
1110 oenc = PyObject_GetAttrString(v, "encoding");
1111 if (!oenc)
1112 return -1;
1113 enc = _PyUnicode_AsString(oenc);
Victor Stinner386fe712010-05-19 00:34:15 +00001114 if (enc == NULL)
1115 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001116 }
1117 v = PySys_GetObject("ps1");
1118 if (v != NULL) {
1119 v = PyObject_Str(v);
1120 if (v == NULL)
1121 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001122 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001123 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001124 if (ps1 == NULL) {
1125 PyErr_Clear();
1126 ps1 = "";
1127 }
1128 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001129 }
1130 w = PySys_GetObject("ps2");
1131 if (w != NULL) {
1132 w = PyObject_Str(w);
1133 if (w == NULL)
1134 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001135 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001136 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001137 if (ps2 == NULL) {
1138 PyErr_Clear();
1139 ps2 = "";
1140 }
1141 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 }
1143 arena = PyArena_New();
1144 if (arena == NULL) {
1145 Py_XDECREF(v);
1146 Py_XDECREF(w);
1147 Py_XDECREF(oenc);
1148 return -1;
1149 }
1150 mod = PyParser_ASTFromFile(fp, filename, enc,
1151 Py_single_input, ps1, ps2,
1152 flags, &errcode, arena);
1153 Py_XDECREF(v);
1154 Py_XDECREF(w);
1155 Py_XDECREF(oenc);
1156 if (mod == NULL) {
1157 PyArena_Free(arena);
1158 if (errcode == E_EOF) {
1159 PyErr_Clear();
1160 return E_EOF;
1161 }
1162 PyErr_Print();
1163 return -1;
1164 }
1165 m = PyImport_AddModule("__main__");
1166 if (m == NULL) {
1167 PyArena_Free(arena);
1168 return -1;
1169 }
1170 d = PyModule_GetDict(m);
1171 v = run_mod(mod, filename, d, d, flags, arena);
1172 PyArena_Free(arena);
1173 flush_io();
1174 if (v == NULL) {
1175 PyErr_Print();
1176 return -1;
1177 }
1178 Py_DECREF(v);
1179 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001180}
1181
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001182/* Check whether a file maybe a pyc file: Look at the extension,
1183 the file type, and, if we may close it, at the first few bytes. */
1184
1185static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001186maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001187{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001188 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1189 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001190
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001191 /* Only look into the file if we are allowed to close it, since
1192 it then should also be seekable. */
1193 if (closeit) {
1194 /* Read only two bytes of the magic. If the file was opened in
1195 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1196 be read as they are on disk. */
1197 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1198 unsigned char buf[2];
1199 /* Mess: In case of -x, the stream is NOT at its start now,
1200 and ungetc() was used to push back the first newline,
1201 which makes the current stream position formally undefined,
1202 and a x-platform nightmare.
1203 Unfortunately, we have no direct way to know whether -x
1204 was specified. So we use a terrible hack: if the current
1205 stream position is not 0, we assume -x was specified, and
1206 give up. Bug 132850 on SourceForge spells out the
1207 hopelessness of trying anything else (fseek and ftell
1208 don't work predictably x-platform for text-mode files).
1209 */
1210 int ispyc = 0;
1211 if (ftell(fp) == 0) {
1212 if (fread(buf, 1, 2, fp) == 2 &&
1213 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1214 ispyc = 1;
1215 rewind(fp);
1216 }
1217 return ispyc;
1218 }
1219 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001220}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001221
Guido van Rossum0df002c2000-08-27 19:21:52 +00001222int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001223PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001224 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001225{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001226 PyObject *m, *d, *v;
1227 const char *ext;
Victor Stinner0fcab4a2011-01-04 12:59:15 +00001228 int set_file_name = 0, ret;
1229 size_t len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001230
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001231 m = PyImport_AddModule("__main__");
1232 if (m == NULL)
1233 return -1;
1234 d = PyModule_GetDict(m);
1235 if (PyDict_GetItemString(d, "__file__") == NULL) {
1236 PyObject *f;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001237 f = PyUnicode_DecodeFSDefault(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001238 if (f == NULL)
1239 return -1;
1240 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1241 Py_DECREF(f);
1242 return -1;
1243 }
Barry Warsaw916048d2011-09-20 14:45:44 -04001244 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0) {
1245 Py_DECREF(f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001246 return -1;
Barry Warsaw916048d2011-09-20 14:45:44 -04001247 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 set_file_name = 1;
1249 Py_DECREF(f);
1250 }
1251 len = strlen(filename);
1252 ext = filename + len - (len > 4 ? 4 : 0);
1253 if (maybe_pyc_file(fp, filename, ext, closeit)) {
1254 /* Try to run a pyc file. First, re-open in binary */
1255 if (closeit)
1256 fclose(fp);
1257 if ((fp = fopen(filename, "rb")) == NULL) {
1258 fprintf(stderr, "python: Can't reopen .pyc file\n");
1259 ret = -1;
1260 goto done;
1261 }
1262 /* Turn on optimization if a .pyo file is given */
1263 if (strcmp(ext, ".pyo") == 0)
1264 Py_OptimizeFlag = 1;
1265 v = run_pyc_file(fp, filename, d, d, flags);
1266 } else {
1267 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1268 closeit, flags);
1269 }
1270 flush_io();
1271 if (v == NULL) {
1272 PyErr_Print();
1273 ret = -1;
1274 goto done;
1275 }
1276 Py_DECREF(v);
1277 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001278 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001279 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1280 PyErr_Clear();
1281 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001282}
1283
1284int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001285PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001286{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001287 PyObject *m, *d, *v;
1288 m = PyImport_AddModule("__main__");
1289 if (m == NULL)
1290 return -1;
1291 d = PyModule_GetDict(m);
1292 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1293 if (v == NULL) {
1294 PyErr_Print();
1295 return -1;
1296 }
1297 Py_DECREF(v);
1298 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001299}
1300
Barry Warsaw035574d1997-08-29 22:07:17 +00001301static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001302parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001303 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001304{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001305 long hold;
1306 PyObject *v;
Barry Warsaw035574d1997-08-29 22:07:17 +00001307
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001308 /* old style errors */
1309 if (PyTuple_Check(err))
1310 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
1311 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001312
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001313 /* new style errors. `err' is an instance */
Barry Warsaw035574d1997-08-29 22:07:17 +00001314
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001315 if (! (v = PyObject_GetAttrString(err, "msg")))
1316 goto finally;
1317 *message = v;
Barry Warsaw035574d1997-08-29 22:07:17 +00001318
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001319 if (!(v = PyObject_GetAttrString(err, "filename")))
1320 goto finally;
1321 if (v == Py_None)
1322 *filename = NULL;
1323 else if (! (*filename = _PyUnicode_AsString(v)))
1324 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001325
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001326 Py_DECREF(v);
1327 if (!(v = PyObject_GetAttrString(err, "lineno")))
1328 goto finally;
1329 hold = PyLong_AsLong(v);
1330 Py_DECREF(v);
1331 v = NULL;
1332 if (hold < 0 && PyErr_Occurred())
1333 goto finally;
1334 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001335
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001336 if (!(v = PyObject_GetAttrString(err, "offset")))
1337 goto finally;
1338 if (v == Py_None) {
1339 *offset = -1;
1340 Py_DECREF(v);
1341 v = NULL;
1342 } else {
1343 hold = PyLong_AsLong(v);
1344 Py_DECREF(v);
1345 v = NULL;
1346 if (hold < 0 && PyErr_Occurred())
1347 goto finally;
1348 *offset = (int)hold;
1349 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001350
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001351 if (!(v = PyObject_GetAttrString(err, "text")))
1352 goto finally;
1353 if (v == Py_None)
1354 *text = NULL;
1355 else if (!PyUnicode_Check(v) ||
1356 !(*text = _PyUnicode_AsString(v)))
1357 goto finally;
1358 Py_DECREF(v);
1359 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001360
1361finally:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001362 Py_XDECREF(v);
1363 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001364}
1365
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001366void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001367PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001368{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001369 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001370}
1371
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001372static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001373print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001374{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001375 char *nl;
1376 if (offset >= 0) {
Benjamin Petersona95e9772010-10-29 03:28:14 +00001377 if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n')
1378 offset--;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001379 for (;;) {
1380 nl = strchr(text, '\n');
1381 if (nl == NULL || nl-text >= offset)
1382 break;
1383 offset -= (int)(nl+1-text);
1384 text = nl+1;
1385 }
1386 while (*text == ' ' || *text == '\t') {
1387 text++;
1388 offset--;
1389 }
1390 }
1391 PyFile_WriteString(" ", f);
1392 PyFile_WriteString(text, f);
1393 if (*text == '\0' || text[strlen(text)-1] != '\n')
1394 PyFile_WriteString("\n", f);
1395 if (offset == -1)
1396 return;
1397 PyFile_WriteString(" ", f);
Benjamin Petersona95e9772010-10-29 03:28:14 +00001398 while (--offset > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001399 PyFile_WriteString(" ", f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001400 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001401}
1402
Guido van Rossum66e8e862001-03-23 17:54:43 +00001403static void
1404handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001405{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001406 PyObject *exception, *value, *tb;
1407 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001408
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001409 if (Py_InspectFlag)
1410 /* Don't exit if -i flag was given. This flag is set to 0
1411 * when entering interactive mode for inspecting. */
1412 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001413
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001414 PyErr_Fetch(&exception, &value, &tb);
1415 fflush(stdout);
1416 if (value == NULL || value == Py_None)
1417 goto done;
1418 if (PyExceptionInstance_Check(value)) {
1419 /* The error code should be in the `code' attribute. */
1420 PyObject *code = PyObject_GetAttrString(value, "code");
1421 if (code) {
1422 Py_DECREF(value);
1423 value = code;
1424 if (value == Py_None)
1425 goto done;
1426 }
1427 /* If we failed to dig out the 'code' attribute,
1428 just let the else clause below print the error. */
1429 }
1430 if (PyLong_Check(value))
1431 exitcode = (int)PyLong_AsLong(value);
1432 else {
Victor Stinnere9fb3192010-05-17 08:58:51 +00001433 PyObject *sys_stderr = PySys_GetObject("stderr");
Victor Stinner7126dbc2010-05-21 23:45:42 +00001434 if (sys_stderr != NULL && sys_stderr != Py_None) {
1435 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1436 } else {
1437 PyObject_Print(value, stderr, Py_PRINT_RAW);
1438 fflush(stderr);
1439 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001440 PySys_WriteStderr("\n");
1441 exitcode = 1;
1442 }
Tim Peterscf615b52003-04-19 18:47:02 +00001443 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001444 /* Restore and clear the exception info, in order to properly decref
1445 * the exception, value, and traceback. If we just exit instead,
1446 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1447 * some finalizers from running.
1448 */
1449 PyErr_Restore(exception, value, tb);
1450 PyErr_Clear();
1451 Py_Exit(exitcode);
1452 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001453}
1454
1455void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001456PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001457{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001458 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001459
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001460 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1461 handle_system_exit();
1462 }
1463 PyErr_Fetch(&exception, &v, &tb);
1464 if (exception == NULL)
1465 return;
1466 PyErr_NormalizeException(&exception, &v, &tb);
1467 if (tb == NULL) {
1468 tb = Py_None;
1469 Py_INCREF(tb);
1470 }
1471 PyException_SetTraceback(v, tb);
1472 if (exception == NULL)
1473 return;
1474 /* Now we know v != NULL too */
1475 if (set_sys_last_vars) {
1476 PySys_SetObject("last_type", exception);
1477 PySys_SetObject("last_value", v);
1478 PySys_SetObject("last_traceback", tb);
1479 }
1480 hook = PySys_GetObject("excepthook");
1481 if (hook) {
1482 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1483 PyObject *result = PyEval_CallObject(hook, args);
1484 if (result == NULL) {
1485 PyObject *exception2, *v2, *tb2;
1486 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1487 handle_system_exit();
1488 }
1489 PyErr_Fetch(&exception2, &v2, &tb2);
1490 PyErr_NormalizeException(&exception2, &v2, &tb2);
1491 /* It should not be possible for exception2 or v2
1492 to be NULL. However PyErr_Display() can't
1493 tolerate NULLs, so just be safe. */
1494 if (exception2 == NULL) {
1495 exception2 = Py_None;
1496 Py_INCREF(exception2);
1497 }
1498 if (v2 == NULL) {
1499 v2 = Py_None;
1500 Py_INCREF(v2);
1501 }
1502 fflush(stdout);
1503 PySys_WriteStderr("Error in sys.excepthook:\n");
1504 PyErr_Display(exception2, v2, tb2);
1505 PySys_WriteStderr("\nOriginal exception was:\n");
1506 PyErr_Display(exception, v, tb);
1507 Py_DECREF(exception2);
1508 Py_DECREF(v2);
1509 Py_XDECREF(tb2);
1510 }
1511 Py_XDECREF(result);
1512 Py_XDECREF(args);
1513 } else {
1514 PySys_WriteStderr("sys.excepthook is missing\n");
1515 PyErr_Display(exception, v, tb);
1516 }
1517 Py_XDECREF(exception);
1518 Py_XDECREF(v);
1519 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001520}
1521
Benjamin Petersone6528212008-07-15 15:32:09 +00001522static void
1523print_exception(PyObject *f, PyObject *value)
1524{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001525 int err = 0;
1526 PyObject *type, *tb;
Benjamin Petersone6528212008-07-15 15:32:09 +00001527
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001528 if (!PyExceptionInstance_Check(value)) {
1529 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1530 PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1531 PyFile_WriteString(" found\n", f);
1532 return;
1533 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001534
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001535 Py_INCREF(value);
1536 fflush(stdout);
1537 type = (PyObject *) Py_TYPE(value);
1538 tb = PyException_GetTraceback(value);
1539 if (tb && tb != Py_None)
1540 err = PyTraceBack_Print(tb, f);
1541 if (err == 0 &&
1542 PyObject_HasAttrString(value, "print_file_and_line"))
1543 {
1544 PyObject *message;
1545 const char *filename, *text;
1546 int lineno, offset;
1547 if (!parse_syntax_error(value, &message, &filename,
1548 &lineno, &offset, &text))
1549 PyErr_Clear();
1550 else {
1551 char buf[10];
1552 PyFile_WriteString(" File \"", f);
1553 if (filename == NULL)
1554 PyFile_WriteString("<string>", f);
1555 else
1556 PyFile_WriteString(filename, f);
1557 PyFile_WriteString("\", line ", f);
1558 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
1559 PyFile_WriteString(buf, f);
1560 PyFile_WriteString("\n", f);
1561 if (text != NULL)
1562 print_error_text(f, offset, text);
1563 Py_DECREF(value);
1564 value = message;
1565 /* Can't be bothered to check all those
1566 PyFile_WriteString() calls */
1567 if (PyErr_Occurred())
1568 err = -1;
1569 }
1570 }
1571 if (err) {
1572 /* Don't do anything else */
1573 }
1574 else {
1575 PyObject* moduleName;
1576 char* className;
1577 assert(PyExceptionClass_Check(type));
1578 className = PyExceptionClass_Name(type);
1579 if (className != NULL) {
1580 char *dot = strrchr(className, '.');
1581 if (dot != NULL)
1582 className = dot+1;
1583 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001584
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001585 moduleName = PyObject_GetAttrString(type, "__module__");
1586 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1587 {
1588 Py_DECREF(moduleName);
1589 err = PyFile_WriteString("<unknown>", f);
1590 }
1591 else {
1592 char* modstr = _PyUnicode_AsString(moduleName);
1593 if (modstr && strcmp(modstr, "builtins"))
1594 {
1595 err = PyFile_WriteString(modstr, f);
1596 err += PyFile_WriteString(".", f);
1597 }
1598 Py_DECREF(moduleName);
1599 }
1600 if (err == 0) {
1601 if (className == NULL)
1602 err = PyFile_WriteString("<unknown>", f);
1603 else
1604 err = PyFile_WriteString(className, f);
1605 }
1606 }
1607 if (err == 0 && (value != Py_None)) {
1608 PyObject *s = PyObject_Str(value);
1609 /* only print colon if the str() of the
1610 object is not the empty string
1611 */
1612 if (s == NULL)
1613 err = -1;
1614 else if (!PyUnicode_Check(s) ||
1615 PyUnicode_GetSize(s) != 0)
1616 err = PyFile_WriteString(": ", f);
1617 if (err == 0)
1618 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1619 Py_XDECREF(s);
1620 }
1621 /* try to write a newline in any case */
1622 err += PyFile_WriteString("\n", f);
1623 Py_XDECREF(tb);
1624 Py_DECREF(value);
1625 /* If an error happened here, don't show it.
1626 XXX This is wrong, but too many callers rely on this behavior. */
1627 if (err != 0)
1628 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001629}
1630
1631static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001632 "\nThe above exception was the direct cause "
1633 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001634
1635static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001636 "\nDuring handling of the above exception, "
1637 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001638
1639static void
1640print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
1641{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001642 int err = 0, res;
1643 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00001644
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001645 if (seen != NULL) {
1646 /* Exception chaining */
1647 if (PySet_Add(seen, value) == -1)
1648 PyErr_Clear();
1649 else if (PyExceptionInstance_Check(value)) {
1650 cause = PyException_GetCause(value);
1651 context = PyException_GetContext(value);
1652 if (cause) {
1653 res = PySet_Contains(seen, cause);
1654 if (res == -1)
1655 PyErr_Clear();
1656 if (res == 0) {
1657 print_exception_recursive(
1658 f, cause, seen);
1659 err |= PyFile_WriteString(
1660 cause_message, f);
1661 }
1662 }
1663 else if (context) {
1664 res = PySet_Contains(seen, context);
1665 if (res == -1)
1666 PyErr_Clear();
1667 if (res == 0) {
1668 print_exception_recursive(
1669 f, context, seen);
1670 err |= PyFile_WriteString(
1671 context_message, f);
1672 }
1673 }
1674 Py_XDECREF(context);
1675 Py_XDECREF(cause);
1676 }
1677 }
1678 print_exception(f, value);
1679 if (err != 0)
1680 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001681}
1682
Thomas Wouters477c8d52006-05-27 19:21:47 +00001683void
1684PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001685{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001686 PyObject *seen;
1687 PyObject *f = PySys_GetObject("stderr");
1688 if (f == Py_None) {
1689 /* pass */
1690 }
1691 else if (f == NULL) {
1692 _PyObject_Dump(value);
1693 fprintf(stderr, "lost sys.stderr\n");
1694 }
1695 else {
1696 /* We choose to ignore seen being possibly NULL, and report
1697 at least the main exception (it could be a MemoryError).
1698 */
1699 seen = PySet_New(NULL);
1700 if (seen == NULL)
1701 PyErr_Clear();
1702 print_exception_recursive(f, value, seen);
1703 Py_XDECREF(seen);
1704 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001705}
1706
Guido van Rossum82598051997-03-05 00:20:32 +00001707PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001708PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001709 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001710{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001711 PyObject *ret = NULL;
1712 mod_ty mod;
1713 PyArena *arena = PyArena_New();
1714 if (arena == NULL)
1715 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001716
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001717 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
1718 if (mod != NULL)
1719 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
1720 PyArena_Free(arena);
1721 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001722}
1723
1724PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001725PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001726 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001727{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001728 PyObject *ret;
1729 mod_ty mod;
1730 PyArena *arena = PyArena_New();
1731 if (arena == NULL)
1732 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001733
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001734 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
1735 flags, NULL, arena);
1736 if (closeit)
1737 fclose(fp);
1738 if (mod == NULL) {
1739 PyArena_Free(arena);
1740 return NULL;
1741 }
1742 ret = run_mod(mod, filename, globals, locals, flags, arena);
1743 PyArena_Free(arena);
1744 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001745}
1746
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001747static void
1748flush_io(void)
1749{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001750 PyObject *f, *r;
1751 PyObject *type, *value, *traceback;
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001752
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001753 /* Save the current exception */
1754 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001755
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001756 f = PySys_GetObject("stderr");
1757 if (f != NULL) {
1758 r = PyObject_CallMethod(f, "flush", "");
1759 if (r)
1760 Py_DECREF(r);
1761 else
1762 PyErr_Clear();
1763 }
1764 f = PySys_GetObject("stdout");
1765 if (f != NULL) {
1766 r = PyObject_CallMethod(f, "flush", "");
1767 if (r)
1768 Py_DECREF(r);
1769 else
1770 PyErr_Clear();
1771 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001772
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001773 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001774}
1775
Guido van Rossum82598051997-03-05 00:20:32 +00001776static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001777run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001778 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001779{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001780 PyCodeObject *co;
1781 PyObject *v;
1782 co = PyAST_Compile(mod, filename, flags, arena);
1783 if (co == NULL)
1784 return NULL;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001785 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001786 Py_DECREF(co);
1787 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001788}
1789
Guido van Rossum82598051997-03-05 00:20:32 +00001790static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001791run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001792 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001793{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001794 PyCodeObject *co;
1795 PyObject *v;
1796 long magic;
1797 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001798
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001799 magic = PyMarshal_ReadLongFromFile(fp);
1800 if (magic != PyImport_GetMagicNumber()) {
1801 PyErr_SetString(PyExc_RuntimeError,
1802 "Bad magic number in .pyc file");
1803 return NULL;
1804 }
1805 (void) PyMarshal_ReadLongFromFile(fp);
1806 v = PyMarshal_ReadLastObjectFromFile(fp);
1807 fclose(fp);
1808 if (v == NULL || !PyCode_Check(v)) {
1809 Py_XDECREF(v);
1810 PyErr_SetString(PyExc_RuntimeError,
1811 "Bad code object in .pyc file");
1812 return NULL;
1813 }
1814 co = (PyCodeObject *)v;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001815 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001816 if (v && flags)
1817 flags->cf_flags |= (co->co_flags & PyCF_MASK);
1818 Py_DECREF(co);
1819 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001820}
1821
Guido van Rossum82598051997-03-05 00:20:32 +00001822PyObject *
Georg Brandl8334fd92010-12-04 10:26:46 +00001823Py_CompileStringExFlags(const char *str, const char *filename, int start,
1824 PyCompilerFlags *flags, int optimize)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001825{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001826 PyCodeObject *co;
1827 mod_ty mod;
1828 PyArena *arena = PyArena_New();
1829 if (arena == NULL)
1830 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001831
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001832 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
1833 if (mod == NULL) {
1834 PyArena_Free(arena);
1835 return NULL;
1836 }
1837 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
1838 PyObject *result = PyAST_mod2obj(mod);
1839 PyArena_Free(arena);
1840 return result;
1841 }
Georg Brandl8334fd92010-12-04 10:26:46 +00001842 co = PyAST_CompileEx(mod, filename, flags, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001843 PyArena_Free(arena);
1844 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001845}
1846
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001847/* For use in Py_LIMITED_API */
1848#undef Py_CompileString
1849PyObject *
1850PyCompileString(const char *str, const char *filename, int start)
1851{
1852 return Py_CompileStringFlags(str, filename, start, NULL);
1853}
1854
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001855struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001856Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001857{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001858 struct symtable *st;
1859 mod_ty mod;
1860 PyCompilerFlags flags;
1861 PyArena *arena = PyArena_New();
1862 if (arena == NULL)
1863 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001864
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001865 flags.cf_flags = 0;
1866 mod = PyParser_ASTFromString(str, filename, start, &flags, arena);
1867 if (mod == NULL) {
1868 PyArena_Free(arena);
1869 return NULL;
1870 }
1871 st = PySymtable_Build(mod, filename, 0);
1872 PyArena_Free(arena);
1873 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001874}
1875
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001876/* Preferred access to parser is through AST. */
1877mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001878PyParser_ASTFromString(const char *s, const char *filename, int start,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001879 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001880{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001881 mod_ty mod;
1882 PyCompilerFlags localflags;
1883 perrdetail err;
1884 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00001885
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001886 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename,
1887 &_PyParser_Grammar, start, &err,
1888 &iflags);
1889 if (flags == NULL) {
1890 localflags.cf_flags = 0;
1891 flags = &localflags;
1892 }
1893 if (n) {
1894 flags->cf_flags |= iflags & PyCF_MASK;
1895 mod = PyAST_FromNode(n, flags, filename, arena);
1896 PyNode_Free(n);
1897 return mod;
1898 }
1899 else {
1900 err_input(&err);
1901 return NULL;
1902 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001903}
1904
1905mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001906PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001907 int start, char *ps1,
1908 char *ps2, PyCompilerFlags *flags, int *errcode,
1909 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001910{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001911 mod_ty mod;
1912 PyCompilerFlags localflags;
1913 perrdetail err;
1914 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00001915
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001916 node *n = PyParser_ParseFileFlagsEx(fp, filename, enc,
1917 &_PyParser_Grammar,
1918 start, ps1, ps2, &err, &iflags);
1919 if (flags == NULL) {
1920 localflags.cf_flags = 0;
1921 flags = &localflags;
1922 }
1923 if (n) {
1924 flags->cf_flags |= iflags & PyCF_MASK;
1925 mod = PyAST_FromNode(n, flags, filename, arena);
1926 PyNode_Free(n);
1927 return mod;
1928 }
1929 else {
1930 err_input(&err);
1931 if (errcode)
1932 *errcode = err.error;
1933 return NULL;
1934 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001935}
1936
Guido van Rossuma110aa61994-08-29 12:50:44 +00001937/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001938
Guido van Rossuma110aa61994-08-29 12:50:44 +00001939node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001940PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001941{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001942 perrdetail err;
1943 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
1944 &_PyParser_Grammar,
1945 start, NULL, NULL, &err, flags);
1946 if (n == NULL)
1947 err_input(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001948
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001949 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001950}
1951
Guido van Rossuma110aa61994-08-29 12:50:44 +00001952/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001953
Guido van Rossuma110aa61994-08-29 12:50:44 +00001954node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001955PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001956{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001957 perrdetail err;
1958 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1959 start, &err, flags);
1960 if (n == NULL)
1961 err_input(&err);
1962 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00001963}
1964
1965node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001966PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001967 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001968{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001969 perrdetail err;
1970 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1971 &_PyParser_Grammar, start, &err, flags);
1972 if (n == NULL)
1973 err_input(&err);
1974 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00001975}
1976
1977node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001978PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001979{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001980 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001981}
1982
Guido van Rossum66ebd912003-04-17 16:02:26 +00001983/* May want to move a more generalized form of this to parsetok.c or
1984 even parser modules. */
1985
1986void
1987PyParser_SetError(perrdetail *err)
1988{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001989 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00001990}
1991
Guido van Rossuma110aa61994-08-29 12:50:44 +00001992/* Set the error appropriate to the given input error code (see errcode.h) */
1993
1994static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001995err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00001996{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001997 PyObject *v, *w, *errtype, *errtext;
1998 PyObject *msg_obj = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001999 PyObject *filename;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002000 char *msg = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002001
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002002 errtype = PyExc_SyntaxError;
2003 switch (err->error) {
2004 case E_ERROR:
2005 return;
2006 case E_SYNTAX:
2007 errtype = PyExc_IndentationError;
2008 if (err->expected == INDENT)
2009 msg = "expected an indented block";
2010 else if (err->token == INDENT)
2011 msg = "unexpected indent";
2012 else if (err->token == DEDENT)
2013 msg = "unexpected unindent";
2014 else {
2015 errtype = PyExc_SyntaxError;
2016 msg = "invalid syntax";
2017 }
2018 break;
2019 case E_TOKEN:
2020 msg = "invalid token";
2021 break;
2022 case E_EOFS:
2023 msg = "EOF while scanning triple-quoted string literal";
2024 break;
2025 case E_EOLS:
2026 msg = "EOL while scanning string literal";
2027 break;
2028 case E_INTR:
2029 if (!PyErr_Occurred())
2030 PyErr_SetNone(PyExc_KeyboardInterrupt);
2031 goto cleanup;
2032 case E_NOMEM:
2033 PyErr_NoMemory();
2034 goto cleanup;
2035 case E_EOF:
2036 msg = "unexpected EOF while parsing";
2037 break;
2038 case E_TABSPACE:
2039 errtype = PyExc_TabError;
2040 msg = "inconsistent use of tabs and spaces in indentation";
2041 break;
2042 case E_OVERFLOW:
2043 msg = "expression too long";
2044 break;
2045 case E_DEDENT:
2046 errtype = PyExc_IndentationError;
2047 msg = "unindent does not match any outer indentation level";
2048 break;
2049 case E_TOODEEP:
2050 errtype = PyExc_IndentationError;
2051 msg = "too many levels of indentation";
2052 break;
2053 case E_DECODE: {
2054 PyObject *type, *value, *tb;
2055 PyErr_Fetch(&type, &value, &tb);
2056 msg = "unknown decode error";
2057 if (value != NULL)
2058 msg_obj = PyObject_Str(value);
2059 Py_XDECREF(type);
2060 Py_XDECREF(value);
2061 Py_XDECREF(tb);
2062 break;
2063 }
2064 case E_LINECONT:
2065 msg = "unexpected character after line continuation character";
2066 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002067
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002068 case E_IDENTIFIER:
2069 msg = "invalid character in identifier";
2070 break;
2071 default:
2072 fprintf(stderr, "error=%d\n", err->error);
2073 msg = "unknown parsing error";
2074 break;
2075 }
2076 /* err->text may not be UTF-8 in case of decoding errors.
2077 Explicitly convert to an object. */
2078 if (!err->text) {
2079 errtext = Py_None;
2080 Py_INCREF(Py_None);
2081 } else {
2082 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
2083 "replace");
2084 }
Victor Stinner2f2ed1f2010-10-16 13:42:53 +00002085 if (err->filename != NULL)
2086 filename = PyUnicode_DecodeFSDefault(err->filename);
2087 else {
2088 Py_INCREF(Py_None);
2089 filename = Py_None;
2090 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002091 if (filename != NULL)
2092 v = Py_BuildValue("(NiiN)", filename,
2093 err->lineno, err->offset, errtext);
2094 else
2095 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002096 if (v != NULL) {
2097 if (msg_obj)
2098 w = Py_BuildValue("(OO)", msg_obj, v);
2099 else
2100 w = Py_BuildValue("(sO)", msg, v);
2101 } else
2102 w = NULL;
2103 Py_XDECREF(v);
2104 PyErr_SetObject(errtype, w);
2105 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002106cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002107 Py_XDECREF(msg_obj);
2108 if (err->text != NULL) {
2109 PyObject_FREE(err->text);
2110 err->text = NULL;
2111 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002112}
2113
2114/* Print fatal error message and abort */
2115
2116void
Tim Peters7c321a82002-07-09 02:57:01 +00002117Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002118{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002119 fprintf(stderr, "Fatal Python error: %s\n", msg);
2120 fflush(stderr); /* it helps in Windows debug build */
2121 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002122 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002123 }
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002124#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002125 {
2126 size_t len = strlen(msg);
2127 WCHAR* buffer;
2128 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002129
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002130 /* Convert the message to wchar_t. This uses a simple one-to-one
2131 conversion, assuming that the this error message actually uses ASCII
2132 only. If this ceases to be true, we will have to convert. */
2133 buffer = alloca( (len+1) * (sizeof *buffer));
2134 for( i=0; i<=len; ++i)
2135 buffer[i] = msg[i];
2136 OutputDebugStringW(L"Fatal Python error: ");
2137 OutputDebugStringW(buffer);
2138 OutputDebugStringW(L"\n");
2139 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002140#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002141 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002142#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002143#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002144 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002145}
2146
2147/* Clean up and exit */
2148
Guido van Rossuma110aa61994-08-29 12:50:44 +00002149#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002150#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002151#endif
2152
Collin Winter670e6922007-03-21 02:57:17 +00002153static void (*pyexitfunc)(void) = NULL;
2154/* For the atexit module. */
2155void _Py_PyAtExit(void (*func)(void))
2156{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002157 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002158}
2159
2160static void
2161call_py_exitfuncs(void)
2162{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002163 if (pyexitfunc == NULL)
2164 return;
Collin Winter670e6922007-03-21 02:57:17 +00002165
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002166 (*pyexitfunc)();
2167 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002168}
2169
Antoine Pitrou011bd622009-10-20 21:52:47 +00002170/* Wait until threading._shutdown completes, provided
2171 the threading module was imported in the first place.
2172 The shutdown routine will wait until all non-daemon
2173 "threading" threads have completed. */
2174static void
2175wait_for_thread_shutdown(void)
2176{
2177#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002178 PyObject *result;
2179 PyThreadState *tstate = PyThreadState_GET();
2180 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2181 "threading");
2182 if (threading == NULL) {
2183 /* threading not imported */
2184 PyErr_Clear();
2185 return;
2186 }
2187 result = PyObject_CallMethod(threading, "_shutdown", "");
2188 if (result == NULL) {
2189 PyErr_WriteUnraisable(threading);
2190 }
2191 else {
2192 Py_DECREF(result);
2193 }
2194 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002195#endif
2196}
2197
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002198#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002199static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002200static int nexitfuncs = 0;
2201
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002202int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002203{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002204 if (nexitfuncs >= NEXITFUNCS)
2205 return -1;
2206 exitfuncs[nexitfuncs++] = func;
2207 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002208}
2209
Guido van Rossumcc283f51997-08-05 02:22:03 +00002210static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002211call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002212{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002213 while (nexitfuncs > 0)
2214 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002215
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002216 fflush(stdout);
2217 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002218}
2219
2220void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002221Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002222{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002223 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002224
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002225 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002226}
2227
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002228static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002229initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002230{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002231#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002232 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002233#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002234#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002235 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002236#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002237#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002238 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002239#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002240 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002241}
2242
Guido van Rossum7433b121997-02-14 19:45:36 +00002243
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002244/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2245 *
2246 * All of the code in this function must only use async-signal-safe functions,
2247 * listed at `man 7 signal` or
2248 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2249 */
2250void
2251_Py_RestoreSignals(void)
2252{
2253#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002254 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002255#endif
2256#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002257 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002258#endif
2259#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002260 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002261#endif
2262}
2263
2264
Guido van Rossum7433b121997-02-14 19:45:36 +00002265/*
2266 * The file descriptor fd is considered ``interactive'' if either
2267 * a) isatty(fd) is TRUE, or
2268 * b) the -i flag was given, and the filename associated with
2269 * the descriptor is NULL or "<stdin>" or "???".
2270 */
2271int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002272Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002273{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002274 if (isatty((int)fileno(fp)))
2275 return 1;
2276 if (!Py_InteractiveFlag)
2277 return 0;
2278 return (filename == NULL) ||
2279 (strcmp(filename, "<stdin>") == 0) ||
2280 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002281}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002282
2283
Tim Petersd08e3822003-04-17 15:24:21 +00002284#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002285#if defined(WIN32) && defined(_MSC_VER)
2286
2287/* Stack checking for Microsoft C */
2288
2289#include <malloc.h>
2290#include <excpt.h>
2291
Fred Drakee8de31c2000-08-31 05:38:39 +00002292/*
2293 * Return non-zero when we run out of memory on the stack; zero otherwise.
2294 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002295int
Fred Drake399739f2000-08-31 05:52:44 +00002296PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002297{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002298 __try {
2299 /* alloca throws a stack overflow exception if there's
2300 not enough space left on the stack */
2301 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2302 return 0;
2303 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2304 EXCEPTION_EXECUTE_HANDLER :
2305 EXCEPTION_CONTINUE_SEARCH) {
2306 int errcode = _resetstkoflw();
2307 if (errcode == 0)
2308 {
2309 Py_FatalError("Could not reset the stack!");
2310 }
2311 }
2312 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002313}
2314
2315#endif /* WIN32 && _MSC_VER */
2316
2317/* Alternate implementations can be added here... */
2318
2319#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002320
2321
2322/* Wrappers around sigaction() or signal(). */
2323
2324PyOS_sighandler_t
2325PyOS_getsig(int sig)
2326{
2327#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002328 struct sigaction context;
2329 if (sigaction(sig, NULL, &context) == -1)
2330 return SIG_ERR;
2331 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002332#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002333 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002334/* Special signal handling for the secure CRT in Visual Studio 2005 */
2335#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002336 switch (sig) {
2337 /* Only these signals are valid */
2338 case SIGINT:
2339 case SIGILL:
2340 case SIGFPE:
2341 case SIGSEGV:
2342 case SIGTERM:
2343 case SIGBREAK:
2344 case SIGABRT:
2345 break;
2346 /* Don't call signal() with other values or it will assert */
2347 default:
2348 return SIG_ERR;
2349 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002350#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002351 handler = signal(sig, SIG_IGN);
2352 if (handler != SIG_ERR)
2353 signal(sig, handler);
2354 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002355#endif
2356}
2357
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002358/*
2359 * All of the code in this function must only use async-signal-safe functions,
2360 * listed at `man 7 signal` or
2361 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2362 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002363PyOS_sighandler_t
2364PyOS_setsig(int sig, PyOS_sighandler_t handler)
2365{
2366#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002367 /* Some code in Modules/signalmodule.c depends on sigaction() being
2368 * used here if HAVE_SIGACTION is defined. Fix that if this code
2369 * changes to invalidate that assumption.
2370 */
2371 struct sigaction context, ocontext;
2372 context.sa_handler = handler;
2373 sigemptyset(&context.sa_mask);
2374 context.sa_flags = 0;
2375 if (sigaction(sig, &context, &ocontext) == -1)
2376 return SIG_ERR;
2377 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002378#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002379 PyOS_sighandler_t oldhandler;
2380 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002381#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002382 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002383#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002384 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002385#endif
2386}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002387
2388/* Deprecated C API functions still provided for binary compatiblity */
2389
2390#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002391PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002392PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2393{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002394 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002395}
2396
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002397#undef PyParser_SimpleParseString
2398PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002399PyParser_SimpleParseString(const char *str, int start)
2400{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002401 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002402}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002403
2404#undef PyRun_AnyFile
2405PyAPI_FUNC(int)
2406PyRun_AnyFile(FILE *fp, const char *name)
2407{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002408 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002409}
2410
2411#undef PyRun_AnyFileEx
2412PyAPI_FUNC(int)
2413PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2414{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002415 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002416}
2417
2418#undef PyRun_AnyFileFlags
2419PyAPI_FUNC(int)
2420PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2421{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002422 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002423}
2424
2425#undef PyRun_File
2426PyAPI_FUNC(PyObject *)
2427PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2428{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002429 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002430}
2431
2432#undef PyRun_FileEx
2433PyAPI_FUNC(PyObject *)
2434PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2435{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002436 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002437}
2438
2439#undef PyRun_FileFlags
2440PyAPI_FUNC(PyObject *)
2441PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002442 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002443{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002444 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002445}
2446
2447#undef PyRun_SimpleFile
2448PyAPI_FUNC(int)
2449PyRun_SimpleFile(FILE *f, const char *p)
2450{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002451 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002452}
2453
2454#undef PyRun_SimpleFileEx
2455PyAPI_FUNC(int)
2456PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2457{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002458 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002459}
2460
2461
2462#undef PyRun_String
2463PyAPI_FUNC(PyObject *)
2464PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2465{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002466 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002467}
2468
2469#undef PyRun_SimpleString
2470PyAPI_FUNC(int)
2471PyRun_SimpleString(const char *s)
2472{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002473 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002474}
2475
2476#undef Py_CompileString
2477PyAPI_FUNC(PyObject *)
2478Py_CompileString(const char *str, const char *p, int s)
2479{
Georg Brandl8334fd92010-12-04 10:26:46 +00002480 return Py_CompileStringExFlags(str, p, s, NULL, -1);
2481}
2482
2483#undef Py_CompileStringFlags
2484PyAPI_FUNC(PyObject *)
2485Py_CompileStringFlags(const char *str, const char *p, int s,
2486 PyCompilerFlags *flags)
2487{
2488 return Py_CompileStringExFlags(str, p, s, flags, -1);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002489}
2490
2491#undef PyRun_InteractiveOne
2492PyAPI_FUNC(int)
2493PyRun_InteractiveOne(FILE *f, const char *p)
2494{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002495 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002496}
2497
2498#undef PyRun_InteractiveLoop
2499PyAPI_FUNC(int)
2500PyRun_InteractiveLoop(FILE *f, const char *p)
2501{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002502 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002503}
2504
2505#ifdef __cplusplus
2506}
2507#endif