blob: a3f5d2b6673e4b62590a6920f2c25218d345621d [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");
258 _PyImport_FixupExtension(bimod, "builtins", "builtins");
259 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);
274 _PyImport_FixupExtension(sysmod, "sys", "sys");
275 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);
Guido van Rossum826d8972007-10-30 18:34:07 +0000286
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000287 _PyImport_Init();
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000288
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000289 _PyImportHooks_Init();
Just van Rossum52e14d62002-12-30 22:08:05 +0000290
Victor Stinner7d79b8b2010-05-19 20:40:50 +0000291 /* Initialize _warnings. */
292 _PyWarnings_Init();
293
Alexander Belopolsky6fc4ade2010-08-05 17:34:27 +0000294 _PyTime_Init();
295
Victor Stinnerb744ba12010-05-15 12:27:16 +0000296 initfsencoding();
Martin v. Löwis011e8422009-05-05 04:43:17 +0000297
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000298 if (install_sigs)
299 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000300
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000301 /* Initialize warnings. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000302 if (PySys_HasWarnOptions()) {
303 PyObject *warnings_module = PyImport_ImportModule("warnings");
304 if (!warnings_module)
305 PyErr_Clear();
306 Py_XDECREF(warnings_module);
307 }
Just van Rossum5bfba3a2003-02-25 20:25:12 +0000308
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000309 initmain(); /* Module __main__ */
310 if (initstdio() < 0)
311 Py_FatalError(
312 "Py_Initialize: can't initialize sys standard streams");
313
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000314 if (!Py_NoSiteFlag)
315 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000316}
317
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000318void
319Py_Initialize(void)
320{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000321 Py_InitializeEx(1);
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000322}
323
324
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000325#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000326extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000327#endif
328
Guido van Rossume8432ac2007-07-09 15:04:50 +0000329/* Flush stdout and stderr */
330
Neal Norwitz2bad9702007-08-27 06:19:22 +0000331static void
Guido van Rossum1bd21222007-07-10 20:14:13 +0000332flush_std_files(void)
Guido van Rossume8432ac2007-07-09 15:04:50 +0000333{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000334 PyObject *fout = PySys_GetObject("stdout");
335 PyObject *ferr = PySys_GetObject("stderr");
336 PyObject *tmp;
Guido van Rossume8432ac2007-07-09 15:04:50 +0000337
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000338 if (fout != NULL && fout != Py_None) {
339 tmp = PyObject_CallMethod(fout, "flush", "");
340 if (tmp == NULL)
Antoine Pitroubddc9fe2010-08-08 20:46:42 +0000341 PyErr_WriteUnraisable(fout);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000342 else
343 Py_DECREF(tmp);
344 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000345
Victor Stinner9467b212010-05-14 00:59:09 +0000346 if (ferr != NULL && ferr != Py_None) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000347 tmp = PyObject_CallMethod(ferr, "flush", "");
348 if (tmp == NULL)
349 PyErr_Clear();
350 else
351 Py_DECREF(tmp);
352 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000353}
354
Guido van Rossum25ce5661997-08-02 03:10:38 +0000355/* Undo the effect of Py_Initialize().
356
357 Beware: if multiple interpreter and/or thread states exist, these
358 are not wiped out; only the current thread and interpreter state
359 are deleted. But since everything else is deleted, those other
360 interpreter and thread states should no longer be used.
361
362 (XXX We should do better, e.g. wipe out all interpreters and
363 threads.)
364
365 Locking: as above.
366
367*/
368
369void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000370Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000371{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000372 PyInterpreterState *interp;
373 PyThreadState *tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000374
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000375 if (!initialized)
376 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000377
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000378 wait_for_thread_shutdown();
Antoine Pitrou011bd622009-10-20 21:52:47 +0000379
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000380 /* The interpreter is still entirely intact at this point, and the
381 * exit funcs may be relying on that. In particular, if some thread
382 * or exit func is still waiting to do an import, the import machinery
383 * expects Py_IsInitialized() to return true. So don't say the
384 * interpreter is uninitialized until after the exit funcs have run.
385 * Note that Threading.py uses an exit func to do a join on all the
386 * threads created thru it, so this also protects pending imports in
387 * the threads created via Threading.
388 */
389 call_py_exitfuncs();
390 initialized = 0;
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000391
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000392 /* Flush stdout+stderr */
393 flush_std_files();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000394
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000395 /* Get current thread state and interpreter pointer */
396 tstate = PyThreadState_GET();
397 interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000398
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000399 /* Disable signal handling */
400 PyOS_FiniInterrupts();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000401
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000402 /* Clear type lookup cache */
403 PyType_ClearCache();
Christian Heimes26855632008-01-27 23:50:43 +0000404
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000405 /* Collect garbage. This may call finalizers; it's nice to call these
406 * before all modules are destroyed.
407 * XXX If a __del__ or weakref callback is triggered here, and tries to
408 * XXX import a module, bad things can happen, because Python no
409 * XXX longer believes it's initialized.
410 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
411 * XXX is easy to provoke that way. I've also seen, e.g.,
412 * XXX Exception exceptions.ImportError: 'No module named sha'
413 * XXX in <function callback at 0x008F5718> ignored
414 * XXX but I'm unclear on exactly how that one happens. In any case,
415 * XXX I haven't seen a real-life report of either of these.
416 */
417 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000418#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000419 /* With COUNT_ALLOCS, it helps to run GC multiple times:
420 each collection might release some types from the type
421 list, so they become garbage. */
422 while (PyGC_Collect() > 0)
423 /* nothing */;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000424#endif
Antoine Pitrou696e0352010-08-08 22:18:46 +0000425 /* We run this while most interpreter state is still alive, so that
426 debug information can be printed out */
427 _PyGC_Fini();
Guido van Rossume13ddc92003-04-17 17:29:22 +0000428
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000429 /* Destroy all modules */
430 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000431
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000432 /* Flush stdout+stderr (again, in case more was printed) */
433 flush_std_files();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000434
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000435 /* Collect final garbage. This disposes of cycles created by
436 * new-style class definitions, for example.
437 * XXX This is disabled because it caused too many problems. If
438 * XXX a __del__ or weakref callback triggers here, Python code has
439 * XXX a hard time running, because even the sys module has been
440 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
441 * XXX One symptom is a sequence of information-free messages
442 * XXX coming from threads (if a __del__ or callback is invoked,
443 * XXX other threads can execute too, and any exception they encounter
444 * XXX triggers a comedy of errors as subsystem after subsystem
445 * XXX fails to find what it *expects* to find in sys to help report
446 * XXX the exception and consequent unexpected failures). I've also
447 * XXX seen segfaults then, after adding print statements to the
448 * XXX Python code getting called.
449 */
Tim Peters1d7323e2003-12-01 21:35:27 +0000450#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000451 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000452#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000453
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000454 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
455 _PyImport_Fini();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000456
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000457 /* Debugging stuff */
Guido van Rossum1707aad1997-12-08 23:43:45 +0000458#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000459 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000460#endif
461
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000462 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000463
Tim Peters9cf25ce2003-04-17 15:21:01 +0000464#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000465 /* Display all objects still alive -- this can invoke arbitrary
466 * __repr__ overrides, so requires a mostly-intact interpreter.
467 * Alas, a lot of stuff may still be alive now that will be cleaned
468 * up later.
469 */
470 if (Py_GETENV("PYTHONDUMPREFS"))
471 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000472#endif /* Py_TRACE_REFS */
473
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000474 /* Clear interpreter state */
475 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000476
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000477 /* Now we decref the exception classes. After this point nothing
478 can raise an exception. That's okay, because each Fini() method
479 below has been checked to make sure no exceptions are ever
480 raised.
481 */
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000482
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000483 _PyExc_Fini();
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000484
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000485 /* Cleanup auto-thread-state */
Christian Heimes7d2ff882007-11-30 14:35:04 +0000486#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000487 _PyGILState_Fini();
Christian Heimes7d2ff882007-11-30 14:35:04 +0000488#endif /* WITH_THREAD */
489
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000490 /* Delete current thread */
491 PyThreadState_Swap(NULL);
492 PyInterpreterState_Delete(interp);
Barry Warsawf242aa02000-05-25 23:09:49 +0000493
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000494 /* Sundry finalizers */
495 PyMethod_Fini();
496 PyFrame_Fini();
497 PyCFunction_Fini();
498 PyTuple_Fini();
499 PyList_Fini();
500 PySet_Fini();
501 PyBytes_Fini();
502 PyByteArray_Fini();
503 PyLong_Fini();
504 PyFloat_Fini();
505 PyDict_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000506
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000507 /* Cleanup Unicode implementation */
508 _PyUnicode_Fini();
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000509
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000510 /* reset file system default encoding */
Victor Stinnerb744ba12010-05-15 12:27:16 +0000511 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000512 free((char*)Py_FileSystemDefaultEncoding);
513 Py_FileSystemDefaultEncoding = NULL;
514 }
Christian Heimesc8967002007-11-30 10:18:26 +0000515
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000516 /* XXX Still allocated:
517 - various static ad-hoc pointers to interned strings
518 - int and float free list blocks
519 - whatever various modules and libraries allocate
520 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000521
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000522 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000523
Tim Peters269b2a62003-04-17 19:52:29 +0000524#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000525 /* Display addresses (& refcnts) of all objects still alive.
526 * An address can be used to find the repr of the object, printed
527 * above by _Py_PrintReferences.
528 */
529 if (Py_GETENV("PYTHONDUMPREFS"))
530 _Py_PrintReferenceAddresses(stderr);
Tim Peters269b2a62003-04-17 19:52:29 +0000531#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000532#ifdef PYMALLOC_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000533 if (Py_GETENV("PYTHONMALLOCSTATS"))
534 _PyObject_DebugMallocStats();
Tim Peters0e871182002-04-13 08:29:14 +0000535#endif
536
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000537 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000538}
539
540/* Create and initialize a new interpreter and thread, and return the
541 new thread. This requires that Py_Initialize() has been called
542 first.
543
544 Unsuccessful initialization yields a NULL pointer. Note that *no*
545 exception information is available even in this case -- the
546 exception information is held in the thread, and there is no
547 thread.
548
549 Locking: as above.
550
551*/
552
553PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000554Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000555{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000556 PyInterpreterState *interp;
557 PyThreadState *tstate, *save_tstate;
558 PyObject *bimod, *sysmod;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000559
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000560 if (!initialized)
561 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000562
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000563 interp = PyInterpreterState_New();
564 if (interp == NULL)
565 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000566
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000567 tstate = PyThreadState_New(interp);
568 if (tstate == NULL) {
569 PyInterpreterState_Delete(interp);
570 return NULL;
571 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000572
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000573 save_tstate = PyThreadState_Swap(tstate);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000574
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000575 /* XXX The following is lax in error checking */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000576
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000577 interp->modules = PyDict_New();
578 interp->modules_reloading = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000579
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000580 bimod = _PyImport_FindExtension("builtins", "builtins");
581 if (bimod != NULL) {
582 interp->builtins = PyModule_GetDict(bimod);
583 if (interp->builtins == NULL)
584 goto handle_error;
585 Py_INCREF(interp->builtins);
586 }
Christian Heimes6a27efa2008-10-30 21:48:26 +0000587
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000588 /* initialize builtin exceptions */
589 _PyExc_Init();
Christian Heimes6a27efa2008-10-30 21:48:26 +0000590
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000591 sysmod = _PyImport_FindExtension("sys", "sys");
592 if (bimod != NULL && sysmod != NULL) {
593 PyObject *pstderr;
594 interp->sysdict = PyModule_GetDict(sysmod);
595 if (interp->sysdict == NULL)
596 goto handle_error;
597 Py_INCREF(interp->sysdict);
598 PySys_SetPath(Py_GetPath());
599 PyDict_SetItemString(interp->sysdict, "modules",
600 interp->modules);
601 /* Set up a preliminary stderr printer until we have enough
602 infrastructure for the io module in place. */
603 pstderr = PyFile_NewStdPrinter(fileno(stderr));
604 if (pstderr == NULL)
605 Py_FatalError("Py_Initialize: can't set preliminary stderr");
606 PySys_SetObject("stderr", pstderr);
607 PySys_SetObject("__stderr__", pstderr);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000608
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000609 _PyImportHooks_Init();
610 if (initstdio() < 0)
611 Py_FatalError(
612 "Py_Initialize: can't initialize sys standard streams");
613 initmain();
614 if (!Py_NoSiteFlag)
615 initsite();
616 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000617
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000618 if (!PyErr_Occurred())
619 return tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000620
Thomas Wouters89f507f2006-12-13 04:49:30 +0000621handle_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000622 /* Oops, it didn't work. Undo it all. */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000623
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000624 PyErr_Print();
625 PyThreadState_Clear(tstate);
626 PyThreadState_Swap(save_tstate);
627 PyThreadState_Delete(tstate);
628 PyInterpreterState_Delete(interp);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000629
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000630 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000631}
632
633/* Delete an interpreter and its last thread. This requires that the
634 given thread state is current, that the thread has no remaining
635 frames, and that it is its interpreter's only remaining thread.
636 It is a fatal error to violate these constraints.
637
638 (Py_Finalize() doesn't have these constraints -- it zaps
639 everything, regardless.)
640
641 Locking: as above.
642
643*/
644
645void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000646Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000647{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000648 PyInterpreterState *interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000649
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000650 if (tstate != PyThreadState_GET())
651 Py_FatalError("Py_EndInterpreter: thread is not current");
652 if (tstate->frame != NULL)
653 Py_FatalError("Py_EndInterpreter: thread still has a frame");
654 if (tstate != interp->tstate_head || tstate->next != NULL)
655 Py_FatalError("Py_EndInterpreter: not the last thread");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000656
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000657 PyImport_Cleanup();
658 PyInterpreterState_Clear(interp);
659 PyThreadState_Swap(NULL);
660 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000661}
662
Martin v. Löwis790465f2008-04-05 20:41:37 +0000663static wchar_t *progname = L"python";
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000664
665void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000666Py_SetProgramName(wchar_t *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000667{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000668 if (pn && *pn)
669 progname = pn;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000670}
671
Martin v. Löwis790465f2008-04-05 20:41:37 +0000672wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000673Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000674{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000675 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000676}
677
Martin v. Löwis790465f2008-04-05 20:41:37 +0000678static wchar_t *default_home = NULL;
679static wchar_t env_home[PATH_MAX+1];
Guido van Rossuma61691e1998-02-06 22:27:24 +0000680
681void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000682Py_SetPythonHome(wchar_t *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000683{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000684 default_home = home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000685}
686
Martin v. Löwis790465f2008-04-05 20:41:37 +0000687wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000688Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000689{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000690 wchar_t *home = default_home;
691 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
692 char* chome = Py_GETENV("PYTHONHOME");
693 if (chome) {
694 size_t r = mbstowcs(env_home, chome, PATH_MAX+1);
695 if (r != (size_t)-1 && r <= PATH_MAX)
696 home = env_home;
697 }
Martin v. Löwis790465f2008-04-05 20:41:37 +0000698
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000699 }
700 return home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000701}
702
Guido van Rossum6135a871995-01-09 17:53:26 +0000703/* Create __main__ module */
704
705static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000706initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000707{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000708 PyObject *m, *d;
709 m = PyImport_AddModule("__main__");
710 if (m == NULL)
711 Py_FatalError("can't create __main__ module");
712 d = PyModule_GetDict(m);
713 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
714 PyObject *bimod = PyImport_ImportModule("builtins");
715 if (bimod == NULL ||
716 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
717 Py_FatalError("can't add __builtins__ to __main__");
718 Py_DECREF(bimod);
719 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000720}
721
Victor Stinnerb744ba12010-05-15 12:27:16 +0000722static void
723initfsencoding(void)
724{
725 PyObject *codec;
726#if defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94908bb2010-08-18 21:23:25 +0000727 char *codeset = NULL;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000728
Victor Stinner7f84ab52010-06-11 00:36:33 +0000729 if (Py_FileSystemDefaultEncoding == NULL) {
Victor Stinner94908bb2010-08-18 21:23:25 +0000730 const char *env_encoding = Py_GETENV("PYTHONFSENCODING");
731 if (env_encoding != NULL) {
732 codeset = get_codec_name(env_encoding);
733 if (!codeset) {
734 fprintf(stderr, "PYTHONFSENCODING is not a valid encoding:\n");
735 PyErr_Print();
736 }
737 }
738 if (!codeset) {
739 /* On Unix, set the file system encoding according to the
740 user's preference, if the CODESET names a well-known
741 Python codec, and Py_FileSystemDefaultEncoding isn't
742 initialized by other means. Also set the encoding of
743 stdin and stdout if these are terminals. */
744 codeset = get_codeset();
745 }
Victor Stinner7f84ab52010-06-11 00:36:33 +0000746 if (codeset != NULL) {
747 Py_FileSystemDefaultEncoding = codeset;
748 Py_HasFileSystemDefaultEncoding = 0;
749 return;
Victor Stinner94908bb2010-08-18 21:23:25 +0000750 } else {
751 fprintf(stderr, "Unable to get the locale encoding:\n");
752 PyErr_Print();
Victor Stinner7f84ab52010-06-11 00:36:33 +0000753 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000754
Victor Stinner94908bb2010-08-18 21:23:25 +0000755 fprintf(stderr, "Unable to get the filesystem encoding: fallback to utf-8\n");
Victor Stinner7f84ab52010-06-11 00:36:33 +0000756 Py_FileSystemDefaultEncoding = "utf-8";
757 Py_HasFileSystemDefaultEncoding = 1;
758 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000759#endif
760
761 /* the encoding is mbcs, utf-8 or ascii */
762 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
763 if (!codec) {
764 /* Such error can only occurs in critical situations: no more
765 * memory, import a module of the standard library failed,
766 * etc. */
767 Py_FatalError("Py_Initialize: unable to load the file system codec");
768 } else {
769 Py_DECREF(codec);
770 }
771}
772
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000773/* Import the site module (not into __main__ though) */
774
775static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000776initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000777{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000778 PyObject *m;
779 m = PyImport_ImportModule("site");
780 if (m == NULL) {
781 PyErr_Print();
782 Py_Finalize();
783 exit(1);
784 }
785 else {
786 Py_DECREF(m);
787 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000788}
789
Antoine Pitrou05608432009-01-09 18:53:14 +0000790static PyObject*
791create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000792 int fd, int write_mode, char* name,
793 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +0000794{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000795 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
796 const char* mode;
797 PyObject *line_buffering;
798 int buffering, isatty;
Antoine Pitrou05608432009-01-09 18:53:14 +0000799
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000800 /* stdin is always opened in buffered mode, first because it shouldn't
801 make a difference in common use cases, second because TextIOWrapper
802 depends on the presence of a read1() method which only exists on
803 buffered streams.
804 */
805 if (Py_UnbufferedStdioFlag && write_mode)
806 buffering = 0;
807 else
808 buffering = -1;
809 if (write_mode)
810 mode = "wb";
811 else
812 mode = "rb";
813 buf = PyObject_CallMethod(io, "open", "isiOOOi",
814 fd, mode, buffering,
815 Py_None, Py_None, Py_None, 0);
816 if (buf == NULL)
817 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000818
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000819 if (buffering) {
820 raw = PyObject_GetAttrString(buf, "raw");
821 if (raw == NULL)
822 goto error;
823 }
824 else {
825 raw = buf;
826 Py_INCREF(raw);
827 }
Antoine Pitrou05608432009-01-09 18:53:14 +0000828
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000829 text = PyUnicode_FromString(name);
830 if (text == NULL || PyObject_SetAttrString(raw, "name", text) < 0)
831 goto error;
832 res = PyObject_CallMethod(raw, "isatty", "");
833 if (res == NULL)
834 goto error;
835 isatty = PyObject_IsTrue(res);
836 Py_DECREF(res);
837 if (isatty == -1)
838 goto error;
839 if (isatty || Py_UnbufferedStdioFlag)
840 line_buffering = Py_True;
841 else
842 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +0000843
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000844 Py_CLEAR(raw);
845 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +0000846
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000847 stream = PyObject_CallMethod(io, "TextIOWrapper", "OsssO",
848 buf, encoding, errors,
849 "\n", line_buffering);
850 Py_CLEAR(buf);
851 if (stream == NULL)
852 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000853
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000854 if (write_mode)
855 mode = "w";
856 else
857 mode = "r";
858 text = PyUnicode_FromString(mode);
859 if (!text || PyObject_SetAttrString(stream, "mode", text) < 0)
860 goto error;
861 Py_CLEAR(text);
862 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +0000863
864error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000865 Py_XDECREF(buf);
866 Py_XDECREF(stream);
867 Py_XDECREF(text);
868 Py_XDECREF(raw);
869 return NULL;
Antoine Pitrou05608432009-01-09 18:53:14 +0000870}
871
Georg Brandl1a3284e2007-12-02 09:40:06 +0000872/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000873static int
874initstdio(void)
875{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000876 PyObject *iomod = NULL, *wrapper;
877 PyObject *bimod = NULL;
878 PyObject *m;
879 PyObject *std = NULL;
880 int status = 0, fd;
881 PyObject * encoding_attr;
882 char *encoding = NULL, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000883
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000884 /* Hack to avoid a nasty recursion issue when Python is invoked
885 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
886 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
887 goto error;
888 }
889 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000890
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000891 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
892 goto error;
893 }
894 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000895
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000896 if (!(bimod = PyImport_ImportModule("builtins"))) {
897 goto error;
898 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000899
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000900 if (!(iomod = PyImport_ImportModule("io"))) {
901 goto error;
902 }
903 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
904 goto error;
905 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000906
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000907 /* Set builtins.open */
908 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
909 goto error;
910 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000911
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000912 encoding = Py_GETENV("PYTHONIOENCODING");
913 errors = NULL;
914 if (encoding) {
915 encoding = strdup(encoding);
916 errors = strchr(encoding, ':');
917 if (errors) {
918 *errors = '\0';
919 errors++;
920 }
921 }
Martin v. Löwis0f599892008-06-02 11:13:03 +0000922
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000923 /* Set sys.stdin */
924 fd = fileno(stdin);
925 /* Under some conditions stdin, stdout and stderr may not be connected
926 * and fileno() may point to an invalid file descriptor. For example
927 * GUI apps don't have valid standard streams by default.
928 */
929 if (fd < 0) {
Christian Heimes58cb1b82007-11-13 02:19:40 +0000930#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000931 std = Py_None;
932 Py_INCREF(std);
Christian Heimes58cb1b82007-11-13 02:19:40 +0000933#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000934 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000935#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000936 }
937 else {
938 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
939 if (std == NULL)
940 goto error;
941 } /* if (fd < 0) */
942 PySys_SetObject("__stdin__", std);
943 PySys_SetObject("stdin", std);
944 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000945
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000946 /* Set sys.stdout */
947 fd = fileno(stdout);
948 if (fd < 0) {
Christian Heimes58cb1b82007-11-13 02:19:40 +0000949#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000950 std = Py_None;
951 Py_INCREF(std);
Christian Heimes58cb1b82007-11-13 02:19:40 +0000952#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000953 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000954#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000955 }
956 else {
957 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
958 if (std == NULL)
959 goto error;
960 } /* if (fd < 0) */
961 PySys_SetObject("__stdout__", std);
962 PySys_SetObject("stdout", std);
963 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000964
Guido van Rossum98297ee2007-11-06 21:34:58 +0000965#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000966 /* Set sys.stderr, replaces the preliminary stderr */
967 fd = fileno(stderr);
968 if (fd < 0) {
Christian Heimes58cb1b82007-11-13 02:19:40 +0000969#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000970 std = Py_None;
971 Py_INCREF(std);
Christian Heimes58cb1b82007-11-13 02:19:40 +0000972#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000973 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000974#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000975 }
976 else {
977 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
978 if (std == NULL)
979 goto error;
980 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +0000981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000982 /* Same as hack above, pre-import stderr's codec to avoid recursion
983 when import.c tries to write to stderr in verbose mode. */
984 encoding_attr = PyObject_GetAttrString(std, "encoding");
985 if (encoding_attr != NULL) {
986 const char * encoding;
987 encoding = _PyUnicode_AsString(encoding_attr);
988 if (encoding != NULL) {
989 _PyCodec_Lookup(encoding);
990 }
991 }
992 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +0000993
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000994 PySys_SetObject("__stderr__", std);
995 PySys_SetObject("stderr", std);
996 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +0000997#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000998
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000999 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001000 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001001 status = -1;
1002 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001003
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001004 if (encoding)
1005 free(encoding);
1006 Py_XDECREF(bimod);
1007 Py_XDECREF(iomod);
1008 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001009}
1010
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001011/* Parse input from a file and execute it */
1012
1013int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001014PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001015 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001016{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001017 if (filename == NULL)
1018 filename = "???";
1019 if (Py_FdIsInteractive(fp, filename)) {
1020 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1021 if (closeit)
1022 fclose(fp);
1023 return err;
1024 }
1025 else
1026 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001027}
1028
1029int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001030PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001031{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001032 PyObject *v;
1033 int ret;
1034 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001035
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001036 if (flags == NULL) {
1037 flags = &local_flags;
1038 local_flags.cf_flags = 0;
1039 }
1040 v = PySys_GetObject("ps1");
1041 if (v == NULL) {
1042 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
1043 Py_XDECREF(v);
1044 }
1045 v = PySys_GetObject("ps2");
1046 if (v == NULL) {
1047 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
1048 Py_XDECREF(v);
1049 }
1050 for (;;) {
1051 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
1052 PRINT_TOTAL_REFS();
1053 if (ret == E_EOF)
1054 return 0;
1055 /*
1056 if (ret == E_NOMEM)
1057 return -1;
1058 */
1059 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001060}
1061
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001062/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001063static int PARSER_FLAGS(PyCompilerFlags *flags)
1064{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001065 int parser_flags = 0;
1066 if (!flags)
1067 return 0;
1068 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1069 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1070 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1071 parser_flags |= PyPARSE_IGNORE_COOKIE;
1072 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1073 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1074 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001075}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001076
Thomas Wouters89f507f2006-12-13 04:49:30 +00001077#if 0
1078/* Keep an example of flags with future keyword support. */
1079#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001080 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1081 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1082 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1083 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001084#endif
1085
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001086int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001087PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001088{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001089 PyObject *m, *d, *v, *w, *oenc = NULL;
1090 mod_ty mod;
1091 PyArena *arena;
1092 char *ps1 = "", *ps2 = "", *enc = NULL;
1093 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +00001094
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001095 if (fp == stdin) {
1096 /* Fetch encoding from sys.stdin */
1097 v = PySys_GetObject("stdin");
1098 if (v == NULL || v == Py_None)
1099 return -1;
1100 oenc = PyObject_GetAttrString(v, "encoding");
1101 if (!oenc)
1102 return -1;
1103 enc = _PyUnicode_AsString(oenc);
Victor Stinner386fe712010-05-19 00:34:15 +00001104 if (enc == NULL)
1105 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001106 }
1107 v = PySys_GetObject("ps1");
1108 if (v != NULL) {
1109 v = PyObject_Str(v);
1110 if (v == NULL)
1111 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001112 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001113 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001114 if (ps1 == NULL) {
1115 PyErr_Clear();
1116 ps1 = "";
1117 }
1118 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001119 }
1120 w = PySys_GetObject("ps2");
1121 if (w != NULL) {
1122 w = PyObject_Str(w);
1123 if (w == NULL)
1124 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001125 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001126 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001127 if (ps2 == NULL) {
1128 PyErr_Clear();
1129 ps2 = "";
1130 }
1131 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001132 }
1133 arena = PyArena_New();
1134 if (arena == NULL) {
1135 Py_XDECREF(v);
1136 Py_XDECREF(w);
1137 Py_XDECREF(oenc);
1138 return -1;
1139 }
1140 mod = PyParser_ASTFromFile(fp, filename, enc,
1141 Py_single_input, ps1, ps2,
1142 flags, &errcode, arena);
1143 Py_XDECREF(v);
1144 Py_XDECREF(w);
1145 Py_XDECREF(oenc);
1146 if (mod == NULL) {
1147 PyArena_Free(arena);
1148 if (errcode == E_EOF) {
1149 PyErr_Clear();
1150 return E_EOF;
1151 }
1152 PyErr_Print();
1153 return -1;
1154 }
1155 m = PyImport_AddModule("__main__");
1156 if (m == NULL) {
1157 PyArena_Free(arena);
1158 return -1;
1159 }
1160 d = PyModule_GetDict(m);
1161 v = run_mod(mod, filename, d, d, flags, arena);
1162 PyArena_Free(arena);
1163 flush_io();
1164 if (v == NULL) {
1165 PyErr_Print();
1166 return -1;
1167 }
1168 Py_DECREF(v);
1169 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001170}
1171
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001172/* Check whether a file maybe a pyc file: Look at the extension,
1173 the file type, and, if we may close it, at the first few bytes. */
1174
1175static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001176maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001177{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001178 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1179 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001180
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001181 /* Only look into the file if we are allowed to close it, since
1182 it then should also be seekable. */
1183 if (closeit) {
1184 /* Read only two bytes of the magic. If the file was opened in
1185 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1186 be read as they are on disk. */
1187 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1188 unsigned char buf[2];
1189 /* Mess: In case of -x, the stream is NOT at its start now,
1190 and ungetc() was used to push back the first newline,
1191 which makes the current stream position formally undefined,
1192 and a x-platform nightmare.
1193 Unfortunately, we have no direct way to know whether -x
1194 was specified. So we use a terrible hack: if the current
1195 stream position is not 0, we assume -x was specified, and
1196 give up. Bug 132850 on SourceForge spells out the
1197 hopelessness of trying anything else (fseek and ftell
1198 don't work predictably x-platform for text-mode files).
1199 */
1200 int ispyc = 0;
1201 if (ftell(fp) == 0) {
1202 if (fread(buf, 1, 2, fp) == 2 &&
1203 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1204 ispyc = 1;
1205 rewind(fp);
1206 }
1207 return ispyc;
1208 }
1209 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001210}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001211
Guido van Rossum0df002c2000-08-27 19:21:52 +00001212int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001213PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001214 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001215{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001216 PyObject *m, *d, *v;
1217 const char *ext;
1218 int set_file_name = 0, ret, len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001219
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001220 m = PyImport_AddModule("__main__");
1221 if (m == NULL)
1222 return -1;
1223 d = PyModule_GetDict(m);
1224 if (PyDict_GetItemString(d, "__file__") == NULL) {
1225 PyObject *f;
Victor Stinner0fe25a42010-06-17 23:08:50 +00001226 f = PyUnicode_FromString(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001227 if (f == NULL)
1228 return -1;
1229 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1230 Py_DECREF(f);
1231 return -1;
1232 }
1233 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0)
1234 return -1;
1235 set_file_name = 1;
1236 Py_DECREF(f);
1237 }
1238 len = strlen(filename);
1239 ext = filename + len - (len > 4 ? 4 : 0);
1240 if (maybe_pyc_file(fp, filename, ext, closeit)) {
1241 /* Try to run a pyc file. First, re-open in binary */
1242 if (closeit)
1243 fclose(fp);
1244 if ((fp = fopen(filename, "rb")) == NULL) {
1245 fprintf(stderr, "python: Can't reopen .pyc file\n");
1246 ret = -1;
1247 goto done;
1248 }
1249 /* Turn on optimization if a .pyo file is given */
1250 if (strcmp(ext, ".pyo") == 0)
1251 Py_OptimizeFlag = 1;
1252 v = run_pyc_file(fp, filename, d, d, flags);
1253 } else {
1254 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1255 closeit, flags);
1256 }
1257 flush_io();
1258 if (v == NULL) {
1259 PyErr_Print();
1260 ret = -1;
1261 goto done;
1262 }
1263 Py_DECREF(v);
1264 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001265 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001266 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1267 PyErr_Clear();
1268 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001269}
1270
1271int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001272PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001273{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001274 PyObject *m, *d, *v;
1275 m = PyImport_AddModule("__main__");
1276 if (m == NULL)
1277 return -1;
1278 d = PyModule_GetDict(m);
1279 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1280 if (v == NULL) {
1281 PyErr_Print();
1282 return -1;
1283 }
1284 Py_DECREF(v);
1285 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001286}
1287
Barry Warsaw035574d1997-08-29 22:07:17 +00001288static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001289parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001290 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001291{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001292 long hold;
1293 PyObject *v;
Barry Warsaw035574d1997-08-29 22:07:17 +00001294
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001295 /* old style errors */
1296 if (PyTuple_Check(err))
1297 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
1298 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001299
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001300 /* new style errors. `err' is an instance */
Barry Warsaw035574d1997-08-29 22:07:17 +00001301
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001302 if (! (v = PyObject_GetAttrString(err, "msg")))
1303 goto finally;
1304 *message = v;
Barry Warsaw035574d1997-08-29 22:07:17 +00001305
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001306 if (!(v = PyObject_GetAttrString(err, "filename")))
1307 goto finally;
1308 if (v == Py_None)
1309 *filename = NULL;
1310 else if (! (*filename = _PyUnicode_AsString(v)))
1311 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001312
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001313 Py_DECREF(v);
1314 if (!(v = PyObject_GetAttrString(err, "lineno")))
1315 goto finally;
1316 hold = PyLong_AsLong(v);
1317 Py_DECREF(v);
1318 v = NULL;
1319 if (hold < 0 && PyErr_Occurred())
1320 goto finally;
1321 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001322
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001323 if (!(v = PyObject_GetAttrString(err, "offset")))
1324 goto finally;
1325 if (v == Py_None) {
1326 *offset = -1;
1327 Py_DECREF(v);
1328 v = NULL;
1329 } else {
1330 hold = PyLong_AsLong(v);
1331 Py_DECREF(v);
1332 v = NULL;
1333 if (hold < 0 && PyErr_Occurred())
1334 goto finally;
1335 *offset = (int)hold;
1336 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001337
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001338 if (!(v = PyObject_GetAttrString(err, "text")))
1339 goto finally;
1340 if (v == Py_None)
1341 *text = NULL;
1342 else if (!PyUnicode_Check(v) ||
1343 !(*text = _PyUnicode_AsString(v)))
1344 goto finally;
1345 Py_DECREF(v);
1346 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001347
1348finally:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001349 Py_XDECREF(v);
1350 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001351}
1352
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001353void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001354PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001355{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001356 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001357}
1358
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001359static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001360print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001361{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001362 char *nl;
1363 if (offset >= 0) {
1364 if (offset > 0 && offset == (int)strlen(text))
1365 offset--;
1366 for (;;) {
1367 nl = strchr(text, '\n');
1368 if (nl == NULL || nl-text >= offset)
1369 break;
1370 offset -= (int)(nl+1-text);
1371 text = nl+1;
1372 }
1373 while (*text == ' ' || *text == '\t') {
1374 text++;
1375 offset--;
1376 }
1377 }
1378 PyFile_WriteString(" ", f);
1379 PyFile_WriteString(text, f);
1380 if (*text == '\0' || text[strlen(text)-1] != '\n')
1381 PyFile_WriteString("\n", f);
1382 if (offset == -1)
1383 return;
1384 PyFile_WriteString(" ", f);
1385 offset--;
1386 while (offset > 0) {
1387 PyFile_WriteString(" ", f);
1388 offset--;
1389 }
1390 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001391}
1392
Guido van Rossum66e8e862001-03-23 17:54:43 +00001393static void
1394handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001395{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001396 PyObject *exception, *value, *tb;
1397 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001398
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001399 if (Py_InspectFlag)
1400 /* Don't exit if -i flag was given. This flag is set to 0
1401 * when entering interactive mode for inspecting. */
1402 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001403
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001404 PyErr_Fetch(&exception, &value, &tb);
1405 fflush(stdout);
1406 if (value == NULL || value == Py_None)
1407 goto done;
1408 if (PyExceptionInstance_Check(value)) {
1409 /* The error code should be in the `code' attribute. */
1410 PyObject *code = PyObject_GetAttrString(value, "code");
1411 if (code) {
1412 Py_DECREF(value);
1413 value = code;
1414 if (value == Py_None)
1415 goto done;
1416 }
1417 /* If we failed to dig out the 'code' attribute,
1418 just let the else clause below print the error. */
1419 }
1420 if (PyLong_Check(value))
1421 exitcode = (int)PyLong_AsLong(value);
1422 else {
Victor Stinnere9fb3192010-05-17 08:58:51 +00001423 PyObject *sys_stderr = PySys_GetObject("stderr");
Victor Stinner7126dbc2010-05-21 23:45:42 +00001424 if (sys_stderr != NULL && sys_stderr != Py_None) {
1425 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1426 } else {
1427 PyObject_Print(value, stderr, Py_PRINT_RAW);
1428 fflush(stderr);
1429 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001430 PySys_WriteStderr("\n");
1431 exitcode = 1;
1432 }
Tim Peterscf615b52003-04-19 18:47:02 +00001433 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001434 /* Restore and clear the exception info, in order to properly decref
1435 * the exception, value, and traceback. If we just exit instead,
1436 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1437 * some finalizers from running.
1438 */
1439 PyErr_Restore(exception, value, tb);
1440 PyErr_Clear();
1441 Py_Exit(exitcode);
1442 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001443}
1444
1445void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001446PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001447{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001448 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001449
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001450 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1451 handle_system_exit();
1452 }
1453 PyErr_Fetch(&exception, &v, &tb);
1454 if (exception == NULL)
1455 return;
1456 PyErr_NormalizeException(&exception, &v, &tb);
1457 if (tb == NULL) {
1458 tb = Py_None;
1459 Py_INCREF(tb);
1460 }
1461 PyException_SetTraceback(v, tb);
1462 if (exception == NULL)
1463 return;
1464 /* Now we know v != NULL too */
1465 if (set_sys_last_vars) {
1466 PySys_SetObject("last_type", exception);
1467 PySys_SetObject("last_value", v);
1468 PySys_SetObject("last_traceback", tb);
1469 }
1470 hook = PySys_GetObject("excepthook");
1471 if (hook) {
1472 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1473 PyObject *result = PyEval_CallObject(hook, args);
1474 if (result == NULL) {
1475 PyObject *exception2, *v2, *tb2;
1476 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1477 handle_system_exit();
1478 }
1479 PyErr_Fetch(&exception2, &v2, &tb2);
1480 PyErr_NormalizeException(&exception2, &v2, &tb2);
1481 /* It should not be possible for exception2 or v2
1482 to be NULL. However PyErr_Display() can't
1483 tolerate NULLs, so just be safe. */
1484 if (exception2 == NULL) {
1485 exception2 = Py_None;
1486 Py_INCREF(exception2);
1487 }
1488 if (v2 == NULL) {
1489 v2 = Py_None;
1490 Py_INCREF(v2);
1491 }
1492 fflush(stdout);
1493 PySys_WriteStderr("Error in sys.excepthook:\n");
1494 PyErr_Display(exception2, v2, tb2);
1495 PySys_WriteStderr("\nOriginal exception was:\n");
1496 PyErr_Display(exception, v, tb);
1497 Py_DECREF(exception2);
1498 Py_DECREF(v2);
1499 Py_XDECREF(tb2);
1500 }
1501 Py_XDECREF(result);
1502 Py_XDECREF(args);
1503 } else {
1504 PySys_WriteStderr("sys.excepthook is missing\n");
1505 PyErr_Display(exception, v, tb);
1506 }
1507 Py_XDECREF(exception);
1508 Py_XDECREF(v);
1509 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001510}
1511
Benjamin Petersone6528212008-07-15 15:32:09 +00001512static void
1513print_exception(PyObject *f, PyObject *value)
1514{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001515 int err = 0;
1516 PyObject *type, *tb;
Benjamin Petersone6528212008-07-15 15:32:09 +00001517
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001518 if (!PyExceptionInstance_Check(value)) {
1519 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1520 PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1521 PyFile_WriteString(" found\n", f);
1522 return;
1523 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001524
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001525 Py_INCREF(value);
1526 fflush(stdout);
1527 type = (PyObject *) Py_TYPE(value);
1528 tb = PyException_GetTraceback(value);
1529 if (tb && tb != Py_None)
1530 err = PyTraceBack_Print(tb, f);
1531 if (err == 0 &&
1532 PyObject_HasAttrString(value, "print_file_and_line"))
1533 {
1534 PyObject *message;
1535 const char *filename, *text;
1536 int lineno, offset;
1537 if (!parse_syntax_error(value, &message, &filename,
1538 &lineno, &offset, &text))
1539 PyErr_Clear();
1540 else {
1541 char buf[10];
1542 PyFile_WriteString(" File \"", f);
1543 if (filename == NULL)
1544 PyFile_WriteString("<string>", f);
1545 else
1546 PyFile_WriteString(filename, f);
1547 PyFile_WriteString("\", line ", f);
1548 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
1549 PyFile_WriteString(buf, f);
1550 PyFile_WriteString("\n", f);
1551 if (text != NULL)
1552 print_error_text(f, offset, text);
1553 Py_DECREF(value);
1554 value = message;
1555 /* Can't be bothered to check all those
1556 PyFile_WriteString() calls */
1557 if (PyErr_Occurred())
1558 err = -1;
1559 }
1560 }
1561 if (err) {
1562 /* Don't do anything else */
1563 }
1564 else {
1565 PyObject* moduleName;
1566 char* className;
1567 assert(PyExceptionClass_Check(type));
1568 className = PyExceptionClass_Name(type);
1569 if (className != NULL) {
1570 char *dot = strrchr(className, '.');
1571 if (dot != NULL)
1572 className = dot+1;
1573 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001574
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001575 moduleName = PyObject_GetAttrString(type, "__module__");
1576 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1577 {
1578 Py_DECREF(moduleName);
1579 err = PyFile_WriteString("<unknown>", f);
1580 }
1581 else {
1582 char* modstr = _PyUnicode_AsString(moduleName);
1583 if (modstr && strcmp(modstr, "builtins"))
1584 {
1585 err = PyFile_WriteString(modstr, f);
1586 err += PyFile_WriteString(".", f);
1587 }
1588 Py_DECREF(moduleName);
1589 }
1590 if (err == 0) {
1591 if (className == NULL)
1592 err = PyFile_WriteString("<unknown>", f);
1593 else
1594 err = PyFile_WriteString(className, f);
1595 }
1596 }
1597 if (err == 0 && (value != Py_None)) {
1598 PyObject *s = PyObject_Str(value);
1599 /* only print colon if the str() of the
1600 object is not the empty string
1601 */
1602 if (s == NULL)
1603 err = -1;
1604 else if (!PyUnicode_Check(s) ||
1605 PyUnicode_GetSize(s) != 0)
1606 err = PyFile_WriteString(": ", f);
1607 if (err == 0)
1608 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1609 Py_XDECREF(s);
1610 }
1611 /* try to write a newline in any case */
1612 err += PyFile_WriteString("\n", f);
1613 Py_XDECREF(tb);
1614 Py_DECREF(value);
1615 /* If an error happened here, don't show it.
1616 XXX This is wrong, but too many callers rely on this behavior. */
1617 if (err != 0)
1618 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001619}
1620
1621static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001622 "\nThe above exception was the direct cause "
1623 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001624
1625static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001626 "\nDuring handling of the above exception, "
1627 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001628
1629static void
1630print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
1631{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001632 int err = 0, res;
1633 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00001634
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001635 if (seen != NULL) {
1636 /* Exception chaining */
1637 if (PySet_Add(seen, value) == -1)
1638 PyErr_Clear();
1639 else if (PyExceptionInstance_Check(value)) {
1640 cause = PyException_GetCause(value);
1641 context = PyException_GetContext(value);
1642 if (cause) {
1643 res = PySet_Contains(seen, cause);
1644 if (res == -1)
1645 PyErr_Clear();
1646 if (res == 0) {
1647 print_exception_recursive(
1648 f, cause, seen);
1649 err |= PyFile_WriteString(
1650 cause_message, f);
1651 }
1652 }
1653 else if (context) {
1654 res = PySet_Contains(seen, context);
1655 if (res == -1)
1656 PyErr_Clear();
1657 if (res == 0) {
1658 print_exception_recursive(
1659 f, context, seen);
1660 err |= PyFile_WriteString(
1661 context_message, f);
1662 }
1663 }
1664 Py_XDECREF(context);
1665 Py_XDECREF(cause);
1666 }
1667 }
1668 print_exception(f, value);
1669 if (err != 0)
1670 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001671}
1672
Thomas Wouters477c8d52006-05-27 19:21:47 +00001673void
1674PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001675{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001676 PyObject *seen;
1677 PyObject *f = PySys_GetObject("stderr");
1678 if (f == Py_None) {
1679 /* pass */
1680 }
1681 else if (f == NULL) {
1682 _PyObject_Dump(value);
1683 fprintf(stderr, "lost sys.stderr\n");
1684 }
1685 else {
1686 /* We choose to ignore seen being possibly NULL, and report
1687 at least the main exception (it could be a MemoryError).
1688 */
1689 seen = PySet_New(NULL);
1690 if (seen == NULL)
1691 PyErr_Clear();
1692 print_exception_recursive(f, value, seen);
1693 Py_XDECREF(seen);
1694 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001695}
1696
Guido van Rossum82598051997-03-05 00:20:32 +00001697PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001698PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001699 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001700{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001701 PyObject *ret = NULL;
1702 mod_ty mod;
1703 PyArena *arena = PyArena_New();
1704 if (arena == NULL)
1705 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001706
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001707 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
1708 if (mod != NULL)
1709 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
1710 PyArena_Free(arena);
1711 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001712}
1713
1714PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001715PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001716 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001717{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001718 PyObject *ret;
1719 mod_ty mod;
1720 PyArena *arena = PyArena_New();
1721 if (arena == NULL)
1722 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001723
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001724 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
1725 flags, NULL, arena);
1726 if (closeit)
1727 fclose(fp);
1728 if (mod == NULL) {
1729 PyArena_Free(arena);
1730 return NULL;
1731 }
1732 ret = run_mod(mod, filename, globals, locals, flags, arena);
1733 PyArena_Free(arena);
1734 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001735}
1736
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001737static void
1738flush_io(void)
1739{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001740 PyObject *f, *r;
1741 PyObject *type, *value, *traceback;
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001742
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001743 /* Save the current exception */
1744 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001745
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001746 f = PySys_GetObject("stderr");
1747 if (f != NULL) {
1748 r = PyObject_CallMethod(f, "flush", "");
1749 if (r)
1750 Py_DECREF(r);
1751 else
1752 PyErr_Clear();
1753 }
1754 f = PySys_GetObject("stdout");
1755 if (f != NULL) {
1756 r = PyObject_CallMethod(f, "flush", "");
1757 if (r)
1758 Py_DECREF(r);
1759 else
1760 PyErr_Clear();
1761 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001762
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001763 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001764}
1765
Guido van Rossum82598051997-03-05 00:20:32 +00001766static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001767run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001768 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001769{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001770 PyCodeObject *co;
1771 PyObject *v;
1772 co = PyAST_Compile(mod, filename, flags, arena);
1773 if (co == NULL)
1774 return NULL;
1775 v = PyEval_EvalCode(co, globals, locals);
1776 Py_DECREF(co);
1777 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001778}
1779
Guido van Rossum82598051997-03-05 00:20:32 +00001780static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001781run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001782 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001783{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001784 PyCodeObject *co;
1785 PyObject *v;
1786 long magic;
1787 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001788
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001789 magic = PyMarshal_ReadLongFromFile(fp);
1790 if (magic != PyImport_GetMagicNumber()) {
1791 PyErr_SetString(PyExc_RuntimeError,
1792 "Bad magic number in .pyc file");
1793 return NULL;
1794 }
1795 (void) PyMarshal_ReadLongFromFile(fp);
1796 v = PyMarshal_ReadLastObjectFromFile(fp);
1797 fclose(fp);
1798 if (v == NULL || !PyCode_Check(v)) {
1799 Py_XDECREF(v);
1800 PyErr_SetString(PyExc_RuntimeError,
1801 "Bad code object in .pyc file");
1802 return NULL;
1803 }
1804 co = (PyCodeObject *)v;
1805 v = PyEval_EvalCode(co, globals, locals);
1806 if (v && flags)
1807 flags->cf_flags |= (co->co_flags & PyCF_MASK);
1808 Py_DECREF(co);
1809 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001810}
1811
Guido van Rossum82598051997-03-05 00:20:32 +00001812PyObject *
Tim Petersd08e3822003-04-17 15:24:21 +00001813Py_CompileStringFlags(const char *str, const char *filename, int start,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001814 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001815{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001816 PyCodeObject *co;
1817 mod_ty mod;
1818 PyArena *arena = PyArena_New();
1819 if (arena == NULL)
1820 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001821
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001822 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
1823 if (mod == NULL) {
1824 PyArena_Free(arena);
1825 return NULL;
1826 }
1827 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
1828 PyObject *result = PyAST_mod2obj(mod);
1829 PyArena_Free(arena);
1830 return result;
1831 }
1832 co = PyAST_Compile(mod, filename, flags, arena);
1833 PyArena_Free(arena);
1834 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001835}
1836
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001837struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001838Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001839{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001840 struct symtable *st;
1841 mod_ty mod;
1842 PyCompilerFlags flags;
1843 PyArena *arena = PyArena_New();
1844 if (arena == NULL)
1845 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001846
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001847 flags.cf_flags = 0;
1848 mod = PyParser_ASTFromString(str, filename, start, &flags, arena);
1849 if (mod == NULL) {
1850 PyArena_Free(arena);
1851 return NULL;
1852 }
1853 st = PySymtable_Build(mod, filename, 0);
1854 PyArena_Free(arena);
1855 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001856}
1857
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001858/* Preferred access to parser is through AST. */
1859mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001860PyParser_ASTFromString(const char *s, const char *filename, int start,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001861 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001862{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001863 mod_ty mod;
1864 PyCompilerFlags localflags;
1865 perrdetail err;
1866 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00001867
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001868 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename,
1869 &_PyParser_Grammar, start, &err,
1870 &iflags);
1871 if (flags == NULL) {
1872 localflags.cf_flags = 0;
1873 flags = &localflags;
1874 }
1875 if (n) {
1876 flags->cf_flags |= iflags & PyCF_MASK;
1877 mod = PyAST_FromNode(n, flags, filename, arena);
1878 PyNode_Free(n);
1879 return mod;
1880 }
1881 else {
1882 err_input(&err);
1883 return NULL;
1884 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001885}
1886
1887mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001888PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001889 int start, char *ps1,
1890 char *ps2, PyCompilerFlags *flags, int *errcode,
1891 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001892{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001893 mod_ty mod;
1894 PyCompilerFlags localflags;
1895 perrdetail err;
1896 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00001897
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001898 node *n = PyParser_ParseFileFlagsEx(fp, filename, enc,
1899 &_PyParser_Grammar,
1900 start, ps1, ps2, &err, &iflags);
1901 if (flags == NULL) {
1902 localflags.cf_flags = 0;
1903 flags = &localflags;
1904 }
1905 if (n) {
1906 flags->cf_flags |= iflags & PyCF_MASK;
1907 mod = PyAST_FromNode(n, flags, filename, arena);
1908 PyNode_Free(n);
1909 return mod;
1910 }
1911 else {
1912 err_input(&err);
1913 if (errcode)
1914 *errcode = err.error;
1915 return NULL;
1916 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001917}
1918
Guido van Rossuma110aa61994-08-29 12:50:44 +00001919/* Simplified interface to parsefile -- 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_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001923{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001924 perrdetail err;
1925 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
1926 &_PyParser_Grammar,
1927 start, NULL, NULL, &err, flags);
1928 if (n == NULL)
1929 err_input(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001930
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001931 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001932}
1933
Guido van Rossuma110aa61994-08-29 12:50:44 +00001934/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001935
Guido van Rossuma110aa61994-08-29 12:50:44 +00001936node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001937PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001938{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001939 perrdetail err;
1940 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1941 start, &err, flags);
1942 if (n == NULL)
1943 err_input(&err);
1944 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00001945}
1946
1947node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001948PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001949 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001950{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001951 perrdetail err;
1952 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1953 &_PyParser_Grammar, start, &err, flags);
1954 if (n == NULL)
1955 err_input(&err);
1956 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00001957}
1958
1959node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001960PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001961{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001962 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001963}
1964
Guido van Rossum66ebd912003-04-17 16:02:26 +00001965/* May want to move a more generalized form of this to parsetok.c or
1966 even parser modules. */
1967
1968void
1969PyParser_SetError(perrdetail *err)
1970{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001971 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00001972}
1973
Guido van Rossuma110aa61994-08-29 12:50:44 +00001974/* Set the error appropriate to the given input error code (see errcode.h) */
1975
1976static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001977err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00001978{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001979 PyObject *v, *w, *errtype, *errtext;
1980 PyObject *msg_obj = NULL;
1981 char *msg = NULL;
1982 errtype = PyExc_SyntaxError;
1983 switch (err->error) {
1984 case E_ERROR:
1985 return;
1986 case E_SYNTAX:
1987 errtype = PyExc_IndentationError;
1988 if (err->expected == INDENT)
1989 msg = "expected an indented block";
1990 else if (err->token == INDENT)
1991 msg = "unexpected indent";
1992 else if (err->token == DEDENT)
1993 msg = "unexpected unindent";
1994 else {
1995 errtype = PyExc_SyntaxError;
1996 msg = "invalid syntax";
1997 }
1998 break;
1999 case E_TOKEN:
2000 msg = "invalid token";
2001 break;
2002 case E_EOFS:
2003 msg = "EOF while scanning triple-quoted string literal";
2004 break;
2005 case E_EOLS:
2006 msg = "EOL while scanning string literal";
2007 break;
2008 case E_INTR:
2009 if (!PyErr_Occurred())
2010 PyErr_SetNone(PyExc_KeyboardInterrupt);
2011 goto cleanup;
2012 case E_NOMEM:
2013 PyErr_NoMemory();
2014 goto cleanup;
2015 case E_EOF:
2016 msg = "unexpected EOF while parsing";
2017 break;
2018 case E_TABSPACE:
2019 errtype = PyExc_TabError;
2020 msg = "inconsistent use of tabs and spaces in indentation";
2021 break;
2022 case E_OVERFLOW:
2023 msg = "expression too long";
2024 break;
2025 case E_DEDENT:
2026 errtype = PyExc_IndentationError;
2027 msg = "unindent does not match any outer indentation level";
2028 break;
2029 case E_TOODEEP:
2030 errtype = PyExc_IndentationError;
2031 msg = "too many levels of indentation";
2032 break;
2033 case E_DECODE: {
2034 PyObject *type, *value, *tb;
2035 PyErr_Fetch(&type, &value, &tb);
2036 msg = "unknown decode error";
2037 if (value != NULL)
2038 msg_obj = PyObject_Str(value);
2039 Py_XDECREF(type);
2040 Py_XDECREF(value);
2041 Py_XDECREF(tb);
2042 break;
2043 }
2044 case E_LINECONT:
2045 msg = "unexpected character after line continuation character";
2046 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002047
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002048 case E_IDENTIFIER:
2049 msg = "invalid character in identifier";
2050 break;
2051 default:
2052 fprintf(stderr, "error=%d\n", err->error);
2053 msg = "unknown parsing error";
2054 break;
2055 }
2056 /* err->text may not be UTF-8 in case of decoding errors.
2057 Explicitly convert to an object. */
2058 if (!err->text) {
2059 errtext = Py_None;
2060 Py_INCREF(Py_None);
2061 } else {
2062 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
2063 "replace");
2064 }
2065 v = Py_BuildValue("(ziiN)", err->filename,
2066 err->lineno, err->offset, errtext);
2067 if (v != NULL) {
2068 if (msg_obj)
2069 w = Py_BuildValue("(OO)", msg_obj, v);
2070 else
2071 w = Py_BuildValue("(sO)", msg, v);
2072 } else
2073 w = NULL;
2074 Py_XDECREF(v);
2075 PyErr_SetObject(errtype, w);
2076 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002077cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002078 Py_XDECREF(msg_obj);
2079 if (err->text != NULL) {
2080 PyObject_FREE(err->text);
2081 err->text = NULL;
2082 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002083}
2084
2085/* Print fatal error message and abort */
2086
2087void
Tim Peters7c321a82002-07-09 02:57:01 +00002088Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002089{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002090 fprintf(stderr, "Fatal Python error: %s\n", msg);
2091 fflush(stderr); /* it helps in Windows debug build */
2092 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002093 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002094 }
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002095#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002096 {
2097 size_t len = strlen(msg);
2098 WCHAR* buffer;
2099 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002100
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002101 /* Convert the message to wchar_t. This uses a simple one-to-one
2102 conversion, assuming that the this error message actually uses ASCII
2103 only. If this ceases to be true, we will have to convert. */
2104 buffer = alloca( (len+1) * (sizeof *buffer));
2105 for( i=0; i<=len; ++i)
2106 buffer[i] = msg[i];
2107 OutputDebugStringW(L"Fatal Python error: ");
2108 OutputDebugStringW(buffer);
2109 OutputDebugStringW(L"\n");
2110 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002111#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002112 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002113#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002114#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002115 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002116}
2117
2118/* Clean up and exit */
2119
Guido van Rossuma110aa61994-08-29 12:50:44 +00002120#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002121#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002122#endif
2123
Collin Winter670e6922007-03-21 02:57:17 +00002124static void (*pyexitfunc)(void) = NULL;
2125/* For the atexit module. */
2126void _Py_PyAtExit(void (*func)(void))
2127{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002128 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002129}
2130
2131static void
2132call_py_exitfuncs(void)
2133{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002134 if (pyexitfunc == NULL)
2135 return;
Collin Winter670e6922007-03-21 02:57:17 +00002136
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002137 (*pyexitfunc)();
2138 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002139}
2140
Antoine Pitrou011bd622009-10-20 21:52:47 +00002141/* Wait until threading._shutdown completes, provided
2142 the threading module was imported in the first place.
2143 The shutdown routine will wait until all non-daemon
2144 "threading" threads have completed. */
2145static void
2146wait_for_thread_shutdown(void)
2147{
2148#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002149 PyObject *result;
2150 PyThreadState *tstate = PyThreadState_GET();
2151 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2152 "threading");
2153 if (threading == NULL) {
2154 /* threading not imported */
2155 PyErr_Clear();
2156 return;
2157 }
2158 result = PyObject_CallMethod(threading, "_shutdown", "");
2159 if (result == NULL) {
2160 PyErr_WriteUnraisable(threading);
2161 }
2162 else {
2163 Py_DECREF(result);
2164 }
2165 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002166#endif
2167}
2168
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002169#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002170static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002171static int nexitfuncs = 0;
2172
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002173int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002174{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002175 if (nexitfuncs >= NEXITFUNCS)
2176 return -1;
2177 exitfuncs[nexitfuncs++] = func;
2178 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002179}
2180
Guido van Rossumcc283f51997-08-05 02:22:03 +00002181static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002182call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002183{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002184 while (nexitfuncs > 0)
2185 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002186
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002187 fflush(stdout);
2188 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002189}
2190
2191void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002192Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002193{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002194 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002195
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002196 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002197}
2198
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002199static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002200initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002201{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002202#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002203 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002204#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002205#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002206 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002207#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002208#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002209 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002210#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002211 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002212}
2213
Guido van Rossum7433b121997-02-14 19:45:36 +00002214
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002215/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2216 *
2217 * All of the code in this function must only use async-signal-safe functions,
2218 * listed at `man 7 signal` or
2219 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2220 */
2221void
2222_Py_RestoreSignals(void)
2223{
2224#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002225 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002226#endif
2227#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002228 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002229#endif
2230#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002231 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002232#endif
2233}
2234
2235
Guido van Rossum7433b121997-02-14 19:45:36 +00002236/*
2237 * The file descriptor fd is considered ``interactive'' if either
2238 * a) isatty(fd) is TRUE, or
2239 * b) the -i flag was given, and the filename associated with
2240 * the descriptor is NULL or "<stdin>" or "???".
2241 */
2242int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002243Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002244{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002245 if (isatty((int)fileno(fp)))
2246 return 1;
2247 if (!Py_InteractiveFlag)
2248 return 0;
2249 return (filename == NULL) ||
2250 (strcmp(filename, "<stdin>") == 0) ||
2251 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002252}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002253
2254
Tim Petersd08e3822003-04-17 15:24:21 +00002255#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002256#if defined(WIN32) && defined(_MSC_VER)
2257
2258/* Stack checking for Microsoft C */
2259
2260#include <malloc.h>
2261#include <excpt.h>
2262
Fred Drakee8de31c2000-08-31 05:38:39 +00002263/*
2264 * Return non-zero when we run out of memory on the stack; zero otherwise.
2265 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002266int
Fred Drake399739f2000-08-31 05:52:44 +00002267PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002268{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002269 __try {
2270 /* alloca throws a stack overflow exception if there's
2271 not enough space left on the stack */
2272 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2273 return 0;
2274 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2275 EXCEPTION_EXECUTE_HANDLER :
2276 EXCEPTION_CONTINUE_SEARCH) {
2277 int errcode = _resetstkoflw();
2278 if (errcode == 0)
2279 {
2280 Py_FatalError("Could not reset the stack!");
2281 }
2282 }
2283 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002284}
2285
2286#endif /* WIN32 && _MSC_VER */
2287
2288/* Alternate implementations can be added here... */
2289
2290#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002291
2292
2293/* Wrappers around sigaction() or signal(). */
2294
2295PyOS_sighandler_t
2296PyOS_getsig(int sig)
2297{
2298#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002299 struct sigaction context;
2300 if (sigaction(sig, NULL, &context) == -1)
2301 return SIG_ERR;
2302 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002303#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002304 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002305/* Special signal handling for the secure CRT in Visual Studio 2005 */
2306#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002307 switch (sig) {
2308 /* Only these signals are valid */
2309 case SIGINT:
2310 case SIGILL:
2311 case SIGFPE:
2312 case SIGSEGV:
2313 case SIGTERM:
2314 case SIGBREAK:
2315 case SIGABRT:
2316 break;
2317 /* Don't call signal() with other values or it will assert */
2318 default:
2319 return SIG_ERR;
2320 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002321#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002322 handler = signal(sig, SIG_IGN);
2323 if (handler != SIG_ERR)
2324 signal(sig, handler);
2325 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002326#endif
2327}
2328
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002329/*
2330 * All of the code in this function must only use async-signal-safe functions,
2331 * listed at `man 7 signal` or
2332 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2333 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002334PyOS_sighandler_t
2335PyOS_setsig(int sig, PyOS_sighandler_t handler)
2336{
2337#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002338 /* Some code in Modules/signalmodule.c depends on sigaction() being
2339 * used here if HAVE_SIGACTION is defined. Fix that if this code
2340 * changes to invalidate that assumption.
2341 */
2342 struct sigaction context, ocontext;
2343 context.sa_handler = handler;
2344 sigemptyset(&context.sa_mask);
2345 context.sa_flags = 0;
2346 if (sigaction(sig, &context, &ocontext) == -1)
2347 return SIG_ERR;
2348 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002349#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002350 PyOS_sighandler_t oldhandler;
2351 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002352#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002353 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002354#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002355 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002356#endif
2357}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002358
2359/* Deprecated C API functions still provided for binary compatiblity */
2360
2361#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002362PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002363PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2364{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002365 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002366}
2367
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002368#undef PyParser_SimpleParseString
2369PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002370PyParser_SimpleParseString(const char *str, int start)
2371{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002372 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002373}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002374
2375#undef PyRun_AnyFile
2376PyAPI_FUNC(int)
2377PyRun_AnyFile(FILE *fp, const char *name)
2378{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002379 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002380}
2381
2382#undef PyRun_AnyFileEx
2383PyAPI_FUNC(int)
2384PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2385{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002386 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002387}
2388
2389#undef PyRun_AnyFileFlags
2390PyAPI_FUNC(int)
2391PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2392{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002393 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002394}
2395
2396#undef PyRun_File
2397PyAPI_FUNC(PyObject *)
2398PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2399{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002400 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002401}
2402
2403#undef PyRun_FileEx
2404PyAPI_FUNC(PyObject *)
2405PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2406{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002407 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002408}
2409
2410#undef PyRun_FileFlags
2411PyAPI_FUNC(PyObject *)
2412PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002413 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002414{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002415 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002416}
2417
2418#undef PyRun_SimpleFile
2419PyAPI_FUNC(int)
2420PyRun_SimpleFile(FILE *f, const char *p)
2421{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002422 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002423}
2424
2425#undef PyRun_SimpleFileEx
2426PyAPI_FUNC(int)
2427PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2428{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002429 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002430}
2431
2432
2433#undef PyRun_String
2434PyAPI_FUNC(PyObject *)
2435PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2436{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002437 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002438}
2439
2440#undef PyRun_SimpleString
2441PyAPI_FUNC(int)
2442PyRun_SimpleString(const char *s)
2443{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002444 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002445}
2446
2447#undef Py_CompileString
2448PyAPI_FUNC(PyObject *)
2449Py_CompileString(const char *str, const char *p, int s)
2450{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002451 return Py_CompileStringFlags(str, p, s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002452}
2453
2454#undef PyRun_InteractiveOne
2455PyAPI_FUNC(int)
2456PyRun_InteractiveOne(FILE *f, const char *p)
2457{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002458 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002459}
2460
2461#undef PyRun_InteractiveLoop
2462PyAPI_FUNC(int)
2463PyRun_InteractiveLoop(FILE *f, const char *p)
2464{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002465 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002466}
2467
2468#ifdef __cplusplus
2469}
2470#endif