blob: cf4e34c33eb42e524c14d0fc76726091981041ed [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} */
Georg Brandl2daf6ae2012-02-20 19:54:16 +010092int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000093
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +020094PyThreadState *_Py_Finalizing = NULL;
95
Christian Heimes33fe8092008-04-13 13:53:33 +000096/* PyModule_GetWarningsModule is no longer necessary as of 2.6
97since _warnings is builtin. This API should not be used. */
98PyObject *
99PyModule_GetWarningsModule(void)
Mark Hammondedd07732003-07-15 23:03:55 +0000100{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000101 return PyImport_ImportModule("warnings");
Mark Hammondedd07732003-07-15 23:03:55 +0000102}
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000103
Guido van Rossum25ce5661997-08-02 03:10:38 +0000104static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000105
Thomas Wouters7e474022000-07-16 12:04:32 +0000106/* API to access the initialized flag -- useful for esoteric use */
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000107
108int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000109Py_IsInitialized(void)
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000110{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000111 return initialized;
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000112}
113
Guido van Rossum25ce5661997-08-02 03:10:38 +0000114/* Global initializations. Can be undone by Py_Finalize(). Don't
115 call this twice without an intervening Py_Finalize() call. When
116 initializations fail, a fatal error is issued and the function does
117 not return. On return, the first thread and interpreter state have
118 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000119
Guido van Rossum25ce5661997-08-02 03:10:38 +0000120 Locking: you must hold the interpreter lock while calling this.
121 (If the lock has not yet been initialized, that's equivalent to
122 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000123
Guido van Rossum25ce5661997-08-02 03:10:38 +0000124*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000125
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000126static int
127add_flag(int flag, const char *envs)
128{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000129 int env = atoi(envs);
130 if (flag < env)
131 flag = env;
132 if (flag < 1)
133 flag = 1;
134 return flag;
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000135}
136
Christian Heimes5833a2f2008-10-30 21:40:04 +0000137static char*
Victor Stinner94908bb2010-08-18 21:23:25 +0000138get_codec_name(const char *encoding)
Christian Heimes5833a2f2008-10-30 21:40:04 +0000139{
Victor Stinner94908bb2010-08-18 21:23:25 +0000140 char *name_utf8, *name_str;
Victor Stinner386fe712010-05-19 00:34:15 +0000141 PyObject *codec, *name = NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000142
Victor Stinner94908bb2010-08-18 21:23:25 +0000143 codec = _PyCodec_Lookup(encoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000144 if (!codec)
145 goto error;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000146
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000147 name = PyObject_GetAttrString(codec, "name");
148 Py_CLEAR(codec);
149 if (!name)
150 goto error;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000151
Victor Stinner94908bb2010-08-18 21:23:25 +0000152 name_utf8 = _PyUnicode_AsString(name);
Victor Stinner9c4efe52011-03-20 23:23:22 +0100153 if (name_utf8 == NULL)
Victor Stinner386fe712010-05-19 00:34:15 +0000154 goto error;
Victor Stinner94908bb2010-08-18 21:23:25 +0000155 name_str = strdup(name_utf8);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000156 Py_DECREF(name);
Victor Stinner94908bb2010-08-18 21:23:25 +0000157 if (name_str == NULL) {
158 PyErr_NoMemory();
159 return NULL;
160 }
161 return name_str;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000162
163error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000164 Py_XDECREF(codec);
Victor Stinner386fe712010-05-19 00:34:15 +0000165 Py_XDECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000166 return NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000167}
Victor Stinner94908bb2010-08-18 21:23:25 +0000168
169#if defined(HAVE_LANGINFO_H) && defined(CODESET)
170static char*
171get_codeset(void)
172{
173 char* codeset = nl_langinfo(CODESET);
174 if (!codeset || codeset[0] == '\0') {
175 PyErr_SetString(PyExc_ValueError, "CODESET is not set or empty");
176 return NULL;
177 }
178 return get_codec_name(codeset);
179}
Christian Heimes5833a2f2008-10-30 21:40:04 +0000180#endif
181
Guido van Rossuma027efa1997-05-05 20:56:21 +0000182void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000183Py_InitializeEx(int install_sigs)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000184{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000185 PyInterpreterState *interp;
186 PyThreadState *tstate;
187 PyObject *bimod, *sysmod, *pstderr;
188 char *p;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000189 extern void _Py_ReadyTypes(void);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000190
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000191 if (initialized)
192 return;
193 initialized = 1;
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200194 _Py_Finalizing = NULL;
Tim Petersd08e3822003-04-17 15:24:21 +0000195
Andrew M. Kuchlingb2ceb3a2010-02-22 23:26:10 +0000196#if defined(HAVE_LANGINFO_H) && defined(HAVE_SETLOCALE)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000197 /* Set up the LC_CTYPE locale, so we can obtain
198 the locale's charset without having to switch
199 locales. */
200 setlocale(LC_CTYPE, "");
Martin v. Löwisd1cd4d42007-08-11 14:02:14 +0000201#endif
202
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000203 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
204 Py_DebugFlag = add_flag(Py_DebugFlag, p);
205 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
206 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
207 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
208 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
209 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0')
210 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);
Georg Brandl2daf6ae2012-02-20 19:54:16 +0100211 /* The variable is only tested for existence here; _PyRandom_Init will
212 check its value further. */
213 if ((p = Py_GETENV("PYTHONHASHSEED")) && *p != '\0')
214 Py_HashRandomizationFlag = add_flag(Py_HashRandomizationFlag, p);
215
216 _PyRandom_Init();
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000217
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000218 interp = PyInterpreterState_New();
219 if (interp == NULL)
220 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000221
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000222 tstate = PyThreadState_New(interp);
223 if (tstate == NULL)
224 Py_FatalError("Py_Initialize: can't make first thread");
225 (void) PyThreadState_Swap(tstate);
Guido van Rossuma027efa1997-05-05 20:56:21 +0000226
Victor Stinner6961bd62010-08-17 22:26:51 +0000227#ifdef WITH_THREAD
Antoine Pitroub0b384b2010-09-20 20:13:48 +0000228 /* We can't call _PyEval_FiniThreads() in Py_Finalize because
229 destroying the GIL might fail when it is being referenced from
230 another running thread (see issue #9901).
231 Instead we destroy the previously created GIL here, which ensures
232 that we can call Py_Initialize / Py_Finalize multiple times. */
233 _PyEval_FiniThreads();
234
235 /* Auto-thread-state API */
Victor Stinner6961bd62010-08-17 22:26:51 +0000236 _PyGILState_Init(interp, tstate);
237#endif /* WITH_THREAD */
238
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000239 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000240
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000241 if (!_PyFrame_Init())
242 Py_FatalError("Py_Initialize: can't init frames");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000243
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000244 if (!_PyLong_Init())
245 Py_FatalError("Py_Initialize: can't init longs");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000246
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000247 if (!PyByteArray_Init())
248 Py_FatalError("Py_Initialize: can't init bytearray");
Neal Norwitz6968b052007-02-27 19:02:19 +0000249
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000250 _PyFloat_Init();
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000251
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000252 interp->modules = PyDict_New();
253 if (interp->modules == NULL)
254 Py_FatalError("Py_Initialize: can't make modules dictionary");
255 interp->modules_reloading = PyDict_New();
256 if (interp->modules_reloading == NULL)
257 Py_FatalError("Py_Initialize: can't make modules_reloading dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000258
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000259 /* Init Unicode implementation; relies on the codec registry */
260 _PyUnicode_Init();
Guido van Rossumc94044c2000-03-10 23:03:54 +0000261
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000262 bimod = _PyBuiltin_Init();
263 if (bimod == NULL)
264 Py_FatalError("Py_Initialize: can't initialize builtins modules");
Victor Stinner49d3f252010-10-17 01:24:53 +0000265 _PyImport_FixupBuiltin(bimod, "builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000266 interp->builtins = PyModule_GetDict(bimod);
267 if (interp->builtins == NULL)
268 Py_FatalError("Py_Initialize: can't initialize builtins dict");
269 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000270
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000271 /* initialize builtin exceptions */
272 _PyExc_Init();
Christian Heimes9a68f8c2007-11-14 00:16:07 +0000273
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000274 sysmod = _PySys_Init();
275 if (sysmod == NULL)
276 Py_FatalError("Py_Initialize: can't initialize sys");
277 interp->sysdict = PyModule_GetDict(sysmod);
278 if (interp->sysdict == NULL)
279 Py_FatalError("Py_Initialize: can't initialize sys dict");
280 Py_INCREF(interp->sysdict);
Victor Stinner49d3f252010-10-17 01:24:53 +0000281 _PyImport_FixupBuiltin(sysmod, "sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000282 PySys_SetPath(Py_GetPath());
283 PyDict_SetItemString(interp->sysdict, "modules",
284 interp->modules);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000285
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000286 /* Set up a preliminary stderr printer until we have enough
287 infrastructure for the io module in place. */
288 pstderr = PyFile_NewStdPrinter(fileno(stderr));
289 if (pstderr == NULL)
290 Py_FatalError("Py_Initialize: can't set preliminary stderr");
291 PySys_SetObject("stderr", pstderr);
292 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000293 Py_DECREF(pstderr);
Guido van Rossum826d8972007-10-30 18:34:07 +0000294
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000295 _PyImport_Init();
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000296
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000297 _PyImportHooks_Init();
Just van Rossum52e14d62002-12-30 22:08:05 +0000298
Victor Stinner7d79b8b2010-05-19 20:40:50 +0000299 /* Initialize _warnings. */
300 _PyWarnings_Init();
301
Alexander Belopolsky6fc4ade2010-08-05 17:34:27 +0000302 _PyTime_Init();
303
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200304 if (initfsencoding(interp) < 0)
305 Py_FatalError("Py_Initialize: unable to load the file system codec");
Martin v. Löwis011e8422009-05-05 04:43:17 +0000306
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000307 if (install_sigs)
308 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000309
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000310 initmain(); /* Module __main__ */
311 if (initstdio() < 0)
312 Py_FatalError(
313 "Py_Initialize: can't initialize sys standard streams");
314
Antoine Pitroucf9f9802010-11-10 13:55:25 +0000315 /* Initialize warnings. */
316 if (PySys_HasWarnOptions()) {
317 PyObject *warnings_module = PyImport_ImportModule("warnings");
318 if (warnings_module == NULL) {
319 fprintf(stderr, "'import warnings' failed; traceback:\n");
320 PyErr_Print();
321 }
322 Py_XDECREF(warnings_module);
323 }
324
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000325 if (!Py_NoSiteFlag)
326 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000327}
328
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000329void
330Py_Initialize(void)
331{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000332 Py_InitializeEx(1);
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000333}
334
335
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000336#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000337extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000338#endif
339
Guido van Rossume8432ac2007-07-09 15:04:50 +0000340/* Flush stdout and stderr */
341
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100342static int
343file_is_closed(PyObject *fobj)
344{
345 int r;
346 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
347 if (tmp == NULL) {
348 PyErr_Clear();
349 return 0;
350 }
351 r = PyObject_IsTrue(tmp);
352 Py_DECREF(tmp);
353 if (r < 0)
354 PyErr_Clear();
355 return r > 0;
356}
357
Neal Norwitz2bad9702007-08-27 06:19:22 +0000358static void
Guido van Rossum1bd21222007-07-10 20:14:13 +0000359flush_std_files(void)
Guido van Rossume8432ac2007-07-09 15:04:50 +0000360{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000361 PyObject *fout = PySys_GetObject("stdout");
362 PyObject *ferr = PySys_GetObject("stderr");
363 PyObject *tmp;
Guido van Rossume8432ac2007-07-09 15:04:50 +0000364
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100365 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000366 tmp = PyObject_CallMethod(fout, "flush", "");
367 if (tmp == NULL)
Antoine Pitroubddc9fe2010-08-08 20:46:42 +0000368 PyErr_WriteUnraisable(fout);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000369 else
370 Py_DECREF(tmp);
371 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000372
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100373 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000374 tmp = PyObject_CallMethod(ferr, "flush", "");
375 if (tmp == NULL)
376 PyErr_Clear();
377 else
378 Py_DECREF(tmp);
379 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000380}
381
Guido van Rossum25ce5661997-08-02 03:10:38 +0000382/* Undo the effect of Py_Initialize().
383
384 Beware: if multiple interpreter and/or thread states exist, these
385 are not wiped out; only the current thread and interpreter state
386 are deleted. But since everything else is deleted, those other
387 interpreter and thread states should no longer be used.
388
389 (XXX We should do better, e.g. wipe out all interpreters and
390 threads.)
391
392 Locking: as above.
393
394*/
395
396void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000397Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000398{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000399 PyInterpreterState *interp;
400 PyThreadState *tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000401
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000402 if (!initialized)
403 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000404
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000405 wait_for_thread_shutdown();
Antoine Pitrou011bd622009-10-20 21:52:47 +0000406
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000407 /* The interpreter is still entirely intact at this point, and the
408 * exit funcs may be relying on that. In particular, if some thread
409 * or exit func is still waiting to do an import, the import machinery
410 * expects Py_IsInitialized() to return true. So don't say the
411 * interpreter is uninitialized until after the exit funcs have run.
412 * Note that Threading.py uses an exit func to do a join on all the
413 * threads created thru it, so this also protects pending imports in
414 * the threads created via Threading.
415 */
416 call_py_exitfuncs();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000417
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000418 /* Get current thread state and interpreter pointer */
419 tstate = PyThreadState_GET();
420 interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000421
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200422 /* Remaining threads (e.g. daemon threads) will automatically exit
423 after taking the GIL (in PyEval_RestoreThread()). */
424 _Py_Finalizing = tstate;
425 initialized = 0;
426
427 /* Flush stdout+stderr */
428 flush_std_files();
429
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000430 /* Disable signal handling */
431 PyOS_FiniInterrupts();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000432
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000433 /* Clear type lookup cache */
434 PyType_ClearCache();
Christian Heimes26855632008-01-27 23:50:43 +0000435
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000436 /* Collect garbage. This may call finalizers; it's nice to call these
437 * before all modules are destroyed.
438 * XXX If a __del__ or weakref callback is triggered here, and tries to
439 * XXX import a module, bad things can happen, because Python no
440 * XXX longer believes it's initialized.
441 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
442 * XXX is easy to provoke that way. I've also seen, e.g.,
443 * XXX Exception exceptions.ImportError: 'No module named sha'
444 * XXX in <function callback at 0x008F5718> ignored
445 * XXX but I'm unclear on exactly how that one happens. In any case,
446 * XXX I haven't seen a real-life report of either of these.
447 */
448 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000449#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000450 /* With COUNT_ALLOCS, it helps to run GC multiple times:
451 each collection might release some types from the type
452 list, so they become garbage. */
453 while (PyGC_Collect() > 0)
454 /* nothing */;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000455#endif
Antoine Pitrou696e0352010-08-08 22:18:46 +0000456 /* We run this while most interpreter state is still alive, so that
457 debug information can be printed out */
458 _PyGC_Fini();
Guido van Rossume13ddc92003-04-17 17:29:22 +0000459
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000460 /* Destroy all modules */
461 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000462
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000463 /* Flush stdout+stderr (again, in case more was printed) */
464 flush_std_files();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000465
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000466 /* Collect final garbage. This disposes of cycles created by
467 * new-style class definitions, for example.
468 * XXX This is disabled because it caused too many problems. If
469 * XXX a __del__ or weakref callback triggers here, Python code has
470 * XXX a hard time running, because even the sys module has been
471 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
472 * XXX One symptom is a sequence of information-free messages
473 * XXX coming from threads (if a __del__ or callback is invoked,
474 * XXX other threads can execute too, and any exception they encounter
475 * XXX triggers a comedy of errors as subsystem after subsystem
476 * XXX fails to find what it *expects* to find in sys to help report
477 * XXX the exception and consequent unexpected failures). I've also
478 * XXX seen segfaults then, after adding print statements to the
479 * XXX Python code getting called.
480 */
Tim Peters1d7323e2003-12-01 21:35:27 +0000481#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000482 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000483#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000484
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000485 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
486 _PyImport_Fini();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000487
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000488 /* Debugging stuff */
Guido van Rossum1707aad1997-12-08 23:43:45 +0000489#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000490 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000491#endif
492
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000493 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000494
Tim Peters9cf25ce2003-04-17 15:21:01 +0000495#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000496 /* Display all objects still alive -- this can invoke arbitrary
497 * __repr__ overrides, so requires a mostly-intact interpreter.
498 * Alas, a lot of stuff may still be alive now that will be cleaned
499 * up later.
500 */
501 if (Py_GETENV("PYTHONDUMPREFS"))
502 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000503#endif /* Py_TRACE_REFS */
504
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000505 /* Clear interpreter state */
506 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000507
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000508 /* Now we decref the exception classes. After this point nothing
509 can raise an exception. That's okay, because each Fini() method
510 below has been checked to make sure no exceptions are ever
511 raised.
512 */
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000513
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000514 _PyExc_Fini();
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000515
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000516 /* Cleanup auto-thread-state */
Christian Heimes7d2ff882007-11-30 14:35:04 +0000517#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000518 _PyGILState_Fini();
Christian Heimes7d2ff882007-11-30 14:35:04 +0000519#endif /* WITH_THREAD */
520
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000521 /* Delete current thread */
522 PyThreadState_Swap(NULL);
523 PyInterpreterState_Delete(interp);
Barry Warsawf242aa02000-05-25 23:09:49 +0000524
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000525 /* Sundry finalizers */
526 PyMethod_Fini();
527 PyFrame_Fini();
528 PyCFunction_Fini();
529 PyTuple_Fini();
530 PyList_Fini();
531 PySet_Fini();
532 PyBytes_Fini();
533 PyByteArray_Fini();
534 PyLong_Fini();
535 PyFloat_Fini();
536 PyDict_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000537
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000538 /* Cleanup Unicode implementation */
539 _PyUnicode_Fini();
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000540
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000541 /* reset file system default encoding */
Victor Stinnerb744ba12010-05-15 12:27:16 +0000542 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000543 free((char*)Py_FileSystemDefaultEncoding);
544 Py_FileSystemDefaultEncoding = NULL;
545 }
Christian Heimesc8967002007-11-30 10:18:26 +0000546
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000547 /* XXX Still allocated:
548 - various static ad-hoc pointers to interned strings
549 - int and float free list blocks
550 - whatever various modules and libraries allocate
551 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000552
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000553 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000554
Tim Peters269b2a62003-04-17 19:52:29 +0000555#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000556 /* Display addresses (& refcnts) of all objects still alive.
557 * An address can be used to find the repr of the object, printed
558 * above by _Py_PrintReferences.
559 */
560 if (Py_GETENV("PYTHONDUMPREFS"))
561 _Py_PrintReferenceAddresses(stderr);
Tim Peters269b2a62003-04-17 19:52:29 +0000562#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000563#ifdef PYMALLOC_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000564 if (Py_GETENV("PYTHONMALLOCSTATS"))
565 _PyObject_DebugMallocStats();
Tim Peters0e871182002-04-13 08:29:14 +0000566#endif
567
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000568 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000569}
570
571/* Create and initialize a new interpreter and thread, and return the
572 new thread. This requires that Py_Initialize() has been called
573 first.
574
575 Unsuccessful initialization yields a NULL pointer. Note that *no*
576 exception information is available even in this case -- the
577 exception information is held in the thread, and there is no
578 thread.
579
580 Locking: as above.
581
582*/
583
584PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000585Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000586{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000587 PyInterpreterState *interp;
588 PyThreadState *tstate, *save_tstate;
589 PyObject *bimod, *sysmod;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000590
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000591 if (!initialized)
592 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000593
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000594 interp = PyInterpreterState_New();
595 if (interp == NULL)
596 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000597
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000598 tstate = PyThreadState_New(interp);
599 if (tstate == NULL) {
600 PyInterpreterState_Delete(interp);
601 return NULL;
602 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000603
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000604 save_tstate = PyThreadState_Swap(tstate);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000605
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000606 /* XXX The following is lax in error checking */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000607
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000608 interp->modules = PyDict_New();
609 interp->modules_reloading = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000610
Victor Stinner49d3f252010-10-17 01:24:53 +0000611 bimod = _PyImport_FindBuiltin("builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000612 if (bimod != NULL) {
613 interp->builtins = PyModule_GetDict(bimod);
614 if (interp->builtins == NULL)
615 goto handle_error;
616 Py_INCREF(interp->builtins);
617 }
Christian Heimes6a27efa2008-10-30 21:48:26 +0000618
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000619 /* initialize builtin exceptions */
620 _PyExc_Init();
Christian Heimes6a27efa2008-10-30 21:48:26 +0000621
Victor Stinner49d3f252010-10-17 01:24:53 +0000622 sysmod = _PyImport_FindBuiltin("sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000623 if (bimod != NULL && sysmod != NULL) {
624 PyObject *pstderr;
625 interp->sysdict = PyModule_GetDict(sysmod);
626 if (interp->sysdict == NULL)
627 goto handle_error;
628 Py_INCREF(interp->sysdict);
629 PySys_SetPath(Py_GetPath());
630 PyDict_SetItemString(interp->sysdict, "modules",
631 interp->modules);
632 /* Set up a preliminary stderr printer until we have enough
633 infrastructure for the io module in place. */
634 pstderr = PyFile_NewStdPrinter(fileno(stderr));
635 if (pstderr == NULL)
636 Py_FatalError("Py_Initialize: can't set preliminary stderr");
637 PySys_SetObject("stderr", pstderr);
638 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000639 Py_DECREF(pstderr);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000640
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000641 _PyImportHooks_Init();
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200642
643 if (initfsencoding(interp) < 0)
644 goto handle_error;
645
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000646 if (initstdio() < 0)
647 Py_FatalError(
648 "Py_Initialize: can't initialize sys standard streams");
649 initmain();
650 if (!Py_NoSiteFlag)
651 initsite();
652 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000653
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000654 if (!PyErr_Occurred())
655 return tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000656
Thomas Wouters89f507f2006-12-13 04:49:30 +0000657handle_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000658 /* Oops, it didn't work. Undo it all. */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000659
Victor Stinner11889352011-04-27 00:20:27 +0200660 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000661 PyThreadState_Clear(tstate);
662 PyThreadState_Swap(save_tstate);
663 PyThreadState_Delete(tstate);
664 PyInterpreterState_Delete(interp);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000665
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000666 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000667}
668
669/* Delete an interpreter and its last thread. This requires that the
670 given thread state is current, that the thread has no remaining
671 frames, and that it is its interpreter's only remaining thread.
672 It is a fatal error to violate these constraints.
673
674 (Py_Finalize() doesn't have these constraints -- it zaps
675 everything, regardless.)
676
677 Locking: as above.
678
679*/
680
681void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000682Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000683{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000684 PyInterpreterState *interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000685
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000686 if (tstate != PyThreadState_GET())
687 Py_FatalError("Py_EndInterpreter: thread is not current");
688 if (tstate->frame != NULL)
689 Py_FatalError("Py_EndInterpreter: thread still has a frame");
690 if (tstate != interp->tstate_head || tstate->next != NULL)
691 Py_FatalError("Py_EndInterpreter: not the last thread");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000692
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000693 PyImport_Cleanup();
694 PyInterpreterState_Clear(interp);
695 PyThreadState_Swap(NULL);
696 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000697}
698
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200699#ifdef MS_WINDOWS
Martin v. Löwis790465f2008-04-05 20:41:37 +0000700static wchar_t *progname = L"python";
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200701#else
702static wchar_t *progname = L"python3";
703#endif
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000704
705void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000706Py_SetProgramName(wchar_t *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000707{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000708 if (pn && *pn)
709 progname = pn;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000710}
711
Martin v. Löwis790465f2008-04-05 20:41:37 +0000712wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000713Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000714{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000715 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000716}
717
Martin v. Löwis790465f2008-04-05 20:41:37 +0000718static wchar_t *default_home = NULL;
719static wchar_t env_home[PATH_MAX+1];
Guido van Rossuma61691e1998-02-06 22:27:24 +0000720
721void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000722Py_SetPythonHome(wchar_t *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000723{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000724 default_home = home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000725}
726
Martin v. Löwis790465f2008-04-05 20:41:37 +0000727wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000728Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000729{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000730 wchar_t *home = default_home;
731 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
732 char* chome = Py_GETENV("PYTHONHOME");
733 if (chome) {
734 size_t r = mbstowcs(env_home, chome, PATH_MAX+1);
735 if (r != (size_t)-1 && r <= PATH_MAX)
736 home = env_home;
737 }
Martin v. Löwis790465f2008-04-05 20:41:37 +0000738
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000739 }
740 return home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000741}
742
Guido van Rossum6135a871995-01-09 17:53:26 +0000743/* Create __main__ module */
744
745static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000746initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000747{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000748 PyObject *m, *d;
749 m = PyImport_AddModule("__main__");
750 if (m == NULL)
751 Py_FatalError("can't create __main__ module");
752 d = PyModule_GetDict(m);
753 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
754 PyObject *bimod = PyImport_ImportModule("builtins");
755 if (bimod == NULL ||
756 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
757 Py_FatalError("can't add __builtins__ to __main__");
758 Py_DECREF(bimod);
759 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000760}
761
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200762static int
763initfsencoding(PyInterpreterState *interp)
Victor Stinnerb744ba12010-05-15 12:27:16 +0000764{
765 PyObject *codec;
766#if defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94908bb2010-08-18 21:23:25 +0000767 char *codeset = NULL;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000768
Victor Stinner7f84ab52010-06-11 00:36:33 +0000769 if (Py_FileSystemDefaultEncoding == NULL) {
Victor Stinner8f6b6b02010-10-13 22:02:27 +0000770 /* On Unix, set the file system encoding according to the
771 user's preference, if the CODESET names a well-known
772 Python codec, and Py_FileSystemDefaultEncoding isn't
Victor Stinnere4743092010-10-19 00:05:51 +0000773 initialized by other means. */
Victor Stinner8f6b6b02010-10-13 22:02:27 +0000774 codeset = get_codeset();
Victor Stinnere4743092010-10-19 00:05:51 +0000775 if (codeset == NULL)
776 Py_FatalError("Py_Initialize: Unable to get the locale encoding");
Victor Stinnerb744ba12010-05-15 12:27:16 +0000777
Victor Stinnere4743092010-10-19 00:05:51 +0000778 Py_FileSystemDefaultEncoding = codeset;
779 Py_HasFileSystemDefaultEncoding = 0;
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200780 interp->fscodec_initialized = 1;
781 return 0;
Victor Stinner7f84ab52010-06-11 00:36:33 +0000782 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000783#endif
784
785 /* the encoding is mbcs, utf-8 or ascii */
786 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
787 if (!codec) {
788 /* Such error can only occurs in critical situations: no more
789 * memory, import a module of the standard library failed,
790 * etc. */
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200791 return -1;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000792 }
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200793 Py_DECREF(codec);
794 interp->fscodec_initialized = 1;
795 return 0;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000796}
797
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000798/* Import the site module (not into __main__ though) */
799
800static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000801initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000802{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000803 PyObject *m;
804 m = PyImport_ImportModule("site");
805 if (m == NULL) {
806 PyErr_Print();
807 Py_Finalize();
808 exit(1);
809 }
810 else {
811 Py_DECREF(m);
812 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000813}
814
Antoine Pitrou05608432009-01-09 18:53:14 +0000815static PyObject*
816create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000817 int fd, int write_mode, char* name,
818 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +0000819{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000820 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
821 const char* mode;
Victor Stinner02bfdb32011-02-23 12:10:23 +0000822 const char* newline;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000823 PyObject *line_buffering;
824 int buffering, isatty;
Antoine Pitrou05608432009-01-09 18:53:14 +0000825
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000826 /* stdin is always opened in buffered mode, first because it shouldn't
827 make a difference in common use cases, second because TextIOWrapper
828 depends on the presence of a read1() method which only exists on
829 buffered streams.
830 */
831 if (Py_UnbufferedStdioFlag && write_mode)
832 buffering = 0;
833 else
834 buffering = -1;
835 if (write_mode)
836 mode = "wb";
837 else
838 mode = "rb";
839 buf = PyObject_CallMethod(io, "open", "isiOOOi",
840 fd, mode, buffering,
841 Py_None, Py_None, Py_None, 0);
842 if (buf == NULL)
843 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000844
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000845 if (buffering) {
846 raw = PyObject_GetAttrString(buf, "raw");
847 if (raw == NULL)
848 goto error;
849 }
850 else {
851 raw = buf;
852 Py_INCREF(raw);
853 }
Antoine Pitrou05608432009-01-09 18:53:14 +0000854
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000855 text = PyUnicode_FromString(name);
856 if (text == NULL || PyObject_SetAttrString(raw, "name", text) < 0)
857 goto error;
858 res = PyObject_CallMethod(raw, "isatty", "");
859 if (res == NULL)
860 goto error;
861 isatty = PyObject_IsTrue(res);
862 Py_DECREF(res);
863 if (isatty == -1)
864 goto error;
865 if (isatty || Py_UnbufferedStdioFlag)
866 line_buffering = Py_True;
867 else
868 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +0000869
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000870 Py_CLEAR(raw);
871 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +0000872
Victor Stinner02bfdb32011-02-23 12:10:23 +0000873#ifdef MS_WINDOWS
Victor Stinner90ef7472012-08-04 01:37:32 +0200874 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
875 newlines to "\n".
876 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
877 newline = NULL;
878#else
879 /* sys.stdin: split lines at "\n".
880 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
881 newline = "\n";
Victor Stinner02bfdb32011-02-23 12:10:23 +0000882#endif
883
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000884 stream = PyObject_CallMethod(io, "TextIOWrapper", "OsssO",
885 buf, encoding, errors,
Victor Stinner02bfdb32011-02-23 12:10:23 +0000886 newline, line_buffering);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000887 Py_CLEAR(buf);
888 if (stream == NULL)
889 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000890
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000891 if (write_mode)
892 mode = "w";
893 else
894 mode = "r";
895 text = PyUnicode_FromString(mode);
896 if (!text || PyObject_SetAttrString(stream, "mode", text) < 0)
897 goto error;
898 Py_CLEAR(text);
899 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +0000900
901error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000902 Py_XDECREF(buf);
903 Py_XDECREF(stream);
904 Py_XDECREF(text);
905 Py_XDECREF(raw);
906 return NULL;
Antoine Pitrou05608432009-01-09 18:53:14 +0000907}
908
Antoine Pitrou11942a52011-11-28 19:08:36 +0100909static int
910is_valid_fd(int fd)
911{
912 int dummy_fd;
913 if (fd < 0 || !_PyVerify_fd(fd))
914 return 0;
915 dummy_fd = dup(fd);
916 if (dummy_fd < 0)
917 return 0;
918 close(dummy_fd);
919 return 1;
920}
921
Georg Brandl1a3284e2007-12-02 09:40:06 +0000922/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000923static int
924initstdio(void)
925{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000926 PyObject *iomod = NULL, *wrapper;
927 PyObject *bimod = NULL;
928 PyObject *m;
929 PyObject *std = NULL;
930 int status = 0, fd;
931 PyObject * encoding_attr;
932 char *encoding = NULL, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000933
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000934 /* Hack to avoid a nasty recursion issue when Python is invoked
935 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
936 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
937 goto error;
938 }
939 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000940
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000941 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
942 goto error;
943 }
944 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000945
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000946 if (!(bimod = PyImport_ImportModule("builtins"))) {
947 goto error;
948 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000949
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000950 if (!(iomod = PyImport_ImportModule("io"))) {
951 goto error;
952 }
953 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
954 goto error;
955 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000956
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000957 /* Set builtins.open */
958 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
Antoine Pitrou5a96b522010-11-20 19:50:57 +0000959 Py_DECREF(wrapper);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000960 goto error;
961 }
Antoine Pitrou5a96b522010-11-20 19:50:57 +0000962 Py_DECREF(wrapper);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000963
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000964 encoding = Py_GETENV("PYTHONIOENCODING");
965 errors = NULL;
966 if (encoding) {
967 encoding = strdup(encoding);
968 errors = strchr(encoding, ':');
969 if (errors) {
970 *errors = '\0';
971 errors++;
972 }
973 }
Martin v. Löwis0f599892008-06-02 11:13:03 +0000974
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000975 /* Set sys.stdin */
976 fd = fileno(stdin);
977 /* Under some conditions stdin, stdout and stderr may not be connected
978 * and fileno() may point to an invalid file descriptor. For example
979 * GUI apps don't have valid standard streams by default.
980 */
Antoine Pitrou11942a52011-11-28 19:08:36 +0100981 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000982 std = Py_None;
983 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000984 }
985 else {
986 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
987 if (std == NULL)
988 goto error;
989 } /* if (fd < 0) */
990 PySys_SetObject("__stdin__", std);
991 PySys_SetObject("stdin", std);
992 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000993
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000994 /* Set sys.stdout */
995 fd = fileno(stdout);
Antoine Pitrou11942a52011-11-28 19:08:36 +0100996 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000997 std = Py_None;
998 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000999 }
1000 else {
1001 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1002 if (std == NULL)
1003 goto error;
1004 } /* if (fd < 0) */
1005 PySys_SetObject("__stdout__", std);
1006 PySys_SetObject("stdout", std);
1007 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001008
Guido van Rossum98297ee2007-11-06 21:34:58 +00001009#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001010 /* Set sys.stderr, replaces the preliminary stderr */
1011 fd = fileno(stderr);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001012 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001013 std = Py_None;
1014 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001015 }
1016 else {
1017 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1018 if (std == NULL)
1019 goto error;
1020 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +00001021
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001022 /* Same as hack above, pre-import stderr's codec to avoid recursion
1023 when import.c tries to write to stderr in verbose mode. */
1024 encoding_attr = PyObject_GetAttrString(std, "encoding");
1025 if (encoding_attr != NULL) {
1026 const char * encoding;
1027 encoding = _PyUnicode_AsString(encoding_attr);
1028 if (encoding != NULL) {
Antoine Pitrou2fabfac2012-01-18 15:14:46 +01001029 PyObject *codec_info = _PyCodec_Lookup(encoding);
1030 Py_XDECREF(codec_info);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001031 }
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +00001032 Py_DECREF(encoding_attr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001033 }
1034 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +00001035
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001036 PySys_SetObject("__stderr__", std);
1037 PySys_SetObject("stderr", std);
1038 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001039#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001040
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001041 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001042 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001043 status = -1;
1044 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001045
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001046 if (encoding)
1047 free(encoding);
1048 Py_XDECREF(bimod);
1049 Py_XDECREF(iomod);
1050 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001051}
1052
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001053/* Parse input from a file and execute it */
1054
1055int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001056PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001057 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001058{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001059 if (filename == NULL)
1060 filename = "???";
1061 if (Py_FdIsInteractive(fp, filename)) {
1062 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1063 if (closeit)
1064 fclose(fp);
1065 return err;
1066 }
1067 else
1068 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001069}
1070
1071int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001072PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001073{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001074 PyObject *v;
1075 int ret;
1076 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001077
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001078 if (flags == NULL) {
1079 flags = &local_flags;
1080 local_flags.cf_flags = 0;
1081 }
1082 v = PySys_GetObject("ps1");
1083 if (v == NULL) {
1084 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
1085 Py_XDECREF(v);
1086 }
1087 v = PySys_GetObject("ps2");
1088 if (v == NULL) {
1089 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
1090 Py_XDECREF(v);
1091 }
1092 for (;;) {
1093 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
1094 PRINT_TOTAL_REFS();
1095 if (ret == E_EOF)
1096 return 0;
1097 /*
1098 if (ret == E_NOMEM)
1099 return -1;
1100 */
1101 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001102}
1103
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001104/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001105static int PARSER_FLAGS(PyCompilerFlags *flags)
1106{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001107 int parser_flags = 0;
1108 if (!flags)
1109 return 0;
1110 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1111 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1112 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1113 parser_flags |= PyPARSE_IGNORE_COOKIE;
1114 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1115 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1116 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001117}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001118
Thomas Wouters89f507f2006-12-13 04:49:30 +00001119#if 0
1120/* Keep an example of flags with future keyword support. */
1121#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001122 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1123 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1124 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1125 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001126#endif
1127
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001128int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001129PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001130{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001131 PyObject *m, *d, *v, *w, *oenc = NULL;
1132 mod_ty mod;
1133 PyArena *arena;
1134 char *ps1 = "", *ps2 = "", *enc = NULL;
1135 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +00001136
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001137 if (fp == stdin) {
1138 /* Fetch encoding from sys.stdin */
1139 v = PySys_GetObject("stdin");
1140 if (v == NULL || v == Py_None)
1141 return -1;
1142 oenc = PyObject_GetAttrString(v, "encoding");
1143 if (!oenc)
1144 return -1;
1145 enc = _PyUnicode_AsString(oenc);
Victor Stinner386fe712010-05-19 00:34:15 +00001146 if (enc == NULL)
1147 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001148 }
1149 v = PySys_GetObject("ps1");
1150 if (v != NULL) {
1151 v = PyObject_Str(v);
1152 if (v == NULL)
1153 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001154 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001155 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001156 if (ps1 == NULL) {
1157 PyErr_Clear();
1158 ps1 = "";
1159 }
1160 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001161 }
1162 w = PySys_GetObject("ps2");
1163 if (w != NULL) {
1164 w = PyObject_Str(w);
1165 if (w == NULL)
1166 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001167 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001168 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001169 if (ps2 == NULL) {
1170 PyErr_Clear();
1171 ps2 = "";
1172 }
1173 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001174 }
1175 arena = PyArena_New();
1176 if (arena == NULL) {
1177 Py_XDECREF(v);
1178 Py_XDECREF(w);
1179 Py_XDECREF(oenc);
1180 return -1;
1181 }
1182 mod = PyParser_ASTFromFile(fp, filename, enc,
1183 Py_single_input, ps1, ps2,
1184 flags, &errcode, arena);
1185 Py_XDECREF(v);
1186 Py_XDECREF(w);
1187 Py_XDECREF(oenc);
1188 if (mod == NULL) {
1189 PyArena_Free(arena);
1190 if (errcode == E_EOF) {
1191 PyErr_Clear();
1192 return E_EOF;
1193 }
1194 PyErr_Print();
1195 return -1;
1196 }
1197 m = PyImport_AddModule("__main__");
1198 if (m == NULL) {
1199 PyArena_Free(arena);
1200 return -1;
1201 }
1202 d = PyModule_GetDict(m);
1203 v = run_mod(mod, filename, d, d, flags, arena);
1204 PyArena_Free(arena);
1205 flush_io();
1206 if (v == NULL) {
1207 PyErr_Print();
1208 return -1;
1209 }
1210 Py_DECREF(v);
1211 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001212}
1213
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001214/* Check whether a file maybe a pyc file: Look at the extension,
1215 the file type, and, if we may close it, at the first few bytes. */
1216
1217static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001218maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001219{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001220 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1221 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001222
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001223 /* Only look into the file if we are allowed to close it, since
1224 it then should also be seekable. */
1225 if (closeit) {
1226 /* Read only two bytes of the magic. If the file was opened in
1227 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1228 be read as they are on disk. */
1229 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1230 unsigned char buf[2];
1231 /* Mess: In case of -x, the stream is NOT at its start now,
1232 and ungetc() was used to push back the first newline,
1233 which makes the current stream position formally undefined,
1234 and a x-platform nightmare.
1235 Unfortunately, we have no direct way to know whether -x
1236 was specified. So we use a terrible hack: if the current
1237 stream position is not 0, we assume -x was specified, and
1238 give up. Bug 132850 on SourceForge spells out the
1239 hopelessness of trying anything else (fseek and ftell
1240 don't work predictably x-platform for text-mode files).
1241 */
1242 int ispyc = 0;
1243 if (ftell(fp) == 0) {
1244 if (fread(buf, 1, 2, fp) == 2 &&
1245 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1246 ispyc = 1;
1247 rewind(fp);
1248 }
1249 return ispyc;
1250 }
1251 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001252}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001253
Guido van Rossum0df002c2000-08-27 19:21:52 +00001254int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001255PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001256 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001257{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001258 PyObject *m, *d, *v;
1259 const char *ext;
Victor Stinner0fcab4a2011-01-04 12:59:15 +00001260 int set_file_name = 0, ret;
1261 size_t len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001262
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001263 m = PyImport_AddModule("__main__");
1264 if (m == NULL)
1265 return -1;
1266 d = PyModule_GetDict(m);
1267 if (PyDict_GetItemString(d, "__file__") == NULL) {
1268 PyObject *f;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001269 f = PyUnicode_DecodeFSDefault(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001270 if (f == NULL)
1271 return -1;
1272 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1273 Py_DECREF(f);
1274 return -1;
1275 }
Barry Warsaw916048d2011-09-20 14:45:44 -04001276 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0) {
1277 Py_DECREF(f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001278 return -1;
Barry Warsaw916048d2011-09-20 14:45:44 -04001279 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001280 set_file_name = 1;
1281 Py_DECREF(f);
1282 }
1283 len = strlen(filename);
1284 ext = filename + len - (len > 4 ? 4 : 0);
1285 if (maybe_pyc_file(fp, filename, ext, closeit)) {
1286 /* Try to run a pyc file. First, re-open in binary */
1287 if (closeit)
1288 fclose(fp);
1289 if ((fp = fopen(filename, "rb")) == NULL) {
1290 fprintf(stderr, "python: Can't reopen .pyc file\n");
1291 ret = -1;
1292 goto done;
1293 }
1294 /* Turn on optimization if a .pyo file is given */
1295 if (strcmp(ext, ".pyo") == 0)
1296 Py_OptimizeFlag = 1;
1297 v = run_pyc_file(fp, filename, d, d, flags);
1298 } else {
1299 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1300 closeit, flags);
1301 }
1302 flush_io();
1303 if (v == NULL) {
1304 PyErr_Print();
1305 ret = -1;
1306 goto done;
1307 }
1308 Py_DECREF(v);
1309 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001310 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001311 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1312 PyErr_Clear();
1313 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001314}
1315
1316int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001317PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001318{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001319 PyObject *m, *d, *v;
1320 m = PyImport_AddModule("__main__");
1321 if (m == NULL)
1322 return -1;
1323 d = PyModule_GetDict(m);
1324 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1325 if (v == NULL) {
1326 PyErr_Print();
1327 return -1;
1328 }
1329 Py_DECREF(v);
1330 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001331}
1332
Barry Warsaw035574d1997-08-29 22:07:17 +00001333static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001334parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001335 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001336{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001337 long hold;
1338 PyObject *v;
Barry Warsaw035574d1997-08-29 22:07:17 +00001339
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001340 /* old style errors */
1341 if (PyTuple_Check(err))
1342 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
1343 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001344
Benjamin Peterson80d50422012-04-03 00:30:38 -04001345 *message = NULL;
1346
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001347 /* new style errors. `err' is an instance */
Benjamin Peterson80d50422012-04-03 00:30:38 -04001348 *message = PyObject_GetAttrString(err, "msg");
1349 if (!*message)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001350 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001351
Benjamin Peterson80d50422012-04-03 00:30:38 -04001352 v = PyObject_GetAttrString(err, "filename");
1353 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001354 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001355 if (v == Py_None) {
1356 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001357 *filename = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001358 }
1359 else {
1360 *filename = _PyUnicode_AsString(v);
1361 Py_DECREF(v);
1362 if (!*filename)
1363 goto finally;
1364 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001365
Benjamin Peterson80d50422012-04-03 00:30:38 -04001366 v = PyObject_GetAttrString(err, "lineno");
1367 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001368 goto finally;
1369 hold = PyLong_AsLong(v);
1370 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001371 if (hold < 0 && PyErr_Occurred())
1372 goto finally;
1373 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001374
Benjamin Peterson80d50422012-04-03 00:30:38 -04001375 v = PyObject_GetAttrString(err, "offset");
1376 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001377 goto finally;
1378 if (v == Py_None) {
1379 *offset = -1;
1380 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001381 } else {
1382 hold = PyLong_AsLong(v);
1383 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001384 if (hold < 0 && PyErr_Occurred())
1385 goto finally;
1386 *offset = (int)hold;
1387 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001388
Benjamin Peterson80d50422012-04-03 00:30:38 -04001389 v = PyObject_GetAttrString(err, "text");
1390 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001391 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001392 if (v == Py_None) {
1393 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001394 *text = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001395 }
1396 else {
1397 *text = _PyUnicode_AsString(v);
1398 Py_DECREF(v);
1399 if (!*text)
1400 goto finally;
1401 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001402 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001403
1404finally:
Benjamin Peterson80d50422012-04-03 00:30:38 -04001405 Py_XDECREF(*message);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001406 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001407}
1408
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001409void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001410PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001411{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001412 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001413}
1414
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001415static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001416print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001417{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001418 char *nl;
1419 if (offset >= 0) {
Benjamin Petersona95e9772010-10-29 03:28:14 +00001420 if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n')
1421 offset--;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001422 for (;;) {
1423 nl = strchr(text, '\n');
1424 if (nl == NULL || nl-text >= offset)
1425 break;
1426 offset -= (int)(nl+1-text);
1427 text = nl+1;
1428 }
1429 while (*text == ' ' || *text == '\t') {
1430 text++;
1431 offset--;
1432 }
1433 }
1434 PyFile_WriteString(" ", f);
1435 PyFile_WriteString(text, f);
1436 if (*text == '\0' || text[strlen(text)-1] != '\n')
1437 PyFile_WriteString("\n", f);
1438 if (offset == -1)
1439 return;
1440 PyFile_WriteString(" ", f);
Benjamin Petersona95e9772010-10-29 03:28:14 +00001441 while (--offset > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001442 PyFile_WriteString(" ", f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001443 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001444}
1445
Guido van Rossum66e8e862001-03-23 17:54:43 +00001446static void
1447handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001448{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001449 PyObject *exception, *value, *tb;
1450 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001451
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001452 if (Py_InspectFlag)
1453 /* Don't exit if -i flag was given. This flag is set to 0
1454 * when entering interactive mode for inspecting. */
1455 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001456
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001457 PyErr_Fetch(&exception, &value, &tb);
1458 fflush(stdout);
1459 if (value == NULL || value == Py_None)
1460 goto done;
1461 if (PyExceptionInstance_Check(value)) {
1462 /* The error code should be in the `code' attribute. */
1463 PyObject *code = PyObject_GetAttrString(value, "code");
1464 if (code) {
1465 Py_DECREF(value);
1466 value = code;
1467 if (value == Py_None)
1468 goto done;
1469 }
1470 /* If we failed to dig out the 'code' attribute,
1471 just let the else clause below print the error. */
1472 }
1473 if (PyLong_Check(value))
1474 exitcode = (int)PyLong_AsLong(value);
1475 else {
Victor Stinnere9fb3192010-05-17 08:58:51 +00001476 PyObject *sys_stderr = PySys_GetObject("stderr");
Victor Stinner7126dbc2010-05-21 23:45:42 +00001477 if (sys_stderr != NULL && sys_stderr != Py_None) {
1478 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1479 } else {
1480 PyObject_Print(value, stderr, Py_PRINT_RAW);
1481 fflush(stderr);
1482 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001483 PySys_WriteStderr("\n");
1484 exitcode = 1;
1485 }
Tim Peterscf615b52003-04-19 18:47:02 +00001486 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001487 /* Restore and clear the exception info, in order to properly decref
1488 * the exception, value, and traceback. If we just exit instead,
1489 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1490 * some finalizers from running.
1491 */
1492 PyErr_Restore(exception, value, tb);
1493 PyErr_Clear();
1494 Py_Exit(exitcode);
1495 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001496}
1497
1498void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001499PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001500{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001501 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001502
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001503 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1504 handle_system_exit();
1505 }
1506 PyErr_Fetch(&exception, &v, &tb);
1507 if (exception == NULL)
1508 return;
1509 PyErr_NormalizeException(&exception, &v, &tb);
1510 if (tb == NULL) {
1511 tb = Py_None;
1512 Py_INCREF(tb);
1513 }
1514 PyException_SetTraceback(v, tb);
1515 if (exception == NULL)
1516 return;
1517 /* Now we know v != NULL too */
1518 if (set_sys_last_vars) {
1519 PySys_SetObject("last_type", exception);
1520 PySys_SetObject("last_value", v);
1521 PySys_SetObject("last_traceback", tb);
1522 }
1523 hook = PySys_GetObject("excepthook");
1524 if (hook) {
1525 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1526 PyObject *result = PyEval_CallObject(hook, args);
1527 if (result == NULL) {
1528 PyObject *exception2, *v2, *tb2;
1529 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1530 handle_system_exit();
1531 }
1532 PyErr_Fetch(&exception2, &v2, &tb2);
1533 PyErr_NormalizeException(&exception2, &v2, &tb2);
1534 /* It should not be possible for exception2 or v2
1535 to be NULL. However PyErr_Display() can't
1536 tolerate NULLs, so just be safe. */
1537 if (exception2 == NULL) {
1538 exception2 = Py_None;
1539 Py_INCREF(exception2);
1540 }
1541 if (v2 == NULL) {
1542 v2 = Py_None;
1543 Py_INCREF(v2);
1544 }
1545 fflush(stdout);
1546 PySys_WriteStderr("Error in sys.excepthook:\n");
1547 PyErr_Display(exception2, v2, tb2);
1548 PySys_WriteStderr("\nOriginal exception was:\n");
1549 PyErr_Display(exception, v, tb);
1550 Py_DECREF(exception2);
1551 Py_DECREF(v2);
1552 Py_XDECREF(tb2);
1553 }
1554 Py_XDECREF(result);
1555 Py_XDECREF(args);
1556 } else {
1557 PySys_WriteStderr("sys.excepthook is missing\n");
1558 PyErr_Display(exception, v, tb);
1559 }
1560 Py_XDECREF(exception);
1561 Py_XDECREF(v);
1562 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001563}
1564
Benjamin Petersone6528212008-07-15 15:32:09 +00001565static void
1566print_exception(PyObject *f, PyObject *value)
1567{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001568 int err = 0;
1569 PyObject *type, *tb;
Benjamin Petersone6528212008-07-15 15:32:09 +00001570
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001571 if (!PyExceptionInstance_Check(value)) {
1572 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1573 PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1574 PyFile_WriteString(" found\n", f);
1575 return;
1576 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001577
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001578 Py_INCREF(value);
1579 fflush(stdout);
1580 type = (PyObject *) Py_TYPE(value);
1581 tb = PyException_GetTraceback(value);
1582 if (tb && tb != Py_None)
1583 err = PyTraceBack_Print(tb, f);
1584 if (err == 0 &&
1585 PyObject_HasAttrString(value, "print_file_and_line"))
1586 {
1587 PyObject *message;
1588 const char *filename, *text;
1589 int lineno, offset;
1590 if (!parse_syntax_error(value, &message, &filename,
1591 &lineno, &offset, &text))
1592 PyErr_Clear();
1593 else {
1594 char buf[10];
1595 PyFile_WriteString(" File \"", f);
1596 if (filename == NULL)
1597 PyFile_WriteString("<string>", f);
1598 else
1599 PyFile_WriteString(filename, f);
1600 PyFile_WriteString("\", line ", f);
1601 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
1602 PyFile_WriteString(buf, f);
1603 PyFile_WriteString("\n", f);
1604 if (text != NULL)
1605 print_error_text(f, offset, text);
1606 Py_DECREF(value);
1607 value = message;
1608 /* Can't be bothered to check all those
1609 PyFile_WriteString() calls */
1610 if (PyErr_Occurred())
1611 err = -1;
1612 }
1613 }
1614 if (err) {
1615 /* Don't do anything else */
1616 }
1617 else {
1618 PyObject* moduleName;
1619 char* className;
1620 assert(PyExceptionClass_Check(type));
1621 className = PyExceptionClass_Name(type);
1622 if (className != NULL) {
1623 char *dot = strrchr(className, '.');
1624 if (dot != NULL)
1625 className = dot+1;
1626 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001627
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001628 moduleName = PyObject_GetAttrString(type, "__module__");
1629 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1630 {
1631 Py_DECREF(moduleName);
1632 err = PyFile_WriteString("<unknown>", f);
1633 }
1634 else {
1635 char* modstr = _PyUnicode_AsString(moduleName);
1636 if (modstr && strcmp(modstr, "builtins"))
1637 {
1638 err = PyFile_WriteString(modstr, f);
1639 err += PyFile_WriteString(".", f);
1640 }
1641 Py_DECREF(moduleName);
1642 }
1643 if (err == 0) {
1644 if (className == NULL)
1645 err = PyFile_WriteString("<unknown>", f);
1646 else
1647 err = PyFile_WriteString(className, f);
1648 }
1649 }
1650 if (err == 0 && (value != Py_None)) {
1651 PyObject *s = PyObject_Str(value);
1652 /* only print colon if the str() of the
1653 object is not the empty string
1654 */
1655 if (s == NULL)
1656 err = -1;
1657 else if (!PyUnicode_Check(s) ||
1658 PyUnicode_GetSize(s) != 0)
1659 err = PyFile_WriteString(": ", f);
1660 if (err == 0)
1661 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1662 Py_XDECREF(s);
1663 }
1664 /* try to write a newline in any case */
1665 err += PyFile_WriteString("\n", f);
1666 Py_XDECREF(tb);
1667 Py_DECREF(value);
1668 /* If an error happened here, don't show it.
1669 XXX This is wrong, but too many callers rely on this behavior. */
1670 if (err != 0)
1671 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001672}
1673
1674static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001675 "\nThe above exception was the direct cause "
1676 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001677
1678static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001679 "\nDuring handling of the above exception, "
1680 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001681
1682static void
1683print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
1684{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001685 int err = 0, res;
1686 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00001687
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001688 if (seen != NULL) {
1689 /* Exception chaining */
1690 if (PySet_Add(seen, value) == -1)
1691 PyErr_Clear();
1692 else if (PyExceptionInstance_Check(value)) {
1693 cause = PyException_GetCause(value);
1694 context = PyException_GetContext(value);
1695 if (cause) {
1696 res = PySet_Contains(seen, cause);
1697 if (res == -1)
1698 PyErr_Clear();
1699 if (res == 0) {
1700 print_exception_recursive(
1701 f, cause, seen);
1702 err |= PyFile_WriteString(
1703 cause_message, f);
1704 }
1705 }
1706 else if (context) {
1707 res = PySet_Contains(seen, context);
1708 if (res == -1)
1709 PyErr_Clear();
1710 if (res == 0) {
1711 print_exception_recursive(
1712 f, context, seen);
1713 err |= PyFile_WriteString(
1714 context_message, f);
1715 }
1716 }
1717 Py_XDECREF(context);
1718 Py_XDECREF(cause);
1719 }
1720 }
1721 print_exception(f, value);
1722 if (err != 0)
1723 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001724}
1725
Thomas Wouters477c8d52006-05-27 19:21:47 +00001726void
1727PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001728{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001729 PyObject *seen;
1730 PyObject *f = PySys_GetObject("stderr");
1731 if (f == Py_None) {
1732 /* pass */
1733 }
1734 else if (f == NULL) {
1735 _PyObject_Dump(value);
1736 fprintf(stderr, "lost sys.stderr\n");
1737 }
1738 else {
1739 /* We choose to ignore seen being possibly NULL, and report
1740 at least the main exception (it could be a MemoryError).
1741 */
1742 seen = PySet_New(NULL);
1743 if (seen == NULL)
1744 PyErr_Clear();
1745 print_exception_recursive(f, value, seen);
1746 Py_XDECREF(seen);
1747 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001748}
1749
Guido van Rossum82598051997-03-05 00:20:32 +00001750PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001751PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001752 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001753{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001754 PyObject *ret = NULL;
1755 mod_ty mod;
1756 PyArena *arena = PyArena_New();
1757 if (arena == NULL)
1758 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001759
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001760 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
1761 if (mod != NULL)
1762 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
1763 PyArena_Free(arena);
1764 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001765}
1766
1767PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001768PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001769 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001770{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001771 PyObject *ret;
1772 mod_ty mod;
1773 PyArena *arena = PyArena_New();
1774 if (arena == NULL)
1775 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001776
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001777 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
1778 flags, NULL, arena);
1779 if (closeit)
1780 fclose(fp);
1781 if (mod == NULL) {
1782 PyArena_Free(arena);
1783 return NULL;
1784 }
1785 ret = run_mod(mod, filename, globals, locals, flags, arena);
1786 PyArena_Free(arena);
1787 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001788}
1789
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001790static void
1791flush_io(void)
1792{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001793 PyObject *f, *r;
1794 PyObject *type, *value, *traceback;
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001795
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001796 /* Save the current exception */
1797 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001798
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001799 f = PySys_GetObject("stderr");
1800 if (f != NULL) {
1801 r = PyObject_CallMethod(f, "flush", "");
1802 if (r)
1803 Py_DECREF(r);
1804 else
1805 PyErr_Clear();
1806 }
1807 f = PySys_GetObject("stdout");
1808 if (f != NULL) {
1809 r = PyObject_CallMethod(f, "flush", "");
1810 if (r)
1811 Py_DECREF(r);
1812 else
1813 PyErr_Clear();
1814 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001815
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001816 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001817}
1818
Guido van Rossum82598051997-03-05 00:20:32 +00001819static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001820run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001821 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001822{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001823 PyCodeObject *co;
1824 PyObject *v;
1825 co = PyAST_Compile(mod, filename, flags, arena);
1826 if (co == NULL)
1827 return NULL;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001828 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001829 Py_DECREF(co);
1830 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001831}
1832
Guido van Rossum82598051997-03-05 00:20:32 +00001833static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001834run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001835 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001836{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001837 PyCodeObject *co;
1838 PyObject *v;
1839 long magic;
1840 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001841
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001842 magic = PyMarshal_ReadLongFromFile(fp);
1843 if (magic != PyImport_GetMagicNumber()) {
1844 PyErr_SetString(PyExc_RuntimeError,
1845 "Bad magic number in .pyc file");
1846 return NULL;
1847 }
1848 (void) PyMarshal_ReadLongFromFile(fp);
1849 v = PyMarshal_ReadLastObjectFromFile(fp);
1850 fclose(fp);
1851 if (v == NULL || !PyCode_Check(v)) {
1852 Py_XDECREF(v);
1853 PyErr_SetString(PyExc_RuntimeError,
1854 "Bad code object in .pyc file");
1855 return NULL;
1856 }
1857 co = (PyCodeObject *)v;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001858 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001859 if (v && flags)
1860 flags->cf_flags |= (co->co_flags & PyCF_MASK);
1861 Py_DECREF(co);
1862 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001863}
1864
Guido van Rossum82598051997-03-05 00:20:32 +00001865PyObject *
Georg Brandl8334fd92010-12-04 10:26:46 +00001866Py_CompileStringExFlags(const char *str, const char *filename, int start,
1867 PyCompilerFlags *flags, int optimize)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001868{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001869 PyCodeObject *co;
1870 mod_ty mod;
1871 PyArena *arena = PyArena_New();
1872 if (arena == NULL)
1873 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001874
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001875 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
1876 if (mod == NULL) {
1877 PyArena_Free(arena);
1878 return NULL;
1879 }
1880 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
1881 PyObject *result = PyAST_mod2obj(mod);
1882 PyArena_Free(arena);
1883 return result;
1884 }
Georg Brandl8334fd92010-12-04 10:26:46 +00001885 co = PyAST_CompileEx(mod, filename, flags, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001886 PyArena_Free(arena);
1887 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001888}
1889
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001890/* For use in Py_LIMITED_API */
1891#undef Py_CompileString
1892PyObject *
1893PyCompileString(const char *str, const char *filename, int start)
1894{
1895 return Py_CompileStringFlags(str, filename, start, NULL);
1896}
1897
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001898struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001899Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001900{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001901 struct symtable *st;
1902 mod_ty mod;
1903 PyCompilerFlags flags;
1904 PyArena *arena = PyArena_New();
1905 if (arena == NULL)
1906 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001907
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001908 flags.cf_flags = 0;
1909 mod = PyParser_ASTFromString(str, filename, start, &flags, arena);
1910 if (mod == NULL) {
1911 PyArena_Free(arena);
1912 return NULL;
1913 }
1914 st = PySymtable_Build(mod, filename, 0);
1915 PyArena_Free(arena);
1916 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001917}
1918
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001919/* Preferred access to parser is through AST. */
1920mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001921PyParser_ASTFromString(const char *s, const char *filename, int start,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001922 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001923{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001924 mod_ty mod;
1925 PyCompilerFlags localflags;
1926 perrdetail err;
1927 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00001928
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001929 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename,
1930 &_PyParser_Grammar, start, &err,
1931 &iflags);
1932 if (flags == NULL) {
1933 localflags.cf_flags = 0;
1934 flags = &localflags;
1935 }
1936 if (n) {
1937 flags->cf_flags |= iflags & PyCF_MASK;
1938 mod = PyAST_FromNode(n, flags, filename, arena);
1939 PyNode_Free(n);
1940 return mod;
1941 }
1942 else {
1943 err_input(&err);
1944 return NULL;
1945 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001946}
1947
1948mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001949PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001950 int start, char *ps1,
1951 char *ps2, PyCompilerFlags *flags, int *errcode,
1952 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001953{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001954 mod_ty mod;
1955 PyCompilerFlags localflags;
1956 perrdetail err;
1957 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00001958
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001959 node *n = PyParser_ParseFileFlagsEx(fp, filename, enc,
1960 &_PyParser_Grammar,
1961 start, ps1, ps2, &err, &iflags);
1962 if (flags == NULL) {
1963 localflags.cf_flags = 0;
1964 flags = &localflags;
1965 }
1966 if (n) {
1967 flags->cf_flags |= iflags & PyCF_MASK;
1968 mod = PyAST_FromNode(n, flags, filename, arena);
1969 PyNode_Free(n);
1970 return mod;
1971 }
1972 else {
1973 err_input(&err);
1974 if (errcode)
1975 *errcode = err.error;
1976 return NULL;
1977 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001978}
1979
Guido van Rossuma110aa61994-08-29 12:50:44 +00001980/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001981
Guido van Rossuma110aa61994-08-29 12:50:44 +00001982node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001983PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001984{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001985 perrdetail err;
1986 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
1987 &_PyParser_Grammar,
1988 start, NULL, NULL, &err, flags);
1989 if (n == NULL)
1990 err_input(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001991
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001992 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001993}
1994
Guido van Rossuma110aa61994-08-29 12:50:44 +00001995/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001996
Guido van Rossuma110aa61994-08-29 12:50:44 +00001997node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001998PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001999{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002000 perrdetail err;
2001 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
2002 start, &err, flags);
2003 if (n == NULL)
2004 err_input(&err);
2005 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00002006}
2007
2008node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002009PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002010 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002011{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002012 perrdetail err;
2013 node *n = PyParser_ParseStringFlagsFilename(str, filename,
2014 &_PyParser_Grammar, start, &err, flags);
2015 if (n == NULL)
2016 err_input(&err);
2017 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00002018}
2019
2020node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002021PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002022{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002023 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00002024}
2025
Guido van Rossum66ebd912003-04-17 16:02:26 +00002026/* May want to move a more generalized form of this to parsetok.c or
2027 even parser modules. */
2028
2029void
2030PyParser_SetError(perrdetail *err)
2031{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002032 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00002033}
2034
Guido van Rossuma110aa61994-08-29 12:50:44 +00002035/* Set the error appropriate to the given input error code (see errcode.h) */
2036
2037static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002038err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00002039{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002040 PyObject *v, *w, *errtype, *errtext;
2041 PyObject *msg_obj = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002042 PyObject *filename;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002043 char *msg = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002044
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002045 errtype = PyExc_SyntaxError;
2046 switch (err->error) {
2047 case E_ERROR:
2048 return;
2049 case E_SYNTAX:
2050 errtype = PyExc_IndentationError;
2051 if (err->expected == INDENT)
2052 msg = "expected an indented block";
2053 else if (err->token == INDENT)
2054 msg = "unexpected indent";
2055 else if (err->token == DEDENT)
2056 msg = "unexpected unindent";
2057 else {
2058 errtype = PyExc_SyntaxError;
2059 msg = "invalid syntax";
2060 }
2061 break;
2062 case E_TOKEN:
2063 msg = "invalid token";
2064 break;
2065 case E_EOFS:
2066 msg = "EOF while scanning triple-quoted string literal";
2067 break;
2068 case E_EOLS:
2069 msg = "EOL while scanning string literal";
2070 break;
2071 case E_INTR:
2072 if (!PyErr_Occurred())
2073 PyErr_SetNone(PyExc_KeyboardInterrupt);
2074 goto cleanup;
2075 case E_NOMEM:
2076 PyErr_NoMemory();
2077 goto cleanup;
2078 case E_EOF:
2079 msg = "unexpected EOF while parsing";
2080 break;
2081 case E_TABSPACE:
2082 errtype = PyExc_TabError;
2083 msg = "inconsistent use of tabs and spaces in indentation";
2084 break;
2085 case E_OVERFLOW:
2086 msg = "expression too long";
2087 break;
2088 case E_DEDENT:
2089 errtype = PyExc_IndentationError;
2090 msg = "unindent does not match any outer indentation level";
2091 break;
2092 case E_TOODEEP:
2093 errtype = PyExc_IndentationError;
2094 msg = "too many levels of indentation";
2095 break;
2096 case E_DECODE: {
2097 PyObject *type, *value, *tb;
2098 PyErr_Fetch(&type, &value, &tb);
2099 msg = "unknown decode error";
2100 if (value != NULL)
2101 msg_obj = PyObject_Str(value);
2102 Py_XDECREF(type);
2103 Py_XDECREF(value);
2104 Py_XDECREF(tb);
2105 break;
2106 }
2107 case E_LINECONT:
2108 msg = "unexpected character after line continuation character";
2109 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002110
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002111 case E_IDENTIFIER:
2112 msg = "invalid character in identifier";
2113 break;
2114 default:
2115 fprintf(stderr, "error=%d\n", err->error);
2116 msg = "unknown parsing error";
2117 break;
2118 }
2119 /* err->text may not be UTF-8 in case of decoding errors.
2120 Explicitly convert to an object. */
2121 if (!err->text) {
2122 errtext = Py_None;
2123 Py_INCREF(Py_None);
2124 } else {
2125 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
2126 "replace");
2127 }
Victor Stinner2f2ed1f2010-10-16 13:42:53 +00002128 if (err->filename != NULL)
2129 filename = PyUnicode_DecodeFSDefault(err->filename);
2130 else {
2131 Py_INCREF(Py_None);
2132 filename = Py_None;
2133 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002134 if (filename != NULL)
2135 v = Py_BuildValue("(NiiN)", filename,
2136 err->lineno, err->offset, errtext);
2137 else
2138 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002139 if (v != NULL) {
2140 if (msg_obj)
2141 w = Py_BuildValue("(OO)", msg_obj, v);
2142 else
2143 w = Py_BuildValue("(sO)", msg, v);
2144 } else
2145 w = NULL;
2146 Py_XDECREF(v);
2147 PyErr_SetObject(errtype, w);
2148 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002149cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002150 Py_XDECREF(msg_obj);
2151 if (err->text != NULL) {
2152 PyObject_FREE(err->text);
2153 err->text = NULL;
2154 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002155}
2156
2157/* Print fatal error message and abort */
2158
2159void
Tim Peters7c321a82002-07-09 02:57:01 +00002160Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002161{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002162 fprintf(stderr, "Fatal Python error: %s\n", msg);
2163 fflush(stderr); /* it helps in Windows debug build */
2164 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002165 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002166 }
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002167#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002168 {
2169 size_t len = strlen(msg);
2170 WCHAR* buffer;
2171 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002172
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002173 /* Convert the message to wchar_t. This uses a simple one-to-one
2174 conversion, assuming that the this error message actually uses ASCII
2175 only. If this ceases to be true, we will have to convert. */
2176 buffer = alloca( (len+1) * (sizeof *buffer));
2177 for( i=0; i<=len; ++i)
2178 buffer[i] = msg[i];
2179 OutputDebugStringW(L"Fatal Python error: ");
2180 OutputDebugStringW(buffer);
2181 OutputDebugStringW(L"\n");
2182 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002183#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002184 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002185#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002186#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002187 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002188}
2189
2190/* Clean up and exit */
2191
Guido van Rossuma110aa61994-08-29 12:50:44 +00002192#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002193#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002194#endif
2195
Collin Winter670e6922007-03-21 02:57:17 +00002196static void (*pyexitfunc)(void) = NULL;
2197/* For the atexit module. */
2198void _Py_PyAtExit(void (*func)(void))
2199{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002200 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002201}
2202
2203static void
2204call_py_exitfuncs(void)
2205{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002206 if (pyexitfunc == NULL)
2207 return;
Collin Winter670e6922007-03-21 02:57:17 +00002208
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002209 (*pyexitfunc)();
2210 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002211}
2212
Antoine Pitrou011bd622009-10-20 21:52:47 +00002213/* Wait until threading._shutdown completes, provided
2214 the threading module was imported in the first place.
2215 The shutdown routine will wait until all non-daemon
2216 "threading" threads have completed. */
2217static void
2218wait_for_thread_shutdown(void)
2219{
2220#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002221 PyObject *result;
2222 PyThreadState *tstate = PyThreadState_GET();
2223 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2224 "threading");
2225 if (threading == NULL) {
2226 /* threading not imported */
2227 PyErr_Clear();
2228 return;
2229 }
2230 result = PyObject_CallMethod(threading, "_shutdown", "");
2231 if (result == NULL) {
2232 PyErr_WriteUnraisable(threading);
2233 }
2234 else {
2235 Py_DECREF(result);
2236 }
2237 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002238#endif
2239}
2240
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002241#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002242static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002243static int nexitfuncs = 0;
2244
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002245int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002246{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002247 if (nexitfuncs >= NEXITFUNCS)
2248 return -1;
2249 exitfuncs[nexitfuncs++] = func;
2250 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002251}
2252
Guido van Rossumcc283f51997-08-05 02:22:03 +00002253static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002254call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002255{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002256 while (nexitfuncs > 0)
2257 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002258
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002259 fflush(stdout);
2260 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002261}
2262
2263void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002264Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002265{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002266 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002267
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002268 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002269}
2270
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002271static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002272initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002273{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002274#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002275 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002276#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002277#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002278 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002279#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002280#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002281 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002282#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002283 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002284}
2285
Guido van Rossum7433b121997-02-14 19:45:36 +00002286
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002287/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2288 *
2289 * All of the code in this function must only use async-signal-safe functions,
2290 * listed at `man 7 signal` or
2291 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2292 */
2293void
2294_Py_RestoreSignals(void)
2295{
2296#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002297 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002298#endif
2299#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002300 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002301#endif
2302#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002303 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002304#endif
2305}
2306
2307
Guido van Rossum7433b121997-02-14 19:45:36 +00002308/*
2309 * The file descriptor fd is considered ``interactive'' if either
2310 * a) isatty(fd) is TRUE, or
2311 * b) the -i flag was given, and the filename associated with
2312 * the descriptor is NULL or "<stdin>" or "???".
2313 */
2314int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002315Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002316{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002317 if (isatty((int)fileno(fp)))
2318 return 1;
2319 if (!Py_InteractiveFlag)
2320 return 0;
2321 return (filename == NULL) ||
2322 (strcmp(filename, "<stdin>") == 0) ||
2323 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002324}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002325
2326
Tim Petersd08e3822003-04-17 15:24:21 +00002327#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002328#if defined(WIN32) && defined(_MSC_VER)
2329
2330/* Stack checking for Microsoft C */
2331
2332#include <malloc.h>
2333#include <excpt.h>
2334
Fred Drakee8de31c2000-08-31 05:38:39 +00002335/*
2336 * Return non-zero when we run out of memory on the stack; zero otherwise.
2337 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002338int
Fred Drake399739f2000-08-31 05:52:44 +00002339PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002340{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002341 __try {
2342 /* alloca throws a stack overflow exception if there's
2343 not enough space left on the stack */
2344 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2345 return 0;
2346 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2347 EXCEPTION_EXECUTE_HANDLER :
2348 EXCEPTION_CONTINUE_SEARCH) {
2349 int errcode = _resetstkoflw();
2350 if (errcode == 0)
2351 {
2352 Py_FatalError("Could not reset the stack!");
2353 }
2354 }
2355 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002356}
2357
2358#endif /* WIN32 && _MSC_VER */
2359
2360/* Alternate implementations can be added here... */
2361
2362#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002363
2364
2365/* Wrappers around sigaction() or signal(). */
2366
2367PyOS_sighandler_t
2368PyOS_getsig(int sig)
2369{
2370#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002371 struct sigaction context;
2372 if (sigaction(sig, NULL, &context) == -1)
2373 return SIG_ERR;
2374 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002375#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002376 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002377/* Special signal handling for the secure CRT in Visual Studio 2005 */
2378#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002379 switch (sig) {
2380 /* Only these signals are valid */
2381 case SIGINT:
2382 case SIGILL:
2383 case SIGFPE:
2384 case SIGSEGV:
2385 case SIGTERM:
2386 case SIGBREAK:
2387 case SIGABRT:
2388 break;
2389 /* Don't call signal() with other values or it will assert */
2390 default:
2391 return SIG_ERR;
2392 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002393#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002394 handler = signal(sig, SIG_IGN);
2395 if (handler != SIG_ERR)
2396 signal(sig, handler);
2397 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002398#endif
2399}
2400
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002401/*
2402 * All of the code in this function must only use async-signal-safe functions,
2403 * listed at `man 7 signal` or
2404 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2405 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002406PyOS_sighandler_t
2407PyOS_setsig(int sig, PyOS_sighandler_t handler)
2408{
2409#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002410 /* Some code in Modules/signalmodule.c depends on sigaction() being
2411 * used here if HAVE_SIGACTION is defined. Fix that if this code
2412 * changes to invalidate that assumption.
2413 */
2414 struct sigaction context, ocontext;
2415 context.sa_handler = handler;
2416 sigemptyset(&context.sa_mask);
2417 context.sa_flags = 0;
2418 if (sigaction(sig, &context, &ocontext) == -1)
2419 return SIG_ERR;
2420 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002421#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002422 PyOS_sighandler_t oldhandler;
2423 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002424#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002425 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002426#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002427 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002428#endif
2429}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002430
2431/* Deprecated C API functions still provided for binary compatiblity */
2432
2433#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002434PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002435PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2436{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002437 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002438}
2439
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002440#undef PyParser_SimpleParseString
2441PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002442PyParser_SimpleParseString(const char *str, int start)
2443{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002444 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002445}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002446
2447#undef PyRun_AnyFile
2448PyAPI_FUNC(int)
2449PyRun_AnyFile(FILE *fp, const char *name)
2450{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002451 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002452}
2453
2454#undef PyRun_AnyFileEx
2455PyAPI_FUNC(int)
2456PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2457{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002458 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002459}
2460
2461#undef PyRun_AnyFileFlags
2462PyAPI_FUNC(int)
2463PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2464{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002465 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002466}
2467
2468#undef PyRun_File
2469PyAPI_FUNC(PyObject *)
2470PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2471{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002472 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002473}
2474
2475#undef PyRun_FileEx
2476PyAPI_FUNC(PyObject *)
2477PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2478{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002479 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002480}
2481
2482#undef PyRun_FileFlags
2483PyAPI_FUNC(PyObject *)
2484PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002485 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002486{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002487 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002488}
2489
2490#undef PyRun_SimpleFile
2491PyAPI_FUNC(int)
2492PyRun_SimpleFile(FILE *f, const char *p)
2493{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002494 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002495}
2496
2497#undef PyRun_SimpleFileEx
2498PyAPI_FUNC(int)
2499PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2500{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002501 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002502}
2503
2504
2505#undef PyRun_String
2506PyAPI_FUNC(PyObject *)
2507PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2508{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002509 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002510}
2511
2512#undef PyRun_SimpleString
2513PyAPI_FUNC(int)
2514PyRun_SimpleString(const char *s)
2515{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002516 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002517}
2518
2519#undef Py_CompileString
2520PyAPI_FUNC(PyObject *)
2521Py_CompileString(const char *str, const char *p, int s)
2522{
Georg Brandl8334fd92010-12-04 10:26:46 +00002523 return Py_CompileStringExFlags(str, p, s, NULL, -1);
2524}
2525
2526#undef Py_CompileStringFlags
2527PyAPI_FUNC(PyObject *)
2528Py_CompileStringFlags(const char *str, const char *p, int s,
2529 PyCompilerFlags *flags)
2530{
2531 return Py_CompileStringExFlags(str, p, s, flags, -1);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002532}
2533
2534#undef PyRun_InteractiveOne
2535PyAPI_FUNC(int)
2536PyRun_InteractiveOne(FILE *f, const char *p)
2537{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002538 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002539}
2540
2541#undef PyRun_InteractiveLoop
2542PyAPI_FUNC(int)
2543PyRun_InteractiveLoop(FILE *f, const char *p)
2544{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002545 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002546}
2547
2548#ifdef __cplusplus
2549}
2550#endif