blob: 5a96bae059ee99ad171cf46dcbe4e14dc8940f9f [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
Martin v. Löwis790465f2008-04-05 20:41:37 +0000699static wchar_t *progname = L"python";
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000700
701void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000702Py_SetProgramName(wchar_t *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000703{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000704 if (pn && *pn)
705 progname = pn;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000706}
707
Martin v. Löwis790465f2008-04-05 20:41:37 +0000708wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000709Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000710{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000711 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000712}
713
Martin v. Löwis790465f2008-04-05 20:41:37 +0000714static wchar_t *default_home = NULL;
715static wchar_t env_home[PATH_MAX+1];
Guido van Rossuma61691e1998-02-06 22:27:24 +0000716
717void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000718Py_SetPythonHome(wchar_t *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000719{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000720 default_home = home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000721}
722
Martin v. Löwis790465f2008-04-05 20:41:37 +0000723wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000724Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000725{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000726 wchar_t *home = default_home;
727 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
728 char* chome = Py_GETENV("PYTHONHOME");
729 if (chome) {
730 size_t r = mbstowcs(env_home, chome, PATH_MAX+1);
731 if (r != (size_t)-1 && r <= PATH_MAX)
732 home = env_home;
733 }
Martin v. Löwis790465f2008-04-05 20:41:37 +0000734
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000735 }
736 return home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000737}
738
Guido van Rossum6135a871995-01-09 17:53:26 +0000739/* Create __main__ module */
740
741static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000742initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000743{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000744 PyObject *m, *d;
745 m = PyImport_AddModule("__main__");
746 if (m == NULL)
747 Py_FatalError("can't create __main__ module");
748 d = PyModule_GetDict(m);
749 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
750 PyObject *bimod = PyImport_ImportModule("builtins");
751 if (bimod == NULL ||
752 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
753 Py_FatalError("can't add __builtins__ to __main__");
754 Py_DECREF(bimod);
755 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000756}
757
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200758static int
759initfsencoding(PyInterpreterState *interp)
Victor Stinnerb744ba12010-05-15 12:27:16 +0000760{
761 PyObject *codec;
762#if defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94908bb2010-08-18 21:23:25 +0000763 char *codeset = NULL;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000764
Victor Stinner7f84ab52010-06-11 00:36:33 +0000765 if (Py_FileSystemDefaultEncoding == NULL) {
Victor Stinner8f6b6b02010-10-13 22:02:27 +0000766 /* On Unix, set the file system encoding according to the
767 user's preference, if the CODESET names a well-known
768 Python codec, and Py_FileSystemDefaultEncoding isn't
Victor Stinnere4743092010-10-19 00:05:51 +0000769 initialized by other means. */
Victor Stinner8f6b6b02010-10-13 22:02:27 +0000770 codeset = get_codeset();
Victor Stinnere4743092010-10-19 00:05:51 +0000771 if (codeset == NULL)
772 Py_FatalError("Py_Initialize: Unable to get the locale encoding");
Victor Stinnerb744ba12010-05-15 12:27:16 +0000773
Victor Stinnere4743092010-10-19 00:05:51 +0000774 Py_FileSystemDefaultEncoding = codeset;
775 Py_HasFileSystemDefaultEncoding = 0;
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200776 interp->fscodec_initialized = 1;
777 return 0;
Victor Stinner7f84ab52010-06-11 00:36:33 +0000778 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000779#endif
780
781 /* the encoding is mbcs, utf-8 or ascii */
782 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
783 if (!codec) {
784 /* Such error can only occurs in critical situations: no more
785 * memory, import a module of the standard library failed,
786 * etc. */
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200787 return -1;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000788 }
Victor Stinner3cbf14b2011-04-27 00:24:21 +0200789 Py_DECREF(codec);
790 interp->fscodec_initialized = 1;
791 return 0;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000792}
793
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000794/* Import the site module (not into __main__ though) */
795
796static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000797initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000798{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000799 PyObject *m;
800 m = PyImport_ImportModule("site");
801 if (m == NULL) {
802 PyErr_Print();
803 Py_Finalize();
804 exit(1);
805 }
806 else {
807 Py_DECREF(m);
808 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000809}
810
Antoine Pitrou05608432009-01-09 18:53:14 +0000811static PyObject*
812create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000813 int fd, int write_mode, char* name,
814 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +0000815{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
817 const char* mode;
Victor Stinner02bfdb32011-02-23 12:10:23 +0000818 const char* newline;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000819 PyObject *line_buffering;
820 int buffering, isatty;
Antoine Pitrou05608432009-01-09 18:53:14 +0000821
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000822 /* stdin is always opened in buffered mode, first because it shouldn't
823 make a difference in common use cases, second because TextIOWrapper
824 depends on the presence of a read1() method which only exists on
825 buffered streams.
826 */
827 if (Py_UnbufferedStdioFlag && write_mode)
828 buffering = 0;
829 else
830 buffering = -1;
831 if (write_mode)
832 mode = "wb";
833 else
834 mode = "rb";
835 buf = PyObject_CallMethod(io, "open", "isiOOOi",
836 fd, mode, buffering,
837 Py_None, Py_None, Py_None, 0);
838 if (buf == NULL)
839 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000840
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000841 if (buffering) {
842 raw = PyObject_GetAttrString(buf, "raw");
843 if (raw == NULL)
844 goto error;
845 }
846 else {
847 raw = buf;
848 Py_INCREF(raw);
849 }
Antoine Pitrou05608432009-01-09 18:53:14 +0000850
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000851 text = PyUnicode_FromString(name);
852 if (text == NULL || PyObject_SetAttrString(raw, "name", text) < 0)
853 goto error;
854 res = PyObject_CallMethod(raw, "isatty", "");
855 if (res == NULL)
856 goto error;
857 isatty = PyObject_IsTrue(res);
858 Py_DECREF(res);
859 if (isatty == -1)
860 goto error;
861 if (isatty || Py_UnbufferedStdioFlag)
862 line_buffering = Py_True;
863 else
864 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +0000865
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000866 Py_CLEAR(raw);
867 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +0000868
Victor Stinner02bfdb32011-02-23 12:10:23 +0000869 newline = "\n";
870#ifdef MS_WINDOWS
871 if (!write_mode) {
872 /* translate \r\n to \n for sys.stdin on Windows */
873 newline = NULL;
874 }
875#endif
876
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000877 stream = PyObject_CallMethod(io, "TextIOWrapper", "OsssO",
878 buf, encoding, errors,
Victor Stinner02bfdb32011-02-23 12:10:23 +0000879 newline, line_buffering);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000880 Py_CLEAR(buf);
881 if (stream == NULL)
882 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000883
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000884 if (write_mode)
885 mode = "w";
886 else
887 mode = "r";
888 text = PyUnicode_FromString(mode);
889 if (!text || PyObject_SetAttrString(stream, "mode", text) < 0)
890 goto error;
891 Py_CLEAR(text);
892 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +0000893
894error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000895 Py_XDECREF(buf);
896 Py_XDECREF(stream);
897 Py_XDECREF(text);
898 Py_XDECREF(raw);
899 return NULL;
Antoine Pitrou05608432009-01-09 18:53:14 +0000900}
901
Antoine Pitrou11942a52011-11-28 19:08:36 +0100902static int
903is_valid_fd(int fd)
904{
905 int dummy_fd;
906 if (fd < 0 || !_PyVerify_fd(fd))
907 return 0;
908 dummy_fd = dup(fd);
909 if (dummy_fd < 0)
910 return 0;
911 close(dummy_fd);
912 return 1;
913}
914
Georg Brandl1a3284e2007-12-02 09:40:06 +0000915/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000916static int
917initstdio(void)
918{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000919 PyObject *iomod = NULL, *wrapper;
920 PyObject *bimod = NULL;
921 PyObject *m;
922 PyObject *std = NULL;
923 int status = 0, fd;
924 PyObject * encoding_attr;
925 char *encoding = NULL, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000926
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000927 /* Hack to avoid a nasty recursion issue when Python is invoked
928 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
929 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
930 goto error;
931 }
932 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000933
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000934 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
935 goto error;
936 }
937 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000938
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000939 if (!(bimod = PyImport_ImportModule("builtins"))) {
940 goto error;
941 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000942
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000943 if (!(iomod = PyImport_ImportModule("io"))) {
944 goto error;
945 }
946 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
947 goto error;
948 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000949
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000950 /* Set builtins.open */
951 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
Antoine Pitrou5a96b522010-11-20 19:50:57 +0000952 Py_DECREF(wrapper);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000953 goto error;
954 }
Antoine Pitrou5a96b522010-11-20 19:50:57 +0000955 Py_DECREF(wrapper);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000956
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000957 encoding = Py_GETENV("PYTHONIOENCODING");
958 errors = NULL;
959 if (encoding) {
960 encoding = strdup(encoding);
961 errors = strchr(encoding, ':');
962 if (errors) {
963 *errors = '\0';
964 errors++;
965 }
966 }
Martin v. Löwis0f599892008-06-02 11:13:03 +0000967
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000968 /* Set sys.stdin */
969 fd = fileno(stdin);
970 /* Under some conditions stdin, stdout and stderr may not be connected
971 * and fileno() may point to an invalid file descriptor. For example
972 * GUI apps don't have valid standard streams by default.
973 */
Antoine Pitrou11942a52011-11-28 19:08:36 +0100974 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000975 std = Py_None;
976 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000977 }
978 else {
979 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
980 if (std == NULL)
981 goto error;
982 } /* if (fd < 0) */
983 PySys_SetObject("__stdin__", std);
984 PySys_SetObject("stdin", std);
985 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000986
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000987 /* Set sys.stdout */
988 fd = fileno(stdout);
Antoine Pitrou11942a52011-11-28 19:08:36 +0100989 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000990 std = Py_None;
991 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000992 }
993 else {
994 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
995 if (std == NULL)
996 goto error;
997 } /* if (fd < 0) */
998 PySys_SetObject("__stdout__", std);
999 PySys_SetObject("stdout", std);
1000 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001001
Guido van Rossum98297ee2007-11-06 21:34:58 +00001002#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001003 /* Set sys.stderr, replaces the preliminary stderr */
1004 fd = fileno(stderr);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001005 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001006 std = Py_None;
1007 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001008 }
1009 else {
1010 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1011 if (std == NULL)
1012 goto error;
1013 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +00001014
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001015 /* Same as hack above, pre-import stderr's codec to avoid recursion
1016 when import.c tries to write to stderr in verbose mode. */
1017 encoding_attr = PyObject_GetAttrString(std, "encoding");
1018 if (encoding_attr != NULL) {
1019 const char * encoding;
1020 encoding = _PyUnicode_AsString(encoding_attr);
1021 if (encoding != NULL) {
Antoine Pitrou2fabfac2012-01-18 15:14:46 +01001022 PyObject *codec_info = _PyCodec_Lookup(encoding);
1023 Py_XDECREF(codec_info);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001024 }
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +00001025 Py_DECREF(encoding_attr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001026 }
1027 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +00001028
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001029 PySys_SetObject("__stderr__", std);
1030 PySys_SetObject("stderr", std);
1031 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001032#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001033
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001034 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001035 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001036 status = -1;
1037 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001038
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001039 if (encoding)
1040 free(encoding);
1041 Py_XDECREF(bimod);
1042 Py_XDECREF(iomod);
1043 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001044}
1045
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001046/* Parse input from a file and execute it */
1047
1048int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001049PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001050 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001051{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001052 if (filename == NULL)
1053 filename = "???";
1054 if (Py_FdIsInteractive(fp, filename)) {
1055 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1056 if (closeit)
1057 fclose(fp);
1058 return err;
1059 }
1060 else
1061 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001062}
1063
1064int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001065PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001066{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001067 PyObject *v;
1068 int ret;
1069 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001070
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001071 if (flags == NULL) {
1072 flags = &local_flags;
1073 local_flags.cf_flags = 0;
1074 }
1075 v = PySys_GetObject("ps1");
1076 if (v == NULL) {
1077 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
1078 Py_XDECREF(v);
1079 }
1080 v = PySys_GetObject("ps2");
1081 if (v == NULL) {
1082 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
1083 Py_XDECREF(v);
1084 }
1085 for (;;) {
1086 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
1087 PRINT_TOTAL_REFS();
1088 if (ret == E_EOF)
1089 return 0;
1090 /*
1091 if (ret == E_NOMEM)
1092 return -1;
1093 */
1094 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001095}
1096
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001097/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001098static int PARSER_FLAGS(PyCompilerFlags *flags)
1099{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001100 int parser_flags = 0;
1101 if (!flags)
1102 return 0;
1103 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1104 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1105 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1106 parser_flags |= PyPARSE_IGNORE_COOKIE;
1107 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1108 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1109 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001110}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001111
Thomas Wouters89f507f2006-12-13 04:49:30 +00001112#if 0
1113/* Keep an example of flags with future keyword support. */
1114#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001115 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1116 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1117 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1118 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001119#endif
1120
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001121int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001122PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001123{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001124 PyObject *m, *d, *v, *w, *oenc = NULL;
1125 mod_ty mod;
1126 PyArena *arena;
1127 char *ps1 = "", *ps2 = "", *enc = NULL;
1128 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +00001129
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001130 if (fp == stdin) {
1131 /* Fetch encoding from sys.stdin */
1132 v = PySys_GetObject("stdin");
1133 if (v == NULL || v == Py_None)
1134 return -1;
1135 oenc = PyObject_GetAttrString(v, "encoding");
1136 if (!oenc)
1137 return -1;
1138 enc = _PyUnicode_AsString(oenc);
Victor Stinner386fe712010-05-19 00:34:15 +00001139 if (enc == NULL)
1140 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001141 }
1142 v = PySys_GetObject("ps1");
1143 if (v != NULL) {
1144 v = PyObject_Str(v);
1145 if (v == NULL)
1146 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001147 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001148 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001149 if (ps1 == NULL) {
1150 PyErr_Clear();
1151 ps1 = "";
1152 }
1153 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001154 }
1155 w = PySys_GetObject("ps2");
1156 if (w != NULL) {
1157 w = PyObject_Str(w);
1158 if (w == NULL)
1159 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001160 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001161 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001162 if (ps2 == NULL) {
1163 PyErr_Clear();
1164 ps2 = "";
1165 }
1166 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001167 }
1168 arena = PyArena_New();
1169 if (arena == NULL) {
1170 Py_XDECREF(v);
1171 Py_XDECREF(w);
1172 Py_XDECREF(oenc);
1173 return -1;
1174 }
1175 mod = PyParser_ASTFromFile(fp, filename, enc,
1176 Py_single_input, ps1, ps2,
1177 flags, &errcode, arena);
1178 Py_XDECREF(v);
1179 Py_XDECREF(w);
1180 Py_XDECREF(oenc);
1181 if (mod == NULL) {
1182 PyArena_Free(arena);
1183 if (errcode == E_EOF) {
1184 PyErr_Clear();
1185 return E_EOF;
1186 }
1187 PyErr_Print();
1188 return -1;
1189 }
1190 m = PyImport_AddModule("__main__");
1191 if (m == NULL) {
1192 PyArena_Free(arena);
1193 return -1;
1194 }
1195 d = PyModule_GetDict(m);
1196 v = run_mod(mod, filename, d, d, flags, arena);
1197 PyArena_Free(arena);
1198 flush_io();
1199 if (v == NULL) {
1200 PyErr_Print();
1201 return -1;
1202 }
1203 Py_DECREF(v);
1204 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001205}
1206
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001207/* Check whether a file maybe a pyc file: Look at the extension,
1208 the file type, and, if we may close it, at the first few bytes. */
1209
1210static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001211maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001212{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001213 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1214 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001215
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001216 /* Only look into the file if we are allowed to close it, since
1217 it then should also be seekable. */
1218 if (closeit) {
1219 /* Read only two bytes of the magic. If the file was opened in
1220 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1221 be read as they are on disk. */
1222 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1223 unsigned char buf[2];
1224 /* Mess: In case of -x, the stream is NOT at its start now,
1225 and ungetc() was used to push back the first newline,
1226 which makes the current stream position formally undefined,
1227 and a x-platform nightmare.
1228 Unfortunately, we have no direct way to know whether -x
1229 was specified. So we use a terrible hack: if the current
1230 stream position is not 0, we assume -x was specified, and
1231 give up. Bug 132850 on SourceForge spells out the
1232 hopelessness of trying anything else (fseek and ftell
1233 don't work predictably x-platform for text-mode files).
1234 */
1235 int ispyc = 0;
1236 if (ftell(fp) == 0) {
1237 if (fread(buf, 1, 2, fp) == 2 &&
1238 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1239 ispyc = 1;
1240 rewind(fp);
1241 }
1242 return ispyc;
1243 }
1244 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001245}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001246
Guido van Rossum0df002c2000-08-27 19:21:52 +00001247int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001248PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001249 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001250{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001251 PyObject *m, *d, *v;
1252 const char *ext;
Victor Stinner0fcab4a2011-01-04 12:59:15 +00001253 int set_file_name = 0, ret;
1254 size_t len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001255
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001256 m = PyImport_AddModule("__main__");
1257 if (m == NULL)
1258 return -1;
1259 d = PyModule_GetDict(m);
1260 if (PyDict_GetItemString(d, "__file__") == NULL) {
1261 PyObject *f;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001262 f = PyUnicode_DecodeFSDefault(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001263 if (f == NULL)
1264 return -1;
1265 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1266 Py_DECREF(f);
1267 return -1;
1268 }
Barry Warsaw916048d2011-09-20 14:45:44 -04001269 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0) {
1270 Py_DECREF(f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001271 return -1;
Barry Warsaw916048d2011-09-20 14:45:44 -04001272 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001273 set_file_name = 1;
1274 Py_DECREF(f);
1275 }
1276 len = strlen(filename);
1277 ext = filename + len - (len > 4 ? 4 : 0);
1278 if (maybe_pyc_file(fp, filename, ext, closeit)) {
1279 /* Try to run a pyc file. First, re-open in binary */
1280 if (closeit)
1281 fclose(fp);
1282 if ((fp = fopen(filename, "rb")) == NULL) {
1283 fprintf(stderr, "python: Can't reopen .pyc file\n");
1284 ret = -1;
1285 goto done;
1286 }
1287 /* Turn on optimization if a .pyo file is given */
1288 if (strcmp(ext, ".pyo") == 0)
1289 Py_OptimizeFlag = 1;
1290 v = run_pyc_file(fp, filename, d, d, flags);
1291 } else {
1292 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1293 closeit, flags);
1294 }
1295 flush_io();
1296 if (v == NULL) {
1297 PyErr_Print();
1298 ret = -1;
1299 goto done;
1300 }
1301 Py_DECREF(v);
1302 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001303 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001304 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1305 PyErr_Clear();
1306 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001307}
1308
1309int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001310PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001311{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001312 PyObject *m, *d, *v;
1313 m = PyImport_AddModule("__main__");
1314 if (m == NULL)
1315 return -1;
1316 d = PyModule_GetDict(m);
1317 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1318 if (v == NULL) {
1319 PyErr_Print();
1320 return -1;
1321 }
1322 Py_DECREF(v);
1323 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001324}
1325
Barry Warsaw035574d1997-08-29 22:07:17 +00001326static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001327parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001328 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001329{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001330 long hold;
1331 PyObject *v;
Barry Warsaw035574d1997-08-29 22:07:17 +00001332
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001333 /* old style errors */
1334 if (PyTuple_Check(err))
1335 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
1336 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001337
Benjamin Peterson80d50422012-04-03 00:30:38 -04001338 *message = NULL;
1339
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001340 /* new style errors. `err' is an instance */
Benjamin Peterson80d50422012-04-03 00:30:38 -04001341 *message = PyObject_GetAttrString(err, "msg");
1342 if (!*message)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001343 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001344
Benjamin Peterson80d50422012-04-03 00:30:38 -04001345 v = PyObject_GetAttrString(err, "filename");
1346 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001347 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001348 if (v == Py_None) {
1349 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001350 *filename = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001351 }
1352 else {
1353 *filename = _PyUnicode_AsString(v);
1354 Py_DECREF(v);
1355 if (!*filename)
1356 goto finally;
1357 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001358
Benjamin Peterson80d50422012-04-03 00:30:38 -04001359 v = PyObject_GetAttrString(err, "lineno");
1360 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001361 goto finally;
1362 hold = PyLong_AsLong(v);
1363 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001364 if (hold < 0 && PyErr_Occurred())
1365 goto finally;
1366 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001367
Benjamin Peterson80d50422012-04-03 00:30:38 -04001368 v = PyObject_GetAttrString(err, "offset");
1369 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001370 goto finally;
1371 if (v == Py_None) {
1372 *offset = -1;
1373 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001374 } else {
1375 hold = PyLong_AsLong(v);
1376 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001377 if (hold < 0 && PyErr_Occurred())
1378 goto finally;
1379 *offset = (int)hold;
1380 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001381
Benjamin Peterson80d50422012-04-03 00:30:38 -04001382 v = PyObject_GetAttrString(err, "text");
1383 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001384 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001385 if (v == Py_None) {
1386 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001387 *text = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001388 }
1389 else {
1390 *text = _PyUnicode_AsString(v);
1391 Py_DECREF(v);
1392 if (!*text)
1393 goto finally;
1394 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001395 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001396
1397finally:
Benjamin Peterson80d50422012-04-03 00:30:38 -04001398 Py_XDECREF(*message);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001399 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001400}
1401
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001402void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001403PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001404{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001405 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001406}
1407
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001408static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001409print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001410{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001411 char *nl;
1412 if (offset >= 0) {
Benjamin Petersona95e9772010-10-29 03:28:14 +00001413 if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n')
1414 offset--;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001415 for (;;) {
1416 nl = strchr(text, '\n');
1417 if (nl == NULL || nl-text >= offset)
1418 break;
1419 offset -= (int)(nl+1-text);
1420 text = nl+1;
1421 }
1422 while (*text == ' ' || *text == '\t') {
1423 text++;
1424 offset--;
1425 }
1426 }
1427 PyFile_WriteString(" ", f);
1428 PyFile_WriteString(text, f);
1429 if (*text == '\0' || text[strlen(text)-1] != '\n')
1430 PyFile_WriteString("\n", f);
1431 if (offset == -1)
1432 return;
1433 PyFile_WriteString(" ", f);
Benjamin Petersona95e9772010-10-29 03:28:14 +00001434 while (--offset > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001435 PyFile_WriteString(" ", f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001436 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001437}
1438
Guido van Rossum66e8e862001-03-23 17:54:43 +00001439static void
1440handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001441{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001442 PyObject *exception, *value, *tb;
1443 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001444
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001445 if (Py_InspectFlag)
1446 /* Don't exit if -i flag was given. This flag is set to 0
1447 * when entering interactive mode for inspecting. */
1448 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001449
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001450 PyErr_Fetch(&exception, &value, &tb);
1451 fflush(stdout);
1452 if (value == NULL || value == Py_None)
1453 goto done;
1454 if (PyExceptionInstance_Check(value)) {
1455 /* The error code should be in the `code' attribute. */
1456 PyObject *code = PyObject_GetAttrString(value, "code");
1457 if (code) {
1458 Py_DECREF(value);
1459 value = code;
1460 if (value == Py_None)
1461 goto done;
1462 }
1463 /* If we failed to dig out the 'code' attribute,
1464 just let the else clause below print the error. */
1465 }
1466 if (PyLong_Check(value))
1467 exitcode = (int)PyLong_AsLong(value);
1468 else {
Victor Stinnere9fb3192010-05-17 08:58:51 +00001469 PyObject *sys_stderr = PySys_GetObject("stderr");
Victor Stinner7126dbc2010-05-21 23:45:42 +00001470 if (sys_stderr != NULL && sys_stderr != Py_None) {
1471 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1472 } else {
1473 PyObject_Print(value, stderr, Py_PRINT_RAW);
1474 fflush(stderr);
1475 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001476 PySys_WriteStderr("\n");
1477 exitcode = 1;
1478 }
Tim Peterscf615b52003-04-19 18:47:02 +00001479 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001480 /* Restore and clear the exception info, in order to properly decref
1481 * the exception, value, and traceback. If we just exit instead,
1482 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1483 * some finalizers from running.
1484 */
1485 PyErr_Restore(exception, value, tb);
1486 PyErr_Clear();
1487 Py_Exit(exitcode);
1488 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001489}
1490
1491void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001492PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001493{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001494 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001495
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001496 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1497 handle_system_exit();
1498 }
1499 PyErr_Fetch(&exception, &v, &tb);
1500 if (exception == NULL)
1501 return;
1502 PyErr_NormalizeException(&exception, &v, &tb);
1503 if (tb == NULL) {
1504 tb = Py_None;
1505 Py_INCREF(tb);
1506 }
1507 PyException_SetTraceback(v, tb);
1508 if (exception == NULL)
1509 return;
1510 /* Now we know v != NULL too */
1511 if (set_sys_last_vars) {
1512 PySys_SetObject("last_type", exception);
1513 PySys_SetObject("last_value", v);
1514 PySys_SetObject("last_traceback", tb);
1515 }
1516 hook = PySys_GetObject("excepthook");
1517 if (hook) {
1518 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1519 PyObject *result = PyEval_CallObject(hook, args);
1520 if (result == NULL) {
1521 PyObject *exception2, *v2, *tb2;
1522 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1523 handle_system_exit();
1524 }
1525 PyErr_Fetch(&exception2, &v2, &tb2);
1526 PyErr_NormalizeException(&exception2, &v2, &tb2);
1527 /* It should not be possible for exception2 or v2
1528 to be NULL. However PyErr_Display() can't
1529 tolerate NULLs, so just be safe. */
1530 if (exception2 == NULL) {
1531 exception2 = Py_None;
1532 Py_INCREF(exception2);
1533 }
1534 if (v2 == NULL) {
1535 v2 = Py_None;
1536 Py_INCREF(v2);
1537 }
1538 fflush(stdout);
1539 PySys_WriteStderr("Error in sys.excepthook:\n");
1540 PyErr_Display(exception2, v2, tb2);
1541 PySys_WriteStderr("\nOriginal exception was:\n");
1542 PyErr_Display(exception, v, tb);
1543 Py_DECREF(exception2);
1544 Py_DECREF(v2);
1545 Py_XDECREF(tb2);
1546 }
1547 Py_XDECREF(result);
1548 Py_XDECREF(args);
1549 } else {
1550 PySys_WriteStderr("sys.excepthook is missing\n");
1551 PyErr_Display(exception, v, tb);
1552 }
1553 Py_XDECREF(exception);
1554 Py_XDECREF(v);
1555 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001556}
1557
Benjamin Petersone6528212008-07-15 15:32:09 +00001558static void
1559print_exception(PyObject *f, PyObject *value)
1560{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001561 int err = 0;
1562 PyObject *type, *tb;
Benjamin Petersone6528212008-07-15 15:32:09 +00001563
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001564 if (!PyExceptionInstance_Check(value)) {
1565 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1566 PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1567 PyFile_WriteString(" found\n", f);
1568 return;
1569 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001570
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001571 Py_INCREF(value);
1572 fflush(stdout);
1573 type = (PyObject *) Py_TYPE(value);
1574 tb = PyException_GetTraceback(value);
1575 if (tb && tb != Py_None)
1576 err = PyTraceBack_Print(tb, f);
1577 if (err == 0 &&
1578 PyObject_HasAttrString(value, "print_file_and_line"))
1579 {
1580 PyObject *message;
1581 const char *filename, *text;
1582 int lineno, offset;
1583 if (!parse_syntax_error(value, &message, &filename,
1584 &lineno, &offset, &text))
1585 PyErr_Clear();
1586 else {
1587 char buf[10];
1588 PyFile_WriteString(" File \"", f);
1589 if (filename == NULL)
1590 PyFile_WriteString("<string>", f);
1591 else
1592 PyFile_WriteString(filename, f);
1593 PyFile_WriteString("\", line ", f);
1594 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
1595 PyFile_WriteString(buf, f);
1596 PyFile_WriteString("\n", f);
1597 if (text != NULL)
1598 print_error_text(f, offset, text);
1599 Py_DECREF(value);
1600 value = message;
1601 /* Can't be bothered to check all those
1602 PyFile_WriteString() calls */
1603 if (PyErr_Occurred())
1604 err = -1;
1605 }
1606 }
1607 if (err) {
1608 /* Don't do anything else */
1609 }
1610 else {
1611 PyObject* moduleName;
1612 char* className;
1613 assert(PyExceptionClass_Check(type));
1614 className = PyExceptionClass_Name(type);
1615 if (className != NULL) {
1616 char *dot = strrchr(className, '.');
1617 if (dot != NULL)
1618 className = dot+1;
1619 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001620
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001621 moduleName = PyObject_GetAttrString(type, "__module__");
1622 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1623 {
1624 Py_DECREF(moduleName);
1625 err = PyFile_WriteString("<unknown>", f);
1626 }
1627 else {
1628 char* modstr = _PyUnicode_AsString(moduleName);
1629 if (modstr && strcmp(modstr, "builtins"))
1630 {
1631 err = PyFile_WriteString(modstr, f);
1632 err += PyFile_WriteString(".", f);
1633 }
1634 Py_DECREF(moduleName);
1635 }
1636 if (err == 0) {
1637 if (className == NULL)
1638 err = PyFile_WriteString("<unknown>", f);
1639 else
1640 err = PyFile_WriteString(className, f);
1641 }
1642 }
1643 if (err == 0 && (value != Py_None)) {
1644 PyObject *s = PyObject_Str(value);
1645 /* only print colon if the str() of the
1646 object is not the empty string
1647 */
1648 if (s == NULL)
1649 err = -1;
1650 else if (!PyUnicode_Check(s) ||
1651 PyUnicode_GetSize(s) != 0)
1652 err = PyFile_WriteString(": ", f);
1653 if (err == 0)
1654 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1655 Py_XDECREF(s);
1656 }
1657 /* try to write a newline in any case */
1658 err += PyFile_WriteString("\n", f);
1659 Py_XDECREF(tb);
1660 Py_DECREF(value);
1661 /* If an error happened here, don't show it.
1662 XXX This is wrong, but too many callers rely on this behavior. */
1663 if (err != 0)
1664 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001665}
1666
1667static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001668 "\nThe above exception was the direct cause "
1669 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001670
1671static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001672 "\nDuring handling of the above exception, "
1673 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001674
1675static void
1676print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
1677{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001678 int err = 0, res;
1679 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00001680
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001681 if (seen != NULL) {
1682 /* Exception chaining */
1683 if (PySet_Add(seen, value) == -1)
1684 PyErr_Clear();
1685 else if (PyExceptionInstance_Check(value)) {
1686 cause = PyException_GetCause(value);
1687 context = PyException_GetContext(value);
1688 if (cause) {
1689 res = PySet_Contains(seen, cause);
1690 if (res == -1)
1691 PyErr_Clear();
1692 if (res == 0) {
1693 print_exception_recursive(
1694 f, cause, seen);
1695 err |= PyFile_WriteString(
1696 cause_message, f);
1697 }
1698 }
1699 else if (context) {
1700 res = PySet_Contains(seen, context);
1701 if (res == -1)
1702 PyErr_Clear();
1703 if (res == 0) {
1704 print_exception_recursive(
1705 f, context, seen);
1706 err |= PyFile_WriteString(
1707 context_message, f);
1708 }
1709 }
1710 Py_XDECREF(context);
1711 Py_XDECREF(cause);
1712 }
1713 }
1714 print_exception(f, value);
1715 if (err != 0)
1716 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001717}
1718
Thomas Wouters477c8d52006-05-27 19:21:47 +00001719void
1720PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001721{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001722 PyObject *seen;
1723 PyObject *f = PySys_GetObject("stderr");
1724 if (f == Py_None) {
1725 /* pass */
1726 }
1727 else if (f == NULL) {
1728 _PyObject_Dump(value);
1729 fprintf(stderr, "lost sys.stderr\n");
1730 }
1731 else {
1732 /* We choose to ignore seen being possibly NULL, and report
1733 at least the main exception (it could be a MemoryError).
1734 */
1735 seen = PySet_New(NULL);
1736 if (seen == NULL)
1737 PyErr_Clear();
1738 print_exception_recursive(f, value, seen);
1739 Py_XDECREF(seen);
1740 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001741}
1742
Guido van Rossum82598051997-03-05 00:20:32 +00001743PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001744PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001745 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001746{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001747 PyObject *ret = NULL;
1748 mod_ty mod;
1749 PyArena *arena = PyArena_New();
1750 if (arena == NULL)
1751 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001752
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001753 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
1754 if (mod != NULL)
1755 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
1756 PyArena_Free(arena);
1757 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001758}
1759
1760PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001761PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001762 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001763{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001764 PyObject *ret;
1765 mod_ty mod;
1766 PyArena *arena = PyArena_New();
1767 if (arena == NULL)
1768 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001769
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001770 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
1771 flags, NULL, arena);
1772 if (closeit)
1773 fclose(fp);
1774 if (mod == NULL) {
1775 PyArena_Free(arena);
1776 return NULL;
1777 }
1778 ret = run_mod(mod, filename, globals, locals, flags, arena);
1779 PyArena_Free(arena);
1780 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001781}
1782
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001783static void
1784flush_io(void)
1785{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001786 PyObject *f, *r;
1787 PyObject *type, *value, *traceback;
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001788
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001789 /* Save the current exception */
1790 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001791
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001792 f = PySys_GetObject("stderr");
1793 if (f != NULL) {
1794 r = PyObject_CallMethod(f, "flush", "");
1795 if (r)
1796 Py_DECREF(r);
1797 else
1798 PyErr_Clear();
1799 }
1800 f = PySys_GetObject("stdout");
1801 if (f != NULL) {
1802 r = PyObject_CallMethod(f, "flush", "");
1803 if (r)
1804 Py_DECREF(r);
1805 else
1806 PyErr_Clear();
1807 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001808
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001809 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001810}
1811
Guido van Rossum82598051997-03-05 00:20:32 +00001812static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001813run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001814 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001815{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001816 PyCodeObject *co;
1817 PyObject *v;
1818 co = PyAST_Compile(mod, filename, flags, arena);
1819 if (co == NULL)
1820 return NULL;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001821 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001822 Py_DECREF(co);
1823 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001824}
1825
Guido van Rossum82598051997-03-05 00:20:32 +00001826static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001827run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001828 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001829{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001830 PyCodeObject *co;
1831 PyObject *v;
1832 long magic;
1833 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001834
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001835 magic = PyMarshal_ReadLongFromFile(fp);
1836 if (magic != PyImport_GetMagicNumber()) {
1837 PyErr_SetString(PyExc_RuntimeError,
1838 "Bad magic number in .pyc file");
1839 return NULL;
1840 }
1841 (void) PyMarshal_ReadLongFromFile(fp);
1842 v = PyMarshal_ReadLastObjectFromFile(fp);
1843 fclose(fp);
1844 if (v == NULL || !PyCode_Check(v)) {
1845 Py_XDECREF(v);
1846 PyErr_SetString(PyExc_RuntimeError,
1847 "Bad code object in .pyc file");
1848 return NULL;
1849 }
1850 co = (PyCodeObject *)v;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001851 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001852 if (v && flags)
1853 flags->cf_flags |= (co->co_flags & PyCF_MASK);
1854 Py_DECREF(co);
1855 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001856}
1857
Guido van Rossum82598051997-03-05 00:20:32 +00001858PyObject *
Georg Brandl8334fd92010-12-04 10:26:46 +00001859Py_CompileStringExFlags(const char *str, const char *filename, int start,
1860 PyCompilerFlags *flags, int optimize)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001861{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001862 PyCodeObject *co;
1863 mod_ty mod;
1864 PyArena *arena = PyArena_New();
1865 if (arena == NULL)
1866 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001867
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001868 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
1869 if (mod == NULL) {
1870 PyArena_Free(arena);
1871 return NULL;
1872 }
1873 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
1874 PyObject *result = PyAST_mod2obj(mod);
1875 PyArena_Free(arena);
1876 return result;
1877 }
Georg Brandl8334fd92010-12-04 10:26:46 +00001878 co = PyAST_CompileEx(mod, filename, flags, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001879 PyArena_Free(arena);
1880 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001881}
1882
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001883/* For use in Py_LIMITED_API */
1884#undef Py_CompileString
1885PyObject *
1886PyCompileString(const char *str, const char *filename, int start)
1887{
1888 return Py_CompileStringFlags(str, filename, start, NULL);
1889}
1890
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001891struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001892Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001893{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001894 struct symtable *st;
1895 mod_ty mod;
1896 PyCompilerFlags flags;
1897 PyArena *arena = PyArena_New();
1898 if (arena == NULL)
1899 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001900
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001901 flags.cf_flags = 0;
1902 mod = PyParser_ASTFromString(str, filename, start, &flags, arena);
1903 if (mod == NULL) {
1904 PyArena_Free(arena);
1905 return NULL;
1906 }
1907 st = PySymtable_Build(mod, filename, 0);
1908 PyArena_Free(arena);
1909 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001910}
1911
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001912/* Preferred access to parser is through AST. */
1913mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001914PyParser_ASTFromString(const char *s, const char *filename, int start,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001915 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001916{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001917 mod_ty mod;
1918 PyCompilerFlags localflags;
1919 perrdetail err;
1920 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00001921
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001922 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename,
1923 &_PyParser_Grammar, start, &err,
1924 &iflags);
1925 if (flags == NULL) {
1926 localflags.cf_flags = 0;
1927 flags = &localflags;
1928 }
1929 if (n) {
1930 flags->cf_flags |= iflags & PyCF_MASK;
1931 mod = PyAST_FromNode(n, flags, filename, arena);
1932 PyNode_Free(n);
1933 return mod;
1934 }
1935 else {
1936 err_input(&err);
1937 return NULL;
1938 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001939}
1940
1941mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001942PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001943 int start, char *ps1,
1944 char *ps2, PyCompilerFlags *flags, int *errcode,
1945 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001946{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001947 mod_ty mod;
1948 PyCompilerFlags localflags;
1949 perrdetail err;
1950 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00001951
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001952 node *n = PyParser_ParseFileFlagsEx(fp, filename, enc,
1953 &_PyParser_Grammar,
1954 start, ps1, ps2, &err, &iflags);
1955 if (flags == NULL) {
1956 localflags.cf_flags = 0;
1957 flags = &localflags;
1958 }
1959 if (n) {
1960 flags->cf_flags |= iflags & PyCF_MASK;
1961 mod = PyAST_FromNode(n, flags, filename, arena);
1962 PyNode_Free(n);
1963 return mod;
1964 }
1965 else {
1966 err_input(&err);
1967 if (errcode)
1968 *errcode = err.error;
1969 return NULL;
1970 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001971}
1972
Guido van Rossuma110aa61994-08-29 12:50:44 +00001973/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001974
Guido van Rossuma110aa61994-08-29 12:50:44 +00001975node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001976PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001977{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001978 perrdetail err;
1979 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
1980 &_PyParser_Grammar,
1981 start, NULL, NULL, &err, flags);
1982 if (n == NULL)
1983 err_input(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001984
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001985 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001986}
1987
Guido van Rossuma110aa61994-08-29 12:50:44 +00001988/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001989
Guido van Rossuma110aa61994-08-29 12:50:44 +00001990node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001991PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001992{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001993 perrdetail err;
1994 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1995 start, &err, flags);
1996 if (n == NULL)
1997 err_input(&err);
1998 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00001999}
2000
2001node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002002PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002003 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002004{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002005 perrdetail err;
2006 node *n = PyParser_ParseStringFlagsFilename(str, filename,
2007 &_PyParser_Grammar, start, &err, flags);
2008 if (n == NULL)
2009 err_input(&err);
2010 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00002011}
2012
2013node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002014PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002015{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002016 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00002017}
2018
Guido van Rossum66ebd912003-04-17 16:02:26 +00002019/* May want to move a more generalized form of this to parsetok.c or
2020 even parser modules. */
2021
2022void
2023PyParser_SetError(perrdetail *err)
2024{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002025 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00002026}
2027
Guido van Rossuma110aa61994-08-29 12:50:44 +00002028/* Set the error appropriate to the given input error code (see errcode.h) */
2029
2030static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002031err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00002032{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002033 PyObject *v, *w, *errtype, *errtext;
2034 PyObject *msg_obj = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002035 PyObject *filename;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002036 char *msg = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002037
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002038 errtype = PyExc_SyntaxError;
2039 switch (err->error) {
2040 case E_ERROR:
2041 return;
2042 case E_SYNTAX:
2043 errtype = PyExc_IndentationError;
2044 if (err->expected == INDENT)
2045 msg = "expected an indented block";
2046 else if (err->token == INDENT)
2047 msg = "unexpected indent";
2048 else if (err->token == DEDENT)
2049 msg = "unexpected unindent";
2050 else {
2051 errtype = PyExc_SyntaxError;
2052 msg = "invalid syntax";
2053 }
2054 break;
2055 case E_TOKEN:
2056 msg = "invalid token";
2057 break;
2058 case E_EOFS:
2059 msg = "EOF while scanning triple-quoted string literal";
2060 break;
2061 case E_EOLS:
2062 msg = "EOL while scanning string literal";
2063 break;
2064 case E_INTR:
2065 if (!PyErr_Occurred())
2066 PyErr_SetNone(PyExc_KeyboardInterrupt);
2067 goto cleanup;
2068 case E_NOMEM:
2069 PyErr_NoMemory();
2070 goto cleanup;
2071 case E_EOF:
2072 msg = "unexpected EOF while parsing";
2073 break;
2074 case E_TABSPACE:
2075 errtype = PyExc_TabError;
2076 msg = "inconsistent use of tabs and spaces in indentation";
2077 break;
2078 case E_OVERFLOW:
2079 msg = "expression too long";
2080 break;
2081 case E_DEDENT:
2082 errtype = PyExc_IndentationError;
2083 msg = "unindent does not match any outer indentation level";
2084 break;
2085 case E_TOODEEP:
2086 errtype = PyExc_IndentationError;
2087 msg = "too many levels of indentation";
2088 break;
2089 case E_DECODE: {
2090 PyObject *type, *value, *tb;
2091 PyErr_Fetch(&type, &value, &tb);
2092 msg = "unknown decode error";
2093 if (value != NULL)
2094 msg_obj = PyObject_Str(value);
2095 Py_XDECREF(type);
2096 Py_XDECREF(value);
2097 Py_XDECREF(tb);
2098 break;
2099 }
2100 case E_LINECONT:
2101 msg = "unexpected character after line continuation character";
2102 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002103
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002104 case E_IDENTIFIER:
2105 msg = "invalid character in identifier";
2106 break;
2107 default:
2108 fprintf(stderr, "error=%d\n", err->error);
2109 msg = "unknown parsing error";
2110 break;
2111 }
2112 /* err->text may not be UTF-8 in case of decoding errors.
2113 Explicitly convert to an object. */
2114 if (!err->text) {
2115 errtext = Py_None;
2116 Py_INCREF(Py_None);
2117 } else {
2118 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
2119 "replace");
2120 }
Victor Stinner2f2ed1f2010-10-16 13:42:53 +00002121 if (err->filename != NULL)
2122 filename = PyUnicode_DecodeFSDefault(err->filename);
2123 else {
2124 Py_INCREF(Py_None);
2125 filename = Py_None;
2126 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002127 if (filename != NULL)
2128 v = Py_BuildValue("(NiiN)", filename,
2129 err->lineno, err->offset, errtext);
2130 else
2131 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002132 if (v != NULL) {
2133 if (msg_obj)
2134 w = Py_BuildValue("(OO)", msg_obj, v);
2135 else
2136 w = Py_BuildValue("(sO)", msg, v);
2137 } else
2138 w = NULL;
2139 Py_XDECREF(v);
2140 PyErr_SetObject(errtype, w);
2141 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002142cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002143 Py_XDECREF(msg_obj);
2144 if (err->text != NULL) {
2145 PyObject_FREE(err->text);
2146 err->text = NULL;
2147 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002148}
2149
2150/* Print fatal error message and abort */
2151
2152void
Tim Peters7c321a82002-07-09 02:57:01 +00002153Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002154{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002155 fprintf(stderr, "Fatal Python error: %s\n", msg);
2156 fflush(stderr); /* it helps in Windows debug build */
2157 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002158 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002159 }
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002160#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002161 {
2162 size_t len = strlen(msg);
2163 WCHAR* buffer;
2164 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002165
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002166 /* Convert the message to wchar_t. This uses a simple one-to-one
2167 conversion, assuming that the this error message actually uses ASCII
2168 only. If this ceases to be true, we will have to convert. */
2169 buffer = alloca( (len+1) * (sizeof *buffer));
2170 for( i=0; i<=len; ++i)
2171 buffer[i] = msg[i];
2172 OutputDebugStringW(L"Fatal Python error: ");
2173 OutputDebugStringW(buffer);
2174 OutputDebugStringW(L"\n");
2175 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002176#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002177 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002178#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002179#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002180 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002181}
2182
2183/* Clean up and exit */
2184
Guido van Rossuma110aa61994-08-29 12:50:44 +00002185#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002186#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002187#endif
2188
Collin Winter670e6922007-03-21 02:57:17 +00002189static void (*pyexitfunc)(void) = NULL;
2190/* For the atexit module. */
2191void _Py_PyAtExit(void (*func)(void))
2192{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002193 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002194}
2195
2196static void
2197call_py_exitfuncs(void)
2198{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002199 if (pyexitfunc == NULL)
2200 return;
Collin Winter670e6922007-03-21 02:57:17 +00002201
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002202 (*pyexitfunc)();
2203 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002204}
2205
Antoine Pitrou011bd622009-10-20 21:52:47 +00002206/* Wait until threading._shutdown completes, provided
2207 the threading module was imported in the first place.
2208 The shutdown routine will wait until all non-daemon
2209 "threading" threads have completed. */
2210static void
2211wait_for_thread_shutdown(void)
2212{
2213#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002214 PyObject *result;
2215 PyThreadState *tstate = PyThreadState_GET();
2216 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2217 "threading");
2218 if (threading == NULL) {
2219 /* threading not imported */
2220 PyErr_Clear();
2221 return;
2222 }
2223 result = PyObject_CallMethod(threading, "_shutdown", "");
2224 if (result == NULL) {
2225 PyErr_WriteUnraisable(threading);
2226 }
2227 else {
2228 Py_DECREF(result);
2229 }
2230 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002231#endif
2232}
2233
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002234#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002235static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002236static int nexitfuncs = 0;
2237
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002238int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002239{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002240 if (nexitfuncs >= NEXITFUNCS)
2241 return -1;
2242 exitfuncs[nexitfuncs++] = func;
2243 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002244}
2245
Guido van Rossumcc283f51997-08-05 02:22:03 +00002246static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002247call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002248{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002249 while (nexitfuncs > 0)
2250 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002251
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002252 fflush(stdout);
2253 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002254}
2255
2256void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002257Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002258{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002259 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002260
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002261 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002262}
2263
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002264static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002265initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002266{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002267#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002268 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002269#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002270#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002271 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002272#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002273#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002274 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002275#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002276 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002277}
2278
Guido van Rossum7433b121997-02-14 19:45:36 +00002279
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002280/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2281 *
2282 * All of the code in this function must only use async-signal-safe functions,
2283 * listed at `man 7 signal` or
2284 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2285 */
2286void
2287_Py_RestoreSignals(void)
2288{
2289#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002290 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002291#endif
2292#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002293 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002294#endif
2295#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002296 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002297#endif
2298}
2299
2300
Guido van Rossum7433b121997-02-14 19:45:36 +00002301/*
2302 * The file descriptor fd is considered ``interactive'' if either
2303 * a) isatty(fd) is TRUE, or
2304 * b) the -i flag was given, and the filename associated with
2305 * the descriptor is NULL or "<stdin>" or "???".
2306 */
2307int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002308Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002309{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002310 if (isatty((int)fileno(fp)))
2311 return 1;
2312 if (!Py_InteractiveFlag)
2313 return 0;
2314 return (filename == NULL) ||
2315 (strcmp(filename, "<stdin>") == 0) ||
2316 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002317}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002318
2319
Tim Petersd08e3822003-04-17 15:24:21 +00002320#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002321#if defined(WIN32) && defined(_MSC_VER)
2322
2323/* Stack checking for Microsoft C */
2324
2325#include <malloc.h>
2326#include <excpt.h>
2327
Fred Drakee8de31c2000-08-31 05:38:39 +00002328/*
2329 * Return non-zero when we run out of memory on the stack; zero otherwise.
2330 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002331int
Fred Drake399739f2000-08-31 05:52:44 +00002332PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002333{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002334 __try {
2335 /* alloca throws a stack overflow exception if there's
2336 not enough space left on the stack */
2337 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2338 return 0;
2339 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2340 EXCEPTION_EXECUTE_HANDLER :
2341 EXCEPTION_CONTINUE_SEARCH) {
2342 int errcode = _resetstkoflw();
2343 if (errcode == 0)
2344 {
2345 Py_FatalError("Could not reset the stack!");
2346 }
2347 }
2348 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002349}
2350
2351#endif /* WIN32 && _MSC_VER */
2352
2353/* Alternate implementations can be added here... */
2354
2355#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002356
2357
2358/* Wrappers around sigaction() or signal(). */
2359
2360PyOS_sighandler_t
2361PyOS_getsig(int sig)
2362{
2363#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002364 struct sigaction context;
2365 if (sigaction(sig, NULL, &context) == -1)
2366 return SIG_ERR;
2367 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002368#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002369 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002370/* Special signal handling for the secure CRT in Visual Studio 2005 */
2371#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002372 switch (sig) {
2373 /* Only these signals are valid */
2374 case SIGINT:
2375 case SIGILL:
2376 case SIGFPE:
2377 case SIGSEGV:
2378 case SIGTERM:
2379 case SIGBREAK:
2380 case SIGABRT:
2381 break;
2382 /* Don't call signal() with other values or it will assert */
2383 default:
2384 return SIG_ERR;
2385 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002386#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002387 handler = signal(sig, SIG_IGN);
2388 if (handler != SIG_ERR)
2389 signal(sig, handler);
2390 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002391#endif
2392}
2393
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002394/*
2395 * All of the code in this function must only use async-signal-safe functions,
2396 * listed at `man 7 signal` or
2397 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2398 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002399PyOS_sighandler_t
2400PyOS_setsig(int sig, PyOS_sighandler_t handler)
2401{
2402#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002403 /* Some code in Modules/signalmodule.c depends on sigaction() being
2404 * used here if HAVE_SIGACTION is defined. Fix that if this code
2405 * changes to invalidate that assumption.
2406 */
2407 struct sigaction context, ocontext;
2408 context.sa_handler = handler;
2409 sigemptyset(&context.sa_mask);
2410 context.sa_flags = 0;
2411 if (sigaction(sig, &context, &ocontext) == -1)
2412 return SIG_ERR;
2413 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002414#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002415 PyOS_sighandler_t oldhandler;
2416 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002417#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002418 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002419#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002420 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002421#endif
2422}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002423
2424/* Deprecated C API functions still provided for binary compatiblity */
2425
2426#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002427PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002428PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2429{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002430 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002431}
2432
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002433#undef PyParser_SimpleParseString
2434PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002435PyParser_SimpleParseString(const char *str, int start)
2436{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002437 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002438}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002439
2440#undef PyRun_AnyFile
2441PyAPI_FUNC(int)
2442PyRun_AnyFile(FILE *fp, const char *name)
2443{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002444 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002445}
2446
2447#undef PyRun_AnyFileEx
2448PyAPI_FUNC(int)
2449PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2450{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002451 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002452}
2453
2454#undef PyRun_AnyFileFlags
2455PyAPI_FUNC(int)
2456PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2457{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002458 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002459}
2460
2461#undef PyRun_File
2462PyAPI_FUNC(PyObject *)
2463PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2464{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002465 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002466}
2467
2468#undef PyRun_FileEx
2469PyAPI_FUNC(PyObject *)
2470PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2471{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002472 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002473}
2474
2475#undef PyRun_FileFlags
2476PyAPI_FUNC(PyObject *)
2477PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002478 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002479{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002480 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002481}
2482
2483#undef PyRun_SimpleFile
2484PyAPI_FUNC(int)
2485PyRun_SimpleFile(FILE *f, const char *p)
2486{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002487 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002488}
2489
2490#undef PyRun_SimpleFileEx
2491PyAPI_FUNC(int)
2492PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2493{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002494 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002495}
2496
2497
2498#undef PyRun_String
2499PyAPI_FUNC(PyObject *)
2500PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2501{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002502 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002503}
2504
2505#undef PyRun_SimpleString
2506PyAPI_FUNC(int)
2507PyRun_SimpleString(const char *s)
2508{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002509 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002510}
2511
2512#undef Py_CompileString
2513PyAPI_FUNC(PyObject *)
2514Py_CompileString(const char *str, const char *p, int s)
2515{
Georg Brandl8334fd92010-12-04 10:26:46 +00002516 return Py_CompileStringExFlags(str, p, s, NULL, -1);
2517}
2518
2519#undef Py_CompileStringFlags
2520PyAPI_FUNC(PyObject *)
2521Py_CompileStringFlags(const char *str, const char *p, int s,
2522 PyCompilerFlags *flags)
2523{
2524 return Py_CompileStringExFlags(str, p, s, flags, -1);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002525}
2526
2527#undef PyRun_InteractiveOne
2528PyAPI_FUNC(int)
2529PyRun_InteractiveOne(FILE *f, const char *p)
2530{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002531 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002532}
2533
2534#undef PyRun_InteractiveLoop
2535PyAPI_FUNC(int)
2536PyRun_InteractiveLoop(FILE *f, const char *p)
2537{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002538 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002539}
2540
2541#ifdef __cplusplus
2542}
2543#endif