blob: 8c535fd8a61a36f72c088f8db143a41474ef52fc [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 Stinner8f6b6b02010-10-13 22:02:27 +0000730 /* On Unix, set the file system encoding according to the
731 user's preference, if the CODESET names a well-known
732 Python codec, and Py_FileSystemDefaultEncoding isn't
733 initialized by other means. Also set the encoding of
734 stdin and stdout if these are terminals. */
735 codeset = get_codeset();
Victor Stinner7f84ab52010-06-11 00:36:33 +0000736 if (codeset != NULL) {
737 Py_FileSystemDefaultEncoding = codeset;
738 Py_HasFileSystemDefaultEncoding = 0;
739 return;
Victor Stinner94908bb2010-08-18 21:23:25 +0000740 } else {
741 fprintf(stderr, "Unable to get the locale encoding:\n");
742 PyErr_Print();
Victor Stinner7f84ab52010-06-11 00:36:33 +0000743 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000744
Victor Stinner94908bb2010-08-18 21:23:25 +0000745 fprintf(stderr, "Unable to get the filesystem encoding: fallback to utf-8\n");
Victor Stinner7f84ab52010-06-11 00:36:33 +0000746 Py_FileSystemDefaultEncoding = "utf-8";
747 Py_HasFileSystemDefaultEncoding = 1;
748 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000749#endif
750
751 /* the encoding is mbcs, utf-8 or ascii */
752 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
753 if (!codec) {
754 /* Such error can only occurs in critical situations: no more
755 * memory, import a module of the standard library failed,
756 * etc. */
757 Py_FatalError("Py_Initialize: unable to load the file system codec");
758 } else {
759 Py_DECREF(codec);
760 }
761}
762
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000763/* Import the site module (not into __main__ though) */
764
765static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000766initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000767{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000768 PyObject *m;
769 m = PyImport_ImportModule("site");
770 if (m == NULL) {
771 PyErr_Print();
772 Py_Finalize();
773 exit(1);
774 }
775 else {
776 Py_DECREF(m);
777 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000778}
779
Antoine Pitrou05608432009-01-09 18:53:14 +0000780static PyObject*
781create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000782 int fd, int write_mode, char* name,
783 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +0000784{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000785 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
786 const char* mode;
787 PyObject *line_buffering;
788 int buffering, isatty;
Antoine Pitrou05608432009-01-09 18:53:14 +0000789
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000790 /* stdin is always opened in buffered mode, first because it shouldn't
791 make a difference in common use cases, second because TextIOWrapper
792 depends on the presence of a read1() method which only exists on
793 buffered streams.
794 */
795 if (Py_UnbufferedStdioFlag && write_mode)
796 buffering = 0;
797 else
798 buffering = -1;
799 if (write_mode)
800 mode = "wb";
801 else
802 mode = "rb";
803 buf = PyObject_CallMethod(io, "open", "isiOOOi",
804 fd, mode, buffering,
805 Py_None, Py_None, Py_None, 0);
806 if (buf == NULL)
807 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000808
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000809 if (buffering) {
810 raw = PyObject_GetAttrString(buf, "raw");
811 if (raw == NULL)
812 goto error;
813 }
814 else {
815 raw = buf;
816 Py_INCREF(raw);
817 }
Antoine Pitrou05608432009-01-09 18:53:14 +0000818
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000819 text = PyUnicode_FromString(name);
820 if (text == NULL || PyObject_SetAttrString(raw, "name", text) < 0)
821 goto error;
822 res = PyObject_CallMethod(raw, "isatty", "");
823 if (res == NULL)
824 goto error;
825 isatty = PyObject_IsTrue(res);
826 Py_DECREF(res);
827 if (isatty == -1)
828 goto error;
829 if (isatty || Py_UnbufferedStdioFlag)
830 line_buffering = Py_True;
831 else
832 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +0000833
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000834 Py_CLEAR(raw);
835 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +0000836
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000837 stream = PyObject_CallMethod(io, "TextIOWrapper", "OsssO",
838 buf, encoding, errors,
839 "\n", line_buffering);
840 Py_CLEAR(buf);
841 if (stream == NULL)
842 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000843
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000844 if (write_mode)
845 mode = "w";
846 else
847 mode = "r";
848 text = PyUnicode_FromString(mode);
849 if (!text || PyObject_SetAttrString(stream, "mode", text) < 0)
850 goto error;
851 Py_CLEAR(text);
852 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +0000853
854error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000855 Py_XDECREF(buf);
856 Py_XDECREF(stream);
857 Py_XDECREF(text);
858 Py_XDECREF(raw);
859 return NULL;
Antoine Pitrou05608432009-01-09 18:53:14 +0000860}
861
Georg Brandl1a3284e2007-12-02 09:40:06 +0000862/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000863static int
864initstdio(void)
865{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000866 PyObject *iomod = NULL, *wrapper;
867 PyObject *bimod = NULL;
868 PyObject *m;
869 PyObject *std = NULL;
870 int status = 0, fd;
871 PyObject * encoding_attr;
872 char *encoding = NULL, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000873
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000874 /* Hack to avoid a nasty recursion issue when Python is invoked
875 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
876 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
877 goto error;
878 }
879 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000880
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000881 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
882 goto error;
883 }
884 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000885
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000886 if (!(bimod = PyImport_ImportModule("builtins"))) {
887 goto error;
888 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000889
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000890 if (!(iomod = PyImport_ImportModule("io"))) {
891 goto error;
892 }
893 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
894 goto error;
895 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000896
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000897 /* Set builtins.open */
898 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
899 goto error;
900 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000901
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000902 encoding = Py_GETENV("PYTHONIOENCODING");
903 errors = NULL;
904 if (encoding) {
905 encoding = strdup(encoding);
906 errors = strchr(encoding, ':');
907 if (errors) {
908 *errors = '\0';
909 errors++;
910 }
911 }
Martin v. Löwis0f599892008-06-02 11:13:03 +0000912
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000913 /* Set sys.stdin */
914 fd = fileno(stdin);
915 /* Under some conditions stdin, stdout and stderr may not be connected
916 * and fileno() may point to an invalid file descriptor. For example
917 * GUI apps don't have valid standard streams by default.
918 */
919 if (fd < 0) {
Christian Heimes58cb1b82007-11-13 02:19:40 +0000920#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000921 std = Py_None;
922 Py_INCREF(std);
Christian Heimes58cb1b82007-11-13 02:19:40 +0000923#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000924 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000925#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000926 }
927 else {
928 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
929 if (std == NULL)
930 goto error;
931 } /* if (fd < 0) */
932 PySys_SetObject("__stdin__", std);
933 PySys_SetObject("stdin", std);
934 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000935
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000936 /* Set sys.stdout */
937 fd = fileno(stdout);
938 if (fd < 0) {
Christian Heimes58cb1b82007-11-13 02:19:40 +0000939#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000940 std = Py_None;
941 Py_INCREF(std);
Christian Heimes58cb1b82007-11-13 02:19:40 +0000942#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000943 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000944#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000945 }
946 else {
947 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
948 if (std == NULL)
949 goto error;
950 } /* if (fd < 0) */
951 PySys_SetObject("__stdout__", std);
952 PySys_SetObject("stdout", std);
953 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000954
Guido van Rossum98297ee2007-11-06 21:34:58 +0000955#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000956 /* Set sys.stderr, replaces the preliminary stderr */
957 fd = fileno(stderr);
958 if (fd < 0) {
Christian Heimes58cb1b82007-11-13 02:19:40 +0000959#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000960 std = Py_None;
961 Py_INCREF(std);
Christian Heimes58cb1b82007-11-13 02:19:40 +0000962#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000963 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000964#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000965 }
966 else {
967 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
968 if (std == NULL)
969 goto error;
970 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +0000971
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000972 /* Same as hack above, pre-import stderr's codec to avoid recursion
973 when import.c tries to write to stderr in verbose mode. */
974 encoding_attr = PyObject_GetAttrString(std, "encoding");
975 if (encoding_attr != NULL) {
976 const char * encoding;
977 encoding = _PyUnicode_AsString(encoding_attr);
978 if (encoding != NULL) {
979 _PyCodec_Lookup(encoding);
980 }
981 }
982 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +0000983
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000984 PySys_SetObject("__stderr__", std);
985 PySys_SetObject("stderr", std);
986 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +0000987#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000988
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000989 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000990 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000991 status = -1;
992 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000993
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000994 if (encoding)
995 free(encoding);
996 Py_XDECREF(bimod);
997 Py_XDECREF(iomod);
998 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000999}
1000
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001001/* Parse input from a file and execute it */
1002
1003int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001004PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001005 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001006{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001007 if (filename == NULL)
1008 filename = "???";
1009 if (Py_FdIsInteractive(fp, filename)) {
1010 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1011 if (closeit)
1012 fclose(fp);
1013 return err;
1014 }
1015 else
1016 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001017}
1018
1019int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001020PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001021{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001022 PyObject *v;
1023 int ret;
1024 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001025
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001026 if (flags == NULL) {
1027 flags = &local_flags;
1028 local_flags.cf_flags = 0;
1029 }
1030 v = PySys_GetObject("ps1");
1031 if (v == NULL) {
1032 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
1033 Py_XDECREF(v);
1034 }
1035 v = PySys_GetObject("ps2");
1036 if (v == NULL) {
1037 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
1038 Py_XDECREF(v);
1039 }
1040 for (;;) {
1041 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
1042 PRINT_TOTAL_REFS();
1043 if (ret == E_EOF)
1044 return 0;
1045 /*
1046 if (ret == E_NOMEM)
1047 return -1;
1048 */
1049 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001050}
1051
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001052/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001053static int PARSER_FLAGS(PyCompilerFlags *flags)
1054{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001055 int parser_flags = 0;
1056 if (!flags)
1057 return 0;
1058 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1059 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1060 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1061 parser_flags |= PyPARSE_IGNORE_COOKIE;
1062 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1063 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1064 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001065}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001066
Thomas Wouters89f507f2006-12-13 04:49:30 +00001067#if 0
1068/* Keep an example of flags with future keyword support. */
1069#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001070 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1071 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1072 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1073 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001074#endif
1075
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001076int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001077PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001078{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001079 PyObject *m, *d, *v, *w, *oenc = NULL;
1080 mod_ty mod;
1081 PyArena *arena;
1082 char *ps1 = "", *ps2 = "", *enc = NULL;
1083 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +00001084
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001085 if (fp == stdin) {
1086 /* Fetch encoding from sys.stdin */
1087 v = PySys_GetObject("stdin");
1088 if (v == NULL || v == Py_None)
1089 return -1;
1090 oenc = PyObject_GetAttrString(v, "encoding");
1091 if (!oenc)
1092 return -1;
1093 enc = _PyUnicode_AsString(oenc);
Victor Stinner386fe712010-05-19 00:34:15 +00001094 if (enc == NULL)
1095 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001096 }
1097 v = PySys_GetObject("ps1");
1098 if (v != NULL) {
1099 v = PyObject_Str(v);
1100 if (v == NULL)
1101 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001102 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001103 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001104 if (ps1 == NULL) {
1105 PyErr_Clear();
1106 ps1 = "";
1107 }
1108 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001109 }
1110 w = PySys_GetObject("ps2");
1111 if (w != NULL) {
1112 w = PyObject_Str(w);
1113 if (w == NULL)
1114 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001115 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001116 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001117 if (ps2 == NULL) {
1118 PyErr_Clear();
1119 ps2 = "";
1120 }
1121 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001122 }
1123 arena = PyArena_New();
1124 if (arena == NULL) {
1125 Py_XDECREF(v);
1126 Py_XDECREF(w);
1127 Py_XDECREF(oenc);
1128 return -1;
1129 }
1130 mod = PyParser_ASTFromFile(fp, filename, enc,
1131 Py_single_input, ps1, ps2,
1132 flags, &errcode, arena);
1133 Py_XDECREF(v);
1134 Py_XDECREF(w);
1135 Py_XDECREF(oenc);
1136 if (mod == NULL) {
1137 PyArena_Free(arena);
1138 if (errcode == E_EOF) {
1139 PyErr_Clear();
1140 return E_EOF;
1141 }
1142 PyErr_Print();
1143 return -1;
1144 }
1145 m = PyImport_AddModule("__main__");
1146 if (m == NULL) {
1147 PyArena_Free(arena);
1148 return -1;
1149 }
1150 d = PyModule_GetDict(m);
1151 v = run_mod(mod, filename, d, d, flags, arena);
1152 PyArena_Free(arena);
1153 flush_io();
1154 if (v == NULL) {
1155 PyErr_Print();
1156 return -1;
1157 }
1158 Py_DECREF(v);
1159 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001160}
1161
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001162/* Check whether a file maybe a pyc file: Look at the extension,
1163 the file type, and, if we may close it, at the first few bytes. */
1164
1165static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001166maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001167{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001168 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1169 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001170
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001171 /* Only look into the file if we are allowed to close it, since
1172 it then should also be seekable. */
1173 if (closeit) {
1174 /* Read only two bytes of the magic. If the file was opened in
1175 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1176 be read as they are on disk. */
1177 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1178 unsigned char buf[2];
1179 /* Mess: In case of -x, the stream is NOT at its start now,
1180 and ungetc() was used to push back the first newline,
1181 which makes the current stream position formally undefined,
1182 and a x-platform nightmare.
1183 Unfortunately, we have no direct way to know whether -x
1184 was specified. So we use a terrible hack: if the current
1185 stream position is not 0, we assume -x was specified, and
1186 give up. Bug 132850 on SourceForge spells out the
1187 hopelessness of trying anything else (fseek and ftell
1188 don't work predictably x-platform for text-mode files).
1189 */
1190 int ispyc = 0;
1191 if (ftell(fp) == 0) {
1192 if (fread(buf, 1, 2, fp) == 2 &&
1193 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1194 ispyc = 1;
1195 rewind(fp);
1196 }
1197 return ispyc;
1198 }
1199 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001200}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001201
Guido van Rossum0df002c2000-08-27 19:21:52 +00001202int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001203PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001204 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001205{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001206 PyObject *m, *d, *v;
1207 const char *ext;
1208 int set_file_name = 0, ret, len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001209
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001210 m = PyImport_AddModule("__main__");
1211 if (m == NULL)
1212 return -1;
1213 d = PyModule_GetDict(m);
1214 if (PyDict_GetItemString(d, "__file__") == NULL) {
1215 PyObject *f;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001216 f = PyUnicode_DecodeFSDefault(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001217 if (f == NULL)
1218 return -1;
1219 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1220 Py_DECREF(f);
1221 return -1;
1222 }
1223 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0)
1224 return -1;
1225 set_file_name = 1;
1226 Py_DECREF(f);
1227 }
1228 len = strlen(filename);
1229 ext = filename + len - (len > 4 ? 4 : 0);
1230 if (maybe_pyc_file(fp, filename, ext, closeit)) {
1231 /* Try to run a pyc file. First, re-open in binary */
1232 if (closeit)
1233 fclose(fp);
1234 if ((fp = fopen(filename, "rb")) == NULL) {
1235 fprintf(stderr, "python: Can't reopen .pyc file\n");
1236 ret = -1;
1237 goto done;
1238 }
1239 /* Turn on optimization if a .pyo file is given */
1240 if (strcmp(ext, ".pyo") == 0)
1241 Py_OptimizeFlag = 1;
1242 v = run_pyc_file(fp, filename, d, d, flags);
1243 } else {
1244 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1245 closeit, flags);
1246 }
1247 flush_io();
1248 if (v == NULL) {
1249 PyErr_Print();
1250 ret = -1;
1251 goto done;
1252 }
1253 Py_DECREF(v);
1254 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001255 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001256 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1257 PyErr_Clear();
1258 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001259}
1260
1261int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001262PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001263{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001264 PyObject *m, *d, *v;
1265 m = PyImport_AddModule("__main__");
1266 if (m == NULL)
1267 return -1;
1268 d = PyModule_GetDict(m);
1269 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1270 if (v == NULL) {
1271 PyErr_Print();
1272 return -1;
1273 }
1274 Py_DECREF(v);
1275 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001276}
1277
Barry Warsaw035574d1997-08-29 22:07:17 +00001278static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001279parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001280 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001281{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001282 long hold;
1283 PyObject *v;
Barry Warsaw035574d1997-08-29 22:07:17 +00001284
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001285 /* old style errors */
1286 if (PyTuple_Check(err))
1287 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
1288 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001289
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001290 /* new style errors. `err' is an instance */
Barry Warsaw035574d1997-08-29 22:07:17 +00001291
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001292 if (! (v = PyObject_GetAttrString(err, "msg")))
1293 goto finally;
1294 *message = v;
Barry Warsaw035574d1997-08-29 22:07:17 +00001295
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001296 if (!(v = PyObject_GetAttrString(err, "filename")))
1297 goto finally;
1298 if (v == Py_None)
1299 *filename = NULL;
1300 else if (! (*filename = _PyUnicode_AsString(v)))
1301 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001302
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001303 Py_DECREF(v);
1304 if (!(v = PyObject_GetAttrString(err, "lineno")))
1305 goto finally;
1306 hold = PyLong_AsLong(v);
1307 Py_DECREF(v);
1308 v = NULL;
1309 if (hold < 0 && PyErr_Occurred())
1310 goto finally;
1311 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001312
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001313 if (!(v = PyObject_GetAttrString(err, "offset")))
1314 goto finally;
1315 if (v == Py_None) {
1316 *offset = -1;
1317 Py_DECREF(v);
1318 v = NULL;
1319 } else {
1320 hold = PyLong_AsLong(v);
1321 Py_DECREF(v);
1322 v = NULL;
1323 if (hold < 0 && PyErr_Occurred())
1324 goto finally;
1325 *offset = (int)hold;
1326 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001327
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001328 if (!(v = PyObject_GetAttrString(err, "text")))
1329 goto finally;
1330 if (v == Py_None)
1331 *text = NULL;
1332 else if (!PyUnicode_Check(v) ||
1333 !(*text = _PyUnicode_AsString(v)))
1334 goto finally;
1335 Py_DECREF(v);
1336 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001337
1338finally:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001339 Py_XDECREF(v);
1340 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001341}
1342
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001343void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001344PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001345{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001346 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001347}
1348
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001349static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001350print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001351{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001352 char *nl;
1353 if (offset >= 0) {
1354 if (offset > 0 && offset == (int)strlen(text))
1355 offset--;
1356 for (;;) {
1357 nl = strchr(text, '\n');
1358 if (nl == NULL || nl-text >= offset)
1359 break;
1360 offset -= (int)(nl+1-text);
1361 text = nl+1;
1362 }
1363 while (*text == ' ' || *text == '\t') {
1364 text++;
1365 offset--;
1366 }
1367 }
1368 PyFile_WriteString(" ", f);
1369 PyFile_WriteString(text, f);
1370 if (*text == '\0' || text[strlen(text)-1] != '\n')
1371 PyFile_WriteString("\n", f);
1372 if (offset == -1)
1373 return;
1374 PyFile_WriteString(" ", f);
1375 offset--;
1376 while (offset > 0) {
1377 PyFile_WriteString(" ", f);
1378 offset--;
1379 }
1380 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001381}
1382
Guido van Rossum66e8e862001-03-23 17:54:43 +00001383static void
1384handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001385{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001386 PyObject *exception, *value, *tb;
1387 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001388
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001389 if (Py_InspectFlag)
1390 /* Don't exit if -i flag was given. This flag is set to 0
1391 * when entering interactive mode for inspecting. */
1392 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001393
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001394 PyErr_Fetch(&exception, &value, &tb);
1395 fflush(stdout);
1396 if (value == NULL || value == Py_None)
1397 goto done;
1398 if (PyExceptionInstance_Check(value)) {
1399 /* The error code should be in the `code' attribute. */
1400 PyObject *code = PyObject_GetAttrString(value, "code");
1401 if (code) {
1402 Py_DECREF(value);
1403 value = code;
1404 if (value == Py_None)
1405 goto done;
1406 }
1407 /* If we failed to dig out the 'code' attribute,
1408 just let the else clause below print the error. */
1409 }
1410 if (PyLong_Check(value))
1411 exitcode = (int)PyLong_AsLong(value);
1412 else {
Victor Stinnere9fb3192010-05-17 08:58:51 +00001413 PyObject *sys_stderr = PySys_GetObject("stderr");
Victor Stinner7126dbc2010-05-21 23:45:42 +00001414 if (sys_stderr != NULL && sys_stderr != Py_None) {
1415 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1416 } else {
1417 PyObject_Print(value, stderr, Py_PRINT_RAW);
1418 fflush(stderr);
1419 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001420 PySys_WriteStderr("\n");
1421 exitcode = 1;
1422 }
Tim Peterscf615b52003-04-19 18:47:02 +00001423 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001424 /* Restore and clear the exception info, in order to properly decref
1425 * the exception, value, and traceback. If we just exit instead,
1426 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1427 * some finalizers from running.
1428 */
1429 PyErr_Restore(exception, value, tb);
1430 PyErr_Clear();
1431 Py_Exit(exitcode);
1432 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001433}
1434
1435void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001436PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001437{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001438 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001439
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001440 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1441 handle_system_exit();
1442 }
1443 PyErr_Fetch(&exception, &v, &tb);
1444 if (exception == NULL)
1445 return;
1446 PyErr_NormalizeException(&exception, &v, &tb);
1447 if (tb == NULL) {
1448 tb = Py_None;
1449 Py_INCREF(tb);
1450 }
1451 PyException_SetTraceback(v, tb);
1452 if (exception == NULL)
1453 return;
1454 /* Now we know v != NULL too */
1455 if (set_sys_last_vars) {
1456 PySys_SetObject("last_type", exception);
1457 PySys_SetObject("last_value", v);
1458 PySys_SetObject("last_traceback", tb);
1459 }
1460 hook = PySys_GetObject("excepthook");
1461 if (hook) {
1462 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1463 PyObject *result = PyEval_CallObject(hook, args);
1464 if (result == NULL) {
1465 PyObject *exception2, *v2, *tb2;
1466 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1467 handle_system_exit();
1468 }
1469 PyErr_Fetch(&exception2, &v2, &tb2);
1470 PyErr_NormalizeException(&exception2, &v2, &tb2);
1471 /* It should not be possible for exception2 or v2
1472 to be NULL. However PyErr_Display() can't
1473 tolerate NULLs, so just be safe. */
1474 if (exception2 == NULL) {
1475 exception2 = Py_None;
1476 Py_INCREF(exception2);
1477 }
1478 if (v2 == NULL) {
1479 v2 = Py_None;
1480 Py_INCREF(v2);
1481 }
1482 fflush(stdout);
1483 PySys_WriteStderr("Error in sys.excepthook:\n");
1484 PyErr_Display(exception2, v2, tb2);
1485 PySys_WriteStderr("\nOriginal exception was:\n");
1486 PyErr_Display(exception, v, tb);
1487 Py_DECREF(exception2);
1488 Py_DECREF(v2);
1489 Py_XDECREF(tb2);
1490 }
1491 Py_XDECREF(result);
1492 Py_XDECREF(args);
1493 } else {
1494 PySys_WriteStderr("sys.excepthook is missing\n");
1495 PyErr_Display(exception, v, tb);
1496 }
1497 Py_XDECREF(exception);
1498 Py_XDECREF(v);
1499 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001500}
1501
Benjamin Petersone6528212008-07-15 15:32:09 +00001502static void
1503print_exception(PyObject *f, PyObject *value)
1504{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001505 int err = 0;
1506 PyObject *type, *tb;
Benjamin Petersone6528212008-07-15 15:32:09 +00001507
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001508 if (!PyExceptionInstance_Check(value)) {
1509 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1510 PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1511 PyFile_WriteString(" found\n", f);
1512 return;
1513 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001514
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001515 Py_INCREF(value);
1516 fflush(stdout);
1517 type = (PyObject *) Py_TYPE(value);
1518 tb = PyException_GetTraceback(value);
1519 if (tb && tb != Py_None)
1520 err = PyTraceBack_Print(tb, f);
1521 if (err == 0 &&
1522 PyObject_HasAttrString(value, "print_file_and_line"))
1523 {
1524 PyObject *message;
1525 const char *filename, *text;
1526 int lineno, offset;
1527 if (!parse_syntax_error(value, &message, &filename,
1528 &lineno, &offset, &text))
1529 PyErr_Clear();
1530 else {
1531 char buf[10];
1532 PyFile_WriteString(" File \"", f);
1533 if (filename == NULL)
1534 PyFile_WriteString("<string>", f);
1535 else
1536 PyFile_WriteString(filename, f);
1537 PyFile_WriteString("\", line ", f);
1538 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
1539 PyFile_WriteString(buf, f);
1540 PyFile_WriteString("\n", f);
1541 if (text != NULL)
1542 print_error_text(f, offset, text);
1543 Py_DECREF(value);
1544 value = message;
1545 /* Can't be bothered to check all those
1546 PyFile_WriteString() calls */
1547 if (PyErr_Occurred())
1548 err = -1;
1549 }
1550 }
1551 if (err) {
1552 /* Don't do anything else */
1553 }
1554 else {
1555 PyObject* moduleName;
1556 char* className;
1557 assert(PyExceptionClass_Check(type));
1558 className = PyExceptionClass_Name(type);
1559 if (className != NULL) {
1560 char *dot = strrchr(className, '.');
1561 if (dot != NULL)
1562 className = dot+1;
1563 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001564
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001565 moduleName = PyObject_GetAttrString(type, "__module__");
1566 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1567 {
1568 Py_DECREF(moduleName);
1569 err = PyFile_WriteString("<unknown>", f);
1570 }
1571 else {
1572 char* modstr = _PyUnicode_AsString(moduleName);
1573 if (modstr && strcmp(modstr, "builtins"))
1574 {
1575 err = PyFile_WriteString(modstr, f);
1576 err += PyFile_WriteString(".", f);
1577 }
1578 Py_DECREF(moduleName);
1579 }
1580 if (err == 0) {
1581 if (className == NULL)
1582 err = PyFile_WriteString("<unknown>", f);
1583 else
1584 err = PyFile_WriteString(className, f);
1585 }
1586 }
1587 if (err == 0 && (value != Py_None)) {
1588 PyObject *s = PyObject_Str(value);
1589 /* only print colon if the str() of the
1590 object is not the empty string
1591 */
1592 if (s == NULL)
1593 err = -1;
1594 else if (!PyUnicode_Check(s) ||
1595 PyUnicode_GetSize(s) != 0)
1596 err = PyFile_WriteString(": ", f);
1597 if (err == 0)
1598 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1599 Py_XDECREF(s);
1600 }
1601 /* try to write a newline in any case */
1602 err += PyFile_WriteString("\n", f);
1603 Py_XDECREF(tb);
1604 Py_DECREF(value);
1605 /* If an error happened here, don't show it.
1606 XXX This is wrong, but too many callers rely on this behavior. */
1607 if (err != 0)
1608 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001609}
1610
1611static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001612 "\nThe above exception was the direct cause "
1613 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001614
1615static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001616 "\nDuring handling of the above exception, "
1617 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001618
1619static void
1620print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
1621{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001622 int err = 0, res;
1623 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00001624
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001625 if (seen != NULL) {
1626 /* Exception chaining */
1627 if (PySet_Add(seen, value) == -1)
1628 PyErr_Clear();
1629 else if (PyExceptionInstance_Check(value)) {
1630 cause = PyException_GetCause(value);
1631 context = PyException_GetContext(value);
1632 if (cause) {
1633 res = PySet_Contains(seen, cause);
1634 if (res == -1)
1635 PyErr_Clear();
1636 if (res == 0) {
1637 print_exception_recursive(
1638 f, cause, seen);
1639 err |= PyFile_WriteString(
1640 cause_message, f);
1641 }
1642 }
1643 else if (context) {
1644 res = PySet_Contains(seen, context);
1645 if (res == -1)
1646 PyErr_Clear();
1647 if (res == 0) {
1648 print_exception_recursive(
1649 f, context, seen);
1650 err |= PyFile_WriteString(
1651 context_message, f);
1652 }
1653 }
1654 Py_XDECREF(context);
1655 Py_XDECREF(cause);
1656 }
1657 }
1658 print_exception(f, value);
1659 if (err != 0)
1660 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001661}
1662
Thomas Wouters477c8d52006-05-27 19:21:47 +00001663void
1664PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001665{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001666 PyObject *seen;
1667 PyObject *f = PySys_GetObject("stderr");
1668 if (f == Py_None) {
1669 /* pass */
1670 }
1671 else if (f == NULL) {
1672 _PyObject_Dump(value);
1673 fprintf(stderr, "lost sys.stderr\n");
1674 }
1675 else {
1676 /* We choose to ignore seen being possibly NULL, and report
1677 at least the main exception (it could be a MemoryError).
1678 */
1679 seen = PySet_New(NULL);
1680 if (seen == NULL)
1681 PyErr_Clear();
1682 print_exception_recursive(f, value, seen);
1683 Py_XDECREF(seen);
1684 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001685}
1686
Guido van Rossum82598051997-03-05 00:20:32 +00001687PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001688PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001689 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001690{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001691 PyObject *ret = NULL;
1692 mod_ty mod;
1693 PyArena *arena = PyArena_New();
1694 if (arena == NULL)
1695 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001696
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001697 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
1698 if (mod != NULL)
1699 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
1700 PyArena_Free(arena);
1701 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001702}
1703
1704PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001705PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001707{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001708 PyObject *ret;
1709 mod_ty mod;
1710 PyArena *arena = PyArena_New();
1711 if (arena == NULL)
1712 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001713
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001714 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
1715 flags, NULL, arena);
1716 if (closeit)
1717 fclose(fp);
1718 if (mod == NULL) {
1719 PyArena_Free(arena);
1720 return NULL;
1721 }
1722 ret = run_mod(mod, filename, globals, locals, flags, arena);
1723 PyArena_Free(arena);
1724 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001725}
1726
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001727static void
1728flush_io(void)
1729{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001730 PyObject *f, *r;
1731 PyObject *type, *value, *traceback;
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001732
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001733 /* Save the current exception */
1734 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001735
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001736 f = PySys_GetObject("stderr");
1737 if (f != NULL) {
1738 r = PyObject_CallMethod(f, "flush", "");
1739 if (r)
1740 Py_DECREF(r);
1741 else
1742 PyErr_Clear();
1743 }
1744 f = PySys_GetObject("stdout");
1745 if (f != NULL) {
1746 r = PyObject_CallMethod(f, "flush", "");
1747 if (r)
1748 Py_DECREF(r);
1749 else
1750 PyErr_Clear();
1751 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001752
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001753 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001754}
1755
Guido van Rossum82598051997-03-05 00:20:32 +00001756static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001757run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001758 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001759{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001760 PyCodeObject *co;
1761 PyObject *v;
1762 co = PyAST_Compile(mod, filename, flags, arena);
1763 if (co == NULL)
1764 return NULL;
1765 v = PyEval_EvalCode(co, globals, locals);
1766 Py_DECREF(co);
1767 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001768}
1769
Guido van Rossum82598051997-03-05 00:20:32 +00001770static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001771run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001772 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001773{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001774 PyCodeObject *co;
1775 PyObject *v;
1776 long magic;
1777 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001778
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001779 magic = PyMarshal_ReadLongFromFile(fp);
1780 if (magic != PyImport_GetMagicNumber()) {
1781 PyErr_SetString(PyExc_RuntimeError,
1782 "Bad magic number in .pyc file");
1783 return NULL;
1784 }
1785 (void) PyMarshal_ReadLongFromFile(fp);
1786 v = PyMarshal_ReadLastObjectFromFile(fp);
1787 fclose(fp);
1788 if (v == NULL || !PyCode_Check(v)) {
1789 Py_XDECREF(v);
1790 PyErr_SetString(PyExc_RuntimeError,
1791 "Bad code object in .pyc file");
1792 return NULL;
1793 }
1794 co = (PyCodeObject *)v;
1795 v = PyEval_EvalCode(co, globals, locals);
1796 if (v && flags)
1797 flags->cf_flags |= (co->co_flags & PyCF_MASK);
1798 Py_DECREF(co);
1799 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001800}
1801
Guido van Rossum82598051997-03-05 00:20:32 +00001802PyObject *
Tim Petersd08e3822003-04-17 15:24:21 +00001803Py_CompileStringFlags(const char *str, const char *filename, int start,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001804 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001805{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001806 PyCodeObject *co;
1807 mod_ty mod;
1808 PyArena *arena = PyArena_New();
1809 if (arena == NULL)
1810 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001811
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001812 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
1813 if (mod == NULL) {
1814 PyArena_Free(arena);
1815 return NULL;
1816 }
1817 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
1818 PyObject *result = PyAST_mod2obj(mod);
1819 PyArena_Free(arena);
1820 return result;
1821 }
1822 co = PyAST_Compile(mod, filename, flags, arena);
1823 PyArena_Free(arena);
1824 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001825}
1826
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001827struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001828Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001829{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001830 struct symtable *st;
1831 mod_ty mod;
1832 PyCompilerFlags flags;
1833 PyArena *arena = PyArena_New();
1834 if (arena == NULL)
1835 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001836
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001837 flags.cf_flags = 0;
1838 mod = PyParser_ASTFromString(str, filename, start, &flags, arena);
1839 if (mod == NULL) {
1840 PyArena_Free(arena);
1841 return NULL;
1842 }
1843 st = PySymtable_Build(mod, filename, 0);
1844 PyArena_Free(arena);
1845 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001846}
1847
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001848/* Preferred access to parser is through AST. */
1849mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001850PyParser_ASTFromString(const char *s, const char *filename, int start,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001851 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001852{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001853 mod_ty mod;
1854 PyCompilerFlags localflags;
1855 perrdetail err;
1856 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00001857
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001858 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename,
1859 &_PyParser_Grammar, start, &err,
1860 &iflags);
1861 if (flags == NULL) {
1862 localflags.cf_flags = 0;
1863 flags = &localflags;
1864 }
1865 if (n) {
1866 flags->cf_flags |= iflags & PyCF_MASK;
1867 mod = PyAST_FromNode(n, flags, filename, arena);
1868 PyNode_Free(n);
1869 return mod;
1870 }
1871 else {
1872 err_input(&err);
1873 return NULL;
1874 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001875}
1876
1877mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001878PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001879 int start, char *ps1,
1880 char *ps2, PyCompilerFlags *flags, int *errcode,
1881 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001882{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001883 mod_ty mod;
1884 PyCompilerFlags localflags;
1885 perrdetail err;
1886 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00001887
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001888 node *n = PyParser_ParseFileFlagsEx(fp, filename, enc,
1889 &_PyParser_Grammar,
1890 start, ps1, ps2, &err, &iflags);
1891 if (flags == NULL) {
1892 localflags.cf_flags = 0;
1893 flags = &localflags;
1894 }
1895 if (n) {
1896 flags->cf_flags |= iflags & PyCF_MASK;
1897 mod = PyAST_FromNode(n, flags, filename, arena);
1898 PyNode_Free(n);
1899 return mod;
1900 }
1901 else {
1902 err_input(&err);
1903 if (errcode)
1904 *errcode = err.error;
1905 return NULL;
1906 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001907}
1908
Guido van Rossuma110aa61994-08-29 12:50:44 +00001909/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001910
Guido van Rossuma110aa61994-08-29 12:50:44 +00001911node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001912PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001913{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001914 perrdetail err;
1915 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
1916 &_PyParser_Grammar,
1917 start, NULL, NULL, &err, flags);
1918 if (n == NULL)
1919 err_input(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001920
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001921 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001922}
1923
Guido van Rossuma110aa61994-08-29 12:50:44 +00001924/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001925
Guido van Rossuma110aa61994-08-29 12:50:44 +00001926node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001927PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001928{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001929 perrdetail err;
1930 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1931 start, &err, flags);
1932 if (n == NULL)
1933 err_input(&err);
1934 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00001935}
1936
1937node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001938PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001939 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001940{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001941 perrdetail err;
1942 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1943 &_PyParser_Grammar, start, &err, flags);
1944 if (n == NULL)
1945 err_input(&err);
1946 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00001947}
1948
1949node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001950PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001951{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001952 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001953}
1954
Guido van Rossum66ebd912003-04-17 16:02:26 +00001955/* May want to move a more generalized form of this to parsetok.c or
1956 even parser modules. */
1957
1958void
1959PyParser_SetError(perrdetail *err)
1960{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001961 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00001962}
1963
Guido van Rossuma110aa61994-08-29 12:50:44 +00001964/* Set the error appropriate to the given input error code (see errcode.h) */
1965
1966static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001967err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00001968{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001969 PyObject *v, *w, *errtype, *errtext;
1970 PyObject *msg_obj = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001971 PyObject *filename;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001972 char *msg = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001973
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001974 errtype = PyExc_SyntaxError;
1975 switch (err->error) {
1976 case E_ERROR:
1977 return;
1978 case E_SYNTAX:
1979 errtype = PyExc_IndentationError;
1980 if (err->expected == INDENT)
1981 msg = "expected an indented block";
1982 else if (err->token == INDENT)
1983 msg = "unexpected indent";
1984 else if (err->token == DEDENT)
1985 msg = "unexpected unindent";
1986 else {
1987 errtype = PyExc_SyntaxError;
1988 msg = "invalid syntax";
1989 }
1990 break;
1991 case E_TOKEN:
1992 msg = "invalid token";
1993 break;
1994 case E_EOFS:
1995 msg = "EOF while scanning triple-quoted string literal";
1996 break;
1997 case E_EOLS:
1998 msg = "EOL while scanning string literal";
1999 break;
2000 case E_INTR:
2001 if (!PyErr_Occurred())
2002 PyErr_SetNone(PyExc_KeyboardInterrupt);
2003 goto cleanup;
2004 case E_NOMEM:
2005 PyErr_NoMemory();
2006 goto cleanup;
2007 case E_EOF:
2008 msg = "unexpected EOF while parsing";
2009 break;
2010 case E_TABSPACE:
2011 errtype = PyExc_TabError;
2012 msg = "inconsistent use of tabs and spaces in indentation";
2013 break;
2014 case E_OVERFLOW:
2015 msg = "expression too long";
2016 break;
2017 case E_DEDENT:
2018 errtype = PyExc_IndentationError;
2019 msg = "unindent does not match any outer indentation level";
2020 break;
2021 case E_TOODEEP:
2022 errtype = PyExc_IndentationError;
2023 msg = "too many levels of indentation";
2024 break;
2025 case E_DECODE: {
2026 PyObject *type, *value, *tb;
2027 PyErr_Fetch(&type, &value, &tb);
2028 msg = "unknown decode error";
2029 if (value != NULL)
2030 msg_obj = PyObject_Str(value);
2031 Py_XDECREF(type);
2032 Py_XDECREF(value);
2033 Py_XDECREF(tb);
2034 break;
2035 }
2036 case E_LINECONT:
2037 msg = "unexpected character after line continuation character";
2038 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002039
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002040 case E_IDENTIFIER:
2041 msg = "invalid character in identifier";
2042 break;
2043 default:
2044 fprintf(stderr, "error=%d\n", err->error);
2045 msg = "unknown parsing error";
2046 break;
2047 }
2048 /* err->text may not be UTF-8 in case of decoding errors.
2049 Explicitly convert to an object. */
2050 if (!err->text) {
2051 errtext = Py_None;
2052 Py_INCREF(Py_None);
2053 } else {
2054 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
2055 "replace");
2056 }
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002057 filename = PyUnicode_DecodeFSDefault(err->filename);
2058 if (filename != NULL)
2059 v = Py_BuildValue("(NiiN)", filename,
2060 err->lineno, err->offset, errtext);
2061 else
2062 v = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002063 if (v != NULL) {
2064 if (msg_obj)
2065 w = Py_BuildValue("(OO)", msg_obj, v);
2066 else
2067 w = Py_BuildValue("(sO)", msg, v);
2068 } else
2069 w = NULL;
2070 Py_XDECREF(v);
2071 PyErr_SetObject(errtype, w);
2072 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002073cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002074 Py_XDECREF(msg_obj);
2075 if (err->text != NULL) {
2076 PyObject_FREE(err->text);
2077 err->text = NULL;
2078 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002079}
2080
2081/* Print fatal error message and abort */
2082
2083void
Tim Peters7c321a82002-07-09 02:57:01 +00002084Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002085{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002086 fprintf(stderr, "Fatal Python error: %s\n", msg);
2087 fflush(stderr); /* it helps in Windows debug build */
2088 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002089 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002090 }
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002091#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002092 {
2093 size_t len = strlen(msg);
2094 WCHAR* buffer;
2095 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002096
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002097 /* Convert the message to wchar_t. This uses a simple one-to-one
2098 conversion, assuming that the this error message actually uses ASCII
2099 only. If this ceases to be true, we will have to convert. */
2100 buffer = alloca( (len+1) * (sizeof *buffer));
2101 for( i=0; i<=len; ++i)
2102 buffer[i] = msg[i];
2103 OutputDebugStringW(L"Fatal Python error: ");
2104 OutputDebugStringW(buffer);
2105 OutputDebugStringW(L"\n");
2106 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002107#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002108 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002109#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002110#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002111 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002112}
2113
2114/* Clean up and exit */
2115
Guido van Rossuma110aa61994-08-29 12:50:44 +00002116#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002117#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002118#endif
2119
Collin Winter670e6922007-03-21 02:57:17 +00002120static void (*pyexitfunc)(void) = NULL;
2121/* For the atexit module. */
2122void _Py_PyAtExit(void (*func)(void))
2123{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002124 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002125}
2126
2127static void
2128call_py_exitfuncs(void)
2129{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002130 if (pyexitfunc == NULL)
2131 return;
Collin Winter670e6922007-03-21 02:57:17 +00002132
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002133 (*pyexitfunc)();
2134 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002135}
2136
Antoine Pitrou011bd622009-10-20 21:52:47 +00002137/* Wait until threading._shutdown completes, provided
2138 the threading module was imported in the first place.
2139 The shutdown routine will wait until all non-daemon
2140 "threading" threads have completed. */
2141static void
2142wait_for_thread_shutdown(void)
2143{
2144#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002145 PyObject *result;
2146 PyThreadState *tstate = PyThreadState_GET();
2147 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2148 "threading");
2149 if (threading == NULL) {
2150 /* threading not imported */
2151 PyErr_Clear();
2152 return;
2153 }
2154 result = PyObject_CallMethod(threading, "_shutdown", "");
2155 if (result == NULL) {
2156 PyErr_WriteUnraisable(threading);
2157 }
2158 else {
2159 Py_DECREF(result);
2160 }
2161 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002162#endif
2163}
2164
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002165#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002166static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002167static int nexitfuncs = 0;
2168
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002169int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002170{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002171 if (nexitfuncs >= NEXITFUNCS)
2172 return -1;
2173 exitfuncs[nexitfuncs++] = func;
2174 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002175}
2176
Guido van Rossumcc283f51997-08-05 02:22:03 +00002177static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002178call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002179{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002180 while (nexitfuncs > 0)
2181 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002182
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002183 fflush(stdout);
2184 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002185}
2186
2187void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002188Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002189{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002190 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002191
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002192 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002193}
2194
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002195static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002196initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002197{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002198#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002199 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002200#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002201#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002202 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002203#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002204#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002205 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002206#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002207 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002208}
2209
Guido van Rossum7433b121997-02-14 19:45:36 +00002210
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002211/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2212 *
2213 * All of the code in this function must only use async-signal-safe functions,
2214 * listed at `man 7 signal` or
2215 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2216 */
2217void
2218_Py_RestoreSignals(void)
2219{
2220#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002221 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002222#endif
2223#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002224 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002225#endif
2226#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002227 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002228#endif
2229}
2230
2231
Guido van Rossum7433b121997-02-14 19:45:36 +00002232/*
2233 * The file descriptor fd is considered ``interactive'' if either
2234 * a) isatty(fd) is TRUE, or
2235 * b) the -i flag was given, and the filename associated with
2236 * the descriptor is NULL or "<stdin>" or "???".
2237 */
2238int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002239Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002240{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002241 if (isatty((int)fileno(fp)))
2242 return 1;
2243 if (!Py_InteractiveFlag)
2244 return 0;
2245 return (filename == NULL) ||
2246 (strcmp(filename, "<stdin>") == 0) ||
2247 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002248}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002249
2250
Tim Petersd08e3822003-04-17 15:24:21 +00002251#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002252#if defined(WIN32) && defined(_MSC_VER)
2253
2254/* Stack checking for Microsoft C */
2255
2256#include <malloc.h>
2257#include <excpt.h>
2258
Fred Drakee8de31c2000-08-31 05:38:39 +00002259/*
2260 * Return non-zero when we run out of memory on the stack; zero otherwise.
2261 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002262int
Fred Drake399739f2000-08-31 05:52:44 +00002263PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002264{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002265 __try {
2266 /* alloca throws a stack overflow exception if there's
2267 not enough space left on the stack */
2268 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2269 return 0;
2270 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2271 EXCEPTION_EXECUTE_HANDLER :
2272 EXCEPTION_CONTINUE_SEARCH) {
2273 int errcode = _resetstkoflw();
2274 if (errcode == 0)
2275 {
2276 Py_FatalError("Could not reset the stack!");
2277 }
2278 }
2279 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002280}
2281
2282#endif /* WIN32 && _MSC_VER */
2283
2284/* Alternate implementations can be added here... */
2285
2286#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002287
2288
2289/* Wrappers around sigaction() or signal(). */
2290
2291PyOS_sighandler_t
2292PyOS_getsig(int sig)
2293{
2294#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002295 struct sigaction context;
2296 if (sigaction(sig, NULL, &context) == -1)
2297 return SIG_ERR;
2298 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002299#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002300 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002301/* Special signal handling for the secure CRT in Visual Studio 2005 */
2302#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002303 switch (sig) {
2304 /* Only these signals are valid */
2305 case SIGINT:
2306 case SIGILL:
2307 case SIGFPE:
2308 case SIGSEGV:
2309 case SIGTERM:
2310 case SIGBREAK:
2311 case SIGABRT:
2312 break;
2313 /* Don't call signal() with other values or it will assert */
2314 default:
2315 return SIG_ERR;
2316 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002317#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002318 handler = signal(sig, SIG_IGN);
2319 if (handler != SIG_ERR)
2320 signal(sig, handler);
2321 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002322#endif
2323}
2324
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002325/*
2326 * All of the code in this function must only use async-signal-safe functions,
2327 * listed at `man 7 signal` or
2328 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2329 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002330PyOS_sighandler_t
2331PyOS_setsig(int sig, PyOS_sighandler_t handler)
2332{
2333#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002334 /* Some code in Modules/signalmodule.c depends on sigaction() being
2335 * used here if HAVE_SIGACTION is defined. Fix that if this code
2336 * changes to invalidate that assumption.
2337 */
2338 struct sigaction context, ocontext;
2339 context.sa_handler = handler;
2340 sigemptyset(&context.sa_mask);
2341 context.sa_flags = 0;
2342 if (sigaction(sig, &context, &ocontext) == -1)
2343 return SIG_ERR;
2344 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002345#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002346 PyOS_sighandler_t oldhandler;
2347 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002348#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002349 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002350#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002351 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002352#endif
2353}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002354
2355/* Deprecated C API functions still provided for binary compatiblity */
2356
2357#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002358PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002359PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2360{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002361 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002362}
2363
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002364#undef PyParser_SimpleParseString
2365PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002366PyParser_SimpleParseString(const char *str, int start)
2367{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002368 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002369}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002370
2371#undef PyRun_AnyFile
2372PyAPI_FUNC(int)
2373PyRun_AnyFile(FILE *fp, const char *name)
2374{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002375 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002376}
2377
2378#undef PyRun_AnyFileEx
2379PyAPI_FUNC(int)
2380PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2381{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002382 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002383}
2384
2385#undef PyRun_AnyFileFlags
2386PyAPI_FUNC(int)
2387PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2388{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002389 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002390}
2391
2392#undef PyRun_File
2393PyAPI_FUNC(PyObject *)
2394PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2395{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002396 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002397}
2398
2399#undef PyRun_FileEx
2400PyAPI_FUNC(PyObject *)
2401PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2402{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002403 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002404}
2405
2406#undef PyRun_FileFlags
2407PyAPI_FUNC(PyObject *)
2408PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002409 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002410{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002411 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002412}
2413
2414#undef PyRun_SimpleFile
2415PyAPI_FUNC(int)
2416PyRun_SimpleFile(FILE *f, const char *p)
2417{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002418 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002419}
2420
2421#undef PyRun_SimpleFileEx
2422PyAPI_FUNC(int)
2423PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2424{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002425 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002426}
2427
2428
2429#undef PyRun_String
2430PyAPI_FUNC(PyObject *)
2431PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2432{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002433 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002434}
2435
2436#undef PyRun_SimpleString
2437PyAPI_FUNC(int)
2438PyRun_SimpleString(const char *s)
2439{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002440 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002441}
2442
2443#undef Py_CompileString
2444PyAPI_FUNC(PyObject *)
2445Py_CompileString(const char *str, const char *p, int s)
2446{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002447 return Py_CompileStringFlags(str, p, s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002448}
2449
2450#undef PyRun_InteractiveOne
2451PyAPI_FUNC(int)
2452PyRun_InteractiveOne(FILE *f, const char *p)
2453{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002454 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002455}
2456
2457#undef PyRun_InteractiveLoop
2458PyAPI_FUNC(int)
2459PyRun_InteractiveLoop(FILE *f, const char *p)
2460{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002461 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002462}
2463
2464#ifdef __cplusplus
2465}
2466#endif