blob: 522a05d8b4d22415590fa604b2c5dd9b818302dd [file] [log] [blame]
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001
2/* Python interpreter top-level routines, including init/exit */
3
Guido van Rossum82598051997-03-05 00:20:32 +00004#include "Python.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +00005
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "Python-ast.h"
Guido van Rossumd8faa362007-04-27 19:54:29 +00007#undef Yield /* undefine macro conflicting with winbase.h */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00008#include "grammar.h"
9#include "node.h"
Fred Drake85f36392000-07-11 17:53:00 +000010#include "token.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000011#include "parsetok.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000012#include "errcode.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000013#include "code.h"
Jeremy Hylton4b38da62001-02-02 18:19:15 +000014#include "symtable.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000015#include "ast.h"
Guido van Rossumfdef2711994-09-14 13:31:04 +000016#include "marshal.h"
Martin v. Löwis790465f2008-04-05 20:41:37 +000017#include "osdefs.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000018
Thomas Wouters0e3f5912006-08-11 14:57:12 +000019#ifdef HAVE_SIGNAL_H
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000020#include <signal.h>
Thomas Wouters0e3f5912006-08-11 14:57:12 +000021#endif
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000022
Benjamin Peterson80a50ac2009-01-02 21:24:04 +000023#ifdef MS_WINDOWS
Martin v. Löwis5c88d812009-01-02 20:47:48 +000024#include "malloc.h" /* for alloca */
Benjamin Peterson80a50ac2009-01-02 21:24:04 +000025#endif
Martin v. Löwis5c88d812009-01-02 20:47:48 +000026
Martin v. Löwis73d538b2003-03-05 15:13:47 +000027#ifdef HAVE_LANGINFO_H
28#include <locale.h>
29#include <langinfo.h>
30#endif
31
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000032#ifdef MS_WINDOWS
Guido van Rossuma44823b1995-03-14 15:01:17 +000033#undef BYTE
34#include "windows.h"
Martin v. Löwis790465f2008-04-05 20:41:37 +000035#define PATH_MAX MAXPATHLEN
Guido van Rossuma44823b1995-03-14 15:01:17 +000036#endif
37
Ezio Melotti1f8898a2013-03-26 01:59:56 +020038#ifdef Py_REF_DEBUG
Antoine Pitrou208ac5c2013-04-24 20:17:53 +020039static
40void _print_total_refs(void) {
Ezio Melotti1f8898a2013-03-26 01:59:56 +020041 PyObject *xoptions, *key, *value;
42 xoptions = PySys_GetXOptions();
43 if (xoptions == NULL)
44 return;
45 key = PyUnicode_FromString("showrefcount");
46 if (key == NULL)
47 return;
48 value = PyDict_GetItem(xoptions, key);
49 Py_DECREF(key);
50 if (value == Py_True)
51 fprintf(stderr,
52 "[%" PY_FORMAT_SIZE_T "d refs, "
53 "%" PY_FORMAT_SIZE_T "d blocks]\n",
54 _Py_GetRefTotal(), _Py_GetAllocatedBlocks());
55}
56#endif
57
Neal Norwitz4281cef2006-03-04 19:58:13 +000058#ifndef Py_REF_DEBUG
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000059#define PRINT_TOTAL_REFS()
Neal Norwitz4281cef2006-03-04 19:58:13 +000060#else /* Py_REF_DEBUG */
Ezio Melotti1f8898a2013-03-26 01:59:56 +020061#define PRINT_TOTAL_REFS() _print_total_refs()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000062#endif
63
64#ifdef __cplusplus
65extern "C" {
Neal Norwitz4281cef2006-03-04 19:58:13 +000066#endif
67
Martin v. Löwis790465f2008-04-05 20:41:37 +000068extern wchar_t *Py_GetPath(void);
Guido van Rossum1984f1e1992-08-04 12:41:02 +000069
Guido van Rossum82598051997-03-05 00:20:32 +000070extern grammar _PyParser_Grammar; /* From graminit.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000071
Guido van Rossumb73cc041993-11-01 16:28:59 +000072/* Forward */
Nick Coghlan85e729e2012-07-15 18:09:52 +100073static void initmain(PyInterpreterState *interp);
Victor Stinner793b5312011-04-27 00:24:21 +020074static int initfsencoding(PyInterpreterState *interp);
Tim Petersdbd9ba62000-07-09 03:09:57 +000075static void initsite(void);
Guido van Rossumce3a72a2007-10-19 23:16:50 +000076static int initstdio(void);
Amaury Forgeot d'Arc7fedbe52008-04-10 21:03:09 +000077static void flush_io(void);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000078static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000079 PyCompilerFlags *, PyArena *);
Martin v. Löwis95292d62002-12-11 14:04:59 +000080static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000081 PyCompilerFlags *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000082static void err_input(perrdetail *);
Victor Stinner7f2fee32011-04-05 00:39:01 +020083static void err_free(perrdetail *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000084static void initsigs(void);
Collin Winter670e6922007-03-21 02:57:17 +000085static void call_py_exitfuncs(void);
Antoine Pitrou011bd622009-10-20 21:52:47 +000086static void wait_for_thread_shutdown(void);
Tim Petersdbd9ba62000-07-09 03:09:57 +000087static void call_ll_exitfuncs(void);
Victor Stinner3a50e702011-10-18 21:21:00 +020088extern int _PyUnicode_Init(void);
Victor Stinner26f91992013-07-17 01:22:45 +020089extern int _PyStructSequence_Init(void);
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000090extern void _PyUnicode_Fini(void);
Guido van Rossumddefaf32007-01-14 03:31:43 +000091extern int _PyLong_Init(void);
92extern void PyLong_Fini(void);
Victor Stinner024e37a2011-03-31 01:31:06 +020093extern int _PyFaulthandler_Init(void);
94extern void _PyFaulthandler_Fini(void);
Guido van Rossumc94044c2000-03-10 23:03:54 +000095
Mark Hammond8d98d2c2003-04-19 15:41:53 +000096#ifdef WITH_THREAD
97extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
98extern void _PyGILState_Fini(void);
99#endif /* WITH_THREAD */
100
Guido van Rossum82598051997-03-05 00:20:32 +0000101int Py_DebugFlag; /* Needed by parser.c */
102int Py_VerboseFlag; /* Needed by import.c */
Georg Brandl8aa7e992010-12-28 18:30:18 +0000103int Py_QuietFlag; /* Needed by sysmodule.c */
Guido van Rossum7433b121997-02-14 19:45:36 +0000104int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Georg Brandl0b2489e2011-05-15 08:49:12 +0200105int Py_InspectFlag; /* Needed to determine whether to exit at SystemExit */
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000106int Py_NoSiteFlag; /* Suppress 'import site' */
Guido van Rossum98297ee2007-11-06 21:34:58 +0000107int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */
Christian Heimes790c8232008-01-07 21:14:23 +0000108int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.py[co]) */
Barry Warsaw3ce09642000-05-02 19:18:59 +0000109int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
Guido van Rossuma61691e1998-02-06 22:27:24 +0000110int Py_FrozenFlag; /* Needed by getpath.c */
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000111int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Christian Heimes8dc226f2008-05-06 23:45:46 +0000112int Py_NoUserSiteDirectory = 0; /* for -s and site.py */
Antoine Pitrou05608432009-01-09 18:53:14 +0000113int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */
Georg Brandl2daf6ae2012-02-20 19:54:16 +0100114int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */
Christian Heimesad73a9c2013-08-10 16:36:18 +0200115int Py_IsolatedFlag = 0; /* for -I, isolate from user's env */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000116
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200117PyThreadState *_Py_Finalizing = NULL;
118
Christian Heimes33fe8092008-04-13 13:53:33 +0000119/* PyModule_GetWarningsModule is no longer necessary as of 2.6
120since _warnings is builtin. This API should not be used. */
121PyObject *
122PyModule_GetWarningsModule(void)
Mark Hammondedd07732003-07-15 23:03:55 +0000123{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000124 return PyImport_ImportModule("warnings");
Mark Hammondedd07732003-07-15 23:03:55 +0000125}
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000126
Guido van Rossum25ce5661997-08-02 03:10:38 +0000127static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000128
Thomas Wouters7e474022000-07-16 12:04:32 +0000129/* API to access the initialized flag -- useful for esoteric use */
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000130
131int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000132Py_IsInitialized(void)
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000133{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000134 return initialized;
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000135}
136
Guido van Rossum25ce5661997-08-02 03:10:38 +0000137/* Global initializations. Can be undone by Py_Finalize(). Don't
138 call this twice without an intervening Py_Finalize() call. When
139 initializations fail, a fatal error is issued and the function does
140 not return. On return, the first thread and interpreter state have
141 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000142
Guido van Rossum25ce5661997-08-02 03:10:38 +0000143 Locking: you must hold the interpreter lock while calling this.
144 (If the lock has not yet been initialized, that's equivalent to
145 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000146
Guido van Rossum25ce5661997-08-02 03:10:38 +0000147*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000148
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000149static int
150add_flag(int flag, const char *envs)
151{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000152 int env = atoi(envs);
153 if (flag < env)
154 flag = env;
155 if (flag < 1)
156 flag = 1;
157 return flag;
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000158}
159
Christian Heimes5833a2f2008-10-30 21:40:04 +0000160static char*
Victor Stinner94908bb2010-08-18 21:23:25 +0000161get_codec_name(const char *encoding)
Christian Heimes5833a2f2008-10-30 21:40:04 +0000162{
Victor Stinner94908bb2010-08-18 21:23:25 +0000163 char *name_utf8, *name_str;
Victor Stinner386fe712010-05-19 00:34:15 +0000164 PyObject *codec, *name = NULL;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200165 _Py_IDENTIFIER(name);
Christian Heimes5833a2f2008-10-30 21:40:04 +0000166
Victor Stinner94908bb2010-08-18 21:23:25 +0000167 codec = _PyCodec_Lookup(encoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000168 if (!codec)
169 goto error;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000170
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200171 name = _PyObject_GetAttrId(codec, &PyId_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000172 Py_CLEAR(codec);
173 if (!name)
174 goto error;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000175
Victor Stinner94908bb2010-08-18 21:23:25 +0000176 name_utf8 = _PyUnicode_AsString(name);
Victor Stinner4ca28092011-03-20 23:09:03 +0100177 if (name_utf8 == NULL)
Victor Stinner386fe712010-05-19 00:34:15 +0000178 goto error;
Victor Stinner49fc8ec2013-07-07 23:30:24 +0200179 name_str = _PyMem_RawStrdup(name_utf8);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000180 Py_DECREF(name);
Victor Stinner94908bb2010-08-18 21:23:25 +0000181 if (name_str == NULL) {
182 PyErr_NoMemory();
183 return NULL;
184 }
185 return name_str;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000186
187error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000188 Py_XDECREF(codec);
Victor Stinner386fe712010-05-19 00:34:15 +0000189 Py_XDECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000190 return NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000191}
Victor Stinner94908bb2010-08-18 21:23:25 +0000192
Victor Stinner94908bb2010-08-18 21:23:25 +0000193static char*
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200194get_locale_encoding(void)
Victor Stinner94908bb2010-08-18 21:23:25 +0000195{
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200196#ifdef MS_WINDOWS
197 char codepage[100];
198 PyOS_snprintf(codepage, sizeof(codepage), "cp%d", GetACP());
199 return get_codec_name(codepage);
200#elif defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94908bb2010-08-18 21:23:25 +0000201 char* codeset = nl_langinfo(CODESET);
202 if (!codeset || codeset[0] == '\0') {
203 PyErr_SetString(PyExc_ValueError, "CODESET is not set or empty");
204 return NULL;
205 }
206 return get_codec_name(codeset);
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200207#else
208 PyErr_SetNone(PyExc_NotImplementedError);
209 return NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000210#endif
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200211}
Christian Heimes5833a2f2008-10-30 21:40:04 +0000212
Brett Cannonfd074152012-04-14 14:10:13 -0400213static void
214import_init(PyInterpreterState *interp, PyObject *sysmod)
215{
216 PyObject *importlib;
217 PyObject *impmod;
218 PyObject *sys_modules;
219 PyObject *value;
220
221 /* Import _importlib through its frozen version, _frozen_importlib. */
Brett Cannonfd074152012-04-14 14:10:13 -0400222 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
223 Py_FatalError("Py_Initialize: can't import _frozen_importlib");
224 }
225 else if (Py_VerboseFlag) {
226 PySys_FormatStderr("import _frozen_importlib # frozen\n");
227 }
228 importlib = PyImport_AddModule("_frozen_importlib");
229 if (importlib == NULL) {
230 Py_FatalError("Py_Initialize: couldn't get _frozen_importlib from "
231 "sys.modules");
232 }
233 interp->importlib = importlib;
234 Py_INCREF(interp->importlib);
235
236 /* Install _importlib as __import__ */
237 impmod = PyInit_imp();
238 if (impmod == NULL) {
239 Py_FatalError("Py_Initialize: can't import imp");
240 }
241 else if (Py_VerboseFlag) {
242 PySys_FormatStderr("import imp # builtin\n");
243 }
244 sys_modules = PyImport_GetModuleDict();
245 if (Py_VerboseFlag) {
246 PySys_FormatStderr("import sys # builtin\n");
247 }
Brett Cannon6f44d662012-04-15 16:08:47 -0400248 if (PyDict_SetItemString(sys_modules, "_imp", impmod) < 0) {
249 Py_FatalError("Py_Initialize: can't save _imp to sys.modules");
Brett Cannonfd074152012-04-14 14:10:13 -0400250 }
251
Brett Cannone0d88a12012-04-25 20:54:04 -0400252 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
Brett Cannonfd074152012-04-14 14:10:13 -0400253 if (value == NULL) {
254 PyErr_Print();
255 Py_FatalError("Py_Initialize: importlib install failed");
256 }
257 Py_DECREF(value);
Brett Cannonfc9ca272012-04-15 01:35:05 -0400258 Py_DECREF(impmod);
Brett Cannonfd074152012-04-14 14:10:13 -0400259
260 _PyImportZip_Init();
261}
262
263
Guido van Rossuma027efa1997-05-05 20:56:21 +0000264void
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200265_Py_InitializeEx_Private(int install_sigs, int install_importlib)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000266{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000267 PyInterpreterState *interp;
268 PyThreadState *tstate;
269 PyObject *bimod, *sysmod, *pstderr;
270 char *p;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000271 extern void _Py_ReadyTypes(void);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000272
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000273 if (initialized)
274 return;
275 initialized = 1;
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200276 _Py_Finalizing = NULL;
Tim Petersd08e3822003-04-17 15:24:21 +0000277
Andrew M. Kuchlingb2ceb3a2010-02-22 23:26:10 +0000278#if defined(HAVE_LANGINFO_H) && defined(HAVE_SETLOCALE)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000279 /* Set up the LC_CTYPE locale, so we can obtain
280 the locale's charset without having to switch
281 locales. */
282 setlocale(LC_CTYPE, "");
Martin v. Löwisd1cd4d42007-08-11 14:02:14 +0000283#endif
284
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000285 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
286 Py_DebugFlag = add_flag(Py_DebugFlag, p);
287 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
288 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
289 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
290 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
291 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0')
292 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);
Georg Brandl2daf6ae2012-02-20 19:54:16 +0100293 /* The variable is only tested for existence here; _PyRandom_Init will
294 check its value further. */
295 if ((p = Py_GETENV("PYTHONHASHSEED")) && *p != '\0')
296 Py_HashRandomizationFlag = add_flag(Py_HashRandomizationFlag, p);
297
298 _PyRandom_Init();
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000299
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000300 interp = PyInterpreterState_New();
301 if (interp == NULL)
302 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000303
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000304 tstate = PyThreadState_New(interp);
305 if (tstate == NULL)
306 Py_FatalError("Py_Initialize: can't make first thread");
307 (void) PyThreadState_Swap(tstate);
Guido van Rossuma027efa1997-05-05 20:56:21 +0000308
Victor Stinner6961bd62010-08-17 22:26:51 +0000309#ifdef WITH_THREAD
Antoine Pitroub0b384b2010-09-20 20:13:48 +0000310 /* We can't call _PyEval_FiniThreads() in Py_Finalize because
311 destroying the GIL might fail when it is being referenced from
312 another running thread (see issue #9901).
313 Instead we destroy the previously created GIL here, which ensures
314 that we can call Py_Initialize / Py_Finalize multiple times. */
315 _PyEval_FiniThreads();
316
317 /* Auto-thread-state API */
Victor Stinner6961bd62010-08-17 22:26:51 +0000318 _PyGILState_Init(interp, tstate);
319#endif /* WITH_THREAD */
320
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000321 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000322
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000323 if (!_PyFrame_Init())
324 Py_FatalError("Py_Initialize: can't init frames");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000325
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000326 if (!_PyLong_Init())
327 Py_FatalError("Py_Initialize: can't init longs");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000328
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000329 if (!PyByteArray_Init())
330 Py_FatalError("Py_Initialize: can't init bytearray");
Neal Norwitz6968b052007-02-27 19:02:19 +0000331
Victor Stinner1c8f0592013-07-22 22:24:54 +0200332 if (!_PyFloat_Init())
333 Py_FatalError("Py_Initialize: can't init float");
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000334
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000335 interp->modules = PyDict_New();
336 if (interp->modules == NULL)
337 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000338
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000339 /* Init Unicode implementation; relies on the codec registry */
Victor Stinner3a50e702011-10-18 21:21:00 +0200340 if (_PyUnicode_Init() < 0)
341 Py_FatalError("Py_Initialize: can't initialize unicode");
Victor Stinner26f91992013-07-17 01:22:45 +0200342 if (_PyStructSequence_Init() < 0)
343 Py_FatalError("Py_Initialize: can't initialize structseq");
Guido van Rossumc94044c2000-03-10 23:03:54 +0000344
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000345 bimod = _PyBuiltin_Init();
346 if (bimod == NULL)
347 Py_FatalError("Py_Initialize: can't initialize builtins modules");
Victor Stinner49d3f252010-10-17 01:24:53 +0000348 _PyImport_FixupBuiltin(bimod, "builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000349 interp->builtins = PyModule_GetDict(bimod);
350 if (interp->builtins == NULL)
351 Py_FatalError("Py_Initialize: can't initialize builtins dict");
352 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000353
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000354 /* initialize builtin exceptions */
Brett Cannonfd074152012-04-14 14:10:13 -0400355 _PyExc_Init(bimod);
Christian Heimes9a68f8c2007-11-14 00:16:07 +0000356
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000357 sysmod = _PySys_Init();
358 if (sysmod == NULL)
359 Py_FatalError("Py_Initialize: can't initialize sys");
360 interp->sysdict = PyModule_GetDict(sysmod);
361 if (interp->sysdict == NULL)
362 Py_FatalError("Py_Initialize: can't initialize sys dict");
363 Py_INCREF(interp->sysdict);
Victor Stinner49d3f252010-10-17 01:24:53 +0000364 _PyImport_FixupBuiltin(sysmod, "sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000365 PySys_SetPath(Py_GetPath());
366 PyDict_SetItemString(interp->sysdict, "modules",
367 interp->modules);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000368
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000369 /* Set up a preliminary stderr printer until we have enough
370 infrastructure for the io module in place. */
371 pstderr = PyFile_NewStdPrinter(fileno(stderr));
372 if (pstderr == NULL)
373 Py_FatalError("Py_Initialize: can't set preliminary stderr");
374 PySys_SetObject("stderr", pstderr);
375 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000376 Py_DECREF(pstderr);
Guido van Rossum826d8972007-10-30 18:34:07 +0000377
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000378 _PyImport_Init();
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000379
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000380 _PyImportHooks_Init();
Just van Rossum52e14d62002-12-30 22:08:05 +0000381
Victor Stinner7d79b8b2010-05-19 20:40:50 +0000382 /* Initialize _warnings. */
383 _PyWarnings_Init();
384
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200385 if (!install_importlib)
386 return;
387
Brett Cannonfd074152012-04-14 14:10:13 -0400388 import_init(interp, sysmod);
389
Victor Stinnerd5698cb2012-07-31 02:55:49 +0200390 /* initialize the faulthandler module */
391 if (_PyFaulthandler_Init())
392 Py_FatalError("Py_Initialize: can't initialize faulthandler");
393
Alexander Belopolsky6fc4ade2010-08-05 17:34:27 +0000394 _PyTime_Init();
395
Victor Stinner793b5312011-04-27 00:24:21 +0200396 if (initfsencoding(interp) < 0)
397 Py_FatalError("Py_Initialize: unable to load the file system codec");
Martin v. Löwis011e8422009-05-05 04:43:17 +0000398
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000399 if (install_sigs)
400 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000401
Nick Coghlan85e729e2012-07-15 18:09:52 +1000402 initmain(interp); /* Module __main__ */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000403 if (initstdio() < 0)
404 Py_FatalError(
405 "Py_Initialize: can't initialize sys standard streams");
406
Antoine Pitroucf9f9802010-11-10 13:55:25 +0000407 /* Initialize warnings. */
408 if (PySys_HasWarnOptions()) {
409 PyObject *warnings_module = PyImport_ImportModule("warnings");
410 if (warnings_module == NULL) {
411 fprintf(stderr, "'import warnings' failed; traceback:\n");
412 PyErr_Print();
413 }
414 Py_XDECREF(warnings_module);
415 }
416
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000417 if (!Py_NoSiteFlag)
418 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000419}
420
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000421void
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200422Py_InitializeEx(int install_sigs)
423{
424 _Py_InitializeEx_Private(install_sigs, 1);
425}
426
427void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000428Py_Initialize(void)
429{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000430 Py_InitializeEx(1);
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000431}
432
433
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000434#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000435extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000436#endif
437
Guido van Rossume8432ac2007-07-09 15:04:50 +0000438/* Flush stdout and stderr */
439
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100440static int
441file_is_closed(PyObject *fobj)
442{
443 int r;
444 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
445 if (tmp == NULL) {
446 PyErr_Clear();
447 return 0;
448 }
449 r = PyObject_IsTrue(tmp);
450 Py_DECREF(tmp);
451 if (r < 0)
452 PyErr_Clear();
453 return r > 0;
454}
455
Neal Norwitz2bad9702007-08-27 06:19:22 +0000456static void
Guido van Rossum1bd21222007-07-10 20:14:13 +0000457flush_std_files(void)
Guido van Rossume8432ac2007-07-09 15:04:50 +0000458{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000459 PyObject *fout = PySys_GetObject("stdout");
460 PyObject *ferr = PySys_GetObject("stderr");
461 PyObject *tmp;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200462 _Py_IDENTIFIER(flush);
Guido van Rossume8432ac2007-07-09 15:04:50 +0000463
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100464 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200465 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000466 if (tmp == NULL)
Antoine Pitroubddc9fe2010-08-08 20:46:42 +0000467 PyErr_WriteUnraisable(fout);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000468 else
469 Py_DECREF(tmp);
470 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000471
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100472 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200473 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000474 if (tmp == NULL)
475 PyErr_Clear();
476 else
477 Py_DECREF(tmp);
478 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000479}
480
Guido van Rossum25ce5661997-08-02 03:10:38 +0000481/* Undo the effect of Py_Initialize().
482
483 Beware: if multiple interpreter and/or thread states exist, these
484 are not wiped out; only the current thread and interpreter state
485 are deleted. But since everything else is deleted, those other
486 interpreter and thread states should no longer be used.
487
488 (XXX We should do better, e.g. wipe out all interpreters and
489 threads.)
490
491 Locking: as above.
492
493*/
494
495void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000496Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000497{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000498 PyInterpreterState *interp;
499 PyThreadState *tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000500
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000501 if (!initialized)
502 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000503
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000504 wait_for_thread_shutdown();
Antoine Pitrou011bd622009-10-20 21:52:47 +0000505
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000506 /* The interpreter is still entirely intact at this point, and the
507 * exit funcs may be relying on that. In particular, if some thread
508 * or exit func is still waiting to do an import, the import machinery
509 * expects Py_IsInitialized() to return true. So don't say the
510 * interpreter is uninitialized until after the exit funcs have run.
511 * Note that Threading.py uses an exit func to do a join on all the
512 * threads created thru it, so this also protects pending imports in
513 * the threads created via Threading.
514 */
515 call_py_exitfuncs();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000516
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000517 /* Get current thread state and interpreter pointer */
518 tstate = PyThreadState_GET();
519 interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000520
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200521 /* Remaining threads (e.g. daemon threads) will automatically exit
522 after taking the GIL (in PyEval_RestoreThread()). */
523 _Py_Finalizing = tstate;
524 initialized = 0;
525
526 /* Flush stdout+stderr */
527 flush_std_files();
528
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000529 /* Disable signal handling */
530 PyOS_FiniInterrupts();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000531
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000532 /* Collect garbage. This may call finalizers; it's nice to call these
533 * before all modules are destroyed.
534 * XXX If a __del__ or weakref callback is triggered here, and tries to
535 * XXX import a module, bad things can happen, because Python no
536 * XXX longer believes it's initialized.
537 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
538 * XXX is easy to provoke that way. I've also seen, e.g.,
539 * XXX Exception exceptions.ImportError: 'No module named sha'
540 * XXX in <function callback at 0x008F5718> ignored
541 * XXX but I'm unclear on exactly how that one happens. In any case,
542 * XXX I haven't seen a real-life report of either of these.
543 */
544 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000545#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000546 /* With COUNT_ALLOCS, it helps to run GC multiple times:
547 each collection might release some types from the type
548 list, so they become garbage. */
549 while (PyGC_Collect() > 0)
550 /* nothing */;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000551#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000552 /* Destroy all modules */
553 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000554
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000555 /* Flush stdout+stderr (again, in case more was printed) */
556 flush_std_files();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000557
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000558 /* Collect final garbage. This disposes of cycles created by
Florent Xiclunaaa6c1d22011-12-12 18:54:29 +0100559 * class definitions, for example.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000560 * XXX This is disabled because it caused too many problems. If
561 * XXX a __del__ or weakref callback triggers here, Python code has
562 * XXX a hard time running, because even the sys module has been
563 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
564 * XXX One symptom is a sequence of information-free messages
565 * XXX coming from threads (if a __del__ or callback is invoked,
566 * XXX other threads can execute too, and any exception they encounter
567 * XXX triggers a comedy of errors as subsystem after subsystem
568 * XXX fails to find what it *expects* to find in sys to help report
569 * XXX the exception and consequent unexpected failures). I've also
570 * XXX seen segfaults then, after adding print statements to the
571 * XXX Python code getting called.
572 */
Tim Peters1d7323e2003-12-01 21:35:27 +0000573#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000574 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000575#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000576
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000577 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
578 _PyImport_Fini();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000579
Antoine Pitroufd417cc2013-05-05 08:12:42 +0200580 /* Cleanup typeobject.c's internal caches. */
581 _PyType_Fini();
582
Victor Stinner024e37a2011-03-31 01:31:06 +0200583 /* unload faulthandler module */
584 _PyFaulthandler_Fini();
585
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000586 /* Debugging stuff */
Guido van Rossum1707aad1997-12-08 23:43:45 +0000587#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000588 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000589#endif
590
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000591 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000592
Tim Peters9cf25ce2003-04-17 15:21:01 +0000593#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000594 /* Display all objects still alive -- this can invoke arbitrary
595 * __repr__ overrides, so requires a mostly-intact interpreter.
596 * Alas, a lot of stuff may still be alive now that will be cleaned
597 * up later.
598 */
599 if (Py_GETENV("PYTHONDUMPREFS"))
600 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000601#endif /* Py_TRACE_REFS */
602
Antoine Pitroufd417cc2013-05-05 08:12:42 +0200603 /* Clear interpreter state and all thread states. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000604 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000605
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000606 /* Now we decref the exception classes. After this point nothing
607 can raise an exception. That's okay, because each Fini() method
608 below has been checked to make sure no exceptions are ever
609 raised.
610 */
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000611
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000612 _PyExc_Fini();
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000613
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000614 /* Sundry finalizers */
615 PyMethod_Fini();
616 PyFrame_Fini();
617 PyCFunction_Fini();
618 PyTuple_Fini();
619 PyList_Fini();
620 PySet_Fini();
621 PyBytes_Fini();
622 PyByteArray_Fini();
623 PyLong_Fini();
624 PyFloat_Fini();
625 PyDict_Fini();
Antoine Pitrouf34a0cd2011-11-18 20:14:34 +0100626 PySlice_Fini();
Antoine Pitrou5f454a02013-05-06 21:15:57 +0200627 _PyGC_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000628
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000629 /* Cleanup Unicode implementation */
630 _PyUnicode_Fini();
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000631
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000632 /* reset file system default encoding */
Victor Stinnerb744ba12010-05-15 12:27:16 +0000633 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +0200634 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000635 Py_FileSystemDefaultEncoding = NULL;
636 }
Christian Heimesc8967002007-11-30 10:18:26 +0000637
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000638 /* XXX Still allocated:
639 - various static ad-hoc pointers to interned strings
640 - int and float free list blocks
641 - whatever various modules and libraries allocate
642 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000643
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000644 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000645
Victor Stinner51fa4582013-07-07 15:50:49 +0200646 /* Cleanup auto-thread-state */
647#ifdef WITH_THREAD
648 _PyGILState_Fini();
649#endif /* WITH_THREAD */
650
651 /* Delete current thread. After this, many C API calls become crashy. */
652 PyThreadState_Swap(NULL);
653 PyInterpreterState_Delete(interp);
654
Tim Peters269b2a62003-04-17 19:52:29 +0000655#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000656 /* Display addresses (& refcnts) of all objects still alive.
657 * An address can be used to find the repr of the object, printed
658 * above by _Py_PrintReferences.
659 */
660 if (Py_GETENV("PYTHONDUMPREFS"))
661 _Py_PrintReferenceAddresses(stderr);
Tim Peters269b2a62003-04-17 19:52:29 +0000662#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000663#ifdef PYMALLOC_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000664 if (Py_GETENV("PYTHONMALLOCSTATS"))
David Malcolm49526f42012-06-22 14:55:41 -0400665 _PyObject_DebugMallocStats(stderr);
Tim Peters0e871182002-04-13 08:29:14 +0000666#endif
667
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000668 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000669}
670
671/* Create and initialize a new interpreter and thread, and return the
672 new thread. This requires that Py_Initialize() has been called
673 first.
674
675 Unsuccessful initialization yields a NULL pointer. Note that *no*
676 exception information is available even in this case -- the
677 exception information is held in the thread, and there is no
678 thread.
679
680 Locking: as above.
681
682*/
683
684PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000685Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000686{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000687 PyInterpreterState *interp;
688 PyThreadState *tstate, *save_tstate;
689 PyObject *bimod, *sysmod;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000690
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000691 if (!initialized)
692 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000693
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 interp = PyInterpreterState_New();
695 if (interp == NULL)
696 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000697
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000698 tstate = PyThreadState_New(interp);
699 if (tstate == NULL) {
700 PyInterpreterState_Delete(interp);
701 return NULL;
702 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000703
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000704 save_tstate = PyThreadState_Swap(tstate);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000705
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000706 /* XXX The following is lax in error checking */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000707
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000708 interp->modules = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000709
Victor Stinner49d3f252010-10-17 01:24:53 +0000710 bimod = _PyImport_FindBuiltin("builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000711 if (bimod != NULL) {
712 interp->builtins = PyModule_GetDict(bimod);
713 if (interp->builtins == NULL)
714 goto handle_error;
715 Py_INCREF(interp->builtins);
716 }
Christian Heimes6a27efa2008-10-30 21:48:26 +0000717
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000718 /* initialize builtin exceptions */
Brett Cannonfd074152012-04-14 14:10:13 -0400719 _PyExc_Init(bimod);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000720
Victor Stinner49d3f252010-10-17 01:24:53 +0000721 sysmod = _PyImport_FindBuiltin("sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000722 if (bimod != NULL && sysmod != NULL) {
723 PyObject *pstderr;
Brett Cannonfd074152012-04-14 14:10:13 -0400724
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000725 interp->sysdict = PyModule_GetDict(sysmod);
726 if (interp->sysdict == NULL)
727 goto handle_error;
728 Py_INCREF(interp->sysdict);
729 PySys_SetPath(Py_GetPath());
730 PyDict_SetItemString(interp->sysdict, "modules",
731 interp->modules);
732 /* Set up a preliminary stderr printer until we have enough
733 infrastructure for the io module in place. */
734 pstderr = PyFile_NewStdPrinter(fileno(stderr));
735 if (pstderr == NULL)
736 Py_FatalError("Py_Initialize: can't set preliminary stderr");
737 PySys_SetObject("stderr", pstderr);
738 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000739 Py_DECREF(pstderr);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000740
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000741 _PyImportHooks_Init();
Victor Stinner793b5312011-04-27 00:24:21 +0200742
Brett Cannonfd074152012-04-14 14:10:13 -0400743 import_init(interp, sysmod);
744
Victor Stinner793b5312011-04-27 00:24:21 +0200745 if (initfsencoding(interp) < 0)
746 goto handle_error;
747
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000748 if (initstdio() < 0)
749 Py_FatalError(
750 "Py_Initialize: can't initialize sys standard streams");
Nick Coghlan85e729e2012-07-15 18:09:52 +1000751 initmain(interp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000752 if (!Py_NoSiteFlag)
753 initsite();
754 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000755
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000756 if (!PyErr_Occurred())
757 return tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000758
Thomas Wouters89f507f2006-12-13 04:49:30 +0000759handle_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000760 /* Oops, it didn't work. Undo it all. */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000761
Victor Stinnerc40a3502011-04-27 00:20:27 +0200762 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000763 PyThreadState_Clear(tstate);
764 PyThreadState_Swap(save_tstate);
765 PyThreadState_Delete(tstate);
766 PyInterpreterState_Delete(interp);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000767
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000768 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000769}
770
771/* Delete an interpreter and its last thread. This requires that the
772 given thread state is current, that the thread has no remaining
773 frames, and that it is its interpreter's only remaining thread.
774 It is a fatal error to violate these constraints.
775
776 (Py_Finalize() doesn't have these constraints -- it zaps
777 everything, regardless.)
778
779 Locking: as above.
780
781*/
782
783void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000784Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000785{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000786 PyInterpreterState *interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000787
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000788 if (tstate != PyThreadState_GET())
789 Py_FatalError("Py_EndInterpreter: thread is not current");
790 if (tstate->frame != NULL)
791 Py_FatalError("Py_EndInterpreter: thread still has a frame");
Antoine Pitrou7eaf3f72013-08-25 19:48:18 +0200792
793 wait_for_thread_shutdown();
794
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000795 if (tstate != interp->tstate_head || tstate->next != NULL)
796 Py_FatalError("Py_EndInterpreter: not the last thread");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000797
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000798 PyImport_Cleanup();
799 PyInterpreterState_Clear(interp);
800 PyThreadState_Swap(NULL);
801 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000802}
803
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200804#ifdef MS_WINDOWS
Martin v. Löwis790465f2008-04-05 20:41:37 +0000805static wchar_t *progname = L"python";
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200806#else
807static wchar_t *progname = L"python3";
808#endif
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000809
810void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000811Py_SetProgramName(wchar_t *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000812{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000813 if (pn && *pn)
814 progname = pn;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000815}
816
Martin v. Löwis790465f2008-04-05 20:41:37 +0000817wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000818Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000819{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000820 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000821}
822
Martin v. Löwis790465f2008-04-05 20:41:37 +0000823static wchar_t *default_home = NULL;
824static wchar_t env_home[PATH_MAX+1];
Guido van Rossuma61691e1998-02-06 22:27:24 +0000825
826void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000827Py_SetPythonHome(wchar_t *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000828{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000829 default_home = home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000830}
831
Martin v. Löwis790465f2008-04-05 20:41:37 +0000832wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000833Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000834{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000835 wchar_t *home = default_home;
836 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
837 char* chome = Py_GETENV("PYTHONHOME");
838 if (chome) {
839 size_t r = mbstowcs(env_home, chome, PATH_MAX+1);
840 if (r != (size_t)-1 && r <= PATH_MAX)
841 home = env_home;
842 }
Martin v. Löwis790465f2008-04-05 20:41:37 +0000843
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000844 }
845 return home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000846}
847
Guido van Rossum6135a871995-01-09 17:53:26 +0000848/* Create __main__ module */
849
850static void
Nick Coghlan85e729e2012-07-15 18:09:52 +1000851initmain(PyInterpreterState *interp)
Guido van Rossum6135a871995-01-09 17:53:26 +0000852{
Brett Cannon13853a62013-05-04 17:37:09 -0400853 PyObject *m, *d, *loader;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000854 m = PyImport_AddModule("__main__");
855 if (m == NULL)
856 Py_FatalError("can't create __main__ module");
857 d = PyModule_GetDict(m);
858 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
859 PyObject *bimod = PyImport_ImportModule("builtins");
Nick Coghlan85e729e2012-07-15 18:09:52 +1000860 if (bimod == NULL) {
861 Py_FatalError("Failed to retrieve builtins module");
862 }
863 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
864 Py_FatalError("Failed to initialize __main__.__builtins__");
865 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000866 Py_DECREF(bimod);
867 }
Nick Coghlan85e729e2012-07-15 18:09:52 +1000868 /* Main is a little special - imp.is_builtin("__main__") will return
869 * False, but BuiltinImporter is still the most appropriate initial
870 * setting for its __loader__ attribute. A more suitable value will
871 * be set if __main__ gets further initialized later in the startup
872 * process.
873 */
Brett Cannon13853a62013-05-04 17:37:09 -0400874 loader = PyDict_GetItemString(d, "__loader__");
Brett Cannon4c14b5d2013-05-04 13:56:58 -0400875 if (loader == NULL || loader == Py_None) {
Nick Coghlan85e729e2012-07-15 18:09:52 +1000876 PyObject *loader = PyObject_GetAttrString(interp->importlib,
877 "BuiltinImporter");
878 if (loader == NULL) {
879 Py_FatalError("Failed to retrieve BuiltinImporter");
880 }
881 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
882 Py_FatalError("Failed to initialize __main__.__loader__");
883 }
884 Py_DECREF(loader);
885 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000886}
887
Victor Stinner793b5312011-04-27 00:24:21 +0200888static int
889initfsencoding(PyInterpreterState *interp)
Victor Stinnerb744ba12010-05-15 12:27:16 +0000890{
891 PyObject *codec;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000892
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200893 if (Py_FileSystemDefaultEncoding == NULL)
894 {
895 Py_FileSystemDefaultEncoding = get_locale_encoding();
896 if (Py_FileSystemDefaultEncoding == NULL)
Victor Stinnere4743092010-10-19 00:05:51 +0000897 Py_FatalError("Py_Initialize: Unable to get the locale encoding");
Victor Stinnerb744ba12010-05-15 12:27:16 +0000898
Victor Stinnere4743092010-10-19 00:05:51 +0000899 Py_HasFileSystemDefaultEncoding = 0;
Victor Stinner793b5312011-04-27 00:24:21 +0200900 interp->fscodec_initialized = 1;
901 return 0;
Victor Stinner7f84ab52010-06-11 00:36:33 +0000902 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000903
904 /* the encoding is mbcs, utf-8 or ascii */
905 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
906 if (!codec) {
907 /* Such error can only occurs in critical situations: no more
908 * memory, import a module of the standard library failed,
909 * etc. */
Victor Stinner793b5312011-04-27 00:24:21 +0200910 return -1;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000911 }
Victor Stinner793b5312011-04-27 00:24:21 +0200912 Py_DECREF(codec);
913 interp->fscodec_initialized = 1;
914 return 0;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000915}
916
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000917/* Import the site module (not into __main__ though) */
918
919static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000920initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000921{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000922 PyObject *m;
923 m = PyImport_ImportModule("site");
924 if (m == NULL) {
Victor Stinner62ce62a2013-07-22 22:53:28 +0200925 fprintf(stderr, "Failed to import the site module\n");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000926 PyErr_Print();
927 Py_Finalize();
928 exit(1);
929 }
930 else {
931 Py_DECREF(m);
932 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000933}
934
Antoine Pitrou05608432009-01-09 18:53:14 +0000935static PyObject*
936create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000937 int fd, int write_mode, char* name,
938 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +0000939{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000940 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
941 const char* mode;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +0000942 const char* newline;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000943 PyObject *line_buffering;
944 int buffering, isatty;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200945 _Py_IDENTIFIER(open);
946 _Py_IDENTIFIER(isatty);
947 _Py_IDENTIFIER(TextIOWrapper);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200948 _Py_IDENTIFIER(name);
949 _Py_IDENTIFIER(mode);
Antoine Pitrou05608432009-01-09 18:53:14 +0000950
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000951 /* stdin is always opened in buffered mode, first because it shouldn't
952 make a difference in common use cases, second because TextIOWrapper
953 depends on the presence of a read1() method which only exists on
954 buffered streams.
955 */
956 if (Py_UnbufferedStdioFlag && write_mode)
957 buffering = 0;
958 else
959 buffering = -1;
960 if (write_mode)
961 mode = "wb";
962 else
963 mode = "rb";
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200964 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
965 fd, mode, buffering,
966 Py_None, Py_None, Py_None, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000967 if (buf == NULL)
968 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000969
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000970 if (buffering) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200971 _Py_IDENTIFIER(raw);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200972 raw = _PyObject_GetAttrId(buf, &PyId_raw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000973 if (raw == NULL)
974 goto error;
975 }
976 else {
977 raw = buf;
978 Py_INCREF(raw);
979 }
Antoine Pitrou05608432009-01-09 18:53:14 +0000980
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000981 text = PyUnicode_FromString(name);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200982 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000983 goto error;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200984 res = _PyObject_CallMethodId(raw, &PyId_isatty, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000985 if (res == NULL)
986 goto error;
987 isatty = PyObject_IsTrue(res);
988 Py_DECREF(res);
989 if (isatty == -1)
990 goto error;
991 if (isatty || Py_UnbufferedStdioFlag)
992 line_buffering = Py_True;
993 else
994 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +0000995
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000996 Py_CLEAR(raw);
997 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +0000998
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +0000999#ifdef MS_WINDOWS
Victor Stinner7b3f0fa2012-08-04 01:28:00 +02001000 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1001 newlines to "\n".
1002 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1003 newline = NULL;
1004#else
1005 /* sys.stdin: split lines at "\n".
1006 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1007 newline = "\n";
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001008#endif
1009
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001010 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssO",
1011 buf, encoding, errors,
1012 newline, line_buffering);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001013 Py_CLEAR(buf);
1014 if (stream == NULL)
1015 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +00001016
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001017 if (write_mode)
1018 mode = "w";
1019 else
1020 mode = "r";
1021 text = PyUnicode_FromString(mode);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001022 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001023 goto error;
1024 Py_CLEAR(text);
1025 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +00001026
1027error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001028 Py_XDECREF(buf);
1029 Py_XDECREF(stream);
1030 Py_XDECREF(text);
1031 Py_XDECREF(raw);
1032 return NULL;
Antoine Pitrou05608432009-01-09 18:53:14 +00001033}
1034
Antoine Pitrou11942a52011-11-28 19:08:36 +01001035static int
1036is_valid_fd(int fd)
1037{
1038 int dummy_fd;
1039 if (fd < 0 || !_PyVerify_fd(fd))
1040 return 0;
1041 dummy_fd = dup(fd);
1042 if (dummy_fd < 0)
1043 return 0;
1044 close(dummy_fd);
1045 return 1;
1046}
1047
Georg Brandl1a3284e2007-12-02 09:40:06 +00001048/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001049static int
1050initstdio(void)
1051{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001052 PyObject *iomod = NULL, *wrapper;
1053 PyObject *bimod = NULL;
1054 PyObject *m;
1055 PyObject *std = NULL;
1056 int status = 0, fd;
1057 PyObject * encoding_attr;
1058 char *encoding = NULL, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001059
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001060 /* Hack to avoid a nasty recursion issue when Python is invoked
1061 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1062 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1063 goto error;
1064 }
1065 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001066
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001067 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1068 goto error;
1069 }
1070 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001071
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001072 if (!(bimod = PyImport_ImportModule("builtins"))) {
1073 goto error;
1074 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001075
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001076 if (!(iomod = PyImport_ImportModule("io"))) {
1077 goto error;
1078 }
1079 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1080 goto error;
1081 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001082
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001083 /* Set builtins.open */
1084 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001085 Py_DECREF(wrapper);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001086 goto error;
1087 }
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001088 Py_DECREF(wrapper);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001089
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001090 encoding = Py_GETENV("PYTHONIOENCODING");
1091 errors = NULL;
1092 if (encoding) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001093 encoding = _PyMem_Strdup(encoding);
1094 if (encoding == NULL) {
1095 PyErr_NoMemory();
1096 goto error;
1097 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001098 errors = strchr(encoding, ':');
1099 if (errors) {
1100 *errors = '\0';
1101 errors++;
1102 }
1103 }
Martin v. Löwis0f599892008-06-02 11:13:03 +00001104
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001105 /* Set sys.stdin */
1106 fd = fileno(stdin);
1107 /* Under some conditions stdin, stdout and stderr may not be connected
1108 * and fileno() may point to an invalid file descriptor. For example
1109 * GUI apps don't have valid standard streams by default.
1110 */
Antoine Pitrou11942a52011-11-28 19:08:36 +01001111 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001112 std = Py_None;
1113 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001114 }
1115 else {
1116 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1117 if (std == NULL)
1118 goto error;
1119 } /* if (fd < 0) */
1120 PySys_SetObject("__stdin__", std);
1121 PySys_SetObject("stdin", std);
1122 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001123
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001124 /* Set sys.stdout */
1125 fd = fileno(stdout);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001126 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001127 std = Py_None;
1128 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001129 }
1130 else {
1131 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1132 if (std == NULL)
1133 goto error;
1134 } /* if (fd < 0) */
1135 PySys_SetObject("__stdout__", std);
1136 PySys_SetObject("stdout", std);
1137 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001138
Guido van Rossum98297ee2007-11-06 21:34:58 +00001139#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001140 /* Set sys.stderr, replaces the preliminary stderr */
1141 fd = fileno(stderr);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001142 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001143 std = Py_None;
1144 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001145 }
1146 else {
1147 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1148 if (std == NULL)
1149 goto error;
1150 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +00001151
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001152 /* Same as hack above, pre-import stderr's codec to avoid recursion
1153 when import.c tries to write to stderr in verbose mode. */
1154 encoding_attr = PyObject_GetAttrString(std, "encoding");
1155 if (encoding_attr != NULL) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001156 const char * std_encoding;
1157 std_encoding = _PyUnicode_AsString(encoding_attr);
1158 if (std_encoding != NULL) {
1159 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
Antoine Pitrou2fabfac2012-01-18 15:14:46 +01001160 Py_XDECREF(codec_info);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001161 }
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +00001162 Py_DECREF(encoding_attr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001163 }
1164 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +00001165
Victor Stinnerba308832013-07-22 23:55:19 +02001166 if (PySys_SetObject("__stderr__", std) < 0) {
1167 Py_DECREF(std);
1168 goto error;
1169 }
1170 if (PySys_SetObject("stderr", std) < 0) {
1171 Py_DECREF(std);
1172 goto error;
1173 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001174 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001175#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001176
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001177 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001178 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001179 status = -1;
1180 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001181
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001182 PyMem_Free(encoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001183 Py_XDECREF(bimod);
1184 Py_XDECREF(iomod);
1185 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001186}
1187
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001188/* Parse input from a file and execute it */
1189
1190int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001191PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001192 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001193{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001194 if (filename == NULL)
1195 filename = "???";
1196 if (Py_FdIsInteractive(fp, filename)) {
1197 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1198 if (closeit)
1199 fclose(fp);
1200 return err;
1201 }
1202 else
1203 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001204}
1205
1206int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001207PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001208{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001209 PyObject *v;
1210 int ret;
1211 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001212
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001213 if (flags == NULL) {
1214 flags = &local_flags;
1215 local_flags.cf_flags = 0;
1216 }
1217 v = PySys_GetObject("ps1");
1218 if (v == NULL) {
1219 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
1220 Py_XDECREF(v);
1221 }
1222 v = PySys_GetObject("ps2");
1223 if (v == NULL) {
1224 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
1225 Py_XDECREF(v);
1226 }
1227 for (;;) {
1228 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
1229 PRINT_TOTAL_REFS();
1230 if (ret == E_EOF)
1231 return 0;
1232 /*
1233 if (ret == E_NOMEM)
1234 return -1;
1235 */
1236 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001237}
1238
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001239/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001240static int PARSER_FLAGS(PyCompilerFlags *flags)
1241{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001242 int parser_flags = 0;
1243 if (!flags)
1244 return 0;
1245 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1246 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1247 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1248 parser_flags |= PyPARSE_IGNORE_COOKIE;
1249 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1250 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1251 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001252}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001253
Thomas Wouters89f507f2006-12-13 04:49:30 +00001254#if 0
1255/* Keep an example of flags with future keyword support. */
1256#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001257 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1258 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1259 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1260 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001261#endif
1262
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001263int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001264PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001265{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001266 PyObject *m, *d, *v, *w, *oenc = NULL;
1267 mod_ty mod;
1268 PyArena *arena;
1269 char *ps1 = "", *ps2 = "", *enc = NULL;
1270 int errcode = 0;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001271 _Py_IDENTIFIER(encoding);
Tim Petersfe2127d2001-07-16 05:37:24 +00001272
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001273 if (fp == stdin) {
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001274 /* Fetch encoding from sys.stdin if possible. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001275 v = PySys_GetObject("stdin");
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001276 if (v && v != Py_None) {
1277 oenc = _PyObject_GetAttrId(v, &PyId_encoding);
1278 if (oenc)
1279 enc = _PyUnicode_AsString(oenc);
1280 if (!enc)
1281 PyErr_Clear();
1282 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001283 }
1284 v = PySys_GetObject("ps1");
1285 if (v != NULL) {
1286 v = PyObject_Str(v);
1287 if (v == NULL)
1288 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001289 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001290 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001291 if (ps1 == NULL) {
1292 PyErr_Clear();
1293 ps1 = "";
1294 }
1295 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001296 }
1297 w = PySys_GetObject("ps2");
1298 if (w != NULL) {
1299 w = PyObject_Str(w);
1300 if (w == NULL)
1301 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001302 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001303 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001304 if (ps2 == NULL) {
1305 PyErr_Clear();
1306 ps2 = "";
1307 }
1308 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001309 }
1310 arena = PyArena_New();
1311 if (arena == NULL) {
1312 Py_XDECREF(v);
1313 Py_XDECREF(w);
1314 Py_XDECREF(oenc);
1315 return -1;
1316 }
1317 mod = PyParser_ASTFromFile(fp, filename, enc,
1318 Py_single_input, ps1, ps2,
1319 flags, &errcode, arena);
1320 Py_XDECREF(v);
1321 Py_XDECREF(w);
1322 Py_XDECREF(oenc);
1323 if (mod == NULL) {
1324 PyArena_Free(arena);
1325 if (errcode == E_EOF) {
1326 PyErr_Clear();
1327 return E_EOF;
1328 }
1329 PyErr_Print();
1330 return -1;
1331 }
1332 m = PyImport_AddModule("__main__");
1333 if (m == NULL) {
1334 PyArena_Free(arena);
1335 return -1;
1336 }
1337 d = PyModule_GetDict(m);
1338 v = run_mod(mod, filename, d, d, flags, arena);
1339 PyArena_Free(arena);
1340 flush_io();
1341 if (v == NULL) {
1342 PyErr_Print();
1343 return -1;
1344 }
1345 Py_DECREF(v);
1346 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001347}
1348
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001349/* Check whether a file maybe a pyc file: Look at the extension,
1350 the file type, and, if we may close it, at the first few bytes. */
1351
1352static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001353maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001354{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001355 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1356 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001357
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001358 /* Only look into the file if we are allowed to close it, since
1359 it then should also be seekable. */
1360 if (closeit) {
1361 /* Read only two bytes of the magic. If the file was opened in
1362 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1363 be read as they are on disk. */
1364 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1365 unsigned char buf[2];
1366 /* Mess: In case of -x, the stream is NOT at its start now,
1367 and ungetc() was used to push back the first newline,
1368 which makes the current stream position formally undefined,
1369 and a x-platform nightmare.
1370 Unfortunately, we have no direct way to know whether -x
1371 was specified. So we use a terrible hack: if the current
1372 stream position is not 0, we assume -x was specified, and
1373 give up. Bug 132850 on SourceForge spells out the
1374 hopelessness of trying anything else (fseek and ftell
1375 don't work predictably x-platform for text-mode files).
1376 */
1377 int ispyc = 0;
1378 if (ftell(fp) == 0) {
1379 if (fread(buf, 1, 2, fp) == 2 &&
1380 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1381 ispyc = 1;
1382 rewind(fp);
1383 }
1384 return ispyc;
1385 }
1386 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001387}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001388
Antoine Pitrou32d483c2013-07-30 21:01:23 +02001389static int
1390set_main_loader(PyObject *d, const char *filename, const char *loader_name)
Nick Coghlan85e729e2012-07-15 18:09:52 +10001391{
1392 PyInterpreterState *interp;
1393 PyThreadState *tstate;
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001394 PyObject *filename_obj, *loader_type, *loader;
Nick Coghlanb7a58942012-07-15 23:21:08 +10001395 int result = 0;
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001396
1397 filename_obj = PyUnicode_DecodeFSDefault(filename);
1398 if (filename_obj == NULL)
1399 return -1;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001400 /* Get current thread state and interpreter pointer */
1401 tstate = PyThreadState_GET();
1402 interp = tstate->interp;
Nick Coghlan3f94cbf2012-07-15 19:10:39 +10001403 loader_type = PyObject_GetAttrString(interp->importlib, loader_name);
1404 if (loader_type == NULL) {
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001405 Py_DECREF(filename_obj);
Nick Coghlan3f94cbf2012-07-15 19:10:39 +10001406 return -1;
1407 }
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001408 loader = PyObject_CallFunction(loader_type, "sN", "__main__", filename_obj);
Nick Coghlanb7a58942012-07-15 23:21:08 +10001409 Py_DECREF(loader_type);
1410 if (loader == NULL) {
Nick Coghlan85e729e2012-07-15 18:09:52 +10001411 return -1;
1412 }
Nick Coghlanb7a58942012-07-15 23:21:08 +10001413 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
1414 result = -1;
1415 }
Nick Coghlan85e729e2012-07-15 18:09:52 +10001416 Py_DECREF(loader);
Nick Coghlanb7a58942012-07-15 23:21:08 +10001417 return result;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001418}
1419
1420int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001421PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001422 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001423{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001424 PyObject *m, *d, *v;
1425 const char *ext;
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001426 int set_file_name = 0, ret = -1;
Victor Stinner0fcab4a2011-01-04 12:59:15 +00001427 size_t len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001428
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001429 m = PyImport_AddModule("__main__");
1430 if (m == NULL)
1431 return -1;
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001432 Py_INCREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001433 d = PyModule_GetDict(m);
1434 if (PyDict_GetItemString(d, "__file__") == NULL) {
1435 PyObject *f;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001436 f = PyUnicode_DecodeFSDefault(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001437 if (f == NULL)
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001438 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001439 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1440 Py_DECREF(f);
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001441 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001442 }
Barry Warsaw916048d2011-09-20 14:45:44 -04001443 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0) {
1444 Py_DECREF(f);
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001445 goto done;
Barry Warsaw916048d2011-09-20 14:45:44 -04001446 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001447 set_file_name = 1;
1448 Py_DECREF(f);
1449 }
1450 len = strlen(filename);
1451 ext = filename + len - (len > 4 ? 4 : 0);
1452 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Christian Heimes04ac4c12012-09-11 15:47:28 +02001453 FILE *pyc_fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001454 /* Try to run a pyc file. First, re-open in binary */
1455 if (closeit)
1456 fclose(fp);
Victor Stinnerdaf45552013-08-28 00:53:59 +02001457 if ((pyc_fp = _Py_fopen(filename, "rb")) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001458 fprintf(stderr, "python: Can't reopen .pyc file\n");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001459 goto done;
1460 }
1461 /* Turn on optimization if a .pyo file is given */
1462 if (strcmp(ext, ".pyo") == 0)
1463 Py_OptimizeFlag = 1;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001464
1465 if (set_main_loader(d, filename, "SourcelessFileLoader") < 0) {
1466 fprintf(stderr, "python: failed to set __main__.__loader__\n");
1467 ret = -1;
Christian Heimes04ac4c12012-09-11 15:47:28 +02001468 fclose(pyc_fp);
Nick Coghlan85e729e2012-07-15 18:09:52 +10001469 goto done;
1470 }
Christian Heimes04ac4c12012-09-11 15:47:28 +02001471 v = run_pyc_file(pyc_fp, filename, d, d, flags);
1472 fclose(pyc_fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001473 } else {
Nick Coghlan85e729e2012-07-15 18:09:52 +10001474 /* When running from stdin, leave __main__.__loader__ alone */
1475 if (strcmp(filename, "<stdin>") != 0 &&
1476 set_main_loader(d, filename, "SourceFileLoader") < 0) {
1477 fprintf(stderr, "python: failed to set __main__.__loader__\n");
1478 ret = -1;
1479 goto done;
1480 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001481 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1482 closeit, flags);
1483 }
1484 flush_io();
1485 if (v == NULL) {
1486 PyErr_Print();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001487 goto done;
1488 }
1489 Py_DECREF(v);
1490 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001491 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001492 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1493 PyErr_Clear();
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001494 Py_DECREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001495 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001496}
1497
1498int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001499PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001500{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001501 PyObject *m, *d, *v;
1502 m = PyImport_AddModule("__main__");
1503 if (m == NULL)
1504 return -1;
1505 d = PyModule_GetDict(m);
1506 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1507 if (v == NULL) {
1508 PyErr_Print();
1509 return -1;
1510 }
1511 Py_DECREF(v);
1512 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001513}
1514
Barry Warsaw035574d1997-08-29 22:07:17 +00001515static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001516parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001517 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001518{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001519 long hold;
1520 PyObject *v;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001521 _Py_IDENTIFIER(msg);
1522 _Py_IDENTIFIER(filename);
1523 _Py_IDENTIFIER(lineno);
1524 _Py_IDENTIFIER(offset);
1525 _Py_IDENTIFIER(text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001526
Benjamin Peterson80d50422012-04-03 00:30:38 -04001527 *message = NULL;
1528
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001529 /* new style errors. `err' is an instance */
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001530 *message = _PyObject_GetAttrId(err, &PyId_msg);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001531 if (!*message)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001532 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001533
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001534 v = _PyObject_GetAttrId(err, &PyId_filename);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001535 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001536 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001537 if (v == Py_None) {
1538 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001539 *filename = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001540 }
1541 else {
1542 *filename = _PyUnicode_AsString(v);
1543 Py_DECREF(v);
1544 if (!*filename)
1545 goto finally;
1546 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001547
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001548 v = _PyObject_GetAttrId(err, &PyId_lineno);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001549 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001550 goto finally;
1551 hold = PyLong_AsLong(v);
1552 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001553 if (hold < 0 && PyErr_Occurred())
1554 goto finally;
1555 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001556
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001557 v = _PyObject_GetAttrId(err, &PyId_offset);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001558 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001559 goto finally;
1560 if (v == Py_None) {
1561 *offset = -1;
1562 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001563 } else {
1564 hold = PyLong_AsLong(v);
1565 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001566 if (hold < 0 && PyErr_Occurred())
1567 goto finally;
1568 *offset = (int)hold;
1569 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001570
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001571 v = _PyObject_GetAttrId(err, &PyId_text);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001572 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001573 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001574 if (v == Py_None) {
1575 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001576 *text = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001577 }
1578 else {
1579 *text = _PyUnicode_AsString(v);
1580 Py_DECREF(v);
1581 if (!*text)
1582 goto finally;
1583 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001584 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001585
1586finally:
Benjamin Peterson80d50422012-04-03 00:30:38 -04001587 Py_XDECREF(*message);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001588 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001589}
1590
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001591void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001592PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001593{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001594 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001595}
1596
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001597static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001598print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001599{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001600 char *nl;
1601 if (offset >= 0) {
Benjamin Petersona95e9772010-10-29 03:28:14 +00001602 if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n')
1603 offset--;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001604 for (;;) {
1605 nl = strchr(text, '\n');
1606 if (nl == NULL || nl-text >= offset)
1607 break;
1608 offset -= (int)(nl+1-text);
1609 text = nl+1;
1610 }
1611 while (*text == ' ' || *text == '\t') {
1612 text++;
1613 offset--;
1614 }
1615 }
1616 PyFile_WriteString(" ", f);
1617 PyFile_WriteString(text, f);
1618 if (*text == '\0' || text[strlen(text)-1] != '\n')
1619 PyFile_WriteString("\n", f);
1620 if (offset == -1)
1621 return;
1622 PyFile_WriteString(" ", f);
Benjamin Petersona95e9772010-10-29 03:28:14 +00001623 while (--offset > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001624 PyFile_WriteString(" ", f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001625 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001626}
1627
Guido van Rossum66e8e862001-03-23 17:54:43 +00001628static void
1629handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001630{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001631 PyObject *exception, *value, *tb;
1632 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001633
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001634 if (Py_InspectFlag)
1635 /* Don't exit if -i flag was given. This flag is set to 0
1636 * when entering interactive mode for inspecting. */
1637 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001638
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001639 PyErr_Fetch(&exception, &value, &tb);
1640 fflush(stdout);
1641 if (value == NULL || value == Py_None)
1642 goto done;
1643 if (PyExceptionInstance_Check(value)) {
1644 /* The error code should be in the `code' attribute. */
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001645 _Py_IDENTIFIER(code);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001646 PyObject *code = _PyObject_GetAttrId(value, &PyId_code);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001647 if (code) {
1648 Py_DECREF(value);
1649 value = code;
1650 if (value == Py_None)
1651 goto done;
1652 }
1653 /* If we failed to dig out the 'code' attribute,
1654 just let the else clause below print the error. */
1655 }
1656 if (PyLong_Check(value))
1657 exitcode = (int)PyLong_AsLong(value);
1658 else {
Victor Stinnere9fb3192010-05-17 08:58:51 +00001659 PyObject *sys_stderr = PySys_GetObject("stderr");
Victor Stinner7126dbc2010-05-21 23:45:42 +00001660 if (sys_stderr != NULL && sys_stderr != Py_None) {
1661 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1662 } else {
1663 PyObject_Print(value, stderr, Py_PRINT_RAW);
1664 fflush(stderr);
1665 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001666 PySys_WriteStderr("\n");
1667 exitcode = 1;
1668 }
Tim Peterscf615b52003-04-19 18:47:02 +00001669 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001670 /* Restore and clear the exception info, in order to properly decref
1671 * the exception, value, and traceback. If we just exit instead,
1672 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1673 * some finalizers from running.
1674 */
1675 PyErr_Restore(exception, value, tb);
1676 PyErr_Clear();
1677 Py_Exit(exitcode);
1678 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001679}
1680
1681void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001682PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001683{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001684 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001685
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001686 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1687 handle_system_exit();
1688 }
1689 PyErr_Fetch(&exception, &v, &tb);
1690 if (exception == NULL)
1691 return;
1692 PyErr_NormalizeException(&exception, &v, &tb);
1693 if (tb == NULL) {
1694 tb = Py_None;
1695 Py_INCREF(tb);
1696 }
1697 PyException_SetTraceback(v, tb);
1698 if (exception == NULL)
1699 return;
1700 /* Now we know v != NULL too */
1701 if (set_sys_last_vars) {
1702 PySys_SetObject("last_type", exception);
1703 PySys_SetObject("last_value", v);
1704 PySys_SetObject("last_traceback", tb);
1705 }
1706 hook = PySys_GetObject("excepthook");
1707 if (hook) {
1708 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1709 PyObject *result = PyEval_CallObject(hook, args);
1710 if (result == NULL) {
1711 PyObject *exception2, *v2, *tb2;
1712 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1713 handle_system_exit();
1714 }
1715 PyErr_Fetch(&exception2, &v2, &tb2);
1716 PyErr_NormalizeException(&exception2, &v2, &tb2);
1717 /* It should not be possible for exception2 or v2
1718 to be NULL. However PyErr_Display() can't
1719 tolerate NULLs, so just be safe. */
1720 if (exception2 == NULL) {
1721 exception2 = Py_None;
1722 Py_INCREF(exception2);
1723 }
1724 if (v2 == NULL) {
1725 v2 = Py_None;
1726 Py_INCREF(v2);
1727 }
1728 fflush(stdout);
1729 PySys_WriteStderr("Error in sys.excepthook:\n");
1730 PyErr_Display(exception2, v2, tb2);
1731 PySys_WriteStderr("\nOriginal exception was:\n");
1732 PyErr_Display(exception, v, tb);
1733 Py_DECREF(exception2);
1734 Py_DECREF(v2);
1735 Py_XDECREF(tb2);
1736 }
1737 Py_XDECREF(result);
1738 Py_XDECREF(args);
1739 } else {
1740 PySys_WriteStderr("sys.excepthook is missing\n");
1741 PyErr_Display(exception, v, tb);
1742 }
1743 Py_XDECREF(exception);
1744 Py_XDECREF(v);
1745 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001746}
1747
Benjamin Petersone6528212008-07-15 15:32:09 +00001748static void
1749print_exception(PyObject *f, PyObject *value)
1750{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001751 int err = 0;
1752 PyObject *type, *tb;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001753 _Py_IDENTIFIER(print_file_and_line);
Benjamin Petersone6528212008-07-15 15:32:09 +00001754
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001755 if (!PyExceptionInstance_Check(value)) {
1756 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1757 PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1758 PyFile_WriteString(" found\n", f);
1759 return;
1760 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001761
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001762 Py_INCREF(value);
1763 fflush(stdout);
1764 type = (PyObject *) Py_TYPE(value);
1765 tb = PyException_GetTraceback(value);
1766 if (tb && tb != Py_None)
1767 err = PyTraceBack_Print(tb, f);
1768 if (err == 0 &&
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001769 _PyObject_HasAttrId(value, &PyId_print_file_and_line))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001770 {
1771 PyObject *message;
1772 const char *filename, *text;
1773 int lineno, offset;
1774 if (!parse_syntax_error(value, &message, &filename,
1775 &lineno, &offset, &text))
1776 PyErr_Clear();
1777 else {
1778 char buf[10];
1779 PyFile_WriteString(" File \"", f);
1780 if (filename == NULL)
1781 PyFile_WriteString("<string>", f);
1782 else
1783 PyFile_WriteString(filename, f);
1784 PyFile_WriteString("\", line ", f);
1785 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
1786 PyFile_WriteString(buf, f);
1787 PyFile_WriteString("\n", f);
1788 if (text != NULL)
1789 print_error_text(f, offset, text);
1790 Py_DECREF(value);
1791 value = message;
1792 /* Can't be bothered to check all those
1793 PyFile_WriteString() calls */
1794 if (PyErr_Occurred())
1795 err = -1;
1796 }
1797 }
1798 if (err) {
1799 /* Don't do anything else */
1800 }
1801 else {
1802 PyObject* moduleName;
1803 char* className;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001804 _Py_IDENTIFIER(__module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001805 assert(PyExceptionClass_Check(type));
1806 className = PyExceptionClass_Name(type);
1807 if (className != NULL) {
1808 char *dot = strrchr(className, '.');
1809 if (dot != NULL)
1810 className = dot+1;
1811 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001812
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001813 moduleName = _PyObject_GetAttrId(type, &PyId___module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001814 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1815 {
Victor Stinner13b21bd2011-05-26 14:25:13 +02001816 Py_XDECREF(moduleName);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001817 err = PyFile_WriteString("<unknown>", f);
1818 }
1819 else {
1820 char* modstr = _PyUnicode_AsString(moduleName);
1821 if (modstr && strcmp(modstr, "builtins"))
1822 {
1823 err = PyFile_WriteString(modstr, f);
1824 err += PyFile_WriteString(".", f);
1825 }
1826 Py_DECREF(moduleName);
1827 }
1828 if (err == 0) {
1829 if (className == NULL)
1830 err = PyFile_WriteString("<unknown>", f);
1831 else
1832 err = PyFile_WriteString(className, f);
1833 }
1834 }
1835 if (err == 0 && (value != Py_None)) {
1836 PyObject *s = PyObject_Str(value);
1837 /* only print colon if the str() of the
1838 object is not the empty string
1839 */
1840 if (s == NULL)
1841 err = -1;
1842 else if (!PyUnicode_Check(s) ||
Victor Stinnere251d6d2011-11-20 19:20:00 +01001843 PyUnicode_GetLength(s) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001844 err = PyFile_WriteString(": ", f);
1845 if (err == 0)
1846 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1847 Py_XDECREF(s);
1848 }
1849 /* try to write a newline in any case */
1850 err += PyFile_WriteString("\n", f);
1851 Py_XDECREF(tb);
1852 Py_DECREF(value);
1853 /* If an error happened here, don't show it.
1854 XXX This is wrong, but too many callers rely on this behavior. */
1855 if (err != 0)
1856 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001857}
1858
1859static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001860 "\nThe above exception was the direct cause "
1861 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001862
1863static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001864 "\nDuring handling of the above exception, "
1865 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001866
1867static void
1868print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
1869{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001870 int err = 0, res;
1871 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00001872
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001873 if (seen != NULL) {
1874 /* Exception chaining */
1875 if (PySet_Add(seen, value) == -1)
1876 PyErr_Clear();
1877 else if (PyExceptionInstance_Check(value)) {
1878 cause = PyException_GetCause(value);
1879 context = PyException_GetContext(value);
Benjamin Petersond5a1c442012-05-14 22:09:31 -07001880 if (cause) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001881 res = PySet_Contains(seen, cause);
1882 if (res == -1)
1883 PyErr_Clear();
1884 if (res == 0) {
1885 print_exception_recursive(
1886 f, cause, seen);
1887 err |= PyFile_WriteString(
1888 cause_message, f);
1889 }
1890 }
Benjamin Petersond5a1c442012-05-14 22:09:31 -07001891 else if (context &&
1892 !((PyBaseExceptionObject *)value)->suppress_context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001893 res = PySet_Contains(seen, context);
1894 if (res == -1)
1895 PyErr_Clear();
1896 if (res == 0) {
1897 print_exception_recursive(
1898 f, context, seen);
1899 err |= PyFile_WriteString(
1900 context_message, f);
1901 }
1902 }
1903 Py_XDECREF(context);
1904 Py_XDECREF(cause);
1905 }
1906 }
1907 print_exception(f, value);
1908 if (err != 0)
1909 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001910}
1911
Thomas Wouters477c8d52006-05-27 19:21:47 +00001912void
1913PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001914{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001915 PyObject *seen;
1916 PyObject *f = PySys_GetObject("stderr");
1917 if (f == Py_None) {
1918 /* pass */
1919 }
1920 else if (f == NULL) {
1921 _PyObject_Dump(value);
1922 fprintf(stderr, "lost sys.stderr\n");
1923 }
1924 else {
1925 /* We choose to ignore seen being possibly NULL, and report
1926 at least the main exception (it could be a MemoryError).
1927 */
1928 seen = PySet_New(NULL);
1929 if (seen == NULL)
1930 PyErr_Clear();
1931 print_exception_recursive(f, value, seen);
1932 Py_XDECREF(seen);
1933 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001934}
1935
Guido van Rossum82598051997-03-05 00:20:32 +00001936PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001937PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001938 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001939{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001940 PyObject *ret = NULL;
1941 mod_ty mod;
1942 PyArena *arena = PyArena_New();
1943 if (arena == NULL)
1944 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001945
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001946 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
1947 if (mod != NULL)
1948 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
1949 PyArena_Free(arena);
1950 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001951}
1952
1953PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001954PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001955 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001956{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001957 PyObject *ret;
1958 mod_ty mod;
1959 PyArena *arena = PyArena_New();
1960 if (arena == NULL)
1961 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001962
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001963 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
1964 flags, NULL, arena);
1965 if (closeit)
1966 fclose(fp);
1967 if (mod == NULL) {
1968 PyArena_Free(arena);
1969 return NULL;
1970 }
1971 ret = run_mod(mod, filename, globals, locals, flags, arena);
1972 PyArena_Free(arena);
1973 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001974}
1975
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001976static void
1977flush_io(void)
1978{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001979 PyObject *f, *r;
1980 PyObject *type, *value, *traceback;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001981 _Py_IDENTIFIER(flush);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001982
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001983 /* Save the current exception */
1984 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001985
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001986 f = PySys_GetObject("stderr");
1987 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001988 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001989 if (r)
1990 Py_DECREF(r);
1991 else
1992 PyErr_Clear();
1993 }
1994 f = PySys_GetObject("stdout");
1995 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001996 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001997 if (r)
1998 Py_DECREF(r);
1999 else
2000 PyErr_Clear();
2001 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00002002
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002003 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00002004}
2005
Guido van Rossum82598051997-03-05 00:20:32 +00002006static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002007run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002008 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002009{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002010 PyCodeObject *co;
2011 PyObject *v;
2012 co = PyAST_Compile(mod, filename, flags, arena);
2013 if (co == NULL)
2014 return NULL;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002015 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002016 Py_DECREF(co);
2017 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002018}
2019
Guido van Rossum82598051997-03-05 00:20:32 +00002020static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002021run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002022 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00002023{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002024 PyCodeObject *co;
2025 PyObject *v;
2026 long magic;
2027 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00002028
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002029 magic = PyMarshal_ReadLongFromFile(fp);
2030 if (magic != PyImport_GetMagicNumber()) {
2031 PyErr_SetString(PyExc_RuntimeError,
2032 "Bad magic number in .pyc file");
2033 return NULL;
2034 }
Antoine Pitrou5136ac02012-01-13 18:52:16 +01002035 /* Skip mtime and size */
2036 (void) PyMarshal_ReadLongFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002037 (void) PyMarshal_ReadLongFromFile(fp);
2038 v = PyMarshal_ReadLastObjectFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002039 if (v == NULL || !PyCode_Check(v)) {
2040 Py_XDECREF(v);
2041 PyErr_SetString(PyExc_RuntimeError,
2042 "Bad code object in .pyc file");
2043 return NULL;
2044 }
2045 co = (PyCodeObject *)v;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002046 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002047 if (v && flags)
2048 flags->cf_flags |= (co->co_flags & PyCF_MASK);
2049 Py_DECREF(co);
2050 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00002051}
2052
Guido van Rossum82598051997-03-05 00:20:32 +00002053PyObject *
Victor Stinner14e461d2013-08-26 22:28:21 +02002054Py_CompileStringObject(const char *str, PyObject *filename, int start,
2055 PyCompilerFlags *flags, int optimize)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00002056{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002057 PyCodeObject *co;
2058 mod_ty mod;
2059 PyArena *arena = PyArena_New();
2060 if (arena == NULL)
2061 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002062
Victor Stinner14e461d2013-08-26 22:28:21 +02002063 mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002064 if (mod == NULL) {
2065 PyArena_Free(arena);
2066 return NULL;
2067 }
2068 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
2069 PyObject *result = PyAST_mod2obj(mod);
2070 PyArena_Free(arena);
2071 return result;
2072 }
Victor Stinner14e461d2013-08-26 22:28:21 +02002073 co = PyAST_CompileObject(mod, filename, flags, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002074 PyArena_Free(arena);
2075 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00002076}
2077
Victor Stinner14e461d2013-08-26 22:28:21 +02002078PyObject *
2079Py_CompileStringExFlags(const char *str, const char *filename_str, int start,
2080 PyCompilerFlags *flags, int optimize)
2081{
2082 PyObject *filename, *co;
2083 filename = PyUnicode_DecodeFSDefault(filename_str);
2084 if (filename == NULL)
2085 return NULL;
2086 co = Py_CompileStringObject(str, filename, start, flags, optimize);
2087 Py_DECREF(filename);
2088 return co;
2089}
2090
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002091/* For use in Py_LIMITED_API */
2092#undef Py_CompileString
2093PyObject *
2094PyCompileString(const char *str, const char *filename, int start)
2095{
2096 return Py_CompileStringFlags(str, filename, start, NULL);
2097}
2098
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002099struct symtable *
Victor Stinner14e461d2013-08-26 22:28:21 +02002100Py_SymtableStringObject(const char *str, PyObject *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002101{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002102 struct symtable *st;
2103 mod_ty mod;
2104 PyCompilerFlags flags;
Victor Stinner14e461d2013-08-26 22:28:21 +02002105 PyArena *arena;
2106
2107 arena = PyArena_New();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002108 if (arena == NULL)
2109 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002110
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002111 flags.cf_flags = 0;
Victor Stinner14e461d2013-08-26 22:28:21 +02002112 mod = PyParser_ASTFromStringObject(str, filename, start, &flags, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002113 if (mod == NULL) {
2114 PyArena_Free(arena);
2115 return NULL;
2116 }
Victor Stinner14e461d2013-08-26 22:28:21 +02002117 st = PySymtable_BuildObject(mod, filename, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002118 PyArena_Free(arena);
2119 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002120}
2121
Victor Stinner14e461d2013-08-26 22:28:21 +02002122struct symtable *
2123Py_SymtableString(const char *str, const char *filename_str, int start)
2124{
2125 PyObject *filename;
2126 struct symtable *st;
2127
2128 filename = PyUnicode_DecodeFSDefault(filename_str);
2129 if (filename == NULL)
2130 return NULL;
2131 st = Py_SymtableStringObject(str, filename, start);
2132 Py_DECREF(filename);
2133 return st;
2134}
2135
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002136/* Preferred access to parser is through AST. */
2137mod_ty
Victor Stinner14e461d2013-08-26 22:28:21 +02002138PyParser_ASTFromStringObject(const char *s, PyObject *filename, int start,
2139 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002140{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002141 mod_ty mod;
2142 PyCompilerFlags localflags;
2143 perrdetail err;
2144 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002145
Victor Stinner14e461d2013-08-26 22:28:21 +02002146 node *n = PyParser_ParseStringObject(s, filename,
2147 &_PyParser_Grammar, start, &err,
2148 &iflags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002149 if (flags == NULL) {
2150 localflags.cf_flags = 0;
2151 flags = &localflags;
2152 }
2153 if (n) {
2154 flags->cf_flags |= iflags & PyCF_MASK;
Victor Stinner14e461d2013-08-26 22:28:21 +02002155 mod = PyAST_FromNodeObject(n, flags, filename, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002156 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002157 }
2158 else {
2159 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002160 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002161 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002162 err_free(&err);
2163 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002164}
2165
2166mod_ty
Victor Stinner14e461d2013-08-26 22:28:21 +02002167PyParser_ASTFromString(const char *s, const char *filename_str, int start,
2168 PyCompilerFlags *flags, PyArena *arena)
2169{
2170 PyObject *filename;
2171 mod_ty mod;
2172 filename = PyUnicode_DecodeFSDefault(filename_str);
2173 if (filename == NULL)
2174 return NULL;
2175 mod = PyParser_ASTFromStringObject(s, filename, start, flags, arena);
2176 Py_DECREF(filename);
2177 return mod;
2178}
2179
2180mod_ty
2181PyParser_ASTFromFileObject(FILE *fp, PyObject *filename, const char* enc,
2182 int start, char *ps1,
2183 char *ps2, PyCompilerFlags *flags, int *errcode,
2184 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002185{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002186 mod_ty mod;
2187 PyCompilerFlags localflags;
2188 perrdetail err;
2189 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002190
Victor Stinner14e461d2013-08-26 22:28:21 +02002191 node *n = PyParser_ParseFileObject(fp, filename, enc,
2192 &_PyParser_Grammar,
2193 start, ps1, ps2, &err, &iflags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002194 if (flags == NULL) {
2195 localflags.cf_flags = 0;
2196 flags = &localflags;
2197 }
2198 if (n) {
2199 flags->cf_flags |= iflags & PyCF_MASK;
Victor Stinner14e461d2013-08-26 22:28:21 +02002200 mod = PyAST_FromNodeObject(n, flags, filename, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002201 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002202 }
2203 else {
2204 err_input(&err);
2205 if (errcode)
2206 *errcode = err.error;
Victor Stinner7f2fee32011-04-05 00:39:01 +02002207 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002208 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002209 err_free(&err);
2210 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002211}
2212
Victor Stinner14e461d2013-08-26 22:28:21 +02002213mod_ty
2214PyParser_ASTFromFile(FILE *fp, const char *filename_str, const char* enc,
2215 int start, char *ps1,
2216 char *ps2, PyCompilerFlags *flags, int *errcode,
2217 PyArena *arena)
2218{
2219 mod_ty mod;
2220 PyObject *filename;
2221 filename = PyUnicode_DecodeFSDefault(filename_str);
2222 if (filename == NULL)
2223 return NULL;
2224 mod = PyParser_ASTFromFileObject(fp, filename, enc, start, ps1, ps2,
2225 flags, errcode, arena);
2226 Py_DECREF(filename);
2227 return mod;
2228}
2229
Guido van Rossuma110aa61994-08-29 12:50:44 +00002230/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002231
Guido van Rossuma110aa61994-08-29 12:50:44 +00002232node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002233PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002234{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002235 perrdetail err;
2236 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
2237 &_PyParser_Grammar,
2238 start, NULL, NULL, &err, flags);
2239 if (n == NULL)
2240 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002241 err_free(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002242
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002243 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002244}
2245
Guido van Rossuma110aa61994-08-29 12:50:44 +00002246/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002247
Guido van Rossuma110aa61994-08-29 12:50:44 +00002248node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002249PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00002250{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002251 perrdetail err;
2252 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
2253 start, &err, flags);
2254 if (n == NULL)
2255 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002256 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002257 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00002258}
2259
2260node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002261PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002262 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002263{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002264 perrdetail err;
2265 node *n = PyParser_ParseStringFlagsFilename(str, filename,
2266 &_PyParser_Grammar, start, &err, flags);
2267 if (n == NULL)
2268 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002269 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002270 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00002271}
2272
2273node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002274PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002275{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002276 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00002277}
2278
Guido van Rossum66ebd912003-04-17 16:02:26 +00002279/* May want to move a more generalized form of this to parsetok.c or
2280 even parser modules. */
2281
2282void
Victor Stinner7f2fee32011-04-05 00:39:01 +02002283PyParser_ClearError(perrdetail *err)
2284{
2285 err_free(err);
2286}
2287
2288void
Guido van Rossum66ebd912003-04-17 16:02:26 +00002289PyParser_SetError(perrdetail *err)
2290{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002291 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00002292}
2293
Victor Stinner7f2fee32011-04-05 00:39:01 +02002294static void
2295err_free(perrdetail *err)
2296{
2297 Py_CLEAR(err->filename);
2298}
2299
Guido van Rossuma110aa61994-08-29 12:50:44 +00002300/* Set the error appropriate to the given input error code (see errcode.h) */
2301
2302static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002303err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00002304{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002305 PyObject *v, *w, *errtype, *errtext;
2306 PyObject *msg_obj = NULL;
2307 char *msg = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002308
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002309 errtype = PyExc_SyntaxError;
2310 switch (err->error) {
2311 case E_ERROR:
2312 return;
2313 case E_SYNTAX:
2314 errtype = PyExc_IndentationError;
2315 if (err->expected == INDENT)
2316 msg = "expected an indented block";
2317 else if (err->token == INDENT)
2318 msg = "unexpected indent";
2319 else if (err->token == DEDENT)
2320 msg = "unexpected unindent";
2321 else {
2322 errtype = PyExc_SyntaxError;
2323 msg = "invalid syntax";
2324 }
2325 break;
2326 case E_TOKEN:
2327 msg = "invalid token";
2328 break;
2329 case E_EOFS:
2330 msg = "EOF while scanning triple-quoted string literal";
2331 break;
2332 case E_EOLS:
2333 msg = "EOL while scanning string literal";
2334 break;
2335 case E_INTR:
2336 if (!PyErr_Occurred())
2337 PyErr_SetNone(PyExc_KeyboardInterrupt);
2338 goto cleanup;
2339 case E_NOMEM:
2340 PyErr_NoMemory();
2341 goto cleanup;
2342 case E_EOF:
2343 msg = "unexpected EOF while parsing";
2344 break;
2345 case E_TABSPACE:
2346 errtype = PyExc_TabError;
2347 msg = "inconsistent use of tabs and spaces in indentation";
2348 break;
2349 case E_OVERFLOW:
2350 msg = "expression too long";
2351 break;
2352 case E_DEDENT:
2353 errtype = PyExc_IndentationError;
2354 msg = "unindent does not match any outer indentation level";
2355 break;
2356 case E_TOODEEP:
2357 errtype = PyExc_IndentationError;
2358 msg = "too many levels of indentation";
2359 break;
2360 case E_DECODE: {
2361 PyObject *type, *value, *tb;
2362 PyErr_Fetch(&type, &value, &tb);
2363 msg = "unknown decode error";
2364 if (value != NULL)
2365 msg_obj = PyObject_Str(value);
2366 Py_XDECREF(type);
2367 Py_XDECREF(value);
2368 Py_XDECREF(tb);
2369 break;
2370 }
2371 case E_LINECONT:
2372 msg = "unexpected character after line continuation character";
2373 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002374
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002375 case E_IDENTIFIER:
2376 msg = "invalid character in identifier";
2377 break;
Meador Ingefa21bf02012-01-19 01:08:41 -06002378 case E_BADSINGLE:
2379 msg = "multiple statements found while compiling a single statement";
2380 break;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002381 default:
2382 fprintf(stderr, "error=%d\n", err->error);
2383 msg = "unknown parsing error";
2384 break;
2385 }
2386 /* err->text may not be UTF-8 in case of decoding errors.
2387 Explicitly convert to an object. */
2388 if (!err->text) {
2389 errtext = Py_None;
2390 Py_INCREF(Py_None);
2391 } else {
2392 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
2393 "replace");
2394 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002395 v = Py_BuildValue("(OiiN)", err->filename,
2396 err->lineno, err->offset, errtext);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002397 if (v != NULL) {
2398 if (msg_obj)
2399 w = Py_BuildValue("(OO)", msg_obj, v);
2400 else
2401 w = Py_BuildValue("(sO)", msg, v);
2402 } else
2403 w = NULL;
2404 Py_XDECREF(v);
2405 PyErr_SetObject(errtype, w);
2406 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002407cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002408 Py_XDECREF(msg_obj);
2409 if (err->text != NULL) {
2410 PyObject_FREE(err->text);
2411 err->text = NULL;
2412 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002413}
2414
2415/* Print fatal error message and abort */
2416
2417void
Tim Peters7c321a82002-07-09 02:57:01 +00002418Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002419{
Victor Stinner024e37a2011-03-31 01:31:06 +02002420 const int fd = fileno(stderr);
2421 PyThreadState *tstate;
2422
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002423 fprintf(stderr, "Fatal Python error: %s\n", msg);
2424 fflush(stderr); /* it helps in Windows debug build */
2425 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002426 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002427 }
Victor Stinner024e37a2011-03-31 01:31:06 +02002428 else {
2429 tstate = _Py_atomic_load_relaxed(&_PyThreadState_Current);
2430 if (tstate != NULL) {
2431 fputc('\n', stderr);
2432 fflush(stderr);
Victor Stinner7bba62f2011-05-07 12:43:00 +02002433 _Py_DumpTracebackThreads(fd, tstate->interp, tstate);
Victor Stinner024e37a2011-03-31 01:31:06 +02002434 }
Victor Stinnerd727e232011-04-01 12:13:55 +02002435 _PyFaulthandler_Fini();
Victor Stinner024e37a2011-03-31 01:31:06 +02002436 }
2437
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002438#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002439 {
2440 size_t len = strlen(msg);
2441 WCHAR* buffer;
2442 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002443
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002444 /* Convert the message to wchar_t. This uses a simple one-to-one
2445 conversion, assuming that the this error message actually uses ASCII
2446 only. If this ceases to be true, we will have to convert. */
2447 buffer = alloca( (len+1) * (sizeof *buffer));
2448 for( i=0; i<=len; ++i)
2449 buffer[i] = msg[i];
2450 OutputDebugStringW(L"Fatal Python error: ");
2451 OutputDebugStringW(buffer);
2452 OutputDebugStringW(L"\n");
2453 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002454#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002455 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002456#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002457#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002458 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002459}
2460
2461/* Clean up and exit */
2462
Guido van Rossuma110aa61994-08-29 12:50:44 +00002463#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002464#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002465#endif
2466
Collin Winter670e6922007-03-21 02:57:17 +00002467static void (*pyexitfunc)(void) = NULL;
2468/* For the atexit module. */
2469void _Py_PyAtExit(void (*func)(void))
2470{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002471 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002472}
2473
2474static void
2475call_py_exitfuncs(void)
2476{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002477 if (pyexitfunc == NULL)
2478 return;
Collin Winter670e6922007-03-21 02:57:17 +00002479
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002480 (*pyexitfunc)();
2481 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002482}
2483
Antoine Pitrou011bd622009-10-20 21:52:47 +00002484/* Wait until threading._shutdown completes, provided
2485 the threading module was imported in the first place.
2486 The shutdown routine will wait until all non-daemon
2487 "threading" threads have completed. */
2488static void
2489wait_for_thread_shutdown(void)
2490{
2491#ifdef WITH_THREAD
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002492 _Py_IDENTIFIER(_shutdown);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002493 PyObject *result;
2494 PyThreadState *tstate = PyThreadState_GET();
2495 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2496 "threading");
2497 if (threading == NULL) {
2498 /* threading not imported */
2499 PyErr_Clear();
2500 return;
2501 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002502 result = _PyObject_CallMethodId(threading, &PyId__shutdown, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002503 if (result == NULL) {
2504 PyErr_WriteUnraisable(threading);
2505 }
2506 else {
2507 Py_DECREF(result);
2508 }
2509 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002510#endif
2511}
2512
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002513#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002514static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002515static int nexitfuncs = 0;
2516
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002517int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002518{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002519 if (nexitfuncs >= NEXITFUNCS)
2520 return -1;
2521 exitfuncs[nexitfuncs++] = func;
2522 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002523}
2524
Guido van Rossumcc283f51997-08-05 02:22:03 +00002525static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002526call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002527{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002528 while (nexitfuncs > 0)
2529 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002530
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002531 fflush(stdout);
2532 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002533}
2534
2535void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002536Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002537{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002538 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002539
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002540 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002541}
2542
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002543static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002544initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002545{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002546#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002547 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002548#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002549#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002550 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002551#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002552#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002553 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002554#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002555 PyOS_InitInterrupts(); /* May imply initsignal() */
Victor Stinnerd786ad52013-07-21 13:25:51 +02002556 if (PyErr_Occurred()) {
2557 Py_FatalError("Py_Initialize: can't import signal");
2558 }
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002559}
2560
Guido van Rossum7433b121997-02-14 19:45:36 +00002561
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002562/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2563 *
2564 * All of the code in this function must only use async-signal-safe functions,
2565 * listed at `man 7 signal` or
2566 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2567 */
2568void
2569_Py_RestoreSignals(void)
2570{
2571#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002572 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002573#endif
2574#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002575 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002576#endif
2577#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002578 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002579#endif
2580}
2581
2582
Guido van Rossum7433b121997-02-14 19:45:36 +00002583/*
2584 * The file descriptor fd is considered ``interactive'' if either
2585 * a) isatty(fd) is TRUE, or
2586 * b) the -i flag was given, and the filename associated with
2587 * the descriptor is NULL or "<stdin>" or "???".
2588 */
2589int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002590Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002591{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002592 if (isatty((int)fileno(fp)))
2593 return 1;
2594 if (!Py_InteractiveFlag)
2595 return 0;
2596 return (filename == NULL) ||
2597 (strcmp(filename, "<stdin>") == 0) ||
2598 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002599}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002600
2601
Tim Petersd08e3822003-04-17 15:24:21 +00002602#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002603#if defined(WIN32) && defined(_MSC_VER)
2604
2605/* Stack checking for Microsoft C */
2606
2607#include <malloc.h>
2608#include <excpt.h>
2609
Fred Drakee8de31c2000-08-31 05:38:39 +00002610/*
2611 * Return non-zero when we run out of memory on the stack; zero otherwise.
2612 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002613int
Fred Drake399739f2000-08-31 05:52:44 +00002614PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002615{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002616 __try {
2617 /* alloca throws a stack overflow exception if there's
2618 not enough space left on the stack */
2619 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2620 return 0;
2621 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2622 EXCEPTION_EXECUTE_HANDLER :
2623 EXCEPTION_CONTINUE_SEARCH) {
2624 int errcode = _resetstkoflw();
2625 if (errcode == 0)
2626 {
2627 Py_FatalError("Could not reset the stack!");
2628 }
2629 }
2630 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002631}
2632
2633#endif /* WIN32 && _MSC_VER */
2634
2635/* Alternate implementations can be added here... */
2636
2637#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002638
2639
2640/* Wrappers around sigaction() or signal(). */
2641
2642PyOS_sighandler_t
2643PyOS_getsig(int sig)
2644{
2645#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002646 struct sigaction context;
2647 if (sigaction(sig, NULL, &context) == -1)
2648 return SIG_ERR;
2649 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002650#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002651 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002652/* Special signal handling for the secure CRT in Visual Studio 2005 */
2653#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002654 switch (sig) {
2655 /* Only these signals are valid */
2656 case SIGINT:
2657 case SIGILL:
2658 case SIGFPE:
2659 case SIGSEGV:
2660 case SIGTERM:
2661 case SIGBREAK:
2662 case SIGABRT:
2663 break;
2664 /* Don't call signal() with other values or it will assert */
2665 default:
2666 return SIG_ERR;
2667 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002668#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002669 handler = signal(sig, SIG_IGN);
2670 if (handler != SIG_ERR)
2671 signal(sig, handler);
2672 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002673#endif
2674}
2675
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002676/*
2677 * All of the code in this function must only use async-signal-safe functions,
2678 * listed at `man 7 signal` or
2679 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2680 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002681PyOS_sighandler_t
2682PyOS_setsig(int sig, PyOS_sighandler_t handler)
2683{
2684#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002685 /* Some code in Modules/signalmodule.c depends on sigaction() being
2686 * used here if HAVE_SIGACTION is defined. Fix that if this code
2687 * changes to invalidate that assumption.
2688 */
2689 struct sigaction context, ocontext;
2690 context.sa_handler = handler;
2691 sigemptyset(&context.sa_mask);
2692 context.sa_flags = 0;
2693 if (sigaction(sig, &context, &ocontext) == -1)
2694 return SIG_ERR;
2695 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002696#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002697 PyOS_sighandler_t oldhandler;
2698 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002699#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002700 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002701#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002702 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002703#endif
2704}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002705
2706/* Deprecated C API functions still provided for binary compatiblity */
2707
2708#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002709PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002710PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2711{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002712 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002713}
2714
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002715#undef PyParser_SimpleParseString
2716PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002717PyParser_SimpleParseString(const char *str, int start)
2718{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002719 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002720}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002721
2722#undef PyRun_AnyFile
2723PyAPI_FUNC(int)
2724PyRun_AnyFile(FILE *fp, const char *name)
2725{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002726 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002727}
2728
2729#undef PyRun_AnyFileEx
2730PyAPI_FUNC(int)
2731PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2732{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002733 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002734}
2735
2736#undef PyRun_AnyFileFlags
2737PyAPI_FUNC(int)
2738PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2739{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002740 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002741}
2742
2743#undef PyRun_File
2744PyAPI_FUNC(PyObject *)
2745PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2746{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002747 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002748}
2749
2750#undef PyRun_FileEx
2751PyAPI_FUNC(PyObject *)
2752PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2753{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002754 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002755}
2756
2757#undef PyRun_FileFlags
2758PyAPI_FUNC(PyObject *)
2759PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002760 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002761{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002762 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002763}
2764
2765#undef PyRun_SimpleFile
2766PyAPI_FUNC(int)
2767PyRun_SimpleFile(FILE *f, const char *p)
2768{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002769 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002770}
2771
2772#undef PyRun_SimpleFileEx
2773PyAPI_FUNC(int)
2774PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2775{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002776 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002777}
2778
2779
2780#undef PyRun_String
2781PyAPI_FUNC(PyObject *)
2782PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2783{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002784 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002785}
2786
2787#undef PyRun_SimpleString
2788PyAPI_FUNC(int)
2789PyRun_SimpleString(const char *s)
2790{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002791 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002792}
2793
2794#undef Py_CompileString
2795PyAPI_FUNC(PyObject *)
2796Py_CompileString(const char *str, const char *p, int s)
2797{
Georg Brandl8334fd92010-12-04 10:26:46 +00002798 return Py_CompileStringExFlags(str, p, s, NULL, -1);
2799}
2800
2801#undef Py_CompileStringFlags
2802PyAPI_FUNC(PyObject *)
2803Py_CompileStringFlags(const char *str, const char *p, int s,
2804 PyCompilerFlags *flags)
2805{
2806 return Py_CompileStringExFlags(str, p, s, flags, -1);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002807}
2808
2809#undef PyRun_InteractiveOne
2810PyAPI_FUNC(int)
2811PyRun_InteractiveOne(FILE *f, const char *p)
2812{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002813 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002814}
2815
2816#undef PyRun_InteractiveLoop
2817PyAPI_FUNC(int)
2818PyRun_InteractiveLoop(FILE *f, const char *p)
2819{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002820 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002821}
2822
2823#ifdef __cplusplus
2824}
2825#endif