blob: c2ca563d1aa8770170c8dc6407cdc9218975860f [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();
Antoine Pitrou4879a962013-08-31 00:26:02 +0200628 _PyRandom_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000629
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000630 /* Cleanup Unicode implementation */
631 _PyUnicode_Fini();
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000632
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000633 /* reset file system default encoding */
Victor Stinnerb744ba12010-05-15 12:27:16 +0000634 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +0200635 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000636 Py_FileSystemDefaultEncoding = NULL;
637 }
Christian Heimesc8967002007-11-30 10:18:26 +0000638
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000639 /* XXX Still allocated:
640 - various static ad-hoc pointers to interned strings
641 - int and float free list blocks
642 - whatever various modules and libraries allocate
643 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000644
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000645 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000646
Victor Stinner51fa4582013-07-07 15:50:49 +0200647 /* Cleanup auto-thread-state */
648#ifdef WITH_THREAD
649 _PyGILState_Fini();
650#endif /* WITH_THREAD */
651
652 /* Delete current thread. After this, many C API calls become crashy. */
653 PyThreadState_Swap(NULL);
654 PyInterpreterState_Delete(interp);
655
Tim Peters269b2a62003-04-17 19:52:29 +0000656#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000657 /* Display addresses (& refcnts) of all objects still alive.
658 * An address can be used to find the repr of the object, printed
659 * above by _Py_PrintReferences.
660 */
661 if (Py_GETENV("PYTHONDUMPREFS"))
662 _Py_PrintReferenceAddresses(stderr);
Tim Peters269b2a62003-04-17 19:52:29 +0000663#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000664#ifdef PYMALLOC_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000665 if (Py_GETENV("PYTHONMALLOCSTATS"))
David Malcolm49526f42012-06-22 14:55:41 -0400666 _PyObject_DebugMallocStats(stderr);
Tim Peters0e871182002-04-13 08:29:14 +0000667#endif
668
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000669 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000670}
671
672/* Create and initialize a new interpreter and thread, and return the
673 new thread. This requires that Py_Initialize() has been called
674 first.
675
676 Unsuccessful initialization yields a NULL pointer. Note that *no*
677 exception information is available even in this case -- the
678 exception information is held in the thread, and there is no
679 thread.
680
681 Locking: as above.
682
683*/
684
685PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000686Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000687{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000688 PyInterpreterState *interp;
689 PyThreadState *tstate, *save_tstate;
690 PyObject *bimod, *sysmod;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000691
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000692 if (!initialized)
693 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000694
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000695 interp = PyInterpreterState_New();
696 if (interp == NULL)
697 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000698
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000699 tstate = PyThreadState_New(interp);
700 if (tstate == NULL) {
701 PyInterpreterState_Delete(interp);
702 return NULL;
703 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000704
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000705 save_tstate = PyThreadState_Swap(tstate);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000706
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000707 /* XXX The following is lax in error checking */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000708
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000709 interp->modules = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000710
Victor Stinner49d3f252010-10-17 01:24:53 +0000711 bimod = _PyImport_FindBuiltin("builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000712 if (bimod != NULL) {
713 interp->builtins = PyModule_GetDict(bimod);
714 if (interp->builtins == NULL)
715 goto handle_error;
716 Py_INCREF(interp->builtins);
717 }
Christian Heimes6a27efa2008-10-30 21:48:26 +0000718
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000719 /* initialize builtin exceptions */
Brett Cannonfd074152012-04-14 14:10:13 -0400720 _PyExc_Init(bimod);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000721
Victor Stinner49d3f252010-10-17 01:24:53 +0000722 sysmod = _PyImport_FindBuiltin("sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000723 if (bimod != NULL && sysmod != NULL) {
724 PyObject *pstderr;
Brett Cannonfd074152012-04-14 14:10:13 -0400725
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000726 interp->sysdict = PyModule_GetDict(sysmod);
727 if (interp->sysdict == NULL)
728 goto handle_error;
729 Py_INCREF(interp->sysdict);
730 PySys_SetPath(Py_GetPath());
731 PyDict_SetItemString(interp->sysdict, "modules",
732 interp->modules);
733 /* Set up a preliminary stderr printer until we have enough
734 infrastructure for the io module in place. */
735 pstderr = PyFile_NewStdPrinter(fileno(stderr));
736 if (pstderr == NULL)
737 Py_FatalError("Py_Initialize: can't set preliminary stderr");
738 PySys_SetObject("stderr", pstderr);
739 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000740 Py_DECREF(pstderr);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000741
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000742 _PyImportHooks_Init();
Victor Stinner793b5312011-04-27 00:24:21 +0200743
Brett Cannonfd074152012-04-14 14:10:13 -0400744 import_init(interp, sysmod);
745
Victor Stinner793b5312011-04-27 00:24:21 +0200746 if (initfsencoding(interp) < 0)
747 goto handle_error;
748
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000749 if (initstdio() < 0)
750 Py_FatalError(
751 "Py_Initialize: can't initialize sys standard streams");
Nick Coghlan85e729e2012-07-15 18:09:52 +1000752 initmain(interp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000753 if (!Py_NoSiteFlag)
754 initsite();
755 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000756
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000757 if (!PyErr_Occurred())
758 return tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000759
Thomas Wouters89f507f2006-12-13 04:49:30 +0000760handle_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000761 /* Oops, it didn't work. Undo it all. */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000762
Victor Stinnerc40a3502011-04-27 00:20:27 +0200763 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000764 PyThreadState_Clear(tstate);
765 PyThreadState_Swap(save_tstate);
766 PyThreadState_Delete(tstate);
767 PyInterpreterState_Delete(interp);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000768
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000769 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000770}
771
772/* Delete an interpreter and its last thread. This requires that the
773 given thread state is current, that the thread has no remaining
774 frames, and that it is its interpreter's only remaining thread.
775 It is a fatal error to violate these constraints.
776
777 (Py_Finalize() doesn't have these constraints -- it zaps
778 everything, regardless.)
779
780 Locking: as above.
781
782*/
783
784void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000785Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000786{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000787 PyInterpreterState *interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000788
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000789 if (tstate != PyThreadState_GET())
790 Py_FatalError("Py_EndInterpreter: thread is not current");
791 if (tstate->frame != NULL)
792 Py_FatalError("Py_EndInterpreter: thread still has a frame");
Antoine Pitrou7eaf3f72013-08-25 19:48:18 +0200793
794 wait_for_thread_shutdown();
795
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000796 if (tstate != interp->tstate_head || tstate->next != NULL)
797 Py_FatalError("Py_EndInterpreter: not the last thread");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000798
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000799 PyImport_Cleanup();
800 PyInterpreterState_Clear(interp);
801 PyThreadState_Swap(NULL);
802 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000803}
804
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200805#ifdef MS_WINDOWS
Martin v. Löwis790465f2008-04-05 20:41:37 +0000806static wchar_t *progname = L"python";
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200807#else
808static wchar_t *progname = L"python3";
809#endif
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000810
811void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000812Py_SetProgramName(wchar_t *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000813{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000814 if (pn && *pn)
815 progname = pn;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000816}
817
Martin v. Löwis790465f2008-04-05 20:41:37 +0000818wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000819Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000820{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000821 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000822}
823
Martin v. Löwis790465f2008-04-05 20:41:37 +0000824static wchar_t *default_home = NULL;
Victor Stinner55a12202013-08-28 01:47:46 +0200825static wchar_t env_home[MAXPATHLEN+1];
Guido van Rossuma61691e1998-02-06 22:27:24 +0000826
827void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000828Py_SetPythonHome(wchar_t *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000829{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000830 default_home = home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000831}
832
Martin v. Löwis790465f2008-04-05 20:41:37 +0000833wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000834Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000835{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000836 wchar_t *home = default_home;
837 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
838 char* chome = Py_GETENV("PYTHONHOME");
839 if (chome) {
840 size_t r = mbstowcs(env_home, chome, PATH_MAX+1);
841 if (r != (size_t)-1 && r <= PATH_MAX)
842 home = env_home;
843 }
Martin v. Löwis790465f2008-04-05 20:41:37 +0000844
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000845 }
846 return home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000847}
848
Guido van Rossum6135a871995-01-09 17:53:26 +0000849/* Create __main__ module */
850
851static void
Nick Coghlan85e729e2012-07-15 18:09:52 +1000852initmain(PyInterpreterState *interp)
Guido van Rossum6135a871995-01-09 17:53:26 +0000853{
Brett Cannon13853a62013-05-04 17:37:09 -0400854 PyObject *m, *d, *loader;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000855 m = PyImport_AddModule("__main__");
856 if (m == NULL)
857 Py_FatalError("can't create __main__ module");
858 d = PyModule_GetDict(m);
859 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
860 PyObject *bimod = PyImport_ImportModule("builtins");
Nick Coghlan85e729e2012-07-15 18:09:52 +1000861 if (bimod == NULL) {
862 Py_FatalError("Failed to retrieve builtins module");
863 }
864 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
865 Py_FatalError("Failed to initialize __main__.__builtins__");
866 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000867 Py_DECREF(bimod);
868 }
Nick Coghlan85e729e2012-07-15 18:09:52 +1000869 /* Main is a little special - imp.is_builtin("__main__") will return
870 * False, but BuiltinImporter is still the most appropriate initial
871 * setting for its __loader__ attribute. A more suitable value will
872 * be set if __main__ gets further initialized later in the startup
873 * process.
874 */
Brett Cannon13853a62013-05-04 17:37:09 -0400875 loader = PyDict_GetItemString(d, "__loader__");
Brett Cannon4c14b5d2013-05-04 13:56:58 -0400876 if (loader == NULL || loader == Py_None) {
Nick Coghlan85e729e2012-07-15 18:09:52 +1000877 PyObject *loader = PyObject_GetAttrString(interp->importlib,
878 "BuiltinImporter");
879 if (loader == NULL) {
880 Py_FatalError("Failed to retrieve BuiltinImporter");
881 }
882 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
883 Py_FatalError("Failed to initialize __main__.__loader__");
884 }
885 Py_DECREF(loader);
886 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000887}
888
Victor Stinner793b5312011-04-27 00:24:21 +0200889static int
890initfsencoding(PyInterpreterState *interp)
Victor Stinnerb744ba12010-05-15 12:27:16 +0000891{
892 PyObject *codec;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000893
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200894 if (Py_FileSystemDefaultEncoding == NULL)
895 {
896 Py_FileSystemDefaultEncoding = get_locale_encoding();
897 if (Py_FileSystemDefaultEncoding == NULL)
Victor Stinnere4743092010-10-19 00:05:51 +0000898 Py_FatalError("Py_Initialize: Unable to get the locale encoding");
Victor Stinnerb744ba12010-05-15 12:27:16 +0000899
Victor Stinnere4743092010-10-19 00:05:51 +0000900 Py_HasFileSystemDefaultEncoding = 0;
Victor Stinner793b5312011-04-27 00:24:21 +0200901 interp->fscodec_initialized = 1;
902 return 0;
Victor Stinner7f84ab52010-06-11 00:36:33 +0000903 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000904
905 /* the encoding is mbcs, utf-8 or ascii */
906 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
907 if (!codec) {
908 /* Such error can only occurs in critical situations: no more
909 * memory, import a module of the standard library failed,
910 * etc. */
Victor Stinner793b5312011-04-27 00:24:21 +0200911 return -1;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000912 }
Victor Stinner793b5312011-04-27 00:24:21 +0200913 Py_DECREF(codec);
914 interp->fscodec_initialized = 1;
915 return 0;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000916}
917
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000918/* Import the site module (not into __main__ though) */
919
920static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000921initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000922{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000923 PyObject *m;
924 m = PyImport_ImportModule("site");
925 if (m == NULL) {
Victor Stinner62ce62a2013-07-22 22:53:28 +0200926 fprintf(stderr, "Failed to import the site module\n");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000927 PyErr_Print();
928 Py_Finalize();
929 exit(1);
930 }
931 else {
932 Py_DECREF(m);
933 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000934}
935
Antoine Pitrou05608432009-01-09 18:53:14 +0000936static PyObject*
937create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000938 int fd, int write_mode, char* name,
939 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +0000940{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000941 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
942 const char* mode;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +0000943 const char* newline;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000944 PyObject *line_buffering;
945 int buffering, isatty;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200946 _Py_IDENTIFIER(open);
947 _Py_IDENTIFIER(isatty);
948 _Py_IDENTIFIER(TextIOWrapper);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200949 _Py_IDENTIFIER(name);
950 _Py_IDENTIFIER(mode);
Antoine Pitrou05608432009-01-09 18:53:14 +0000951
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000952 /* stdin is always opened in buffered mode, first because it shouldn't
953 make a difference in common use cases, second because TextIOWrapper
954 depends on the presence of a read1() method which only exists on
955 buffered streams.
956 */
957 if (Py_UnbufferedStdioFlag && write_mode)
958 buffering = 0;
959 else
960 buffering = -1;
961 if (write_mode)
962 mode = "wb";
963 else
964 mode = "rb";
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200965 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
966 fd, mode, buffering,
967 Py_None, Py_None, Py_None, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000968 if (buf == NULL)
969 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000970
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000971 if (buffering) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200972 _Py_IDENTIFIER(raw);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200973 raw = _PyObject_GetAttrId(buf, &PyId_raw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000974 if (raw == NULL)
975 goto error;
976 }
977 else {
978 raw = buf;
979 Py_INCREF(raw);
980 }
Antoine Pitrou05608432009-01-09 18:53:14 +0000981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000982 text = PyUnicode_FromString(name);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200983 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000984 goto error;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200985 res = _PyObject_CallMethodId(raw, &PyId_isatty, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000986 if (res == NULL)
987 goto error;
988 isatty = PyObject_IsTrue(res);
989 Py_DECREF(res);
990 if (isatty == -1)
991 goto error;
992 if (isatty || Py_UnbufferedStdioFlag)
993 line_buffering = Py_True;
994 else
995 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +0000996
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000997 Py_CLEAR(raw);
998 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +0000999
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001000#ifdef MS_WINDOWS
Victor Stinner7b3f0fa2012-08-04 01:28:00 +02001001 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1002 newlines to "\n".
1003 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1004 newline = NULL;
1005#else
1006 /* sys.stdin: split lines at "\n".
1007 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1008 newline = "\n";
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001009#endif
1010
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001011 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssO",
1012 buf, encoding, errors,
1013 newline, line_buffering);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001014 Py_CLEAR(buf);
1015 if (stream == NULL)
1016 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +00001017
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001018 if (write_mode)
1019 mode = "w";
1020 else
1021 mode = "r";
1022 text = PyUnicode_FromString(mode);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001023 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001024 goto error;
1025 Py_CLEAR(text);
1026 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +00001027
1028error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001029 Py_XDECREF(buf);
1030 Py_XDECREF(stream);
1031 Py_XDECREF(text);
1032 Py_XDECREF(raw);
1033 return NULL;
Antoine Pitrou05608432009-01-09 18:53:14 +00001034}
1035
Antoine Pitrou11942a52011-11-28 19:08:36 +01001036static int
1037is_valid_fd(int fd)
1038{
1039 int dummy_fd;
1040 if (fd < 0 || !_PyVerify_fd(fd))
1041 return 0;
1042 dummy_fd = dup(fd);
1043 if (dummy_fd < 0)
1044 return 0;
1045 close(dummy_fd);
1046 return 1;
1047}
1048
Georg Brandl1a3284e2007-12-02 09:40:06 +00001049/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001050static int
1051initstdio(void)
1052{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001053 PyObject *iomod = NULL, *wrapper;
1054 PyObject *bimod = NULL;
1055 PyObject *m;
1056 PyObject *std = NULL;
1057 int status = 0, fd;
1058 PyObject * encoding_attr;
Serhiy Storchakabf28d2d2013-09-13 11:46:24 +03001059 char *pythonioencoding = NULL, *encoding, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001060
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001061 /* Hack to avoid a nasty recursion issue when Python is invoked
1062 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1063 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1064 goto error;
1065 }
1066 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001067
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001068 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1069 goto error;
1070 }
1071 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001072
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001073 if (!(bimod = PyImport_ImportModule("builtins"))) {
1074 goto error;
1075 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001076
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001077 if (!(iomod = PyImport_ImportModule("io"))) {
1078 goto error;
1079 }
1080 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1081 goto error;
1082 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001083
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001084 /* Set builtins.open */
1085 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001086 Py_DECREF(wrapper);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001087 goto error;
1088 }
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001089 Py_DECREF(wrapper);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001090
Serhiy Storchakabf28d2d2013-09-13 11:46:24 +03001091 pythonioencoding = Py_GETENV("PYTHONIOENCODING");
1092 encoding = errors = NULL;
1093 if (pythonioencoding) {
1094 pythonioencoding = _PyMem_Strdup(pythonioencoding);
1095 if (pythonioencoding == NULL) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001096 PyErr_NoMemory();
1097 goto error;
1098 }
Serhiy Storchakabf28d2d2013-09-13 11:46:24 +03001099 errors = strchr(pythonioencoding, ':');
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001100 if (errors) {
1101 *errors = '\0';
1102 errors++;
Serhiy Storchakabf28d2d2013-09-13 11:46:24 +03001103 if (!*errors)
1104 errors = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001105 }
Serhiy Storchakabf28d2d2013-09-13 11:46:24 +03001106 if (*pythonioencoding)
1107 encoding = pythonioencoding;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001108 }
Martin v. Löwis0f599892008-06-02 11:13:03 +00001109
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001110 /* Set sys.stdin */
1111 fd = fileno(stdin);
1112 /* Under some conditions stdin, stdout and stderr may not be connected
1113 * and fileno() may point to an invalid file descriptor. For example
1114 * GUI apps don't have valid standard streams by default.
1115 */
Antoine Pitrou11942a52011-11-28 19:08:36 +01001116 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001117 std = Py_None;
1118 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001119 }
1120 else {
1121 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1122 if (std == NULL)
1123 goto error;
1124 } /* if (fd < 0) */
1125 PySys_SetObject("__stdin__", std);
1126 PySys_SetObject("stdin", std);
1127 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001128
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001129 /* Set sys.stdout */
1130 fd = fileno(stdout);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001131 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001132 std = Py_None;
1133 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001134 }
1135 else {
1136 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1137 if (std == NULL)
1138 goto error;
1139 } /* if (fd < 0) */
1140 PySys_SetObject("__stdout__", std);
1141 PySys_SetObject("stdout", std);
1142 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001143
Guido van Rossum98297ee2007-11-06 21:34:58 +00001144#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001145 /* Set sys.stderr, replaces the preliminary stderr */
1146 fd = fileno(stderr);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001147 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001148 std = Py_None;
1149 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001150 }
1151 else {
1152 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1153 if (std == NULL)
1154 goto error;
1155 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +00001156
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001157 /* Same as hack above, pre-import stderr's codec to avoid recursion
1158 when import.c tries to write to stderr in verbose mode. */
1159 encoding_attr = PyObject_GetAttrString(std, "encoding");
1160 if (encoding_attr != NULL) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001161 const char * std_encoding;
1162 std_encoding = _PyUnicode_AsString(encoding_attr);
1163 if (std_encoding != NULL) {
1164 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
Antoine Pitrou2fabfac2012-01-18 15:14:46 +01001165 Py_XDECREF(codec_info);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001166 }
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +00001167 Py_DECREF(encoding_attr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001168 }
1169 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +00001170
Victor Stinnerba308832013-07-22 23:55:19 +02001171 if (PySys_SetObject("__stderr__", std) < 0) {
1172 Py_DECREF(std);
1173 goto error;
1174 }
1175 if (PySys_SetObject("stderr", std) < 0) {
1176 Py_DECREF(std);
1177 goto error;
1178 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001179 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001180#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001181
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001182 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001183 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001184 status = -1;
1185 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001186
Serhiy Storchakabf28d2d2013-09-13 11:46:24 +03001187 PyMem_Free(pythonioencoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001188 Py_XDECREF(bimod);
1189 Py_XDECREF(iomod);
1190 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001191}
1192
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001193/* Parse input from a file and execute it */
1194
1195int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001196PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001197 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001198{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001199 if (filename == NULL)
1200 filename = "???";
1201 if (Py_FdIsInteractive(fp, filename)) {
1202 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1203 if (closeit)
1204 fclose(fp);
1205 return err;
1206 }
1207 else
1208 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001209}
1210
1211int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001212PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001213{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001214 PyObject *v;
1215 int ret;
1216 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001217
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001218 if (flags == NULL) {
1219 flags = &local_flags;
1220 local_flags.cf_flags = 0;
1221 }
1222 v = PySys_GetObject("ps1");
1223 if (v == NULL) {
1224 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
1225 Py_XDECREF(v);
1226 }
1227 v = PySys_GetObject("ps2");
1228 if (v == NULL) {
1229 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
1230 Py_XDECREF(v);
1231 }
1232 for (;;) {
1233 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
1234 PRINT_TOTAL_REFS();
1235 if (ret == E_EOF)
1236 return 0;
1237 /*
1238 if (ret == E_NOMEM)
1239 return -1;
1240 */
1241 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001242}
1243
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001244/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001245static int PARSER_FLAGS(PyCompilerFlags *flags)
1246{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001247 int parser_flags = 0;
1248 if (!flags)
1249 return 0;
1250 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1251 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1252 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1253 parser_flags |= PyPARSE_IGNORE_COOKIE;
1254 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1255 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1256 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001257}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001258
Thomas Wouters89f507f2006-12-13 04:49:30 +00001259#if 0
1260/* Keep an example of flags with future keyword support. */
1261#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001262 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1263 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1264 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1265 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001266#endif
1267
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001268int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001269PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001270{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001271 PyObject *m, *d, *v, *w, *oenc = NULL;
1272 mod_ty mod;
1273 PyArena *arena;
1274 char *ps1 = "", *ps2 = "", *enc = NULL;
1275 int errcode = 0;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001276 _Py_IDENTIFIER(encoding);
Tim Petersfe2127d2001-07-16 05:37:24 +00001277
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001278 if (fp == stdin) {
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001279 /* Fetch encoding from sys.stdin if possible. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001280 v = PySys_GetObject("stdin");
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001281 if (v && v != Py_None) {
1282 oenc = _PyObject_GetAttrId(v, &PyId_encoding);
1283 if (oenc)
1284 enc = _PyUnicode_AsString(oenc);
1285 if (!enc)
1286 PyErr_Clear();
1287 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001288 }
1289 v = PySys_GetObject("ps1");
1290 if (v != NULL) {
1291 v = PyObject_Str(v);
1292 if (v == NULL)
1293 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001294 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001295 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001296 if (ps1 == NULL) {
1297 PyErr_Clear();
1298 ps1 = "";
1299 }
1300 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001301 }
1302 w = PySys_GetObject("ps2");
1303 if (w != NULL) {
1304 w = PyObject_Str(w);
1305 if (w == NULL)
1306 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001307 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001308 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001309 if (ps2 == NULL) {
1310 PyErr_Clear();
1311 ps2 = "";
1312 }
1313 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001314 }
1315 arena = PyArena_New();
1316 if (arena == NULL) {
1317 Py_XDECREF(v);
1318 Py_XDECREF(w);
1319 Py_XDECREF(oenc);
1320 return -1;
1321 }
1322 mod = PyParser_ASTFromFile(fp, filename, enc,
1323 Py_single_input, ps1, ps2,
1324 flags, &errcode, arena);
1325 Py_XDECREF(v);
1326 Py_XDECREF(w);
1327 Py_XDECREF(oenc);
1328 if (mod == NULL) {
1329 PyArena_Free(arena);
1330 if (errcode == E_EOF) {
1331 PyErr_Clear();
1332 return E_EOF;
1333 }
1334 PyErr_Print();
1335 return -1;
1336 }
1337 m = PyImport_AddModule("__main__");
1338 if (m == NULL) {
1339 PyArena_Free(arena);
1340 return -1;
1341 }
1342 d = PyModule_GetDict(m);
1343 v = run_mod(mod, filename, d, d, flags, arena);
1344 PyArena_Free(arena);
1345 flush_io();
1346 if (v == NULL) {
1347 PyErr_Print();
1348 return -1;
1349 }
1350 Py_DECREF(v);
1351 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001352}
1353
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001354/* Check whether a file maybe a pyc file: Look at the extension,
1355 the file type, and, if we may close it, at the first few bytes. */
1356
1357static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001358maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001359{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001360 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1361 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001362
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001363 /* Only look into the file if we are allowed to close it, since
1364 it then should also be seekable. */
1365 if (closeit) {
1366 /* Read only two bytes of the magic. If the file was opened in
1367 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1368 be read as they are on disk. */
1369 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1370 unsigned char buf[2];
1371 /* Mess: In case of -x, the stream is NOT at its start now,
1372 and ungetc() was used to push back the first newline,
1373 which makes the current stream position formally undefined,
1374 and a x-platform nightmare.
1375 Unfortunately, we have no direct way to know whether -x
1376 was specified. So we use a terrible hack: if the current
1377 stream position is not 0, we assume -x was specified, and
1378 give up. Bug 132850 on SourceForge spells out the
1379 hopelessness of trying anything else (fseek and ftell
1380 don't work predictably x-platform for text-mode files).
1381 */
1382 int ispyc = 0;
1383 if (ftell(fp) == 0) {
1384 if (fread(buf, 1, 2, fp) == 2 &&
1385 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1386 ispyc = 1;
1387 rewind(fp);
1388 }
1389 return ispyc;
1390 }
1391 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001392}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001393
Antoine Pitrou32d483c2013-07-30 21:01:23 +02001394static int
1395set_main_loader(PyObject *d, const char *filename, const char *loader_name)
Nick Coghlan85e729e2012-07-15 18:09:52 +10001396{
1397 PyInterpreterState *interp;
1398 PyThreadState *tstate;
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001399 PyObject *filename_obj, *loader_type, *loader;
Nick Coghlanb7a58942012-07-15 23:21:08 +10001400 int result = 0;
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001401
1402 filename_obj = PyUnicode_DecodeFSDefault(filename);
1403 if (filename_obj == NULL)
1404 return -1;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001405 /* Get current thread state and interpreter pointer */
1406 tstate = PyThreadState_GET();
1407 interp = tstate->interp;
Nick Coghlan3f94cbf2012-07-15 19:10:39 +10001408 loader_type = PyObject_GetAttrString(interp->importlib, loader_name);
1409 if (loader_type == NULL) {
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001410 Py_DECREF(filename_obj);
Nick Coghlan3f94cbf2012-07-15 19:10:39 +10001411 return -1;
1412 }
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001413 loader = PyObject_CallFunction(loader_type, "sN", "__main__", filename_obj);
Nick Coghlanb7a58942012-07-15 23:21:08 +10001414 Py_DECREF(loader_type);
1415 if (loader == NULL) {
Nick Coghlan85e729e2012-07-15 18:09:52 +10001416 return -1;
1417 }
Nick Coghlanb7a58942012-07-15 23:21:08 +10001418 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
1419 result = -1;
1420 }
Nick Coghlan85e729e2012-07-15 18:09:52 +10001421 Py_DECREF(loader);
Nick Coghlanb7a58942012-07-15 23:21:08 +10001422 return result;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001423}
1424
1425int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001426PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001427 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001428{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001429 PyObject *m, *d, *v;
1430 const char *ext;
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001431 int set_file_name = 0, ret = -1;
Victor Stinner0fcab4a2011-01-04 12:59:15 +00001432 size_t len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001433
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001434 m = PyImport_AddModule("__main__");
1435 if (m == NULL)
1436 return -1;
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001437 Py_INCREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001438 d = PyModule_GetDict(m);
1439 if (PyDict_GetItemString(d, "__file__") == NULL) {
1440 PyObject *f;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001441 f = PyUnicode_DecodeFSDefault(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001442 if (f == NULL)
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001443 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001444 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1445 Py_DECREF(f);
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001446 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001447 }
Barry Warsaw916048d2011-09-20 14:45:44 -04001448 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0) {
1449 Py_DECREF(f);
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001450 goto done;
Barry Warsaw916048d2011-09-20 14:45:44 -04001451 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001452 set_file_name = 1;
1453 Py_DECREF(f);
1454 }
1455 len = strlen(filename);
1456 ext = filename + len - (len > 4 ? 4 : 0);
1457 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Christian Heimes04ac4c12012-09-11 15:47:28 +02001458 FILE *pyc_fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001459 /* Try to run a pyc file. First, re-open in binary */
1460 if (closeit)
1461 fclose(fp);
Victor Stinnerdaf45552013-08-28 00:53:59 +02001462 if ((pyc_fp = _Py_fopen(filename, "rb")) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001463 fprintf(stderr, "python: Can't reopen .pyc file\n");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001464 goto done;
1465 }
1466 /* Turn on optimization if a .pyo file is given */
1467 if (strcmp(ext, ".pyo") == 0)
1468 Py_OptimizeFlag = 1;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001469
1470 if (set_main_loader(d, filename, "SourcelessFileLoader") < 0) {
1471 fprintf(stderr, "python: failed to set __main__.__loader__\n");
1472 ret = -1;
Christian Heimes04ac4c12012-09-11 15:47:28 +02001473 fclose(pyc_fp);
Nick Coghlan85e729e2012-07-15 18:09:52 +10001474 goto done;
1475 }
Christian Heimes04ac4c12012-09-11 15:47:28 +02001476 v = run_pyc_file(pyc_fp, filename, d, d, flags);
1477 fclose(pyc_fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001478 } else {
Nick Coghlan85e729e2012-07-15 18:09:52 +10001479 /* When running from stdin, leave __main__.__loader__ alone */
1480 if (strcmp(filename, "<stdin>") != 0 &&
1481 set_main_loader(d, filename, "SourceFileLoader") < 0) {
1482 fprintf(stderr, "python: failed to set __main__.__loader__\n");
1483 ret = -1;
1484 goto done;
1485 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001486 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1487 closeit, flags);
1488 }
1489 flush_io();
1490 if (v == NULL) {
1491 PyErr_Print();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001492 goto done;
1493 }
1494 Py_DECREF(v);
1495 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001496 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001497 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1498 PyErr_Clear();
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001499 Py_DECREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001500 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001501}
1502
1503int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001504PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001505{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001506 PyObject *m, *d, *v;
1507 m = PyImport_AddModule("__main__");
1508 if (m == NULL)
1509 return -1;
1510 d = PyModule_GetDict(m);
1511 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1512 if (v == NULL) {
1513 PyErr_Print();
1514 return -1;
1515 }
1516 Py_DECREF(v);
1517 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001518}
1519
Barry Warsaw035574d1997-08-29 22:07:17 +00001520static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001521parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001522 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001523{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001524 long hold;
1525 PyObject *v;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001526 _Py_IDENTIFIER(msg);
1527 _Py_IDENTIFIER(filename);
1528 _Py_IDENTIFIER(lineno);
1529 _Py_IDENTIFIER(offset);
1530 _Py_IDENTIFIER(text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001531
Benjamin Peterson80d50422012-04-03 00:30:38 -04001532 *message = NULL;
1533
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001534 /* new style errors. `err' is an instance */
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001535 *message = _PyObject_GetAttrId(err, &PyId_msg);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001536 if (!*message)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001537 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001538
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001539 v = _PyObject_GetAttrId(err, &PyId_filename);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001540 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001541 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001542 if (v == Py_None) {
1543 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001544 *filename = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001545 }
1546 else {
1547 *filename = _PyUnicode_AsString(v);
1548 Py_DECREF(v);
1549 if (!*filename)
1550 goto finally;
1551 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001552
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001553 v = _PyObject_GetAttrId(err, &PyId_lineno);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001554 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001555 goto finally;
1556 hold = PyLong_AsLong(v);
1557 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001558 if (hold < 0 && PyErr_Occurred())
1559 goto finally;
1560 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001561
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001562 v = _PyObject_GetAttrId(err, &PyId_offset);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001563 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001564 goto finally;
1565 if (v == Py_None) {
1566 *offset = -1;
1567 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001568 } else {
1569 hold = PyLong_AsLong(v);
1570 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001571 if (hold < 0 && PyErr_Occurred())
1572 goto finally;
1573 *offset = (int)hold;
1574 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001575
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001576 v = _PyObject_GetAttrId(err, &PyId_text);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001577 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001578 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001579 if (v == Py_None) {
1580 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001581 *text = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001582 }
1583 else {
1584 *text = _PyUnicode_AsString(v);
1585 Py_DECREF(v);
1586 if (!*text)
1587 goto finally;
1588 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001589 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001590
1591finally:
Benjamin Peterson80d50422012-04-03 00:30:38 -04001592 Py_XDECREF(*message);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001593 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001594}
1595
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001596void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001597PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001598{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001599 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001600}
1601
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001602static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001603print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001604{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001605 char *nl;
1606 if (offset >= 0) {
Benjamin Petersona95e9772010-10-29 03:28:14 +00001607 if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n')
1608 offset--;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001609 for (;;) {
1610 nl = strchr(text, '\n');
1611 if (nl == NULL || nl-text >= offset)
1612 break;
1613 offset -= (int)(nl+1-text);
1614 text = nl+1;
1615 }
1616 while (*text == ' ' || *text == '\t') {
1617 text++;
1618 offset--;
1619 }
1620 }
1621 PyFile_WriteString(" ", f);
1622 PyFile_WriteString(text, f);
1623 if (*text == '\0' || text[strlen(text)-1] != '\n')
1624 PyFile_WriteString("\n", f);
1625 if (offset == -1)
1626 return;
1627 PyFile_WriteString(" ", f);
Benjamin Petersona95e9772010-10-29 03:28:14 +00001628 while (--offset > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001629 PyFile_WriteString(" ", f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001630 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001631}
1632
Guido van Rossum66e8e862001-03-23 17:54:43 +00001633static void
1634handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001635{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001636 PyObject *exception, *value, *tb;
1637 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001638
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001639 if (Py_InspectFlag)
1640 /* Don't exit if -i flag was given. This flag is set to 0
1641 * when entering interactive mode for inspecting. */
1642 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001643
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001644 PyErr_Fetch(&exception, &value, &tb);
1645 fflush(stdout);
1646 if (value == NULL || value == Py_None)
1647 goto done;
1648 if (PyExceptionInstance_Check(value)) {
1649 /* The error code should be in the `code' attribute. */
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001650 _Py_IDENTIFIER(code);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001651 PyObject *code = _PyObject_GetAttrId(value, &PyId_code);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001652 if (code) {
1653 Py_DECREF(value);
1654 value = code;
1655 if (value == Py_None)
1656 goto done;
1657 }
1658 /* If we failed to dig out the 'code' attribute,
1659 just let the else clause below print the error. */
1660 }
1661 if (PyLong_Check(value))
1662 exitcode = (int)PyLong_AsLong(value);
1663 else {
Victor Stinnere9fb3192010-05-17 08:58:51 +00001664 PyObject *sys_stderr = PySys_GetObject("stderr");
Victor Stinner7126dbc2010-05-21 23:45:42 +00001665 if (sys_stderr != NULL && sys_stderr != Py_None) {
1666 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1667 } else {
1668 PyObject_Print(value, stderr, Py_PRINT_RAW);
1669 fflush(stderr);
1670 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001671 PySys_WriteStderr("\n");
1672 exitcode = 1;
1673 }
Tim Peterscf615b52003-04-19 18:47:02 +00001674 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001675 /* Restore and clear the exception info, in order to properly decref
1676 * the exception, value, and traceback. If we just exit instead,
1677 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1678 * some finalizers from running.
1679 */
1680 PyErr_Restore(exception, value, tb);
1681 PyErr_Clear();
1682 Py_Exit(exitcode);
1683 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001684}
1685
1686void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001687PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001688{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001689 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001690
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001691 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1692 handle_system_exit();
1693 }
1694 PyErr_Fetch(&exception, &v, &tb);
1695 if (exception == NULL)
1696 return;
1697 PyErr_NormalizeException(&exception, &v, &tb);
1698 if (tb == NULL) {
1699 tb = Py_None;
1700 Py_INCREF(tb);
1701 }
1702 PyException_SetTraceback(v, tb);
1703 if (exception == NULL)
1704 return;
1705 /* Now we know v != NULL too */
1706 if (set_sys_last_vars) {
1707 PySys_SetObject("last_type", exception);
1708 PySys_SetObject("last_value", v);
1709 PySys_SetObject("last_traceback", tb);
1710 }
1711 hook = PySys_GetObject("excepthook");
1712 if (hook) {
1713 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1714 PyObject *result = PyEval_CallObject(hook, args);
1715 if (result == NULL) {
1716 PyObject *exception2, *v2, *tb2;
1717 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1718 handle_system_exit();
1719 }
1720 PyErr_Fetch(&exception2, &v2, &tb2);
1721 PyErr_NormalizeException(&exception2, &v2, &tb2);
1722 /* It should not be possible for exception2 or v2
1723 to be NULL. However PyErr_Display() can't
1724 tolerate NULLs, so just be safe. */
1725 if (exception2 == NULL) {
1726 exception2 = Py_None;
1727 Py_INCREF(exception2);
1728 }
1729 if (v2 == NULL) {
1730 v2 = Py_None;
1731 Py_INCREF(v2);
1732 }
1733 fflush(stdout);
1734 PySys_WriteStderr("Error in sys.excepthook:\n");
1735 PyErr_Display(exception2, v2, tb2);
1736 PySys_WriteStderr("\nOriginal exception was:\n");
1737 PyErr_Display(exception, v, tb);
1738 Py_DECREF(exception2);
1739 Py_DECREF(v2);
1740 Py_XDECREF(tb2);
1741 }
1742 Py_XDECREF(result);
1743 Py_XDECREF(args);
1744 } else {
1745 PySys_WriteStderr("sys.excepthook is missing\n");
1746 PyErr_Display(exception, v, tb);
1747 }
1748 Py_XDECREF(exception);
1749 Py_XDECREF(v);
1750 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001751}
1752
Benjamin Petersone6528212008-07-15 15:32:09 +00001753static void
1754print_exception(PyObject *f, PyObject *value)
1755{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001756 int err = 0;
1757 PyObject *type, *tb;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001758 _Py_IDENTIFIER(print_file_and_line);
Benjamin Petersone6528212008-07-15 15:32:09 +00001759
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001760 if (!PyExceptionInstance_Check(value)) {
1761 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1762 PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1763 PyFile_WriteString(" found\n", f);
1764 return;
1765 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001766
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001767 Py_INCREF(value);
1768 fflush(stdout);
1769 type = (PyObject *) Py_TYPE(value);
1770 tb = PyException_GetTraceback(value);
1771 if (tb && tb != Py_None)
1772 err = PyTraceBack_Print(tb, f);
1773 if (err == 0 &&
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001774 _PyObject_HasAttrId(value, &PyId_print_file_and_line))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001775 {
1776 PyObject *message;
1777 const char *filename, *text;
1778 int lineno, offset;
1779 if (!parse_syntax_error(value, &message, &filename,
1780 &lineno, &offset, &text))
1781 PyErr_Clear();
1782 else {
1783 char buf[10];
1784 PyFile_WriteString(" File \"", f);
1785 if (filename == NULL)
1786 PyFile_WriteString("<string>", f);
1787 else
1788 PyFile_WriteString(filename, f);
1789 PyFile_WriteString("\", line ", f);
1790 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
1791 PyFile_WriteString(buf, f);
1792 PyFile_WriteString("\n", f);
1793 if (text != NULL)
1794 print_error_text(f, offset, text);
1795 Py_DECREF(value);
1796 value = message;
1797 /* Can't be bothered to check all those
1798 PyFile_WriteString() calls */
1799 if (PyErr_Occurred())
1800 err = -1;
1801 }
1802 }
1803 if (err) {
1804 /* Don't do anything else */
1805 }
1806 else {
1807 PyObject* moduleName;
1808 char* className;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001809 _Py_IDENTIFIER(__module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001810 assert(PyExceptionClass_Check(type));
1811 className = PyExceptionClass_Name(type);
1812 if (className != NULL) {
1813 char *dot = strrchr(className, '.');
1814 if (dot != NULL)
1815 className = dot+1;
1816 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001817
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001818 moduleName = _PyObject_GetAttrId(type, &PyId___module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001819 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1820 {
Victor Stinner13b21bd2011-05-26 14:25:13 +02001821 Py_XDECREF(moduleName);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001822 err = PyFile_WriteString("<unknown>", f);
1823 }
1824 else {
1825 char* modstr = _PyUnicode_AsString(moduleName);
1826 if (modstr && strcmp(modstr, "builtins"))
1827 {
1828 err = PyFile_WriteString(modstr, f);
1829 err += PyFile_WriteString(".", f);
1830 }
1831 Py_DECREF(moduleName);
1832 }
1833 if (err == 0) {
1834 if (className == NULL)
1835 err = PyFile_WriteString("<unknown>", f);
1836 else
1837 err = PyFile_WriteString(className, f);
1838 }
1839 }
1840 if (err == 0 && (value != Py_None)) {
1841 PyObject *s = PyObject_Str(value);
1842 /* only print colon if the str() of the
1843 object is not the empty string
1844 */
1845 if (s == NULL)
1846 err = -1;
1847 else if (!PyUnicode_Check(s) ||
Victor Stinnere251d6d2011-11-20 19:20:00 +01001848 PyUnicode_GetLength(s) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001849 err = PyFile_WriteString(": ", f);
1850 if (err == 0)
1851 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1852 Py_XDECREF(s);
1853 }
1854 /* try to write a newline in any case */
1855 err += PyFile_WriteString("\n", f);
1856 Py_XDECREF(tb);
1857 Py_DECREF(value);
1858 /* If an error happened here, don't show it.
1859 XXX This is wrong, but too many callers rely on this behavior. */
1860 if (err != 0)
1861 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001862}
1863
1864static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001865 "\nThe above exception was the direct cause "
1866 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001867
1868static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001869 "\nDuring handling of the above exception, "
1870 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001871
1872static void
1873print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
1874{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001875 int err = 0, res;
1876 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00001877
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001878 if (seen != NULL) {
1879 /* Exception chaining */
1880 if (PySet_Add(seen, value) == -1)
1881 PyErr_Clear();
1882 else if (PyExceptionInstance_Check(value)) {
1883 cause = PyException_GetCause(value);
1884 context = PyException_GetContext(value);
Benjamin Petersond5a1c442012-05-14 22:09:31 -07001885 if (cause) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001886 res = PySet_Contains(seen, cause);
1887 if (res == -1)
1888 PyErr_Clear();
1889 if (res == 0) {
1890 print_exception_recursive(
1891 f, cause, seen);
1892 err |= PyFile_WriteString(
1893 cause_message, f);
1894 }
1895 }
Benjamin Petersond5a1c442012-05-14 22:09:31 -07001896 else if (context &&
1897 !((PyBaseExceptionObject *)value)->suppress_context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001898 res = PySet_Contains(seen, context);
1899 if (res == -1)
1900 PyErr_Clear();
1901 if (res == 0) {
1902 print_exception_recursive(
1903 f, context, seen);
1904 err |= PyFile_WriteString(
1905 context_message, f);
1906 }
1907 }
1908 Py_XDECREF(context);
1909 Py_XDECREF(cause);
1910 }
1911 }
1912 print_exception(f, value);
1913 if (err != 0)
1914 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001915}
1916
Thomas Wouters477c8d52006-05-27 19:21:47 +00001917void
1918PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001919{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001920 PyObject *seen;
1921 PyObject *f = PySys_GetObject("stderr");
1922 if (f == Py_None) {
1923 /* pass */
1924 }
1925 else if (f == NULL) {
1926 _PyObject_Dump(value);
1927 fprintf(stderr, "lost sys.stderr\n");
1928 }
1929 else {
1930 /* We choose to ignore seen being possibly NULL, and report
1931 at least the main exception (it could be a MemoryError).
1932 */
1933 seen = PySet_New(NULL);
1934 if (seen == NULL)
1935 PyErr_Clear();
1936 print_exception_recursive(f, value, seen);
1937 Py_XDECREF(seen);
1938 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001939}
1940
Guido van Rossum82598051997-03-05 00:20:32 +00001941PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001942PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001943 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001944{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001945 PyObject *ret = NULL;
1946 mod_ty mod;
1947 PyArena *arena = PyArena_New();
1948 if (arena == NULL)
1949 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001950
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001951 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
1952 if (mod != NULL)
1953 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
1954 PyArena_Free(arena);
1955 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001956}
1957
1958PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001959PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001960 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001961{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001962 PyObject *ret;
1963 mod_ty mod;
1964 PyArena *arena = PyArena_New();
1965 if (arena == NULL)
1966 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001967
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001968 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
1969 flags, NULL, arena);
1970 if (closeit)
1971 fclose(fp);
1972 if (mod == NULL) {
1973 PyArena_Free(arena);
1974 return NULL;
1975 }
1976 ret = run_mod(mod, filename, globals, locals, flags, arena);
1977 PyArena_Free(arena);
1978 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001979}
1980
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001981static void
1982flush_io(void)
1983{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001984 PyObject *f, *r;
1985 PyObject *type, *value, *traceback;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001986 _Py_IDENTIFIER(flush);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001987
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001988 /* Save the current exception */
1989 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001990
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001991 f = PySys_GetObject("stderr");
1992 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001993 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001994 if (r)
1995 Py_DECREF(r);
1996 else
1997 PyErr_Clear();
1998 }
1999 f = PySys_GetObject("stdout");
2000 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002001 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002002 if (r)
2003 Py_DECREF(r);
2004 else
2005 PyErr_Clear();
2006 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00002007
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002008 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00002009}
2010
Guido van Rossum82598051997-03-05 00:20:32 +00002011static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002012run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002013 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002014{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002015 PyCodeObject *co;
2016 PyObject *v;
2017 co = PyAST_Compile(mod, filename, flags, arena);
2018 if (co == NULL)
2019 return NULL;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002020 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002021 Py_DECREF(co);
2022 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002023}
2024
Guido van Rossum82598051997-03-05 00:20:32 +00002025static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002026run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002027 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00002028{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002029 PyCodeObject *co;
2030 PyObject *v;
2031 long magic;
2032 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00002033
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002034 magic = PyMarshal_ReadLongFromFile(fp);
2035 if (magic != PyImport_GetMagicNumber()) {
2036 PyErr_SetString(PyExc_RuntimeError,
2037 "Bad magic number in .pyc file");
2038 return NULL;
2039 }
Antoine Pitrou5136ac02012-01-13 18:52:16 +01002040 /* Skip mtime and size */
2041 (void) PyMarshal_ReadLongFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002042 (void) PyMarshal_ReadLongFromFile(fp);
2043 v = PyMarshal_ReadLastObjectFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002044 if (v == NULL || !PyCode_Check(v)) {
2045 Py_XDECREF(v);
2046 PyErr_SetString(PyExc_RuntimeError,
2047 "Bad code object in .pyc file");
2048 return NULL;
2049 }
2050 co = (PyCodeObject *)v;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002051 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002052 if (v && flags)
2053 flags->cf_flags |= (co->co_flags & PyCF_MASK);
2054 Py_DECREF(co);
2055 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00002056}
2057
Guido van Rossum82598051997-03-05 00:20:32 +00002058PyObject *
Victor Stinner14e461d2013-08-26 22:28:21 +02002059Py_CompileStringObject(const char *str, PyObject *filename, int start,
2060 PyCompilerFlags *flags, int optimize)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00002061{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002062 PyCodeObject *co;
2063 mod_ty mod;
2064 PyArena *arena = PyArena_New();
2065 if (arena == NULL)
2066 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002067
Victor Stinner14e461d2013-08-26 22:28:21 +02002068 mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002069 if (mod == NULL) {
2070 PyArena_Free(arena);
2071 return NULL;
2072 }
2073 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
2074 PyObject *result = PyAST_mod2obj(mod);
2075 PyArena_Free(arena);
2076 return result;
2077 }
Victor Stinner14e461d2013-08-26 22:28:21 +02002078 co = PyAST_CompileObject(mod, filename, flags, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002079 PyArena_Free(arena);
2080 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00002081}
2082
Victor Stinner14e461d2013-08-26 22:28:21 +02002083PyObject *
2084Py_CompileStringExFlags(const char *str, const char *filename_str, int start,
2085 PyCompilerFlags *flags, int optimize)
2086{
2087 PyObject *filename, *co;
2088 filename = PyUnicode_DecodeFSDefault(filename_str);
2089 if (filename == NULL)
2090 return NULL;
2091 co = Py_CompileStringObject(str, filename, start, flags, optimize);
2092 Py_DECREF(filename);
2093 return co;
2094}
2095
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002096/* For use in Py_LIMITED_API */
2097#undef Py_CompileString
2098PyObject *
2099PyCompileString(const char *str, const char *filename, int start)
2100{
2101 return Py_CompileStringFlags(str, filename, start, NULL);
2102}
2103
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002104struct symtable *
Victor Stinner14e461d2013-08-26 22:28:21 +02002105Py_SymtableStringObject(const char *str, PyObject *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002106{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002107 struct symtable *st;
2108 mod_ty mod;
2109 PyCompilerFlags flags;
Victor Stinner14e461d2013-08-26 22:28:21 +02002110 PyArena *arena;
2111
2112 arena = PyArena_New();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002113 if (arena == NULL)
2114 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002115
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002116 flags.cf_flags = 0;
Victor Stinner14e461d2013-08-26 22:28:21 +02002117 mod = PyParser_ASTFromStringObject(str, filename, start, &flags, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002118 if (mod == NULL) {
2119 PyArena_Free(arena);
2120 return NULL;
2121 }
Victor Stinner14e461d2013-08-26 22:28:21 +02002122 st = PySymtable_BuildObject(mod, filename, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002123 PyArena_Free(arena);
2124 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002125}
2126
Victor Stinner14e461d2013-08-26 22:28:21 +02002127struct symtable *
2128Py_SymtableString(const char *str, const char *filename_str, int start)
2129{
2130 PyObject *filename;
2131 struct symtable *st;
2132
2133 filename = PyUnicode_DecodeFSDefault(filename_str);
2134 if (filename == NULL)
2135 return NULL;
2136 st = Py_SymtableStringObject(str, filename, start);
2137 Py_DECREF(filename);
2138 return st;
2139}
2140
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002141/* Preferred access to parser is through AST. */
2142mod_ty
Victor Stinner14e461d2013-08-26 22:28:21 +02002143PyParser_ASTFromStringObject(const char *s, PyObject *filename, int start,
2144 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002145{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002146 mod_ty mod;
2147 PyCompilerFlags localflags;
2148 perrdetail err;
2149 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002150
Victor Stinner14e461d2013-08-26 22:28:21 +02002151 node *n = PyParser_ParseStringObject(s, filename,
2152 &_PyParser_Grammar, start, &err,
2153 &iflags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002154 if (flags == NULL) {
2155 localflags.cf_flags = 0;
2156 flags = &localflags;
2157 }
2158 if (n) {
2159 flags->cf_flags |= iflags & PyCF_MASK;
Victor Stinner14e461d2013-08-26 22:28:21 +02002160 mod = PyAST_FromNodeObject(n, flags, filename, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002161 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002162 }
2163 else {
2164 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002165 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002166 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002167 err_free(&err);
2168 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002169}
2170
2171mod_ty
Victor Stinner14e461d2013-08-26 22:28:21 +02002172PyParser_ASTFromString(const char *s, const char *filename_str, int start,
2173 PyCompilerFlags *flags, PyArena *arena)
2174{
2175 PyObject *filename;
2176 mod_ty mod;
2177 filename = PyUnicode_DecodeFSDefault(filename_str);
2178 if (filename == NULL)
2179 return NULL;
2180 mod = PyParser_ASTFromStringObject(s, filename, start, flags, arena);
2181 Py_DECREF(filename);
2182 return mod;
2183}
2184
2185mod_ty
2186PyParser_ASTFromFileObject(FILE *fp, PyObject *filename, const char* enc,
2187 int start, char *ps1,
2188 char *ps2, PyCompilerFlags *flags, int *errcode,
2189 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002190{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002191 mod_ty mod;
2192 PyCompilerFlags localflags;
2193 perrdetail err;
2194 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002195
Victor Stinner14e461d2013-08-26 22:28:21 +02002196 node *n = PyParser_ParseFileObject(fp, filename, enc,
2197 &_PyParser_Grammar,
2198 start, ps1, ps2, &err, &iflags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002199 if (flags == NULL) {
2200 localflags.cf_flags = 0;
2201 flags = &localflags;
2202 }
2203 if (n) {
2204 flags->cf_flags |= iflags & PyCF_MASK;
Victor Stinner14e461d2013-08-26 22:28:21 +02002205 mod = PyAST_FromNodeObject(n, flags, filename, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002206 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002207 }
2208 else {
2209 err_input(&err);
2210 if (errcode)
2211 *errcode = err.error;
Victor Stinner7f2fee32011-04-05 00:39:01 +02002212 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002213 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002214 err_free(&err);
2215 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002216}
2217
Victor Stinner14e461d2013-08-26 22:28:21 +02002218mod_ty
2219PyParser_ASTFromFile(FILE *fp, const char *filename_str, const char* enc,
2220 int start, char *ps1,
2221 char *ps2, PyCompilerFlags *flags, int *errcode,
2222 PyArena *arena)
2223{
2224 mod_ty mod;
2225 PyObject *filename;
2226 filename = PyUnicode_DecodeFSDefault(filename_str);
2227 if (filename == NULL)
2228 return NULL;
2229 mod = PyParser_ASTFromFileObject(fp, filename, enc, start, ps1, ps2,
2230 flags, errcode, arena);
2231 Py_DECREF(filename);
2232 return mod;
2233}
2234
Guido van Rossuma110aa61994-08-29 12:50:44 +00002235/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002236
Guido van Rossuma110aa61994-08-29 12:50:44 +00002237node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002238PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002239{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002240 perrdetail err;
2241 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
2242 &_PyParser_Grammar,
2243 start, NULL, NULL, &err, flags);
2244 if (n == NULL)
2245 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002246 err_free(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002247
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002248 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002249}
2250
Guido van Rossuma110aa61994-08-29 12:50:44 +00002251/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002252
Guido van Rossuma110aa61994-08-29 12:50:44 +00002253node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002254PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00002255{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002256 perrdetail err;
2257 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
2258 start, &err, flags);
2259 if (n == NULL)
2260 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002261 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002262 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00002263}
2264
2265node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002266PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002267 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002268{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002269 perrdetail err;
2270 node *n = PyParser_ParseStringFlagsFilename(str, filename,
2271 &_PyParser_Grammar, start, &err, flags);
2272 if (n == NULL)
2273 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002274 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002275 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00002276}
2277
2278node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002279PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002280{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002281 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00002282}
2283
Guido van Rossum66ebd912003-04-17 16:02:26 +00002284/* May want to move a more generalized form of this to parsetok.c or
2285 even parser modules. */
2286
2287void
Victor Stinner7f2fee32011-04-05 00:39:01 +02002288PyParser_ClearError(perrdetail *err)
2289{
2290 err_free(err);
2291}
2292
2293void
Guido van Rossum66ebd912003-04-17 16:02:26 +00002294PyParser_SetError(perrdetail *err)
2295{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002296 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00002297}
2298
Victor Stinner7f2fee32011-04-05 00:39:01 +02002299static void
2300err_free(perrdetail *err)
2301{
2302 Py_CLEAR(err->filename);
2303}
2304
Guido van Rossuma110aa61994-08-29 12:50:44 +00002305/* Set the error appropriate to the given input error code (see errcode.h) */
2306
2307static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002308err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00002309{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002310 PyObject *v, *w, *errtype, *errtext;
2311 PyObject *msg_obj = NULL;
2312 char *msg = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002313
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002314 errtype = PyExc_SyntaxError;
2315 switch (err->error) {
2316 case E_ERROR:
2317 return;
2318 case E_SYNTAX:
2319 errtype = PyExc_IndentationError;
2320 if (err->expected == INDENT)
2321 msg = "expected an indented block";
2322 else if (err->token == INDENT)
2323 msg = "unexpected indent";
2324 else if (err->token == DEDENT)
2325 msg = "unexpected unindent";
2326 else {
2327 errtype = PyExc_SyntaxError;
2328 msg = "invalid syntax";
2329 }
2330 break;
2331 case E_TOKEN:
2332 msg = "invalid token";
2333 break;
2334 case E_EOFS:
2335 msg = "EOF while scanning triple-quoted string literal";
2336 break;
2337 case E_EOLS:
2338 msg = "EOL while scanning string literal";
2339 break;
2340 case E_INTR:
2341 if (!PyErr_Occurred())
2342 PyErr_SetNone(PyExc_KeyboardInterrupt);
2343 goto cleanup;
2344 case E_NOMEM:
2345 PyErr_NoMemory();
2346 goto cleanup;
2347 case E_EOF:
2348 msg = "unexpected EOF while parsing";
2349 break;
2350 case E_TABSPACE:
2351 errtype = PyExc_TabError;
2352 msg = "inconsistent use of tabs and spaces in indentation";
2353 break;
2354 case E_OVERFLOW:
2355 msg = "expression too long";
2356 break;
2357 case E_DEDENT:
2358 errtype = PyExc_IndentationError;
2359 msg = "unindent does not match any outer indentation level";
2360 break;
2361 case E_TOODEEP:
2362 errtype = PyExc_IndentationError;
2363 msg = "too many levels of indentation";
2364 break;
2365 case E_DECODE: {
2366 PyObject *type, *value, *tb;
2367 PyErr_Fetch(&type, &value, &tb);
2368 msg = "unknown decode error";
2369 if (value != NULL)
2370 msg_obj = PyObject_Str(value);
2371 Py_XDECREF(type);
2372 Py_XDECREF(value);
2373 Py_XDECREF(tb);
2374 break;
2375 }
2376 case E_LINECONT:
2377 msg = "unexpected character after line continuation character";
2378 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002379
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002380 case E_IDENTIFIER:
2381 msg = "invalid character in identifier";
2382 break;
Meador Ingefa21bf02012-01-19 01:08:41 -06002383 case E_BADSINGLE:
2384 msg = "multiple statements found while compiling a single statement";
2385 break;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002386 default:
2387 fprintf(stderr, "error=%d\n", err->error);
2388 msg = "unknown parsing error";
2389 break;
2390 }
2391 /* err->text may not be UTF-8 in case of decoding errors.
2392 Explicitly convert to an object. */
2393 if (!err->text) {
2394 errtext = Py_None;
2395 Py_INCREF(Py_None);
2396 } else {
2397 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
2398 "replace");
2399 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002400 v = Py_BuildValue("(OiiN)", err->filename,
2401 err->lineno, err->offset, errtext);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002402 if (v != NULL) {
2403 if (msg_obj)
2404 w = Py_BuildValue("(OO)", msg_obj, v);
2405 else
2406 w = Py_BuildValue("(sO)", msg, v);
2407 } else
2408 w = NULL;
2409 Py_XDECREF(v);
2410 PyErr_SetObject(errtype, w);
2411 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002412cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002413 Py_XDECREF(msg_obj);
2414 if (err->text != NULL) {
2415 PyObject_FREE(err->text);
2416 err->text = NULL;
2417 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002418}
2419
2420/* Print fatal error message and abort */
2421
2422void
Tim Peters7c321a82002-07-09 02:57:01 +00002423Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002424{
Victor Stinner024e37a2011-03-31 01:31:06 +02002425 const int fd = fileno(stderr);
2426 PyThreadState *tstate;
2427
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002428 fprintf(stderr, "Fatal Python error: %s\n", msg);
2429 fflush(stderr); /* it helps in Windows debug build */
2430 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002431 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002432 }
Victor Stinner024e37a2011-03-31 01:31:06 +02002433 else {
2434 tstate = _Py_atomic_load_relaxed(&_PyThreadState_Current);
2435 if (tstate != NULL) {
2436 fputc('\n', stderr);
2437 fflush(stderr);
Victor Stinner7bba62f2011-05-07 12:43:00 +02002438 _Py_DumpTracebackThreads(fd, tstate->interp, tstate);
Victor Stinner024e37a2011-03-31 01:31:06 +02002439 }
Victor Stinnerd727e232011-04-01 12:13:55 +02002440 _PyFaulthandler_Fini();
Victor Stinner024e37a2011-03-31 01:31:06 +02002441 }
2442
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002443#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002444 {
2445 size_t len = strlen(msg);
2446 WCHAR* buffer;
2447 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002448
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002449 /* Convert the message to wchar_t. This uses a simple one-to-one
2450 conversion, assuming that the this error message actually uses ASCII
2451 only. If this ceases to be true, we will have to convert. */
2452 buffer = alloca( (len+1) * (sizeof *buffer));
2453 for( i=0; i<=len; ++i)
2454 buffer[i] = msg[i];
2455 OutputDebugStringW(L"Fatal Python error: ");
2456 OutputDebugStringW(buffer);
2457 OutputDebugStringW(L"\n");
2458 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002459#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002460 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002461#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002462#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002463 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002464}
2465
2466/* Clean up and exit */
2467
Guido van Rossuma110aa61994-08-29 12:50:44 +00002468#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002469#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002470#endif
2471
Collin Winter670e6922007-03-21 02:57:17 +00002472static void (*pyexitfunc)(void) = NULL;
2473/* For the atexit module. */
2474void _Py_PyAtExit(void (*func)(void))
2475{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002476 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002477}
2478
2479static void
2480call_py_exitfuncs(void)
2481{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002482 if (pyexitfunc == NULL)
2483 return;
Collin Winter670e6922007-03-21 02:57:17 +00002484
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002485 (*pyexitfunc)();
2486 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002487}
2488
Antoine Pitrou011bd622009-10-20 21:52:47 +00002489/* Wait until threading._shutdown completes, provided
2490 the threading module was imported in the first place.
2491 The shutdown routine will wait until all non-daemon
2492 "threading" threads have completed. */
2493static void
2494wait_for_thread_shutdown(void)
2495{
2496#ifdef WITH_THREAD
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002497 _Py_IDENTIFIER(_shutdown);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002498 PyObject *result;
2499 PyThreadState *tstate = PyThreadState_GET();
2500 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2501 "threading");
2502 if (threading == NULL) {
2503 /* threading not imported */
2504 PyErr_Clear();
2505 return;
2506 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002507 result = _PyObject_CallMethodId(threading, &PyId__shutdown, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002508 if (result == NULL) {
2509 PyErr_WriteUnraisable(threading);
2510 }
2511 else {
2512 Py_DECREF(result);
2513 }
2514 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002515#endif
2516}
2517
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002518#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002519static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002520static int nexitfuncs = 0;
2521
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002522int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002523{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002524 if (nexitfuncs >= NEXITFUNCS)
2525 return -1;
2526 exitfuncs[nexitfuncs++] = func;
2527 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002528}
2529
Guido van Rossumcc283f51997-08-05 02:22:03 +00002530static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002531call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002532{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002533 while (nexitfuncs > 0)
2534 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002535
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002536 fflush(stdout);
2537 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002538}
2539
2540void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002541Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002542{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002543 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002544
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002545 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002546}
2547
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002548static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002549initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002550{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002551#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002552 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002553#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002554#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002555 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002556#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002557#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002558 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002559#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002560 PyOS_InitInterrupts(); /* May imply initsignal() */
Victor Stinnerd786ad52013-07-21 13:25:51 +02002561 if (PyErr_Occurred()) {
2562 Py_FatalError("Py_Initialize: can't import signal");
2563 }
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002564}
2565
Guido van Rossum7433b121997-02-14 19:45:36 +00002566
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002567/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2568 *
2569 * All of the code in this function must only use async-signal-safe functions,
2570 * listed at `man 7 signal` or
2571 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2572 */
2573void
2574_Py_RestoreSignals(void)
2575{
2576#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002577 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002578#endif
2579#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002580 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002581#endif
2582#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002583 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002584#endif
2585}
2586
2587
Guido van Rossum7433b121997-02-14 19:45:36 +00002588/*
2589 * The file descriptor fd is considered ``interactive'' if either
2590 * a) isatty(fd) is TRUE, or
2591 * b) the -i flag was given, and the filename associated with
2592 * the descriptor is NULL or "<stdin>" or "???".
2593 */
2594int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002595Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002596{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002597 if (isatty((int)fileno(fp)))
2598 return 1;
2599 if (!Py_InteractiveFlag)
2600 return 0;
2601 return (filename == NULL) ||
2602 (strcmp(filename, "<stdin>") == 0) ||
2603 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002604}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002605
2606
Tim Petersd08e3822003-04-17 15:24:21 +00002607#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002608#if defined(WIN32) && defined(_MSC_VER)
2609
2610/* Stack checking for Microsoft C */
2611
2612#include <malloc.h>
2613#include <excpt.h>
2614
Fred Drakee8de31c2000-08-31 05:38:39 +00002615/*
2616 * Return non-zero when we run out of memory on the stack; zero otherwise.
2617 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002618int
Fred Drake399739f2000-08-31 05:52:44 +00002619PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002620{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002621 __try {
2622 /* alloca throws a stack overflow exception if there's
2623 not enough space left on the stack */
2624 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2625 return 0;
2626 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2627 EXCEPTION_EXECUTE_HANDLER :
2628 EXCEPTION_CONTINUE_SEARCH) {
2629 int errcode = _resetstkoflw();
2630 if (errcode == 0)
2631 {
2632 Py_FatalError("Could not reset the stack!");
2633 }
2634 }
2635 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002636}
2637
2638#endif /* WIN32 && _MSC_VER */
2639
2640/* Alternate implementations can be added here... */
2641
2642#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002643
2644
2645/* Wrappers around sigaction() or signal(). */
2646
2647PyOS_sighandler_t
2648PyOS_getsig(int sig)
2649{
2650#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002651 struct sigaction context;
2652 if (sigaction(sig, NULL, &context) == -1)
2653 return SIG_ERR;
2654 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002655#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002656 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002657/* Special signal handling for the secure CRT in Visual Studio 2005 */
2658#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002659 switch (sig) {
2660 /* Only these signals are valid */
2661 case SIGINT:
2662 case SIGILL:
2663 case SIGFPE:
2664 case SIGSEGV:
2665 case SIGTERM:
2666 case SIGBREAK:
2667 case SIGABRT:
2668 break;
2669 /* Don't call signal() with other values or it will assert */
2670 default:
2671 return SIG_ERR;
2672 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002673#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002674 handler = signal(sig, SIG_IGN);
2675 if (handler != SIG_ERR)
2676 signal(sig, handler);
2677 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002678#endif
2679}
2680
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002681/*
2682 * All of the code in this function must only use async-signal-safe functions,
2683 * listed at `man 7 signal` or
2684 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2685 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002686PyOS_sighandler_t
2687PyOS_setsig(int sig, PyOS_sighandler_t handler)
2688{
2689#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002690 /* Some code in Modules/signalmodule.c depends on sigaction() being
2691 * used here if HAVE_SIGACTION is defined. Fix that if this code
2692 * changes to invalidate that assumption.
2693 */
2694 struct sigaction context, ocontext;
2695 context.sa_handler = handler;
2696 sigemptyset(&context.sa_mask);
2697 context.sa_flags = 0;
2698 if (sigaction(sig, &context, &ocontext) == -1)
2699 return SIG_ERR;
2700 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002701#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002702 PyOS_sighandler_t oldhandler;
2703 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002704#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002705 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002706#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002707 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002708#endif
2709}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002710
2711/* Deprecated C API functions still provided for binary compatiblity */
2712
2713#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002714PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002715PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2716{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002717 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002718}
2719
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002720#undef PyParser_SimpleParseString
2721PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002722PyParser_SimpleParseString(const char *str, int start)
2723{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002724 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002725}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002726
2727#undef PyRun_AnyFile
2728PyAPI_FUNC(int)
2729PyRun_AnyFile(FILE *fp, const char *name)
2730{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002731 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002732}
2733
2734#undef PyRun_AnyFileEx
2735PyAPI_FUNC(int)
2736PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2737{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002738 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002739}
2740
2741#undef PyRun_AnyFileFlags
2742PyAPI_FUNC(int)
2743PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2744{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002745 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002746}
2747
2748#undef PyRun_File
2749PyAPI_FUNC(PyObject *)
2750PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2751{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002752 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002753}
2754
2755#undef PyRun_FileEx
2756PyAPI_FUNC(PyObject *)
2757PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2758{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002759 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002760}
2761
2762#undef PyRun_FileFlags
2763PyAPI_FUNC(PyObject *)
2764PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002765 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002766{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002767 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002768}
2769
2770#undef PyRun_SimpleFile
2771PyAPI_FUNC(int)
2772PyRun_SimpleFile(FILE *f, const char *p)
2773{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002774 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002775}
2776
2777#undef PyRun_SimpleFileEx
2778PyAPI_FUNC(int)
2779PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2780{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002781 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002782}
2783
2784
2785#undef PyRun_String
2786PyAPI_FUNC(PyObject *)
2787PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2788{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002789 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002790}
2791
2792#undef PyRun_SimpleString
2793PyAPI_FUNC(int)
2794PyRun_SimpleString(const char *s)
2795{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002796 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002797}
2798
2799#undef Py_CompileString
2800PyAPI_FUNC(PyObject *)
2801Py_CompileString(const char *str, const char *p, int s)
2802{
Georg Brandl8334fd92010-12-04 10:26:46 +00002803 return Py_CompileStringExFlags(str, p, s, NULL, -1);
2804}
2805
2806#undef Py_CompileStringFlags
2807PyAPI_FUNC(PyObject *)
2808Py_CompileStringFlags(const char *str, const char *p, int s,
2809 PyCompilerFlags *flags)
2810{
2811 return Py_CompileStringExFlags(str, p, s, flags, -1);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002812}
2813
2814#undef PyRun_InteractiveOne
2815PyAPI_FUNC(int)
2816PyRun_InteractiveOne(FILE *f, const char *p)
2817{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002818 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002819}
2820
2821#undef PyRun_InteractiveLoop
2822PyAPI_FUNC(int)
2823PyRun_InteractiveLoop(FILE *f, const char *p)
2824{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002825 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002826}
2827
2828#ifdef __cplusplus
2829}
2830#endif