blob: 784558c11976a96d910f4073aeba03604821551d [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"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000014#include "compile.h"
Jeremy Hylton4b38da62001-02-02 18:19:15 +000015#include "symtable.h"
Neal Norwitzadb69fc2005-12-17 20:54:49 +000016#include "pyarena.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000017#include "ast.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000018#include "eval.h"
Guido van Rossumfdef2711994-09-14 13:31:04 +000019#include "marshal.h"
Martin v. Löwis790465f2008-04-05 20:41:37 +000020#include "osdefs.h"
Antoine Pitrou011bd622009-10-20 21:52:47 +000021#include "abstract.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000022
Thomas Wouters0e3f5912006-08-11 14:57:12 +000023#ifdef HAVE_SIGNAL_H
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000024#include <signal.h>
Thomas Wouters0e3f5912006-08-11 14:57:12 +000025#endif
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000026
Benjamin Peterson80a50ac2009-01-02 21:24:04 +000027#ifdef MS_WINDOWS
Martin v. Löwis5c88d812009-01-02 20:47:48 +000028#include "malloc.h" /* for alloca */
Benjamin Peterson80a50ac2009-01-02 21:24:04 +000029#endif
Martin v. Löwis5c88d812009-01-02 20:47:48 +000030
Martin v. Löwis73d538b2003-03-05 15:13:47 +000031#ifdef HAVE_LANGINFO_H
32#include <locale.h>
33#include <langinfo.h>
34#endif
35
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000036#ifdef MS_WINDOWS
Guido van Rossuma44823b1995-03-14 15:01:17 +000037#undef BYTE
38#include "windows.h"
Martin v. Löwis790465f2008-04-05 20:41:37 +000039#define PATH_MAX MAXPATHLEN
Guido van Rossuma44823b1995-03-14 15:01:17 +000040#endif
41
Neal Norwitz4281cef2006-03-04 19:58:13 +000042#ifndef Py_REF_DEBUG
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000043#define PRINT_TOTAL_REFS()
Neal Norwitz4281cef2006-03-04 19:58:13 +000044#else /* Py_REF_DEBUG */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000045#define PRINT_TOTAL_REFS() fprintf(stderr, \
46 "[%" PY_FORMAT_SIZE_T "d refs]\n", \
47 _Py_GetRefTotal())
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000048#endif
49
50#ifdef __cplusplus
51extern "C" {
Neal Norwitz4281cef2006-03-04 19:58:13 +000052#endif
53
Martin v. Löwis790465f2008-04-05 20:41:37 +000054extern wchar_t *Py_GetPath(void);
Guido van Rossum1984f1e1992-08-04 12:41:02 +000055
Guido van Rossum82598051997-03-05 00:20:32 +000056extern grammar _PyParser_Grammar; /* From graminit.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000057
Guido van Rossumb73cc041993-11-01 16:28:59 +000058/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000059static void initmain(void);
Victor Stinnerb744ba12010-05-15 12:27:16 +000060static void initfsencoding(void);
Tim Petersdbd9ba62000-07-09 03:09:57 +000061static void initsite(void);
Guido van Rossumce3a72a2007-10-19 23:16:50 +000062static int initstdio(void);
Amaury Forgeot d'Arc7fedbe52008-04-10 21:03:09 +000063static void flush_io(void);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000064static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000065 PyCompilerFlags *, PyArena *);
Martin v. Löwis95292d62002-12-11 14:04:59 +000066static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000067 PyCompilerFlags *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000068static void err_input(perrdetail *);
69static void initsigs(void);
Collin Winter670e6922007-03-21 02:57:17 +000070static void call_py_exitfuncs(void);
Antoine Pitrou011bd622009-10-20 21:52:47 +000071static void wait_for_thread_shutdown(void);
Tim Petersdbd9ba62000-07-09 03:09:57 +000072static void call_ll_exitfuncs(void);
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000073extern void _PyUnicode_Init(void);
74extern void _PyUnicode_Fini(void);
Guido van Rossumddefaf32007-01-14 03:31:43 +000075extern int _PyLong_Init(void);
76extern void PyLong_Fini(void);
Guido van Rossumc94044c2000-03-10 23:03:54 +000077
Mark Hammond8d98d2c2003-04-19 15:41:53 +000078#ifdef WITH_THREAD
79extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
80extern void _PyGILState_Fini(void);
81#endif /* WITH_THREAD */
82
Guido van Rossum82598051997-03-05 00:20:32 +000083int Py_DebugFlag; /* Needed by parser.c */
84int Py_VerboseFlag; /* Needed by import.c */
Guido van Rossum7433b121997-02-14 19:45:36 +000085int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Guido van Rossumd8faa362007-04-27 19:54:29 +000086int Py_InspectFlag; /* Needed to determine whether to exit at SystemError */
Guido van Rossumdcc0c131997-08-29 22:32:42 +000087int Py_NoSiteFlag; /* Suppress 'import site' */
Guido van Rossum98297ee2007-11-06 21:34:58 +000088int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */
Christian Heimes790c8232008-01-07 21:14:23 +000089int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.py[co]) */
Barry Warsaw3ce09642000-05-02 19:18:59 +000090int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
Guido van Rossuma61691e1998-02-06 22:27:24 +000091int Py_FrozenFlag; /* Needed by getpath.c */
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +000092int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Christian Heimes8dc226f2008-05-06 23:45:46 +000093int Py_NoUserSiteDirectory = 0; /* for -s and site.py */
Antoine Pitrou05608432009-01-09 18:53:14 +000094int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000095
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 Stinner386fe712010-05-19 00:34:15 +0000153 if (name == NULL)
154 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;
Tim Petersd08e3822003-04-17 15:24:21 +0000194
Andrew M. Kuchlingb2ceb3a2010-02-22 23:26:10 +0000195#if defined(HAVE_LANGINFO_H) && defined(HAVE_SETLOCALE)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000196 /* Set up the LC_CTYPE locale, so we can obtain
197 the locale's charset without having to switch
198 locales. */
199 setlocale(LC_CTYPE, "");
Martin v. Löwisd1cd4d42007-08-11 14:02:14 +0000200#endif
201
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000202 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
203 Py_DebugFlag = add_flag(Py_DebugFlag, p);
204 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
205 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
206 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
207 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
208 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0')
209 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000210
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000211 interp = PyInterpreterState_New();
212 if (interp == NULL)
213 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000214
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000215 tstate = PyThreadState_New(interp);
216 if (tstate == NULL)
217 Py_FatalError("Py_Initialize: can't make first thread");
218 (void) PyThreadState_Swap(tstate);
Guido van Rossuma027efa1997-05-05 20:56:21 +0000219
Victor Stinner6961bd62010-08-17 22:26:51 +0000220#ifdef WITH_THREAD
Antoine Pitroub0b384b2010-09-20 20:13:48 +0000221 /* We can't call _PyEval_FiniThreads() in Py_Finalize because
222 destroying the GIL might fail when it is being referenced from
223 another running thread (see issue #9901).
224 Instead we destroy the previously created GIL here, which ensures
225 that we can call Py_Initialize / Py_Finalize multiple times. */
226 _PyEval_FiniThreads();
227
228 /* Auto-thread-state API */
Victor Stinner6961bd62010-08-17 22:26:51 +0000229 _PyGILState_Init(interp, tstate);
230#endif /* WITH_THREAD */
231
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000232 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000233
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000234 if (!_PyFrame_Init())
235 Py_FatalError("Py_Initialize: can't init frames");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000236
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000237 if (!_PyLong_Init())
238 Py_FatalError("Py_Initialize: can't init longs");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000239
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000240 if (!PyByteArray_Init())
241 Py_FatalError("Py_Initialize: can't init bytearray");
Neal Norwitz6968b052007-02-27 19:02:19 +0000242
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000243 _PyFloat_Init();
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000244
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000245 interp->modules = PyDict_New();
246 if (interp->modules == NULL)
247 Py_FatalError("Py_Initialize: can't make modules dictionary");
248 interp->modules_reloading = PyDict_New();
249 if (interp->modules_reloading == NULL)
250 Py_FatalError("Py_Initialize: can't make modules_reloading dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000251
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000252 /* Init Unicode implementation; relies on the codec registry */
253 _PyUnicode_Init();
Guido van Rossumc94044c2000-03-10 23:03:54 +0000254
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000255 bimod = _PyBuiltin_Init();
256 if (bimod == NULL)
257 Py_FatalError("Py_Initialize: can't initialize builtins modules");
Victor Stinner49d3f252010-10-17 01:24:53 +0000258 _PyImport_FixupBuiltin(bimod, "builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000259 interp->builtins = PyModule_GetDict(bimod);
260 if (interp->builtins == NULL)
261 Py_FatalError("Py_Initialize: can't initialize builtins dict");
262 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000263
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000264 /* initialize builtin exceptions */
265 _PyExc_Init();
Christian Heimes9a68f8c2007-11-14 00:16:07 +0000266
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000267 sysmod = _PySys_Init();
268 if (sysmod == NULL)
269 Py_FatalError("Py_Initialize: can't initialize sys");
270 interp->sysdict = PyModule_GetDict(sysmod);
271 if (interp->sysdict == NULL)
272 Py_FatalError("Py_Initialize: can't initialize sys dict");
273 Py_INCREF(interp->sysdict);
Victor Stinner49d3f252010-10-17 01:24:53 +0000274 _PyImport_FixupBuiltin(sysmod, "sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000275 PySys_SetPath(Py_GetPath());
276 PyDict_SetItemString(interp->sysdict, "modules",
277 interp->modules);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000278
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000279 /* Set up a preliminary stderr printer until we have enough
280 infrastructure for the io module in place. */
281 pstderr = PyFile_NewStdPrinter(fileno(stderr));
282 if (pstderr == NULL)
283 Py_FatalError("Py_Initialize: can't set preliminary stderr");
284 PySys_SetObject("stderr", pstderr);
285 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000286 Py_DECREF(pstderr);
Guido van Rossum826d8972007-10-30 18:34:07 +0000287
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000288 _PyImport_Init();
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000289
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000290 _PyImportHooks_Init();
Just van Rossum52e14d62002-12-30 22:08:05 +0000291
Victor Stinner7d79b8b2010-05-19 20:40:50 +0000292 /* Initialize _warnings. */
293 _PyWarnings_Init();
294
Alexander Belopolsky6fc4ade2010-08-05 17:34:27 +0000295 _PyTime_Init();
296
Victor Stinnerb744ba12010-05-15 12:27:16 +0000297 initfsencoding();
Martin v. Löwis011e8422009-05-05 04:43:17 +0000298
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000299 if (install_sigs)
300 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000301
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000302 initmain(); /* Module __main__ */
303 if (initstdio() < 0)
304 Py_FatalError(
305 "Py_Initialize: can't initialize sys standard streams");
306
Antoine Pitroucf9f9802010-11-10 13:55:25 +0000307 /* Initialize warnings. */
308 if (PySys_HasWarnOptions()) {
309 PyObject *warnings_module = PyImport_ImportModule("warnings");
310 if (warnings_module == NULL) {
311 fprintf(stderr, "'import warnings' failed; traceback:\n");
312 PyErr_Print();
313 }
314 Py_XDECREF(warnings_module);
315 }
316
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000317 if (!Py_NoSiteFlag)
318 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000319}
320
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000321void
322Py_Initialize(void)
323{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000324 Py_InitializeEx(1);
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000325}
326
327
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000328#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000329extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000330#endif
331
Guido van Rossume8432ac2007-07-09 15:04:50 +0000332/* Flush stdout and stderr */
333
Neal Norwitz2bad9702007-08-27 06:19:22 +0000334static void
Guido van Rossum1bd21222007-07-10 20:14:13 +0000335flush_std_files(void)
Guido van Rossume8432ac2007-07-09 15:04:50 +0000336{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000337 PyObject *fout = PySys_GetObject("stdout");
338 PyObject *ferr = PySys_GetObject("stderr");
339 PyObject *tmp;
Guido van Rossume8432ac2007-07-09 15:04:50 +0000340
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000341 if (fout != NULL && fout != Py_None) {
342 tmp = PyObject_CallMethod(fout, "flush", "");
343 if (tmp == NULL)
Antoine Pitroubddc9fe2010-08-08 20:46:42 +0000344 PyErr_WriteUnraisable(fout);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000345 else
346 Py_DECREF(tmp);
347 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000348
Victor Stinner9467b212010-05-14 00:59:09 +0000349 if (ferr != NULL && ferr != Py_None) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000350 tmp = PyObject_CallMethod(ferr, "flush", "");
351 if (tmp == NULL)
352 PyErr_Clear();
353 else
354 Py_DECREF(tmp);
355 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000356}
357
Guido van Rossum25ce5661997-08-02 03:10:38 +0000358/* Undo the effect of Py_Initialize().
359
360 Beware: if multiple interpreter and/or thread states exist, these
361 are not wiped out; only the current thread and interpreter state
362 are deleted. But since everything else is deleted, those other
363 interpreter and thread states should no longer be used.
364
365 (XXX We should do better, e.g. wipe out all interpreters and
366 threads.)
367
368 Locking: as above.
369
370*/
371
372void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000373Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000374{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000375 PyInterpreterState *interp;
376 PyThreadState *tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000377
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000378 if (!initialized)
379 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000380
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000381 wait_for_thread_shutdown();
Antoine Pitrou011bd622009-10-20 21:52:47 +0000382
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000383 /* The interpreter is still entirely intact at this point, and the
384 * exit funcs may be relying on that. In particular, if some thread
385 * or exit func is still waiting to do an import, the import machinery
386 * expects Py_IsInitialized() to return true. So don't say the
387 * interpreter is uninitialized until after the exit funcs have run.
388 * Note that Threading.py uses an exit func to do a join on all the
389 * threads created thru it, so this also protects pending imports in
390 * the threads created via Threading.
391 */
392 call_py_exitfuncs();
393 initialized = 0;
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000394
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000395 /* Flush stdout+stderr */
396 flush_std_files();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000397
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000398 /* Get current thread state and interpreter pointer */
399 tstate = PyThreadState_GET();
400 interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000401
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000402 /* Disable signal handling */
403 PyOS_FiniInterrupts();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000404
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000405 /* Clear type lookup cache */
406 PyType_ClearCache();
Christian Heimes26855632008-01-27 23:50:43 +0000407
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000408 /* Collect garbage. This may call finalizers; it's nice to call these
409 * before all modules are destroyed.
410 * XXX If a __del__ or weakref callback is triggered here, and tries to
411 * XXX import a module, bad things can happen, because Python no
412 * XXX longer believes it's initialized.
413 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
414 * XXX is easy to provoke that way. I've also seen, e.g.,
415 * XXX Exception exceptions.ImportError: 'No module named sha'
416 * XXX in <function callback at 0x008F5718> ignored
417 * XXX but I'm unclear on exactly how that one happens. In any case,
418 * XXX I haven't seen a real-life report of either of these.
419 */
420 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000421#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000422 /* With COUNT_ALLOCS, it helps to run GC multiple times:
423 each collection might release some types from the type
424 list, so they become garbage. */
425 while (PyGC_Collect() > 0)
426 /* nothing */;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000427#endif
Antoine Pitrou696e0352010-08-08 22:18:46 +0000428 /* We run this while most interpreter state is still alive, so that
429 debug information can be printed out */
430 _PyGC_Fini();
Guido van Rossume13ddc92003-04-17 17:29:22 +0000431
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000432 /* Destroy all modules */
433 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000434
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000435 /* Flush stdout+stderr (again, in case more was printed) */
436 flush_std_files();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000437
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000438 /* Collect final garbage. This disposes of cycles created by
439 * new-style class definitions, for example.
440 * XXX This is disabled because it caused too many problems. If
441 * XXX a __del__ or weakref callback triggers here, Python code has
442 * XXX a hard time running, because even the sys module has been
443 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
444 * XXX One symptom is a sequence of information-free messages
445 * XXX coming from threads (if a __del__ or callback is invoked,
446 * XXX other threads can execute too, and any exception they encounter
447 * XXX triggers a comedy of errors as subsystem after subsystem
448 * XXX fails to find what it *expects* to find in sys to help report
449 * XXX the exception and consequent unexpected failures). I've also
450 * XXX seen segfaults then, after adding print statements to the
451 * XXX Python code getting called.
452 */
Tim Peters1d7323e2003-12-01 21:35:27 +0000453#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000454 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000455#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000456
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000457 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
458 _PyImport_Fini();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000459
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000460 /* Debugging stuff */
Guido van Rossum1707aad1997-12-08 23:43:45 +0000461#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000462 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000463#endif
464
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000465 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000466
Tim Peters9cf25ce2003-04-17 15:21:01 +0000467#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000468 /* Display all objects still alive -- this can invoke arbitrary
469 * __repr__ overrides, so requires a mostly-intact interpreter.
470 * Alas, a lot of stuff may still be alive now that will be cleaned
471 * up later.
472 */
473 if (Py_GETENV("PYTHONDUMPREFS"))
474 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000475#endif /* Py_TRACE_REFS */
476
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000477 /* Clear interpreter state */
478 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000479
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000480 /* Now we decref the exception classes. After this point nothing
481 can raise an exception. That's okay, because each Fini() method
482 below has been checked to make sure no exceptions are ever
483 raised.
484 */
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000485
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000486 _PyExc_Fini();
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000487
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000488 /* Cleanup auto-thread-state */
Christian Heimes7d2ff882007-11-30 14:35:04 +0000489#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000490 _PyGILState_Fini();
Christian Heimes7d2ff882007-11-30 14:35:04 +0000491#endif /* WITH_THREAD */
492
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000493 /* Delete current thread */
494 PyThreadState_Swap(NULL);
495 PyInterpreterState_Delete(interp);
Barry Warsawf242aa02000-05-25 23:09:49 +0000496
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000497 /* Sundry finalizers */
498 PyMethod_Fini();
499 PyFrame_Fini();
500 PyCFunction_Fini();
501 PyTuple_Fini();
502 PyList_Fini();
503 PySet_Fini();
504 PyBytes_Fini();
505 PyByteArray_Fini();
506 PyLong_Fini();
507 PyFloat_Fini();
508 PyDict_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000509
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000510 /* Cleanup Unicode implementation */
511 _PyUnicode_Fini();
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000512
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000513 /* reset file system default encoding */
Victor Stinnerb744ba12010-05-15 12:27:16 +0000514 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000515 free((char*)Py_FileSystemDefaultEncoding);
516 Py_FileSystemDefaultEncoding = NULL;
517 }
Christian Heimesc8967002007-11-30 10:18:26 +0000518
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000519 /* XXX Still allocated:
520 - various static ad-hoc pointers to interned strings
521 - int and float free list blocks
522 - whatever various modules and libraries allocate
523 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000524
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000525 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000526
Tim Peters269b2a62003-04-17 19:52:29 +0000527#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000528 /* Display addresses (& refcnts) of all objects still alive.
529 * An address can be used to find the repr of the object, printed
530 * above by _Py_PrintReferences.
531 */
532 if (Py_GETENV("PYTHONDUMPREFS"))
533 _Py_PrintReferenceAddresses(stderr);
Tim Peters269b2a62003-04-17 19:52:29 +0000534#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000535#ifdef PYMALLOC_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 if (Py_GETENV("PYTHONMALLOCSTATS"))
537 _PyObject_DebugMallocStats();
Tim Peters0e871182002-04-13 08:29:14 +0000538#endif
539
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000540 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000541}
542
543/* Create and initialize a new interpreter and thread, and return the
544 new thread. This requires that Py_Initialize() has been called
545 first.
546
547 Unsuccessful initialization yields a NULL pointer. Note that *no*
548 exception information is available even in this case -- the
549 exception information is held in the thread, and there is no
550 thread.
551
552 Locking: as above.
553
554*/
555
556PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000557Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000558{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000559 PyInterpreterState *interp;
560 PyThreadState *tstate, *save_tstate;
561 PyObject *bimod, *sysmod;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000562
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000563 if (!initialized)
564 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000565
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000566 interp = PyInterpreterState_New();
567 if (interp == NULL)
568 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000569
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000570 tstate = PyThreadState_New(interp);
571 if (tstate == NULL) {
572 PyInterpreterState_Delete(interp);
573 return NULL;
574 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000575
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000576 save_tstate = PyThreadState_Swap(tstate);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000577
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000578 /* XXX The following is lax in error checking */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000579
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000580 interp->modules = PyDict_New();
581 interp->modules_reloading = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000582
Victor Stinner49d3f252010-10-17 01:24:53 +0000583 bimod = _PyImport_FindBuiltin("builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000584 if (bimod != NULL) {
585 interp->builtins = PyModule_GetDict(bimod);
586 if (interp->builtins == NULL)
587 goto handle_error;
588 Py_INCREF(interp->builtins);
589 }
Christian Heimes6a27efa2008-10-30 21:48:26 +0000590
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000591 /* initialize builtin exceptions */
592 _PyExc_Init();
Christian Heimes6a27efa2008-10-30 21:48:26 +0000593
Victor Stinner49d3f252010-10-17 01:24:53 +0000594 sysmod = _PyImport_FindBuiltin("sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000595 if (bimod != NULL && sysmod != NULL) {
596 PyObject *pstderr;
597 interp->sysdict = PyModule_GetDict(sysmod);
598 if (interp->sysdict == NULL)
599 goto handle_error;
600 Py_INCREF(interp->sysdict);
601 PySys_SetPath(Py_GetPath());
602 PyDict_SetItemString(interp->sysdict, "modules",
603 interp->modules);
604 /* Set up a preliminary stderr printer until we have enough
605 infrastructure for the io module in place. */
606 pstderr = PyFile_NewStdPrinter(fileno(stderr));
607 if (pstderr == NULL)
608 Py_FatalError("Py_Initialize: can't set preliminary stderr");
609 PySys_SetObject("stderr", pstderr);
610 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000611 Py_DECREF(pstderr);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000612
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000613 _PyImportHooks_Init();
614 if (initstdio() < 0)
615 Py_FatalError(
616 "Py_Initialize: can't initialize sys standard streams");
617 initmain();
618 if (!Py_NoSiteFlag)
619 initsite();
620 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000621
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000622 if (!PyErr_Occurred())
623 return tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000624
Thomas Wouters89f507f2006-12-13 04:49:30 +0000625handle_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000626 /* Oops, it didn't work. Undo it all. */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000627
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000628 PyErr_Print();
629 PyThreadState_Clear(tstate);
630 PyThreadState_Swap(save_tstate);
631 PyThreadState_Delete(tstate);
632 PyInterpreterState_Delete(interp);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000633
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000634 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000635}
636
637/* Delete an interpreter and its last thread. This requires that the
638 given thread state is current, that the thread has no remaining
639 frames, and that it is its interpreter's only remaining thread.
640 It is a fatal error to violate these constraints.
641
642 (Py_Finalize() doesn't have these constraints -- it zaps
643 everything, regardless.)
644
645 Locking: as above.
646
647*/
648
649void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000650Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000651{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000652 PyInterpreterState *interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000653
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000654 if (tstate != PyThreadState_GET())
655 Py_FatalError("Py_EndInterpreter: thread is not current");
656 if (tstate->frame != NULL)
657 Py_FatalError("Py_EndInterpreter: thread still has a frame");
658 if (tstate != interp->tstate_head || tstate->next != NULL)
659 Py_FatalError("Py_EndInterpreter: not the last thread");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000660
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000661 PyImport_Cleanup();
662 PyInterpreterState_Clear(interp);
663 PyThreadState_Swap(NULL);
664 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000665}
666
Martin v. Löwis790465f2008-04-05 20:41:37 +0000667static wchar_t *progname = L"python";
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000668
669void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000670Py_SetProgramName(wchar_t *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000671{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000672 if (pn && *pn)
673 progname = pn;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000674}
675
Martin v. Löwis790465f2008-04-05 20:41:37 +0000676wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000677Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000678{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000679 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000680}
681
Martin v. Löwis790465f2008-04-05 20:41:37 +0000682static wchar_t *default_home = NULL;
683static wchar_t env_home[PATH_MAX+1];
Guido van Rossuma61691e1998-02-06 22:27:24 +0000684
685void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000686Py_SetPythonHome(wchar_t *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000687{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000688 default_home = home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000689}
690
Martin v. Löwis790465f2008-04-05 20:41:37 +0000691wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000692Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000693{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 wchar_t *home = default_home;
695 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
696 char* chome = Py_GETENV("PYTHONHOME");
697 if (chome) {
698 size_t r = mbstowcs(env_home, chome, PATH_MAX+1);
699 if (r != (size_t)-1 && r <= PATH_MAX)
700 home = env_home;
701 }
Martin v. Löwis790465f2008-04-05 20:41:37 +0000702
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000703 }
704 return home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000705}
706
Guido van Rossum6135a871995-01-09 17:53:26 +0000707/* Create __main__ module */
708
709static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000710initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000711{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000712 PyObject *m, *d;
713 m = PyImport_AddModule("__main__");
714 if (m == NULL)
715 Py_FatalError("can't create __main__ module");
716 d = PyModule_GetDict(m);
717 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
718 PyObject *bimod = PyImport_ImportModule("builtins");
719 if (bimod == NULL ||
720 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
721 Py_FatalError("can't add __builtins__ to __main__");
722 Py_DECREF(bimod);
723 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000724}
725
Victor Stinnerb744ba12010-05-15 12:27:16 +0000726static void
727initfsencoding(void)
728{
729 PyObject *codec;
730#if defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94908bb2010-08-18 21:23:25 +0000731 char *codeset = NULL;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000732
Victor Stinner7f84ab52010-06-11 00:36:33 +0000733 if (Py_FileSystemDefaultEncoding == NULL) {
Victor Stinner8f6b6b02010-10-13 22:02:27 +0000734 /* On Unix, set the file system encoding according to the
735 user's preference, if the CODESET names a well-known
736 Python codec, and Py_FileSystemDefaultEncoding isn't
Victor Stinnere4743092010-10-19 00:05:51 +0000737 initialized by other means. */
Victor Stinner8f6b6b02010-10-13 22:02:27 +0000738 codeset = get_codeset();
Victor Stinnere4743092010-10-19 00:05:51 +0000739 if (codeset == NULL)
740 Py_FatalError("Py_Initialize: Unable to get the locale encoding");
Victor Stinnerb744ba12010-05-15 12:27:16 +0000741
Victor Stinnere4743092010-10-19 00:05:51 +0000742 Py_FileSystemDefaultEncoding = codeset;
743 Py_HasFileSystemDefaultEncoding = 0;
744 return;
Victor Stinner7f84ab52010-06-11 00:36:33 +0000745 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000746#endif
747
748 /* the encoding is mbcs, utf-8 or ascii */
749 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
750 if (!codec) {
751 /* Such error can only occurs in critical situations: no more
752 * memory, import a module of the standard library failed,
753 * etc. */
754 Py_FatalError("Py_Initialize: unable to load the file system codec");
755 } else {
756 Py_DECREF(codec);
757 }
758}
759
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000760/* Import the site module (not into __main__ though) */
761
762static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000763initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000764{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000765 PyObject *m;
766 m = PyImport_ImportModule("site");
767 if (m == NULL) {
768 PyErr_Print();
769 Py_Finalize();
770 exit(1);
771 }
772 else {
773 Py_DECREF(m);
774 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000775}
776
Antoine Pitrou05608432009-01-09 18:53:14 +0000777static PyObject*
778create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000779 int fd, int write_mode, char* name,
780 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +0000781{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000782 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
783 const char* mode;
784 PyObject *line_buffering;
785 int buffering, isatty;
Antoine Pitrou05608432009-01-09 18:53:14 +0000786
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000787 /* stdin is always opened in buffered mode, first because it shouldn't
788 make a difference in common use cases, second because TextIOWrapper
789 depends on the presence of a read1() method which only exists on
790 buffered streams.
791 */
792 if (Py_UnbufferedStdioFlag && write_mode)
793 buffering = 0;
794 else
795 buffering = -1;
796 if (write_mode)
797 mode = "wb";
798 else
799 mode = "rb";
800 buf = PyObject_CallMethod(io, "open", "isiOOOi",
801 fd, mode, buffering,
802 Py_None, Py_None, Py_None, 0);
803 if (buf == NULL)
804 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000805
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000806 if (buffering) {
807 raw = PyObject_GetAttrString(buf, "raw");
808 if (raw == NULL)
809 goto error;
810 }
811 else {
812 raw = buf;
813 Py_INCREF(raw);
814 }
Antoine Pitrou05608432009-01-09 18:53:14 +0000815
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 text = PyUnicode_FromString(name);
817 if (text == NULL || PyObject_SetAttrString(raw, "name", text) < 0)
818 goto error;
819 res = PyObject_CallMethod(raw, "isatty", "");
820 if (res == NULL)
821 goto error;
822 isatty = PyObject_IsTrue(res);
823 Py_DECREF(res);
824 if (isatty == -1)
825 goto error;
826 if (isatty || Py_UnbufferedStdioFlag)
827 line_buffering = Py_True;
828 else
829 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +0000830
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000831 Py_CLEAR(raw);
832 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +0000833
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000834 stream = PyObject_CallMethod(io, "TextIOWrapper", "OsssO",
835 buf, encoding, errors,
836 "\n", line_buffering);
837 Py_CLEAR(buf);
838 if (stream == NULL)
839 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000840
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000841 if (write_mode)
842 mode = "w";
843 else
844 mode = "r";
845 text = PyUnicode_FromString(mode);
846 if (!text || PyObject_SetAttrString(stream, "mode", text) < 0)
847 goto error;
848 Py_CLEAR(text);
849 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +0000850
851error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000852 Py_XDECREF(buf);
853 Py_XDECREF(stream);
854 Py_XDECREF(text);
855 Py_XDECREF(raw);
856 return NULL;
Antoine Pitrou05608432009-01-09 18:53:14 +0000857}
858
Georg Brandl1a3284e2007-12-02 09:40:06 +0000859/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000860static int
861initstdio(void)
862{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000863 PyObject *iomod = NULL, *wrapper;
864 PyObject *bimod = NULL;
865 PyObject *m;
866 PyObject *std = NULL;
867 int status = 0, fd;
868 PyObject * encoding_attr;
869 char *encoding = NULL, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000870
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000871 /* Hack to avoid a nasty recursion issue when Python is invoked
872 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
873 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
874 goto error;
875 }
876 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000877
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000878 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
879 goto error;
880 }
881 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000882
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000883 if (!(bimod = PyImport_ImportModule("builtins"))) {
884 goto error;
885 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000886
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000887 if (!(iomod = PyImport_ImportModule("io"))) {
888 goto error;
889 }
890 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
891 goto error;
892 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000893
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000894 /* Set builtins.open */
895 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
896 goto error;
897 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000898
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000899 encoding = Py_GETENV("PYTHONIOENCODING");
900 errors = NULL;
901 if (encoding) {
902 encoding = strdup(encoding);
903 errors = strchr(encoding, ':');
904 if (errors) {
905 *errors = '\0';
906 errors++;
907 }
908 }
Martin v. Löwis0f599892008-06-02 11:13:03 +0000909
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000910 /* Set sys.stdin */
911 fd = fileno(stdin);
912 /* Under some conditions stdin, stdout and stderr may not be connected
913 * and fileno() may point to an invalid file descriptor. For example
914 * GUI apps don't have valid standard streams by default.
915 */
916 if (fd < 0) {
Christian Heimes58cb1b82007-11-13 02:19:40 +0000917#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000918 std = Py_None;
919 Py_INCREF(std);
Christian Heimes58cb1b82007-11-13 02:19:40 +0000920#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000921 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000922#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000923 }
924 else {
925 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
926 if (std == NULL)
927 goto error;
928 } /* if (fd < 0) */
929 PySys_SetObject("__stdin__", std);
930 PySys_SetObject("stdin", std);
931 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000932
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000933 /* Set sys.stdout */
934 fd = fileno(stdout);
935 if (fd < 0) {
Christian Heimes58cb1b82007-11-13 02:19:40 +0000936#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000937 std = Py_None;
938 Py_INCREF(std);
Christian Heimes58cb1b82007-11-13 02:19:40 +0000939#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000940 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000941#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000942 }
943 else {
944 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
945 if (std == NULL)
946 goto error;
947 } /* if (fd < 0) */
948 PySys_SetObject("__stdout__", std);
949 PySys_SetObject("stdout", std);
950 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000951
Guido van Rossum98297ee2007-11-06 21:34:58 +0000952#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000953 /* Set sys.stderr, replaces the preliminary stderr */
954 fd = fileno(stderr);
955 if (fd < 0) {
Christian Heimes58cb1b82007-11-13 02:19:40 +0000956#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000957 std = Py_None;
958 Py_INCREF(std);
Christian Heimes58cb1b82007-11-13 02:19:40 +0000959#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000960 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000961#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000962 }
963 else {
964 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
965 if (std == NULL)
966 goto error;
967 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +0000968
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000969 /* Same as hack above, pre-import stderr's codec to avoid recursion
970 when import.c tries to write to stderr in verbose mode. */
971 encoding_attr = PyObject_GetAttrString(std, "encoding");
972 if (encoding_attr != NULL) {
973 const char * encoding;
974 encoding = _PyUnicode_AsString(encoding_attr);
975 if (encoding != NULL) {
976 _PyCodec_Lookup(encoding);
977 }
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000978 Py_DECREF(encoding_attr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000979 }
980 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +0000981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000982 PySys_SetObject("__stderr__", std);
983 PySys_SetObject("stderr", std);
984 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +0000985#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000986
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000987 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000988 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000989 status = -1;
990 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000991
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000992 if (encoding)
993 free(encoding);
994 Py_XDECREF(bimod);
995 Py_XDECREF(iomod);
996 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000997}
998
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000999/* Parse input from a file and execute it */
1000
1001int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001002PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001003 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001004{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001005 if (filename == NULL)
1006 filename = "???";
1007 if (Py_FdIsInteractive(fp, filename)) {
1008 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1009 if (closeit)
1010 fclose(fp);
1011 return err;
1012 }
1013 else
1014 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001015}
1016
1017int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001018PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001019{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001020 PyObject *v;
1021 int ret;
1022 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001023
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001024 if (flags == NULL) {
1025 flags = &local_flags;
1026 local_flags.cf_flags = 0;
1027 }
1028 v = PySys_GetObject("ps1");
1029 if (v == NULL) {
1030 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
1031 Py_XDECREF(v);
1032 }
1033 v = PySys_GetObject("ps2");
1034 if (v == NULL) {
1035 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
1036 Py_XDECREF(v);
1037 }
1038 for (;;) {
1039 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
1040 PRINT_TOTAL_REFS();
1041 if (ret == E_EOF)
1042 return 0;
1043 /*
1044 if (ret == E_NOMEM)
1045 return -1;
1046 */
1047 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001048}
1049
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001050/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001051static int PARSER_FLAGS(PyCompilerFlags *flags)
1052{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001053 int parser_flags = 0;
1054 if (!flags)
1055 return 0;
1056 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1057 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1058 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1059 parser_flags |= PyPARSE_IGNORE_COOKIE;
1060 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1061 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1062 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001063}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001064
Thomas Wouters89f507f2006-12-13 04:49:30 +00001065#if 0
1066/* Keep an example of flags with future keyword support. */
1067#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001068 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1069 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1070 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1071 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001072#endif
1073
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001074int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001075PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001076{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001077 PyObject *m, *d, *v, *w, *oenc = NULL;
1078 mod_ty mod;
1079 PyArena *arena;
1080 char *ps1 = "", *ps2 = "", *enc = NULL;
1081 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +00001082
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001083 if (fp == stdin) {
1084 /* Fetch encoding from sys.stdin */
1085 v = PySys_GetObject("stdin");
1086 if (v == NULL || v == Py_None)
1087 return -1;
1088 oenc = PyObject_GetAttrString(v, "encoding");
1089 if (!oenc)
1090 return -1;
1091 enc = _PyUnicode_AsString(oenc);
Victor Stinner386fe712010-05-19 00:34:15 +00001092 if (enc == NULL)
1093 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001094 }
1095 v = PySys_GetObject("ps1");
1096 if (v != NULL) {
1097 v = PyObject_Str(v);
1098 if (v == NULL)
1099 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001100 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001101 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001102 if (ps1 == NULL) {
1103 PyErr_Clear();
1104 ps1 = "";
1105 }
1106 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001107 }
1108 w = PySys_GetObject("ps2");
1109 if (w != NULL) {
1110 w = PyObject_Str(w);
1111 if (w == NULL)
1112 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001113 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001114 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001115 if (ps2 == NULL) {
1116 PyErr_Clear();
1117 ps2 = "";
1118 }
1119 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001120 }
1121 arena = PyArena_New();
1122 if (arena == NULL) {
1123 Py_XDECREF(v);
1124 Py_XDECREF(w);
1125 Py_XDECREF(oenc);
1126 return -1;
1127 }
1128 mod = PyParser_ASTFromFile(fp, filename, enc,
1129 Py_single_input, ps1, ps2,
1130 flags, &errcode, arena);
1131 Py_XDECREF(v);
1132 Py_XDECREF(w);
1133 Py_XDECREF(oenc);
1134 if (mod == NULL) {
1135 PyArena_Free(arena);
1136 if (errcode == E_EOF) {
1137 PyErr_Clear();
1138 return E_EOF;
1139 }
1140 PyErr_Print();
1141 return -1;
1142 }
1143 m = PyImport_AddModule("__main__");
1144 if (m == NULL) {
1145 PyArena_Free(arena);
1146 return -1;
1147 }
1148 d = PyModule_GetDict(m);
1149 v = run_mod(mod, filename, d, d, flags, arena);
1150 PyArena_Free(arena);
1151 flush_io();
1152 if (v == NULL) {
1153 PyErr_Print();
1154 return -1;
1155 }
1156 Py_DECREF(v);
1157 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001158}
1159
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001160/* Check whether a file maybe a pyc file: Look at the extension,
1161 the file type, and, if we may close it, at the first few bytes. */
1162
1163static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001164maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001165{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001166 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1167 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001168
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001169 /* Only look into the file if we are allowed to close it, since
1170 it then should also be seekable. */
1171 if (closeit) {
1172 /* Read only two bytes of the magic. If the file was opened in
1173 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1174 be read as they are on disk. */
1175 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1176 unsigned char buf[2];
1177 /* Mess: In case of -x, the stream is NOT at its start now,
1178 and ungetc() was used to push back the first newline,
1179 which makes the current stream position formally undefined,
1180 and a x-platform nightmare.
1181 Unfortunately, we have no direct way to know whether -x
1182 was specified. So we use a terrible hack: if the current
1183 stream position is not 0, we assume -x was specified, and
1184 give up. Bug 132850 on SourceForge spells out the
1185 hopelessness of trying anything else (fseek and ftell
1186 don't work predictably x-platform for text-mode files).
1187 */
1188 int ispyc = 0;
1189 if (ftell(fp) == 0) {
1190 if (fread(buf, 1, 2, fp) == 2 &&
1191 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1192 ispyc = 1;
1193 rewind(fp);
1194 }
1195 return ispyc;
1196 }
1197 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001198}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001199
Guido van Rossum0df002c2000-08-27 19:21:52 +00001200int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001201PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001202 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001203{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001204 PyObject *m, *d, *v;
1205 const char *ext;
1206 int set_file_name = 0, ret, len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001207
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001208 m = PyImport_AddModule("__main__");
1209 if (m == NULL)
1210 return -1;
1211 d = PyModule_GetDict(m);
1212 if (PyDict_GetItemString(d, "__file__") == NULL) {
1213 PyObject *f;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001214 f = PyUnicode_DecodeFSDefault(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001215 if (f == NULL)
1216 return -1;
1217 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1218 Py_DECREF(f);
1219 return -1;
1220 }
1221 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0)
1222 return -1;
1223 set_file_name = 1;
1224 Py_DECREF(f);
1225 }
1226 len = strlen(filename);
1227 ext = filename + len - (len > 4 ? 4 : 0);
1228 if (maybe_pyc_file(fp, filename, ext, closeit)) {
1229 /* Try to run a pyc file. First, re-open in binary */
1230 if (closeit)
1231 fclose(fp);
1232 if ((fp = fopen(filename, "rb")) == NULL) {
1233 fprintf(stderr, "python: Can't reopen .pyc file\n");
1234 ret = -1;
1235 goto done;
1236 }
1237 /* Turn on optimization if a .pyo file is given */
1238 if (strcmp(ext, ".pyo") == 0)
1239 Py_OptimizeFlag = 1;
1240 v = run_pyc_file(fp, filename, d, d, flags);
1241 } else {
1242 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1243 closeit, flags);
1244 }
1245 flush_io();
1246 if (v == NULL) {
1247 PyErr_Print();
1248 ret = -1;
1249 goto done;
1250 }
1251 Py_DECREF(v);
1252 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001253 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001254 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1255 PyErr_Clear();
1256 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001257}
1258
1259int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001260PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001261{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001262 PyObject *m, *d, *v;
1263 m = PyImport_AddModule("__main__");
1264 if (m == NULL)
1265 return -1;
1266 d = PyModule_GetDict(m);
1267 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1268 if (v == NULL) {
1269 PyErr_Print();
1270 return -1;
1271 }
1272 Py_DECREF(v);
1273 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001274}
1275
Barry Warsaw035574d1997-08-29 22:07:17 +00001276static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001277parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001278 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001279{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001280 long hold;
1281 PyObject *v;
Barry Warsaw035574d1997-08-29 22:07:17 +00001282
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001283 /* old style errors */
1284 if (PyTuple_Check(err))
1285 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
1286 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001287
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001288 /* new style errors. `err' is an instance */
Barry Warsaw035574d1997-08-29 22:07:17 +00001289
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001290 if (! (v = PyObject_GetAttrString(err, "msg")))
1291 goto finally;
1292 *message = v;
Barry Warsaw035574d1997-08-29 22:07:17 +00001293
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001294 if (!(v = PyObject_GetAttrString(err, "filename")))
1295 goto finally;
1296 if (v == Py_None)
1297 *filename = NULL;
1298 else if (! (*filename = _PyUnicode_AsString(v)))
1299 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001300
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001301 Py_DECREF(v);
1302 if (!(v = PyObject_GetAttrString(err, "lineno")))
1303 goto finally;
1304 hold = PyLong_AsLong(v);
1305 Py_DECREF(v);
1306 v = NULL;
1307 if (hold < 0 && PyErr_Occurred())
1308 goto finally;
1309 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001310
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001311 if (!(v = PyObject_GetAttrString(err, "offset")))
1312 goto finally;
1313 if (v == Py_None) {
1314 *offset = -1;
1315 Py_DECREF(v);
1316 v = NULL;
1317 } else {
1318 hold = PyLong_AsLong(v);
1319 Py_DECREF(v);
1320 v = NULL;
1321 if (hold < 0 && PyErr_Occurred())
1322 goto finally;
1323 *offset = (int)hold;
1324 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001325
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001326 if (!(v = PyObject_GetAttrString(err, "text")))
1327 goto finally;
1328 if (v == Py_None)
1329 *text = NULL;
1330 else if (!PyUnicode_Check(v) ||
1331 !(*text = _PyUnicode_AsString(v)))
1332 goto finally;
1333 Py_DECREF(v);
1334 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001335
1336finally:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001337 Py_XDECREF(v);
1338 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001339}
1340
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001341void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001342PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001343{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001344 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001345}
1346
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001347static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001348print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001349{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001350 char *nl;
1351 if (offset >= 0) {
Benjamin Petersona95e9772010-10-29 03:28:14 +00001352 if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n')
1353 offset--;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001354 for (;;) {
1355 nl = strchr(text, '\n');
1356 if (nl == NULL || nl-text >= offset)
1357 break;
1358 offset -= (int)(nl+1-text);
1359 text = nl+1;
1360 }
1361 while (*text == ' ' || *text == '\t') {
1362 text++;
1363 offset--;
1364 }
1365 }
1366 PyFile_WriteString(" ", f);
1367 PyFile_WriteString(text, f);
1368 if (*text == '\0' || text[strlen(text)-1] != '\n')
1369 PyFile_WriteString("\n", f);
1370 if (offset == -1)
1371 return;
1372 PyFile_WriteString(" ", f);
Benjamin Petersona95e9772010-10-29 03:28:14 +00001373 while (--offset > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001374 PyFile_WriteString(" ", f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001375 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001376}
1377
Guido van Rossum66e8e862001-03-23 17:54:43 +00001378static void
1379handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001380{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001381 PyObject *exception, *value, *tb;
1382 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001383
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001384 if (Py_InspectFlag)
1385 /* Don't exit if -i flag was given. This flag is set to 0
1386 * when entering interactive mode for inspecting. */
1387 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001388
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001389 PyErr_Fetch(&exception, &value, &tb);
1390 fflush(stdout);
1391 if (value == NULL || value == Py_None)
1392 goto done;
1393 if (PyExceptionInstance_Check(value)) {
1394 /* The error code should be in the `code' attribute. */
1395 PyObject *code = PyObject_GetAttrString(value, "code");
1396 if (code) {
1397 Py_DECREF(value);
1398 value = code;
1399 if (value == Py_None)
1400 goto done;
1401 }
1402 /* If we failed to dig out the 'code' attribute,
1403 just let the else clause below print the error. */
1404 }
1405 if (PyLong_Check(value))
1406 exitcode = (int)PyLong_AsLong(value);
1407 else {
Victor Stinnere9fb3192010-05-17 08:58:51 +00001408 PyObject *sys_stderr = PySys_GetObject("stderr");
Victor Stinner7126dbc2010-05-21 23:45:42 +00001409 if (sys_stderr != NULL && sys_stderr != Py_None) {
1410 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1411 } else {
1412 PyObject_Print(value, stderr, Py_PRINT_RAW);
1413 fflush(stderr);
1414 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001415 PySys_WriteStderr("\n");
1416 exitcode = 1;
1417 }
Tim Peterscf615b52003-04-19 18:47:02 +00001418 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001419 /* Restore and clear the exception info, in order to properly decref
1420 * the exception, value, and traceback. If we just exit instead,
1421 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1422 * some finalizers from running.
1423 */
1424 PyErr_Restore(exception, value, tb);
1425 PyErr_Clear();
1426 Py_Exit(exitcode);
1427 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001428}
1429
1430void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001431PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001432{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001433 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001434
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001435 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1436 handle_system_exit();
1437 }
1438 PyErr_Fetch(&exception, &v, &tb);
1439 if (exception == NULL)
1440 return;
1441 PyErr_NormalizeException(&exception, &v, &tb);
1442 if (tb == NULL) {
1443 tb = Py_None;
1444 Py_INCREF(tb);
1445 }
1446 PyException_SetTraceback(v, tb);
1447 if (exception == NULL)
1448 return;
1449 /* Now we know v != NULL too */
1450 if (set_sys_last_vars) {
1451 PySys_SetObject("last_type", exception);
1452 PySys_SetObject("last_value", v);
1453 PySys_SetObject("last_traceback", tb);
1454 }
1455 hook = PySys_GetObject("excepthook");
1456 if (hook) {
1457 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1458 PyObject *result = PyEval_CallObject(hook, args);
1459 if (result == NULL) {
1460 PyObject *exception2, *v2, *tb2;
1461 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1462 handle_system_exit();
1463 }
1464 PyErr_Fetch(&exception2, &v2, &tb2);
1465 PyErr_NormalizeException(&exception2, &v2, &tb2);
1466 /* It should not be possible for exception2 or v2
1467 to be NULL. However PyErr_Display() can't
1468 tolerate NULLs, so just be safe. */
1469 if (exception2 == NULL) {
1470 exception2 = Py_None;
1471 Py_INCREF(exception2);
1472 }
1473 if (v2 == NULL) {
1474 v2 = Py_None;
1475 Py_INCREF(v2);
1476 }
1477 fflush(stdout);
1478 PySys_WriteStderr("Error in sys.excepthook:\n");
1479 PyErr_Display(exception2, v2, tb2);
1480 PySys_WriteStderr("\nOriginal exception was:\n");
1481 PyErr_Display(exception, v, tb);
1482 Py_DECREF(exception2);
1483 Py_DECREF(v2);
1484 Py_XDECREF(tb2);
1485 }
1486 Py_XDECREF(result);
1487 Py_XDECREF(args);
1488 } else {
1489 PySys_WriteStderr("sys.excepthook is missing\n");
1490 PyErr_Display(exception, v, tb);
1491 }
1492 Py_XDECREF(exception);
1493 Py_XDECREF(v);
1494 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001495}
1496
Benjamin Petersone6528212008-07-15 15:32:09 +00001497static void
1498print_exception(PyObject *f, PyObject *value)
1499{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001500 int err = 0;
1501 PyObject *type, *tb;
Benjamin Petersone6528212008-07-15 15:32:09 +00001502
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001503 if (!PyExceptionInstance_Check(value)) {
1504 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1505 PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1506 PyFile_WriteString(" found\n", f);
1507 return;
1508 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001509
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001510 Py_INCREF(value);
1511 fflush(stdout);
1512 type = (PyObject *) Py_TYPE(value);
1513 tb = PyException_GetTraceback(value);
1514 if (tb && tb != Py_None)
1515 err = PyTraceBack_Print(tb, f);
1516 if (err == 0 &&
1517 PyObject_HasAttrString(value, "print_file_and_line"))
1518 {
1519 PyObject *message;
1520 const char *filename, *text;
1521 int lineno, offset;
1522 if (!parse_syntax_error(value, &message, &filename,
1523 &lineno, &offset, &text))
1524 PyErr_Clear();
1525 else {
1526 char buf[10];
1527 PyFile_WriteString(" File \"", f);
1528 if (filename == NULL)
1529 PyFile_WriteString("<string>", f);
1530 else
1531 PyFile_WriteString(filename, f);
1532 PyFile_WriteString("\", line ", f);
1533 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
1534 PyFile_WriteString(buf, f);
1535 PyFile_WriteString("\n", f);
1536 if (text != NULL)
1537 print_error_text(f, offset, text);
1538 Py_DECREF(value);
1539 value = message;
1540 /* Can't be bothered to check all those
1541 PyFile_WriteString() calls */
1542 if (PyErr_Occurred())
1543 err = -1;
1544 }
1545 }
1546 if (err) {
1547 /* Don't do anything else */
1548 }
1549 else {
1550 PyObject* moduleName;
1551 char* className;
1552 assert(PyExceptionClass_Check(type));
1553 className = PyExceptionClass_Name(type);
1554 if (className != NULL) {
1555 char *dot = strrchr(className, '.');
1556 if (dot != NULL)
1557 className = dot+1;
1558 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001559
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001560 moduleName = PyObject_GetAttrString(type, "__module__");
1561 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1562 {
1563 Py_DECREF(moduleName);
1564 err = PyFile_WriteString("<unknown>", f);
1565 }
1566 else {
1567 char* modstr = _PyUnicode_AsString(moduleName);
1568 if (modstr && strcmp(modstr, "builtins"))
1569 {
1570 err = PyFile_WriteString(modstr, f);
1571 err += PyFile_WriteString(".", f);
1572 }
1573 Py_DECREF(moduleName);
1574 }
1575 if (err == 0) {
1576 if (className == NULL)
1577 err = PyFile_WriteString("<unknown>", f);
1578 else
1579 err = PyFile_WriteString(className, f);
1580 }
1581 }
1582 if (err == 0 && (value != Py_None)) {
1583 PyObject *s = PyObject_Str(value);
1584 /* only print colon if the str() of the
1585 object is not the empty string
1586 */
1587 if (s == NULL)
1588 err = -1;
1589 else if (!PyUnicode_Check(s) ||
1590 PyUnicode_GetSize(s) != 0)
1591 err = PyFile_WriteString(": ", f);
1592 if (err == 0)
1593 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1594 Py_XDECREF(s);
1595 }
1596 /* try to write a newline in any case */
1597 err += PyFile_WriteString("\n", f);
1598 Py_XDECREF(tb);
1599 Py_DECREF(value);
1600 /* If an error happened here, don't show it.
1601 XXX This is wrong, but too many callers rely on this behavior. */
1602 if (err != 0)
1603 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001604}
1605
1606static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001607 "\nThe above exception was the direct cause "
1608 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001609
1610static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001611 "\nDuring handling of the above exception, "
1612 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001613
1614static void
1615print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
1616{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001617 int err = 0, res;
1618 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00001619
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001620 if (seen != NULL) {
1621 /* Exception chaining */
1622 if (PySet_Add(seen, value) == -1)
1623 PyErr_Clear();
1624 else if (PyExceptionInstance_Check(value)) {
1625 cause = PyException_GetCause(value);
1626 context = PyException_GetContext(value);
1627 if (cause) {
1628 res = PySet_Contains(seen, cause);
1629 if (res == -1)
1630 PyErr_Clear();
1631 if (res == 0) {
1632 print_exception_recursive(
1633 f, cause, seen);
1634 err |= PyFile_WriteString(
1635 cause_message, f);
1636 }
1637 }
1638 else if (context) {
1639 res = PySet_Contains(seen, context);
1640 if (res == -1)
1641 PyErr_Clear();
1642 if (res == 0) {
1643 print_exception_recursive(
1644 f, context, seen);
1645 err |= PyFile_WriteString(
1646 context_message, f);
1647 }
1648 }
1649 Py_XDECREF(context);
1650 Py_XDECREF(cause);
1651 }
1652 }
1653 print_exception(f, value);
1654 if (err != 0)
1655 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001656}
1657
Thomas Wouters477c8d52006-05-27 19:21:47 +00001658void
1659PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001660{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001661 PyObject *seen;
1662 PyObject *f = PySys_GetObject("stderr");
1663 if (f == Py_None) {
1664 /* pass */
1665 }
1666 else if (f == NULL) {
1667 _PyObject_Dump(value);
1668 fprintf(stderr, "lost sys.stderr\n");
1669 }
1670 else {
1671 /* We choose to ignore seen being possibly NULL, and report
1672 at least the main exception (it could be a MemoryError).
1673 */
1674 seen = PySet_New(NULL);
1675 if (seen == NULL)
1676 PyErr_Clear();
1677 print_exception_recursive(f, value, seen);
1678 Py_XDECREF(seen);
1679 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001680}
1681
Guido van Rossum82598051997-03-05 00:20:32 +00001682PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001683PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001684 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001685{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001686 PyObject *ret = NULL;
1687 mod_ty mod;
1688 PyArena *arena = PyArena_New();
1689 if (arena == NULL)
1690 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001691
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001692 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
1693 if (mod != NULL)
1694 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
1695 PyArena_Free(arena);
1696 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001697}
1698
1699PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001700PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001701 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001702{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001703 PyObject *ret;
1704 mod_ty mod;
1705 PyArena *arena = PyArena_New();
1706 if (arena == NULL)
1707 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001708
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001709 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
1710 flags, NULL, arena);
1711 if (closeit)
1712 fclose(fp);
1713 if (mod == NULL) {
1714 PyArena_Free(arena);
1715 return NULL;
1716 }
1717 ret = run_mod(mod, filename, globals, locals, flags, arena);
1718 PyArena_Free(arena);
1719 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001720}
1721
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001722static void
1723flush_io(void)
1724{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001725 PyObject *f, *r;
1726 PyObject *type, *value, *traceback;
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001727
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001728 /* Save the current exception */
1729 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001730
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001731 f = PySys_GetObject("stderr");
1732 if (f != NULL) {
1733 r = PyObject_CallMethod(f, "flush", "");
1734 if (r)
1735 Py_DECREF(r);
1736 else
1737 PyErr_Clear();
1738 }
1739 f = PySys_GetObject("stdout");
1740 if (f != NULL) {
1741 r = PyObject_CallMethod(f, "flush", "");
1742 if (r)
1743 Py_DECREF(r);
1744 else
1745 PyErr_Clear();
1746 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001747
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001748 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001749}
1750
Guido van Rossum82598051997-03-05 00:20:32 +00001751static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001752run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001753 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001754{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001755 PyCodeObject *co;
1756 PyObject *v;
1757 co = PyAST_Compile(mod, filename, flags, arena);
1758 if (co == NULL)
1759 return NULL;
1760 v = PyEval_EvalCode(co, globals, locals);
1761 Py_DECREF(co);
1762 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001763}
1764
Guido van Rossum82598051997-03-05 00:20:32 +00001765static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001766run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001767 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001768{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001769 PyCodeObject *co;
1770 PyObject *v;
1771 long magic;
1772 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001773
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001774 magic = PyMarshal_ReadLongFromFile(fp);
1775 if (magic != PyImport_GetMagicNumber()) {
1776 PyErr_SetString(PyExc_RuntimeError,
1777 "Bad magic number in .pyc file");
1778 return NULL;
1779 }
1780 (void) PyMarshal_ReadLongFromFile(fp);
1781 v = PyMarshal_ReadLastObjectFromFile(fp);
1782 fclose(fp);
1783 if (v == NULL || !PyCode_Check(v)) {
1784 Py_XDECREF(v);
1785 PyErr_SetString(PyExc_RuntimeError,
1786 "Bad code object in .pyc file");
1787 return NULL;
1788 }
1789 co = (PyCodeObject *)v;
1790 v = PyEval_EvalCode(co, globals, locals);
1791 if (v && flags)
1792 flags->cf_flags |= (co->co_flags & PyCF_MASK);
1793 Py_DECREF(co);
1794 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001795}
1796
Guido van Rossum82598051997-03-05 00:20:32 +00001797PyObject *
Tim Petersd08e3822003-04-17 15:24:21 +00001798Py_CompileStringFlags(const char *str, const char *filename, int start,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001799 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001800{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001801 PyCodeObject *co;
1802 mod_ty mod;
1803 PyArena *arena = PyArena_New();
1804 if (arena == NULL)
1805 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001806
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001807 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
1808 if (mod == NULL) {
1809 PyArena_Free(arena);
1810 return NULL;
1811 }
1812 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
1813 PyObject *result = PyAST_mod2obj(mod);
1814 PyArena_Free(arena);
1815 return result;
1816 }
1817 co = PyAST_Compile(mod, filename, flags, arena);
1818 PyArena_Free(arena);
1819 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001820}
1821
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001822struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001823Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001824{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001825 struct symtable *st;
1826 mod_ty mod;
1827 PyCompilerFlags flags;
1828 PyArena *arena = PyArena_New();
1829 if (arena == NULL)
1830 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001831
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001832 flags.cf_flags = 0;
1833 mod = PyParser_ASTFromString(str, filename, start, &flags, arena);
1834 if (mod == NULL) {
1835 PyArena_Free(arena);
1836 return NULL;
1837 }
1838 st = PySymtable_Build(mod, filename, 0);
1839 PyArena_Free(arena);
1840 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001841}
1842
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001843/* Preferred access to parser is through AST. */
1844mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001845PyParser_ASTFromString(const char *s, const char *filename, int start,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001846 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001847{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001848 mod_ty mod;
1849 PyCompilerFlags localflags;
1850 perrdetail err;
1851 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00001852
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001853 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename,
1854 &_PyParser_Grammar, start, &err,
1855 &iflags);
1856 if (flags == NULL) {
1857 localflags.cf_flags = 0;
1858 flags = &localflags;
1859 }
1860 if (n) {
1861 flags->cf_flags |= iflags & PyCF_MASK;
1862 mod = PyAST_FromNode(n, flags, filename, arena);
1863 PyNode_Free(n);
1864 return mod;
1865 }
1866 else {
1867 err_input(&err);
1868 return NULL;
1869 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001870}
1871
1872mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001873PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001874 int start, char *ps1,
1875 char *ps2, PyCompilerFlags *flags, int *errcode,
1876 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001877{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001878 mod_ty mod;
1879 PyCompilerFlags localflags;
1880 perrdetail err;
1881 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00001882
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001883 node *n = PyParser_ParseFileFlagsEx(fp, filename, enc,
1884 &_PyParser_Grammar,
1885 start, ps1, ps2, &err, &iflags);
1886 if (flags == NULL) {
1887 localflags.cf_flags = 0;
1888 flags = &localflags;
1889 }
1890 if (n) {
1891 flags->cf_flags |= iflags & PyCF_MASK;
1892 mod = PyAST_FromNode(n, flags, filename, arena);
1893 PyNode_Free(n);
1894 return mod;
1895 }
1896 else {
1897 err_input(&err);
1898 if (errcode)
1899 *errcode = err.error;
1900 return NULL;
1901 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001902}
1903
Guido van Rossuma110aa61994-08-29 12:50:44 +00001904/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001905
Guido van Rossuma110aa61994-08-29 12:50:44 +00001906node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001907PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001908{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001909 perrdetail err;
1910 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
1911 &_PyParser_Grammar,
1912 start, NULL, NULL, &err, flags);
1913 if (n == NULL)
1914 err_input(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001915
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001916 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001917}
1918
Guido van Rossuma110aa61994-08-29 12:50:44 +00001919/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001920
Guido van Rossuma110aa61994-08-29 12:50:44 +00001921node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001922PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001923{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001924 perrdetail err;
1925 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1926 start, &err, flags);
1927 if (n == NULL)
1928 err_input(&err);
1929 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00001930}
1931
1932node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001933PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001934 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001935{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001936 perrdetail err;
1937 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1938 &_PyParser_Grammar, start, &err, flags);
1939 if (n == NULL)
1940 err_input(&err);
1941 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00001942}
1943
1944node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001945PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001946{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001947 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001948}
1949
Guido van Rossum66ebd912003-04-17 16:02:26 +00001950/* May want to move a more generalized form of this to parsetok.c or
1951 even parser modules. */
1952
1953void
1954PyParser_SetError(perrdetail *err)
1955{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001956 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00001957}
1958
Guido van Rossuma110aa61994-08-29 12:50:44 +00001959/* Set the error appropriate to the given input error code (see errcode.h) */
1960
1961static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001962err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00001963{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001964 PyObject *v, *w, *errtype, *errtext;
1965 PyObject *msg_obj = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001966 PyObject *filename;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001967 char *msg = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001968
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001969 errtype = PyExc_SyntaxError;
1970 switch (err->error) {
1971 case E_ERROR:
1972 return;
1973 case E_SYNTAX:
1974 errtype = PyExc_IndentationError;
1975 if (err->expected == INDENT)
1976 msg = "expected an indented block";
1977 else if (err->token == INDENT)
1978 msg = "unexpected indent";
1979 else if (err->token == DEDENT)
1980 msg = "unexpected unindent";
1981 else {
1982 errtype = PyExc_SyntaxError;
1983 msg = "invalid syntax";
1984 }
1985 break;
1986 case E_TOKEN:
1987 msg = "invalid token";
1988 break;
1989 case E_EOFS:
1990 msg = "EOF while scanning triple-quoted string literal";
1991 break;
1992 case E_EOLS:
1993 msg = "EOL while scanning string literal";
1994 break;
1995 case E_INTR:
1996 if (!PyErr_Occurred())
1997 PyErr_SetNone(PyExc_KeyboardInterrupt);
1998 goto cleanup;
1999 case E_NOMEM:
2000 PyErr_NoMemory();
2001 goto cleanup;
2002 case E_EOF:
2003 msg = "unexpected EOF while parsing";
2004 break;
2005 case E_TABSPACE:
2006 errtype = PyExc_TabError;
2007 msg = "inconsistent use of tabs and spaces in indentation";
2008 break;
2009 case E_OVERFLOW:
2010 msg = "expression too long";
2011 break;
2012 case E_DEDENT:
2013 errtype = PyExc_IndentationError;
2014 msg = "unindent does not match any outer indentation level";
2015 break;
2016 case E_TOODEEP:
2017 errtype = PyExc_IndentationError;
2018 msg = "too many levels of indentation";
2019 break;
2020 case E_DECODE: {
2021 PyObject *type, *value, *tb;
2022 PyErr_Fetch(&type, &value, &tb);
2023 msg = "unknown decode error";
2024 if (value != NULL)
2025 msg_obj = PyObject_Str(value);
2026 Py_XDECREF(type);
2027 Py_XDECREF(value);
2028 Py_XDECREF(tb);
2029 break;
2030 }
2031 case E_LINECONT:
2032 msg = "unexpected character after line continuation character";
2033 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002034
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002035 case E_IDENTIFIER:
2036 msg = "invalid character in identifier";
2037 break;
2038 default:
2039 fprintf(stderr, "error=%d\n", err->error);
2040 msg = "unknown parsing error";
2041 break;
2042 }
2043 /* err->text may not be UTF-8 in case of decoding errors.
2044 Explicitly convert to an object. */
2045 if (!err->text) {
2046 errtext = Py_None;
2047 Py_INCREF(Py_None);
2048 } else {
2049 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
2050 "replace");
2051 }
Victor Stinner2f2ed1f2010-10-16 13:42:53 +00002052 if (err->filename != NULL)
2053 filename = PyUnicode_DecodeFSDefault(err->filename);
2054 else {
2055 Py_INCREF(Py_None);
2056 filename = Py_None;
2057 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002058 if (filename != NULL)
2059 v = Py_BuildValue("(NiiN)", filename,
2060 err->lineno, err->offset, errtext);
2061 else
2062 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002063 if (v != NULL) {
2064 if (msg_obj)
2065 w = Py_BuildValue("(OO)", msg_obj, v);
2066 else
2067 w = Py_BuildValue("(sO)", msg, v);
2068 } else
2069 w = NULL;
2070 Py_XDECREF(v);
2071 PyErr_SetObject(errtype, w);
2072 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002073cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002074 Py_XDECREF(msg_obj);
2075 if (err->text != NULL) {
2076 PyObject_FREE(err->text);
2077 err->text = NULL;
2078 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002079}
2080
2081/* Print fatal error message and abort */
2082
2083void
Tim Peters7c321a82002-07-09 02:57:01 +00002084Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002085{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002086 fprintf(stderr, "Fatal Python error: %s\n", msg);
2087 fflush(stderr); /* it helps in Windows debug build */
2088 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002089 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002090 }
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002091#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002092 {
2093 size_t len = strlen(msg);
2094 WCHAR* buffer;
2095 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002096
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002097 /* Convert the message to wchar_t. This uses a simple one-to-one
2098 conversion, assuming that the this error message actually uses ASCII
2099 only. If this ceases to be true, we will have to convert. */
2100 buffer = alloca( (len+1) * (sizeof *buffer));
2101 for( i=0; i<=len; ++i)
2102 buffer[i] = msg[i];
2103 OutputDebugStringW(L"Fatal Python error: ");
2104 OutputDebugStringW(buffer);
2105 OutputDebugStringW(L"\n");
2106 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002107#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002108 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002109#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002110#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002111 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002112}
2113
2114/* Clean up and exit */
2115
Guido van Rossuma110aa61994-08-29 12:50:44 +00002116#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002117#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002118#endif
2119
Collin Winter670e6922007-03-21 02:57:17 +00002120static void (*pyexitfunc)(void) = NULL;
2121/* For the atexit module. */
2122void _Py_PyAtExit(void (*func)(void))
2123{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002124 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002125}
2126
2127static void
2128call_py_exitfuncs(void)
2129{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002130 if (pyexitfunc == NULL)
2131 return;
Collin Winter670e6922007-03-21 02:57:17 +00002132
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002133 (*pyexitfunc)();
2134 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002135}
2136
Antoine Pitrou011bd622009-10-20 21:52:47 +00002137/* Wait until threading._shutdown completes, provided
2138 the threading module was imported in the first place.
2139 The shutdown routine will wait until all non-daemon
2140 "threading" threads have completed. */
2141static void
2142wait_for_thread_shutdown(void)
2143{
2144#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002145 PyObject *result;
2146 PyThreadState *tstate = PyThreadState_GET();
2147 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2148 "threading");
2149 if (threading == NULL) {
2150 /* threading not imported */
2151 PyErr_Clear();
2152 return;
2153 }
2154 result = PyObject_CallMethod(threading, "_shutdown", "");
2155 if (result == NULL) {
2156 PyErr_WriteUnraisable(threading);
2157 }
2158 else {
2159 Py_DECREF(result);
2160 }
2161 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002162#endif
2163}
2164
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002165#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002166static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002167static int nexitfuncs = 0;
2168
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002169int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002170{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002171 if (nexitfuncs >= NEXITFUNCS)
2172 return -1;
2173 exitfuncs[nexitfuncs++] = func;
2174 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002175}
2176
Guido van Rossumcc283f51997-08-05 02:22:03 +00002177static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002178call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002179{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002180 while (nexitfuncs > 0)
2181 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002182
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002183 fflush(stdout);
2184 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002185}
2186
2187void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002188Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002189{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002190 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002191
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002192 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002193}
2194
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002195static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002196initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002197{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002198#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002199 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002200#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002201#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002202 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002203#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002204#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002205 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002206#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002207 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002208}
2209
Guido van Rossum7433b121997-02-14 19:45:36 +00002210
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002211/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2212 *
2213 * All of the code in this function must only use async-signal-safe functions,
2214 * listed at `man 7 signal` or
2215 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2216 */
2217void
2218_Py_RestoreSignals(void)
2219{
2220#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002221 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002222#endif
2223#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002224 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002225#endif
2226#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002227 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002228#endif
2229}
2230
2231
Guido van Rossum7433b121997-02-14 19:45:36 +00002232/*
2233 * The file descriptor fd is considered ``interactive'' if either
2234 * a) isatty(fd) is TRUE, or
2235 * b) the -i flag was given, and the filename associated with
2236 * the descriptor is NULL or "<stdin>" or "???".
2237 */
2238int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002239Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002240{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002241 if (isatty((int)fileno(fp)))
2242 return 1;
2243 if (!Py_InteractiveFlag)
2244 return 0;
2245 return (filename == NULL) ||
2246 (strcmp(filename, "<stdin>") == 0) ||
2247 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002248}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002249
2250
Tim Petersd08e3822003-04-17 15:24:21 +00002251#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002252#if defined(WIN32) && defined(_MSC_VER)
2253
2254/* Stack checking for Microsoft C */
2255
2256#include <malloc.h>
2257#include <excpt.h>
2258
Fred Drakee8de31c2000-08-31 05:38:39 +00002259/*
2260 * Return non-zero when we run out of memory on the stack; zero otherwise.
2261 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002262int
Fred Drake399739f2000-08-31 05:52:44 +00002263PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002264{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002265 __try {
2266 /* alloca throws a stack overflow exception if there's
2267 not enough space left on the stack */
2268 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2269 return 0;
2270 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2271 EXCEPTION_EXECUTE_HANDLER :
2272 EXCEPTION_CONTINUE_SEARCH) {
2273 int errcode = _resetstkoflw();
2274 if (errcode == 0)
2275 {
2276 Py_FatalError("Could not reset the stack!");
2277 }
2278 }
2279 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002280}
2281
2282#endif /* WIN32 && _MSC_VER */
2283
2284/* Alternate implementations can be added here... */
2285
2286#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002287
2288
2289/* Wrappers around sigaction() or signal(). */
2290
2291PyOS_sighandler_t
2292PyOS_getsig(int sig)
2293{
2294#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002295 struct sigaction context;
2296 if (sigaction(sig, NULL, &context) == -1)
2297 return SIG_ERR;
2298 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002299#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002300 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002301/* Special signal handling for the secure CRT in Visual Studio 2005 */
2302#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002303 switch (sig) {
2304 /* Only these signals are valid */
2305 case SIGINT:
2306 case SIGILL:
2307 case SIGFPE:
2308 case SIGSEGV:
2309 case SIGTERM:
2310 case SIGBREAK:
2311 case SIGABRT:
2312 break;
2313 /* Don't call signal() with other values or it will assert */
2314 default:
2315 return SIG_ERR;
2316 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002317#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002318 handler = signal(sig, SIG_IGN);
2319 if (handler != SIG_ERR)
2320 signal(sig, handler);
2321 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002322#endif
2323}
2324
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002325/*
2326 * All of the code in this function must only use async-signal-safe functions,
2327 * listed at `man 7 signal` or
2328 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2329 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002330PyOS_sighandler_t
2331PyOS_setsig(int sig, PyOS_sighandler_t handler)
2332{
2333#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002334 /* Some code in Modules/signalmodule.c depends on sigaction() being
2335 * used here if HAVE_SIGACTION is defined. Fix that if this code
2336 * changes to invalidate that assumption.
2337 */
2338 struct sigaction context, ocontext;
2339 context.sa_handler = handler;
2340 sigemptyset(&context.sa_mask);
2341 context.sa_flags = 0;
2342 if (sigaction(sig, &context, &ocontext) == -1)
2343 return SIG_ERR;
2344 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002345#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002346 PyOS_sighandler_t oldhandler;
2347 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002348#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002349 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002350#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002351 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002352#endif
2353}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002354
2355/* Deprecated C API functions still provided for binary compatiblity */
2356
2357#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002358PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002359PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2360{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002361 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002362}
2363
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002364#undef PyParser_SimpleParseString
2365PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002366PyParser_SimpleParseString(const char *str, int start)
2367{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002368 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002369}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002370
2371#undef PyRun_AnyFile
2372PyAPI_FUNC(int)
2373PyRun_AnyFile(FILE *fp, const char *name)
2374{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002375 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002376}
2377
2378#undef PyRun_AnyFileEx
2379PyAPI_FUNC(int)
2380PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2381{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002382 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002383}
2384
2385#undef PyRun_AnyFileFlags
2386PyAPI_FUNC(int)
2387PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2388{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002389 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002390}
2391
2392#undef PyRun_File
2393PyAPI_FUNC(PyObject *)
2394PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2395{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002396 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002397}
2398
2399#undef PyRun_FileEx
2400PyAPI_FUNC(PyObject *)
2401PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2402{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002403 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002404}
2405
2406#undef PyRun_FileFlags
2407PyAPI_FUNC(PyObject *)
2408PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002409 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002410{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002411 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002412}
2413
2414#undef PyRun_SimpleFile
2415PyAPI_FUNC(int)
2416PyRun_SimpleFile(FILE *f, const char *p)
2417{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002418 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002419}
2420
2421#undef PyRun_SimpleFileEx
2422PyAPI_FUNC(int)
2423PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2424{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002425 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002426}
2427
2428
2429#undef PyRun_String
2430PyAPI_FUNC(PyObject *)
2431PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2432{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002433 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002434}
2435
2436#undef PyRun_SimpleString
2437PyAPI_FUNC(int)
2438PyRun_SimpleString(const char *s)
2439{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002440 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002441}
2442
2443#undef Py_CompileString
2444PyAPI_FUNC(PyObject *)
2445Py_CompileString(const char *str, const char *p, int s)
2446{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002447 return Py_CompileStringFlags(str, p, s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002448}
2449
2450#undef PyRun_InteractiveOne
2451PyAPI_FUNC(int)
2452PyRun_InteractiveOne(FILE *f, const char *p)
2453{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002454 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002455}
2456
2457#undef PyRun_InteractiveLoop
2458PyAPI_FUNC(int)
2459PyRun_InteractiveLoop(FILE *f, const char *p)
2460{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002461 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002462}
2463
2464#ifdef __cplusplus
2465}
2466#endif