blob: 0967a47c57481a290bbd1003849f9c520bcdd628 [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
doko@ubuntu.com4a173bc2014-04-17 19:47:16 +020038#ifdef __gnu_hurd__
39#define PATH_MAX MAXPATHLEN
40#endif
41
Victor Stinnerbd303c12013-11-07 23:07:29 +010042_Py_IDENTIFIER(builtins);
Victor Stinner09054372013-11-06 22:41:44 +010043_Py_IDENTIFIER(excepthook);
Victor Stinner3f36a572013-11-12 21:39:02 +010044_Py_IDENTIFIER(flush);
Victor Stinnerbd303c12013-11-07 23:07:29 +010045_Py_IDENTIFIER(last_traceback);
Victor Stinner09054372013-11-06 22:41:44 +010046_Py_IDENTIFIER(last_type);
47_Py_IDENTIFIER(last_value);
Victor Stinner3f36a572013-11-12 21:39:02 +010048_Py_IDENTIFIER(name);
Victor Stinnerbd303c12013-11-07 23:07:29 +010049_Py_IDENTIFIER(ps1);
50_Py_IDENTIFIER(ps2);
51_Py_IDENTIFIER(stdin);
52_Py_IDENTIFIER(stdout);
53_Py_IDENTIFIER(stderr);
Victor Stinnerefa7a0e2013-11-07 12:37:56 +010054_Py_static_string(PyId_string, "<string>");
Victor Stinner09054372013-11-06 22:41:44 +010055
Ezio Melotti1f8898a2013-03-26 01:59:56 +020056#ifdef Py_REF_DEBUG
Antoine Pitrou208ac5c2013-04-24 20:17:53 +020057static
58void _print_total_refs(void) {
Victor Stinner4ee41c52013-11-06 18:28:21 +010059 PyObject *xoptions, *value;
60 _Py_IDENTIFIER(showrefcount);
61
Ezio Melotti1f8898a2013-03-26 01:59:56 +020062 xoptions = PySys_GetXOptions();
63 if (xoptions == NULL)
64 return;
Victor Stinner4ee41c52013-11-06 18:28:21 +010065 value = _PyDict_GetItemId(xoptions, &PyId_showrefcount);
Ezio Melotti1f8898a2013-03-26 01:59:56 +020066 if (value == Py_True)
67 fprintf(stderr,
68 "[%" PY_FORMAT_SIZE_T "d refs, "
69 "%" PY_FORMAT_SIZE_T "d blocks]\n",
70 _Py_GetRefTotal(), _Py_GetAllocatedBlocks());
71}
72#endif
73
Neal Norwitz4281cef2006-03-04 19:58:13 +000074#ifndef Py_REF_DEBUG
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000075#define PRINT_TOTAL_REFS()
Neal Norwitz4281cef2006-03-04 19:58:13 +000076#else /* Py_REF_DEBUG */
Ezio Melotti1f8898a2013-03-26 01:59:56 +020077#define PRINT_TOTAL_REFS() _print_total_refs()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000078#endif
79
80#ifdef __cplusplus
81extern "C" {
Neal Norwitz4281cef2006-03-04 19:58:13 +000082#endif
83
Martin v. Löwis790465f2008-04-05 20:41:37 +000084extern wchar_t *Py_GetPath(void);
Guido van Rossum1984f1e1992-08-04 12:41:02 +000085
Guido van Rossum82598051997-03-05 00:20:32 +000086extern grammar _PyParser_Grammar; /* From graminit.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000087
Guido van Rossumb73cc041993-11-01 16:28:59 +000088/* Forward */
Nick Coghlan85e729e2012-07-15 18:09:52 +100089static void initmain(PyInterpreterState *interp);
Victor Stinner793b5312011-04-27 00:24:21 +020090static int initfsencoding(PyInterpreterState *interp);
Tim Petersdbd9ba62000-07-09 03:09:57 +000091static void initsite(void);
Guido van Rossumce3a72a2007-10-19 23:16:50 +000092static int initstdio(void);
Amaury Forgeot d'Arc7fedbe52008-04-10 21:03:09 +000093static void flush_io(void);
Victor Stinner95701bd2013-11-06 18:41:07 +010094static PyObject *run_mod(mod_ty, PyObject *, PyObject *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000095 PyCompilerFlags *, PyArena *);
Martin v. Löwis95292d62002-12-11 14:04:59 +000096static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000097 PyCompilerFlags *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000098static void err_input(perrdetail *);
Victor Stinner7f2fee32011-04-05 00:39:01 +020099static void err_free(perrdetail *);
Tim Petersdbd9ba62000-07-09 03:09:57 +0000100static void initsigs(void);
Collin Winter670e6922007-03-21 02:57:17 +0000101static void call_py_exitfuncs(void);
Antoine Pitrou011bd622009-10-20 21:52:47 +0000102static void wait_for_thread_shutdown(void);
Tim Petersdbd9ba62000-07-09 03:09:57 +0000103static void call_ll_exitfuncs(void);
Victor Stinner3a50e702011-10-18 21:21:00 +0200104extern int _PyUnicode_Init(void);
Victor Stinner26f91992013-07-17 01:22:45 +0200105extern int _PyStructSequence_Init(void);
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000106extern void _PyUnicode_Fini(void);
Guido van Rossumddefaf32007-01-14 03:31:43 +0000107extern int _PyLong_Init(void);
108extern void PyLong_Fini(void);
Victor Stinner024e37a2011-03-31 01:31:06 +0200109extern int _PyFaulthandler_Init(void);
110extern void _PyFaulthandler_Fini(void);
Christian Heimes985ecdc2013-11-20 11:46:18 +0100111extern void _PyHash_Fini(void);
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100112extern int _PyTraceMalloc_Init(void);
Victor Stinnerbe0708f2013-12-01 10:03:26 +0100113extern int _PyTraceMalloc_Fini(void);
Guido van Rossumc94044c2000-03-10 23:03:54 +0000114
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000115#ifdef WITH_THREAD
116extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
117extern void _PyGILState_Fini(void);
118#endif /* WITH_THREAD */
119
Guido van Rossum82598051997-03-05 00:20:32 +0000120int Py_DebugFlag; /* Needed by parser.c */
121int Py_VerboseFlag; /* Needed by import.c */
Georg Brandl8aa7e992010-12-28 18:30:18 +0000122int Py_QuietFlag; /* Needed by sysmodule.c */
Guido van Rossum7433b121997-02-14 19:45:36 +0000123int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Georg Brandl0b2489e2011-05-15 08:49:12 +0200124int Py_InspectFlag; /* Needed to determine whether to exit at SystemExit */
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000125int Py_NoSiteFlag; /* Suppress 'import site' */
Guido van Rossum98297ee2007-11-06 21:34:58 +0000126int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */
Christian Heimes790c8232008-01-07 21:14:23 +0000127int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.py[co]) */
Barry Warsaw3ce09642000-05-02 19:18:59 +0000128int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
Guido van Rossuma61691e1998-02-06 22:27:24 +0000129int Py_FrozenFlag; /* Needed by getpath.c */
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000130int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Christian Heimes8dc226f2008-05-06 23:45:46 +0000131int Py_NoUserSiteDirectory = 0; /* for -s and site.py */
Antoine Pitrou05608432009-01-09 18:53:14 +0000132int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */
Georg Brandl2daf6ae2012-02-20 19:54:16 +0100133int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */
Christian Heimesad73a9c2013-08-10 16:36:18 +0200134int Py_IsolatedFlag = 0; /* for -I, isolate from user's env */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000135
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200136PyThreadState *_Py_Finalizing = NULL;
137
Christian Heimes49e61802013-10-22 10:22:29 +0200138/* Hack to force loading of object files */
139int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \
140 PyOS_mystrnicmp; /* Python/pystrcmp.o */
141
Christian Heimes33fe8092008-04-13 13:53:33 +0000142/* PyModule_GetWarningsModule is no longer necessary as of 2.6
143since _warnings is builtin. This API should not be used. */
144PyObject *
145PyModule_GetWarningsModule(void)
Mark Hammondedd07732003-07-15 23:03:55 +0000146{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000147 return PyImport_ImportModule("warnings");
Mark Hammondedd07732003-07-15 23:03:55 +0000148}
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000149
Guido van Rossum25ce5661997-08-02 03:10:38 +0000150static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000151
Thomas Wouters7e474022000-07-16 12:04:32 +0000152/* API to access the initialized flag -- useful for esoteric use */
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000153
154int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000155Py_IsInitialized(void)
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000156{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000157 return initialized;
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000158}
159
Nick Coghlan7d270ee2013-10-17 22:35:35 +1000160/* Helper to allow an embedding application to override the normal
161 * mechanism that attempts to figure out an appropriate IO encoding
162 */
163
164static char *_Py_StandardStreamEncoding = NULL;
165static char *_Py_StandardStreamErrors = NULL;
166
167int
168Py_SetStandardStreamEncoding(const char *encoding, const char *errors)
169{
170 if (Py_IsInitialized()) {
171 /* This is too late to have any effect */
172 return -1;
173 }
Nick Coghlan1805a622013-10-18 23:11:47 +1000174 /* Can't call PyErr_NoMemory() on errors, as Python hasn't been
175 * initialised yet.
176 *
177 * However, the raw memory allocators are initialised appropriately
178 * as C static variables, so _PyMem_RawStrdup is OK even though
179 * Py_Initialize hasn't been called yet.
180 */
Nick Coghlan7d270ee2013-10-17 22:35:35 +1000181 if (encoding) {
182 _Py_StandardStreamEncoding = _PyMem_RawStrdup(encoding);
183 if (!_Py_StandardStreamEncoding) {
Nick Coghlan1805a622013-10-18 23:11:47 +1000184 return -2;
Nick Coghlan7d270ee2013-10-17 22:35:35 +1000185 }
186 }
187 if (errors) {
188 _Py_StandardStreamErrors = _PyMem_RawStrdup(errors);
189 if (!_Py_StandardStreamErrors) {
190 if (_Py_StandardStreamEncoding) {
191 PyMem_RawFree(_Py_StandardStreamEncoding);
192 }
Nick Coghlan1805a622013-10-18 23:11:47 +1000193 return -3;
Nick Coghlan7d270ee2013-10-17 22:35:35 +1000194 }
195 }
196 return 0;
197}
198
Guido van Rossum25ce5661997-08-02 03:10:38 +0000199/* Global initializations. Can be undone by Py_Finalize(). Don't
200 call this twice without an intervening Py_Finalize() call. When
201 initializations fail, a fatal error is issued and the function does
202 not return. On return, the first thread and interpreter state have
203 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000204
Guido van Rossum25ce5661997-08-02 03:10:38 +0000205 Locking: you must hold the interpreter lock while calling this.
206 (If the lock has not yet been initialized, that's equivalent to
207 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000208
Guido van Rossum25ce5661997-08-02 03:10:38 +0000209*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000210
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000211static int
212add_flag(int flag, const char *envs)
213{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000214 int env = atoi(envs);
215 if (flag < env)
216 flag = env;
217 if (flag < 1)
218 flag = 1;
219 return flag;
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000220}
221
Christian Heimes5833a2f2008-10-30 21:40:04 +0000222static char*
Victor Stinner94908bb2010-08-18 21:23:25 +0000223get_codec_name(const char *encoding)
Christian Heimes5833a2f2008-10-30 21:40:04 +0000224{
Victor Stinner94908bb2010-08-18 21:23:25 +0000225 char *name_utf8, *name_str;
Victor Stinner386fe712010-05-19 00:34:15 +0000226 PyObject *codec, *name = NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000227
Victor Stinner94908bb2010-08-18 21:23:25 +0000228 codec = _PyCodec_Lookup(encoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000229 if (!codec)
230 goto error;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000231
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200232 name = _PyObject_GetAttrId(codec, &PyId_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000233 Py_CLEAR(codec);
234 if (!name)
235 goto error;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000236
Victor Stinner94908bb2010-08-18 21:23:25 +0000237 name_utf8 = _PyUnicode_AsString(name);
Victor Stinner4ca28092011-03-20 23:09:03 +0100238 if (name_utf8 == NULL)
Victor Stinner386fe712010-05-19 00:34:15 +0000239 goto error;
Victor Stinner49fc8ec2013-07-07 23:30:24 +0200240 name_str = _PyMem_RawStrdup(name_utf8);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000241 Py_DECREF(name);
Victor Stinner94908bb2010-08-18 21:23:25 +0000242 if (name_str == NULL) {
243 PyErr_NoMemory();
244 return NULL;
245 }
246 return name_str;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000247
248error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000249 Py_XDECREF(codec);
Victor Stinner386fe712010-05-19 00:34:15 +0000250 Py_XDECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000251 return NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000252}
Victor Stinner94908bb2010-08-18 21:23:25 +0000253
Victor Stinner94908bb2010-08-18 21:23:25 +0000254static char*
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200255get_locale_encoding(void)
Victor Stinner94908bb2010-08-18 21:23:25 +0000256{
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200257#ifdef MS_WINDOWS
258 char codepage[100];
259 PyOS_snprintf(codepage, sizeof(codepage), "cp%d", GetACP());
260 return get_codec_name(codepage);
261#elif defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94908bb2010-08-18 21:23:25 +0000262 char* codeset = nl_langinfo(CODESET);
263 if (!codeset || codeset[0] == '\0') {
264 PyErr_SetString(PyExc_ValueError, "CODESET is not set or empty");
265 return NULL;
266 }
267 return get_codec_name(codeset);
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200268#else
269 PyErr_SetNone(PyExc_NotImplementedError);
270 return NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000271#endif
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200272}
Christian Heimes5833a2f2008-10-30 21:40:04 +0000273
Brett Cannonfd074152012-04-14 14:10:13 -0400274static void
275import_init(PyInterpreterState *interp, PyObject *sysmod)
276{
277 PyObject *importlib;
278 PyObject *impmod;
279 PyObject *sys_modules;
280 PyObject *value;
281
282 /* Import _importlib through its frozen version, _frozen_importlib. */
Brett Cannonfd074152012-04-14 14:10:13 -0400283 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
284 Py_FatalError("Py_Initialize: can't import _frozen_importlib");
285 }
286 else if (Py_VerboseFlag) {
287 PySys_FormatStderr("import _frozen_importlib # frozen\n");
288 }
289 importlib = PyImport_AddModule("_frozen_importlib");
290 if (importlib == NULL) {
291 Py_FatalError("Py_Initialize: couldn't get _frozen_importlib from "
292 "sys.modules");
293 }
294 interp->importlib = importlib;
295 Py_INCREF(interp->importlib);
296
297 /* Install _importlib as __import__ */
298 impmod = PyInit_imp();
299 if (impmod == NULL) {
300 Py_FatalError("Py_Initialize: can't import imp");
301 }
302 else if (Py_VerboseFlag) {
303 PySys_FormatStderr("import imp # builtin\n");
304 }
305 sys_modules = PyImport_GetModuleDict();
306 if (Py_VerboseFlag) {
307 PySys_FormatStderr("import sys # builtin\n");
308 }
Brett Cannon6f44d662012-04-15 16:08:47 -0400309 if (PyDict_SetItemString(sys_modules, "_imp", impmod) < 0) {
310 Py_FatalError("Py_Initialize: can't save _imp to sys.modules");
Brett Cannonfd074152012-04-14 14:10:13 -0400311 }
312
Brett Cannone0d88a12012-04-25 20:54:04 -0400313 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
Brett Cannonfd074152012-04-14 14:10:13 -0400314 if (value == NULL) {
315 PyErr_Print();
316 Py_FatalError("Py_Initialize: importlib install failed");
317 }
318 Py_DECREF(value);
Brett Cannonfc9ca272012-04-15 01:35:05 -0400319 Py_DECREF(impmod);
Brett Cannonfd074152012-04-14 14:10:13 -0400320
321 _PyImportZip_Init();
322}
323
324
Guido van Rossuma027efa1997-05-05 20:56:21 +0000325void
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200326_Py_InitializeEx_Private(int install_sigs, int install_importlib)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000327{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000328 PyInterpreterState *interp;
329 PyThreadState *tstate;
330 PyObject *bimod, *sysmod, *pstderr;
331 char *p;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000332 extern void _Py_ReadyTypes(void);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000333
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000334 if (initialized)
335 return;
336 initialized = 1;
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200337 _Py_Finalizing = NULL;
Tim Petersd08e3822003-04-17 15:24:21 +0000338
Andrew M. Kuchlingb2ceb3a2010-02-22 23:26:10 +0000339#if defined(HAVE_LANGINFO_H) && defined(HAVE_SETLOCALE)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000340 /* Set up the LC_CTYPE locale, so we can obtain
341 the locale's charset without having to switch
342 locales. */
343 setlocale(LC_CTYPE, "");
Martin v. Löwisd1cd4d42007-08-11 14:02:14 +0000344#endif
345
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000346 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
347 Py_DebugFlag = add_flag(Py_DebugFlag, p);
348 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
349 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
350 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
351 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
352 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0')
353 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);
Georg Brandl2daf6ae2012-02-20 19:54:16 +0100354 /* The variable is only tested for existence here; _PyRandom_Init will
355 check its value further. */
356 if ((p = Py_GETENV("PYTHONHASHSEED")) && *p != '\0')
357 Py_HashRandomizationFlag = add_flag(Py_HashRandomizationFlag, p);
358
359 _PyRandom_Init();
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000360
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000361 interp = PyInterpreterState_New();
362 if (interp == NULL)
363 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000364
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000365 tstate = PyThreadState_New(interp);
366 if (tstate == NULL)
367 Py_FatalError("Py_Initialize: can't make first thread");
368 (void) PyThreadState_Swap(tstate);
Guido van Rossuma027efa1997-05-05 20:56:21 +0000369
Victor Stinner6961bd62010-08-17 22:26:51 +0000370#ifdef WITH_THREAD
Antoine Pitroub0b384b2010-09-20 20:13:48 +0000371 /* We can't call _PyEval_FiniThreads() in Py_Finalize because
372 destroying the GIL might fail when it is being referenced from
373 another running thread (see issue #9901).
374 Instead we destroy the previously created GIL here, which ensures
375 that we can call Py_Initialize / Py_Finalize multiple times. */
376 _PyEval_FiniThreads();
377
378 /* Auto-thread-state API */
Victor Stinner6961bd62010-08-17 22:26:51 +0000379 _PyGILState_Init(interp, tstate);
380#endif /* WITH_THREAD */
381
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000382 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000383
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000384 if (!_PyFrame_Init())
385 Py_FatalError("Py_Initialize: can't init frames");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000386
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000387 if (!_PyLong_Init())
388 Py_FatalError("Py_Initialize: can't init longs");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000389
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000390 if (!PyByteArray_Init())
391 Py_FatalError("Py_Initialize: can't init bytearray");
Neal Norwitz6968b052007-02-27 19:02:19 +0000392
Victor Stinner1c8f0592013-07-22 22:24:54 +0200393 if (!_PyFloat_Init())
394 Py_FatalError("Py_Initialize: can't init float");
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000395
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000396 interp->modules = PyDict_New();
397 if (interp->modules == NULL)
398 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000399
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000400 /* Init Unicode implementation; relies on the codec registry */
Victor Stinner3a50e702011-10-18 21:21:00 +0200401 if (_PyUnicode_Init() < 0)
402 Py_FatalError("Py_Initialize: can't initialize unicode");
Victor Stinner26f91992013-07-17 01:22:45 +0200403 if (_PyStructSequence_Init() < 0)
404 Py_FatalError("Py_Initialize: can't initialize structseq");
Guido van Rossumc94044c2000-03-10 23:03:54 +0000405
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000406 bimod = _PyBuiltin_Init();
407 if (bimod == NULL)
408 Py_FatalError("Py_Initialize: can't initialize builtins modules");
Victor Stinner49d3f252010-10-17 01:24:53 +0000409 _PyImport_FixupBuiltin(bimod, "builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000410 interp->builtins = PyModule_GetDict(bimod);
411 if (interp->builtins == NULL)
412 Py_FatalError("Py_Initialize: can't initialize builtins dict");
413 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000414
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000415 /* initialize builtin exceptions */
Brett Cannonfd074152012-04-14 14:10:13 -0400416 _PyExc_Init(bimod);
Christian Heimes9a68f8c2007-11-14 00:16:07 +0000417
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000418 sysmod = _PySys_Init();
419 if (sysmod == NULL)
420 Py_FatalError("Py_Initialize: can't initialize sys");
421 interp->sysdict = PyModule_GetDict(sysmod);
422 if (interp->sysdict == NULL)
423 Py_FatalError("Py_Initialize: can't initialize sys dict");
424 Py_INCREF(interp->sysdict);
Victor Stinner49d3f252010-10-17 01:24:53 +0000425 _PyImport_FixupBuiltin(sysmod, "sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000426 PySys_SetPath(Py_GetPath());
427 PyDict_SetItemString(interp->sysdict, "modules",
428 interp->modules);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000429
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000430 /* Set up a preliminary stderr printer until we have enough
431 infrastructure for the io module in place. */
432 pstderr = PyFile_NewStdPrinter(fileno(stderr));
433 if (pstderr == NULL)
434 Py_FatalError("Py_Initialize: can't set preliminary stderr");
Victor Stinnerbd303c12013-11-07 23:07:29 +0100435 _PySys_SetObjectId(&PyId_stderr, pstderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000436 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000437 Py_DECREF(pstderr);
Guido van Rossum826d8972007-10-30 18:34:07 +0000438
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000439 _PyImport_Init();
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000440
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000441 _PyImportHooks_Init();
Just van Rossum52e14d62002-12-30 22:08:05 +0000442
Victor Stinner7d79b8b2010-05-19 20:40:50 +0000443 /* Initialize _warnings. */
444 _PyWarnings_Init();
445
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200446 if (!install_importlib)
447 return;
448
Brett Cannonfd074152012-04-14 14:10:13 -0400449 import_init(interp, sysmod);
450
Victor Stinnerd5698cb2012-07-31 02:55:49 +0200451 /* initialize the faulthandler module */
452 if (_PyFaulthandler_Init())
453 Py_FatalError("Py_Initialize: can't initialize faulthandler");
454
Alexander Belopolsky6fc4ade2010-08-05 17:34:27 +0000455 _PyTime_Init();
456
Victor Stinner793b5312011-04-27 00:24:21 +0200457 if (initfsencoding(interp) < 0)
458 Py_FatalError("Py_Initialize: unable to load the file system codec");
Martin v. Löwis011e8422009-05-05 04:43:17 +0000459
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000460 if (install_sigs)
461 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000462
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100463 if (_PyTraceMalloc_Init() < 0)
464 Py_FatalError("Py_Initialize: can't initialize tracemalloc");
465
Nick Coghlan85e729e2012-07-15 18:09:52 +1000466 initmain(interp); /* Module __main__ */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000467 if (initstdio() < 0)
468 Py_FatalError(
469 "Py_Initialize: can't initialize sys standard streams");
470
Antoine Pitroucf9f9802010-11-10 13:55:25 +0000471 /* Initialize warnings. */
472 if (PySys_HasWarnOptions()) {
473 PyObject *warnings_module = PyImport_ImportModule("warnings");
474 if (warnings_module == NULL) {
475 fprintf(stderr, "'import warnings' failed; traceback:\n");
476 PyErr_Print();
477 }
478 Py_XDECREF(warnings_module);
479 }
480
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000481 if (!Py_NoSiteFlag)
482 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000483}
484
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000485void
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200486Py_InitializeEx(int install_sigs)
487{
488 _Py_InitializeEx_Private(install_sigs, 1);
489}
490
491void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000492Py_Initialize(void)
493{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000494 Py_InitializeEx(1);
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000495}
496
497
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000498#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000499extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000500#endif
501
Guido van Rossume8432ac2007-07-09 15:04:50 +0000502/* Flush stdout and stderr */
503
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100504static int
505file_is_closed(PyObject *fobj)
506{
507 int r;
508 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
509 if (tmp == NULL) {
510 PyErr_Clear();
511 return 0;
512 }
513 r = PyObject_IsTrue(tmp);
514 Py_DECREF(tmp);
515 if (r < 0)
516 PyErr_Clear();
517 return r > 0;
518}
519
Neal Norwitz2bad9702007-08-27 06:19:22 +0000520static void
Guido van Rossum1bd21222007-07-10 20:14:13 +0000521flush_std_files(void)
Guido van Rossume8432ac2007-07-09 15:04:50 +0000522{
Victor Stinnerbd303c12013-11-07 23:07:29 +0100523 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
524 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000525 PyObject *tmp;
Guido van Rossume8432ac2007-07-09 15:04:50 +0000526
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100527 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200528 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000529 if (tmp == NULL)
Antoine Pitroubddc9fe2010-08-08 20:46:42 +0000530 PyErr_WriteUnraisable(fout);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000531 else
532 Py_DECREF(tmp);
533 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000534
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100535 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200536 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000537 if (tmp == NULL)
538 PyErr_Clear();
539 else
540 Py_DECREF(tmp);
541 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000542}
543
Guido van Rossum25ce5661997-08-02 03:10:38 +0000544/* Undo the effect of Py_Initialize().
545
546 Beware: if multiple interpreter and/or thread states exist, these
547 are not wiped out; only the current thread and interpreter state
548 are deleted. But since everything else is deleted, those other
549 interpreter and thread states should no longer be used.
550
551 (XXX We should do better, e.g. wipe out all interpreters and
552 threads.)
553
554 Locking: as above.
555
556*/
557
558void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000559Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000560{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000561 PyInterpreterState *interp;
562 PyThreadState *tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000563
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000564 if (!initialized)
565 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000566
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000567 wait_for_thread_shutdown();
Antoine Pitrou011bd622009-10-20 21:52:47 +0000568
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000569 /* The interpreter is still entirely intact at this point, and the
570 * exit funcs may be relying on that. In particular, if some thread
571 * or exit func is still waiting to do an import, the import machinery
572 * expects Py_IsInitialized() to return true. So don't say the
573 * interpreter is uninitialized until after the exit funcs have run.
574 * Note that Threading.py uses an exit func to do a join on all the
575 * threads created thru it, so this also protects pending imports in
576 * the threads created via Threading.
577 */
578 call_py_exitfuncs();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000579
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000580 /* Get current thread state and interpreter pointer */
581 tstate = PyThreadState_GET();
582 interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000583
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200584 /* Remaining threads (e.g. daemon threads) will automatically exit
585 after taking the GIL (in PyEval_RestoreThread()). */
586 _Py_Finalizing = tstate;
587 initialized = 0;
588
Victor Stinnerec4f9592015-03-24 13:44:35 +0100589 /* Flush sys.stdout and sys.stderr */
Victor Stinner933538e2014-02-13 12:48:54 +0100590 flush_std_files();
591
592 /* Disable signal handling */
593 PyOS_FiniInterrupts();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000594
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000595 /* Collect garbage. This may call finalizers; it's nice to call these
596 * before all modules are destroyed.
597 * XXX If a __del__ or weakref callback is triggered here, and tries to
598 * XXX import a module, bad things can happen, because Python no
599 * XXX longer believes it's initialized.
600 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
601 * XXX is easy to provoke that way. I've also seen, e.g.,
602 * XXX Exception exceptions.ImportError: 'No module named sha'
603 * XXX in <function callback at 0x008F5718> ignored
604 * XXX but I'm unclear on exactly how that one happens. In any case,
605 * XXX I haven't seen a real-life report of either of these.
606 */
607 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000608#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000609 /* With COUNT_ALLOCS, it helps to run GC multiple times:
610 each collection might release some types from the type
611 list, so they become garbage. */
612 while (PyGC_Collect() > 0)
613 /* nothing */;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000614#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000615 /* Destroy all modules */
616 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000617
Victor Stinnerec4f9592015-03-24 13:44:35 +0100618 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000619 flush_std_files();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000620
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000621 /* Collect final garbage. This disposes of cycles created by
Florent Xiclunaaa6c1d22011-12-12 18:54:29 +0100622 * class definitions, for example.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000623 * XXX This is disabled because it caused too many problems. If
624 * XXX a __del__ or weakref callback triggers here, Python code has
625 * XXX a hard time running, because even the sys module has been
626 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
627 * XXX One symptom is a sequence of information-free messages
628 * XXX coming from threads (if a __del__ or callback is invoked,
629 * XXX other threads can execute too, and any exception they encounter
630 * XXX triggers a comedy of errors as subsystem after subsystem
631 * XXX fails to find what it *expects* to find in sys to help report
632 * XXX the exception and consequent unexpected failures). I've also
633 * XXX seen segfaults then, after adding print statements to the
634 * XXX Python code getting called.
635 */
Tim Peters1d7323e2003-12-01 21:35:27 +0000636#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000637 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000638#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000639
Victor Stinnerbe0708f2013-12-01 10:03:26 +0100640 /* Disable tracemalloc after all Python objects have been destroyed,
641 so it is possible to use tracemalloc in objects destructor. */
642 _PyTraceMalloc_Fini();
643
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000644 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
645 _PyImport_Fini();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000646
Antoine Pitroufd417cc2013-05-05 08:12:42 +0200647 /* Cleanup typeobject.c's internal caches. */
648 _PyType_Fini();
649
Victor Stinner024e37a2011-03-31 01:31:06 +0200650 /* unload faulthandler module */
651 _PyFaulthandler_Fini();
652
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000653 /* Debugging stuff */
Guido van Rossum1707aad1997-12-08 23:43:45 +0000654#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000655 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000656#endif
Christian Heimes985ecdc2013-11-20 11:46:18 +0100657 /* dump hash stats */
658 _PyHash_Fini();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000659
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000660 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000661
Tim Peters9cf25ce2003-04-17 15:21:01 +0000662#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000663 /* Display all objects still alive -- this can invoke arbitrary
664 * __repr__ overrides, so requires a mostly-intact interpreter.
665 * Alas, a lot of stuff may still be alive now that will be cleaned
666 * up later.
667 */
668 if (Py_GETENV("PYTHONDUMPREFS"))
669 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000670#endif /* Py_TRACE_REFS */
671
Antoine Pitroufd417cc2013-05-05 08:12:42 +0200672 /* Clear interpreter state and all thread states. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000673 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000674
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000675 /* Now we decref the exception classes. After this point nothing
676 can raise an exception. That's okay, because each Fini() method
677 below has been checked to make sure no exceptions are ever
678 raised.
679 */
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000680
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000681 _PyExc_Fini();
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000682
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000683 /* Sundry finalizers */
684 PyMethod_Fini();
685 PyFrame_Fini();
686 PyCFunction_Fini();
687 PyTuple_Fini();
688 PyList_Fini();
689 PySet_Fini();
690 PyBytes_Fini();
691 PyByteArray_Fini();
692 PyLong_Fini();
693 PyFloat_Fini();
694 PyDict_Fini();
Antoine Pitrouf34a0cd2011-11-18 20:14:34 +0100695 PySlice_Fini();
Antoine Pitrou5f454a02013-05-06 21:15:57 +0200696 _PyGC_Fini();
Antoine Pitrou4879a962013-08-31 00:26:02 +0200697 _PyRandom_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000698
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000699 /* Cleanup Unicode implementation */
700 _PyUnicode_Fini();
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000701
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000702 /* reset file system default encoding */
Victor Stinnerb744ba12010-05-15 12:27:16 +0000703 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +0200704 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000705 Py_FileSystemDefaultEncoding = NULL;
706 }
Christian Heimesc8967002007-11-30 10:18:26 +0000707
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000708 /* XXX Still allocated:
709 - various static ad-hoc pointers to interned strings
710 - int and float free list blocks
711 - whatever various modules and libraries allocate
712 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000713
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000714 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000715
Victor Stinner51fa4582013-07-07 15:50:49 +0200716 /* Cleanup auto-thread-state */
717#ifdef WITH_THREAD
718 _PyGILState_Fini();
719#endif /* WITH_THREAD */
720
721 /* Delete current thread. After this, many C API calls become crashy. */
722 PyThreadState_Swap(NULL);
723 PyInterpreterState_Delete(interp);
724
Tim Peters269b2a62003-04-17 19:52:29 +0000725#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000726 /* Display addresses (& refcnts) of all objects still alive.
727 * An address can be used to find the repr of the object, printed
728 * above by _Py_PrintReferences.
729 */
730 if (Py_GETENV("PYTHONDUMPREFS"))
731 _Py_PrintReferenceAddresses(stderr);
Tim Peters269b2a62003-04-17 19:52:29 +0000732#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000733#ifdef PYMALLOC_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000734 if (Py_GETENV("PYTHONMALLOCSTATS"))
David Malcolm49526f42012-06-22 14:55:41 -0400735 _PyObject_DebugMallocStats(stderr);
Tim Peters0e871182002-04-13 08:29:14 +0000736#endif
737
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000738 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000739}
740
741/* Create and initialize a new interpreter and thread, and return the
742 new thread. This requires that Py_Initialize() has been called
743 first.
744
745 Unsuccessful initialization yields a NULL pointer. Note that *no*
746 exception information is available even in this case -- the
747 exception information is held in the thread, and there is no
748 thread.
749
750 Locking: as above.
751
752*/
753
754PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000755Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000756{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000757 PyInterpreterState *interp;
758 PyThreadState *tstate, *save_tstate;
759 PyObject *bimod, *sysmod;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000760
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000761 if (!initialized)
762 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000763
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000764 interp = PyInterpreterState_New();
765 if (interp == NULL)
766 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000767
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000768 tstate = PyThreadState_New(interp);
769 if (tstate == NULL) {
770 PyInterpreterState_Delete(interp);
771 return NULL;
772 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000773
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000774 save_tstate = PyThreadState_Swap(tstate);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000775
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000776 /* XXX The following is lax in error checking */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000777
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000778 interp->modules = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000779
Victor Stinner49d3f252010-10-17 01:24:53 +0000780 bimod = _PyImport_FindBuiltin("builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000781 if (bimod != NULL) {
782 interp->builtins = PyModule_GetDict(bimod);
783 if (interp->builtins == NULL)
784 goto handle_error;
785 Py_INCREF(interp->builtins);
786 }
Christian Heimes6a27efa2008-10-30 21:48:26 +0000787
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000788 /* initialize builtin exceptions */
Brett Cannonfd074152012-04-14 14:10:13 -0400789 _PyExc_Init(bimod);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000790
Victor Stinner49d3f252010-10-17 01:24:53 +0000791 sysmod = _PyImport_FindBuiltin("sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000792 if (bimod != NULL && sysmod != NULL) {
793 PyObject *pstderr;
Brett Cannonfd074152012-04-14 14:10:13 -0400794
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000795 interp->sysdict = PyModule_GetDict(sysmod);
796 if (interp->sysdict == NULL)
797 goto handle_error;
798 Py_INCREF(interp->sysdict);
799 PySys_SetPath(Py_GetPath());
800 PyDict_SetItemString(interp->sysdict, "modules",
801 interp->modules);
802 /* Set up a preliminary stderr printer until we have enough
803 infrastructure for the io module in place. */
804 pstderr = PyFile_NewStdPrinter(fileno(stderr));
805 if (pstderr == NULL)
806 Py_FatalError("Py_Initialize: can't set preliminary stderr");
Victor Stinnerbd303c12013-11-07 23:07:29 +0100807 _PySys_SetObjectId(&PyId_stderr, pstderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000808 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000809 Py_DECREF(pstderr);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000810
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000811 _PyImportHooks_Init();
Victor Stinner793b5312011-04-27 00:24:21 +0200812
Brett Cannonfd074152012-04-14 14:10:13 -0400813 import_init(interp, sysmod);
814
Victor Stinner793b5312011-04-27 00:24:21 +0200815 if (initfsencoding(interp) < 0)
816 goto handle_error;
817
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000818 if (initstdio() < 0)
819 Py_FatalError(
820 "Py_Initialize: can't initialize sys standard streams");
Nick Coghlan85e729e2012-07-15 18:09:52 +1000821 initmain(interp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000822 if (!Py_NoSiteFlag)
823 initsite();
824 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000825
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000826 if (!PyErr_Occurred())
827 return tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000828
Thomas Wouters89f507f2006-12-13 04:49:30 +0000829handle_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000830 /* Oops, it didn't work. Undo it all. */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000831
Victor Stinnerc40a3502011-04-27 00:20:27 +0200832 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000833 PyThreadState_Clear(tstate);
834 PyThreadState_Swap(save_tstate);
835 PyThreadState_Delete(tstate);
836 PyInterpreterState_Delete(interp);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000837
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000838 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000839}
840
841/* Delete an interpreter and its last thread. This requires that the
842 given thread state is current, that the thread has no remaining
843 frames, and that it is its interpreter's only remaining thread.
844 It is a fatal error to violate these constraints.
845
846 (Py_Finalize() doesn't have these constraints -- it zaps
847 everything, regardless.)
848
849 Locking: as above.
850
851*/
852
853void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000854Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000855{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000856 PyInterpreterState *interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000857
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000858 if (tstate != PyThreadState_GET())
859 Py_FatalError("Py_EndInterpreter: thread is not current");
860 if (tstate->frame != NULL)
861 Py_FatalError("Py_EndInterpreter: thread still has a frame");
Antoine Pitrou7eaf3f72013-08-25 19:48:18 +0200862
863 wait_for_thread_shutdown();
864
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000865 if (tstate != interp->tstate_head || tstate->next != NULL)
866 Py_FatalError("Py_EndInterpreter: not the last thread");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000867
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000868 PyImport_Cleanup();
869 PyInterpreterState_Clear(interp);
870 PyThreadState_Swap(NULL);
871 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000872}
873
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200874#ifdef MS_WINDOWS
Martin v. Löwis790465f2008-04-05 20:41:37 +0000875static wchar_t *progname = L"python";
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200876#else
877static wchar_t *progname = L"python3";
878#endif
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000879
880void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000881Py_SetProgramName(wchar_t *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000882{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000883 if (pn && *pn)
884 progname = pn;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000885}
886
Martin v. Löwis790465f2008-04-05 20:41:37 +0000887wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000888Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000889{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000890 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000891}
892
Martin v. Löwis790465f2008-04-05 20:41:37 +0000893static wchar_t *default_home = NULL;
Victor Stinner55a12202013-08-28 01:47:46 +0200894static wchar_t env_home[MAXPATHLEN+1];
Guido van Rossuma61691e1998-02-06 22:27:24 +0000895
896void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000897Py_SetPythonHome(wchar_t *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000898{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000899 default_home = home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000900}
901
Martin v. Löwis790465f2008-04-05 20:41:37 +0000902wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000903Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000904{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000905 wchar_t *home = default_home;
906 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
907 char* chome = Py_GETENV("PYTHONHOME");
908 if (chome) {
Victor Stinner2f5bbc62013-11-15 17:09:24 +0100909 size_t size = Py_ARRAY_LENGTH(env_home);
910 size_t r = mbstowcs(env_home, chome, size);
911 if (r != (size_t)-1 && r < size)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000912 home = env_home;
913 }
Martin v. Löwis790465f2008-04-05 20:41:37 +0000914
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000915 }
916 return home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000917}
918
Guido van Rossum6135a871995-01-09 17:53:26 +0000919/* Create __main__ module */
920
921static void
Nick Coghlan85e729e2012-07-15 18:09:52 +1000922initmain(PyInterpreterState *interp)
Guido van Rossum6135a871995-01-09 17:53:26 +0000923{
Brett Cannon13853a62013-05-04 17:37:09 -0400924 PyObject *m, *d, *loader;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000925 m = PyImport_AddModule("__main__");
926 if (m == NULL)
927 Py_FatalError("can't create __main__ module");
928 d = PyModule_GetDict(m);
929 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
930 PyObject *bimod = PyImport_ImportModule("builtins");
Nick Coghlan85e729e2012-07-15 18:09:52 +1000931 if (bimod == NULL) {
932 Py_FatalError("Failed to retrieve builtins module");
933 }
934 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
935 Py_FatalError("Failed to initialize __main__.__builtins__");
936 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000937 Py_DECREF(bimod);
938 }
Nick Coghlan85e729e2012-07-15 18:09:52 +1000939 /* Main is a little special - imp.is_builtin("__main__") will return
940 * False, but BuiltinImporter is still the most appropriate initial
941 * setting for its __loader__ attribute. A more suitable value will
942 * be set if __main__ gets further initialized later in the startup
943 * process.
944 */
Brett Cannon13853a62013-05-04 17:37:09 -0400945 loader = PyDict_GetItemString(d, "__loader__");
Brett Cannon4c14b5d2013-05-04 13:56:58 -0400946 if (loader == NULL || loader == Py_None) {
Nick Coghlan85e729e2012-07-15 18:09:52 +1000947 PyObject *loader = PyObject_GetAttrString(interp->importlib,
948 "BuiltinImporter");
949 if (loader == NULL) {
950 Py_FatalError("Failed to retrieve BuiltinImporter");
951 }
952 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
953 Py_FatalError("Failed to initialize __main__.__loader__");
954 }
955 Py_DECREF(loader);
956 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000957}
958
Victor Stinner793b5312011-04-27 00:24:21 +0200959static int
960initfsencoding(PyInterpreterState *interp)
Victor Stinnerb744ba12010-05-15 12:27:16 +0000961{
962 PyObject *codec;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000963
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200964 if (Py_FileSystemDefaultEncoding == NULL)
965 {
966 Py_FileSystemDefaultEncoding = get_locale_encoding();
967 if (Py_FileSystemDefaultEncoding == NULL)
Victor Stinnere4743092010-10-19 00:05:51 +0000968 Py_FatalError("Py_Initialize: Unable to get the locale encoding");
Victor Stinnerb744ba12010-05-15 12:27:16 +0000969
Victor Stinnere4743092010-10-19 00:05:51 +0000970 Py_HasFileSystemDefaultEncoding = 0;
Victor Stinner793b5312011-04-27 00:24:21 +0200971 interp->fscodec_initialized = 1;
972 return 0;
Victor Stinner7f84ab52010-06-11 00:36:33 +0000973 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000974
975 /* the encoding is mbcs, utf-8 or ascii */
976 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
977 if (!codec) {
978 /* Such error can only occurs in critical situations: no more
979 * memory, import a module of the standard library failed,
980 * etc. */
Victor Stinner793b5312011-04-27 00:24:21 +0200981 return -1;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000982 }
Victor Stinner793b5312011-04-27 00:24:21 +0200983 Py_DECREF(codec);
984 interp->fscodec_initialized = 1;
985 return 0;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000986}
987
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000988/* Import the site module (not into __main__ though) */
989
990static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000991initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000992{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000993 PyObject *m;
994 m = PyImport_ImportModule("site");
995 if (m == NULL) {
Victor Stinner62ce62a2013-07-22 22:53:28 +0200996 fprintf(stderr, "Failed to import the site module\n");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000997 PyErr_Print();
998 Py_Finalize();
999 exit(1);
1000 }
1001 else {
1002 Py_DECREF(m);
1003 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +00001004}
1005
Victor Stinner6fb5bae2015-09-04 17:27:49 +02001006/* Check if a file descriptor is valid or not.
1007 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1008static int
1009is_valid_fd(int fd)
1010{
1011 int fd2;
1012 if (fd < 0 || !_PyVerify_fd(fd))
1013 return 0;
1014 fd2 = dup(fd);
1015 if (fd2 >= 0)
1016 close(fd2);
1017 return fd2 >= 0;
1018}
1019
1020/* returns Py_None if the fd is not valid */
Antoine Pitrou05608432009-01-09 18:53:14 +00001021static PyObject*
1022create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001023 int fd, int write_mode, char* name,
1024 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +00001025{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001026 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1027 const char* mode;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001028 const char* newline;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001029 PyObject *line_buffering;
1030 int buffering, isatty;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001031 _Py_IDENTIFIER(open);
1032 _Py_IDENTIFIER(isatty);
1033 _Py_IDENTIFIER(TextIOWrapper);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001034 _Py_IDENTIFIER(mode);
Antoine Pitrou05608432009-01-09 18:53:14 +00001035
Victor Stinner6fb5bae2015-09-04 17:27:49 +02001036 if (!is_valid_fd(fd))
1037 Py_RETURN_NONE;
1038
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001039 /* stdin is always opened in buffered mode, first because it shouldn't
1040 make a difference in common use cases, second because TextIOWrapper
1041 depends on the presence of a read1() method which only exists on
1042 buffered streams.
1043 */
1044 if (Py_UnbufferedStdioFlag && write_mode)
1045 buffering = 0;
1046 else
1047 buffering = -1;
1048 if (write_mode)
1049 mode = "wb";
1050 else
1051 mode = "rb";
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001052 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1053 fd, mode, buffering,
1054 Py_None, Py_None, Py_None, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001055 if (buf == NULL)
1056 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +00001057
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001058 if (buffering) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001059 _Py_IDENTIFIER(raw);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001060 raw = _PyObject_GetAttrId(buf, &PyId_raw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001061 if (raw == NULL)
1062 goto error;
1063 }
1064 else {
1065 raw = buf;
1066 Py_INCREF(raw);
1067 }
Antoine Pitrou05608432009-01-09 18:53:14 +00001068
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001069 text = PyUnicode_FromString(name);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001070 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001071 goto error;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001072 res = _PyObject_CallMethodId(raw, &PyId_isatty, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001073 if (res == NULL)
1074 goto error;
1075 isatty = PyObject_IsTrue(res);
1076 Py_DECREF(res);
1077 if (isatty == -1)
1078 goto error;
1079 if (isatty || Py_UnbufferedStdioFlag)
1080 line_buffering = Py_True;
1081 else
1082 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +00001083
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001084 Py_CLEAR(raw);
1085 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +00001086
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001087#ifdef MS_WINDOWS
Victor Stinner7b3f0fa2012-08-04 01:28:00 +02001088 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1089 newlines to "\n".
1090 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1091 newline = NULL;
1092#else
1093 /* sys.stdin: split lines at "\n".
1094 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1095 newline = "\n";
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001096#endif
1097
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001098 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssO",
1099 buf, encoding, errors,
1100 newline, line_buffering);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001101 Py_CLEAR(buf);
1102 if (stream == NULL)
1103 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +00001104
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001105 if (write_mode)
1106 mode = "w";
1107 else
1108 mode = "r";
1109 text = PyUnicode_FromString(mode);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001110 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001111 goto error;
1112 Py_CLEAR(text);
1113 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +00001114
1115error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001116 Py_XDECREF(buf);
1117 Py_XDECREF(stream);
1118 Py_XDECREF(text);
1119 Py_XDECREF(raw);
Antoine Pitrou05608432009-01-09 18:53:14 +00001120
Victor Stinner6fb5bae2015-09-04 17:27:49 +02001121 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1122 /* Issue #24891: the file descriptor was closed after the first
1123 is_valid_fd() check was called. Ignore the OSError and set the
1124 stream to None. */
1125 PyErr_Clear();
1126 Py_RETURN_NONE;
1127 }
1128 return NULL;
Antoine Pitrou11942a52011-11-28 19:08:36 +01001129}
1130
Georg Brandl1a3284e2007-12-02 09:40:06 +00001131/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001132static int
1133initstdio(void)
1134{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001135 PyObject *iomod = NULL, *wrapper;
1136 PyObject *bimod = NULL;
1137 PyObject *m;
1138 PyObject *std = NULL;
1139 int status = 0, fd;
1140 PyObject * encoding_attr;
Serhiy Storchakabf28d2d2013-09-13 11:46:24 +03001141 char *pythonioencoding = NULL, *encoding, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001142
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001143 /* Hack to avoid a nasty recursion issue when Python is invoked
1144 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1145 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1146 goto error;
1147 }
1148 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001149
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001150 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1151 goto error;
1152 }
1153 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001154
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001155 if (!(bimod = PyImport_ImportModule("builtins"))) {
1156 goto error;
1157 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001158
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001159 if (!(iomod = PyImport_ImportModule("io"))) {
1160 goto error;
1161 }
1162 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1163 goto error;
1164 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001165
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001166 /* Set builtins.open */
1167 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001168 Py_DECREF(wrapper);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001169 goto error;
1170 }
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001171 Py_DECREF(wrapper);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001172
Nick Coghlan7d270ee2013-10-17 22:35:35 +10001173 encoding = _Py_StandardStreamEncoding;
1174 errors = _Py_StandardStreamErrors;
1175 if (!encoding || !errors) {
1176 pythonioencoding = Py_GETENV("PYTHONIOENCODING");
1177 if (pythonioencoding) {
1178 char *err;
1179 pythonioencoding = _PyMem_Strdup(pythonioencoding);
1180 if (pythonioencoding == NULL) {
1181 PyErr_NoMemory();
1182 goto error;
1183 }
1184 err = strchr(pythonioencoding, ':');
1185 if (err) {
1186 *err = '\0';
1187 err++;
1188 if (*err && !errors) {
1189 errors = err;
1190 }
1191 }
1192 if (*pythonioencoding && !encoding) {
1193 encoding = pythonioencoding;
1194 }
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001195 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001196 }
Martin v. Löwis0f599892008-06-02 11:13:03 +00001197
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001198 /* Set sys.stdin */
1199 fd = fileno(stdin);
1200 /* Under some conditions stdin, stdout and stderr may not be connected
1201 * and fileno() may point to an invalid file descriptor. For example
1202 * GUI apps don't have valid standard streams by default.
1203 */
Victor Stinner6fb5bae2015-09-04 17:27:49 +02001204 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1205 if (std == NULL)
1206 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001207 PySys_SetObject("__stdin__", std);
Victor Stinnerbd303c12013-11-07 23:07:29 +01001208 _PySys_SetObjectId(&PyId_stdin, std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001209 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001210
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001211 /* Set sys.stdout */
1212 fd = fileno(stdout);
Victor Stinner6fb5bae2015-09-04 17:27:49 +02001213 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1214 if (std == NULL)
1215 goto error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001216 PySys_SetObject("__stdout__", std);
Victor Stinnerbd303c12013-11-07 23:07:29 +01001217 _PySys_SetObjectId(&PyId_stdout, std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001218 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001219
Guido van Rossum98297ee2007-11-06 21:34:58 +00001220#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001221 /* Set sys.stderr, replaces the preliminary stderr */
1222 fd = fileno(stderr);
Victor Stinner6fb5bae2015-09-04 17:27:49 +02001223 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1224 if (std == NULL)
1225 goto error;
Trent Nelson39e307e2008-03-19 06:45:48 +00001226
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001227 /* Same as hack above, pre-import stderr's codec to avoid recursion
1228 when import.c tries to write to stderr in verbose mode. */
1229 encoding_attr = PyObject_GetAttrString(std, "encoding");
1230 if (encoding_attr != NULL) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001231 const char * std_encoding;
1232 std_encoding = _PyUnicode_AsString(encoding_attr);
1233 if (std_encoding != NULL) {
1234 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
Antoine Pitrou2fabfac2012-01-18 15:14:46 +01001235 Py_XDECREF(codec_info);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001236 }
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +00001237 Py_DECREF(encoding_attr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001238 }
1239 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +00001240
Victor Stinnerba308832013-07-22 23:55:19 +02001241 if (PySys_SetObject("__stderr__", std) < 0) {
1242 Py_DECREF(std);
1243 goto error;
1244 }
Victor Stinnerbd303c12013-11-07 23:07:29 +01001245 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
Victor Stinnerba308832013-07-22 23:55:19 +02001246 Py_DECREF(std);
1247 goto error;
1248 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001249 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001250#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001251
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001252 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001253 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001254 status = -1;
1255 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001256
Nick Coghlan7d270ee2013-10-17 22:35:35 +10001257 /* We won't need them anymore. */
1258 if (_Py_StandardStreamEncoding) {
1259 PyMem_RawFree(_Py_StandardStreamEncoding);
1260 _Py_StandardStreamEncoding = NULL;
1261 }
1262 if (_Py_StandardStreamErrors) {
1263 PyMem_RawFree(_Py_StandardStreamErrors);
1264 _Py_StandardStreamErrors = NULL;
1265 }
Serhiy Storchakabf28d2d2013-09-13 11:46:24 +03001266 PyMem_Free(pythonioencoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001267 Py_XDECREF(bimod);
1268 Py_XDECREF(iomod);
1269 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001270}
1271
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001272/* Parse input from a file and execute it */
1273
1274int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001275PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001276 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001277{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001278 if (filename == NULL)
1279 filename = "???";
1280 if (Py_FdIsInteractive(fp, filename)) {
1281 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1282 if (closeit)
1283 fclose(fp);
1284 return err;
1285 }
1286 else
1287 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001288}
1289
1290int
Victor Stinner95701bd2013-11-06 18:41:07 +01001291PyRun_InteractiveLoopFlags(FILE *fp, const char *filename_str, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001292{
Victor Stinner95701bd2013-11-06 18:41:07 +01001293 PyObject *filename, *v;
1294 int ret, err;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001295 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001296
Victor Stinner95701bd2013-11-06 18:41:07 +01001297 filename = PyUnicode_DecodeFSDefault(filename_str);
1298 if (filename == NULL) {
1299 PyErr_Print();
1300 return -1;
1301 }
1302
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001303 if (flags == NULL) {
1304 flags = &local_flags;
1305 local_flags.cf_flags = 0;
1306 }
Victor Stinner09054372013-11-06 22:41:44 +01001307 v = _PySys_GetObjectId(&PyId_ps1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001308 if (v == NULL) {
Victor Stinner09054372013-11-06 22:41:44 +01001309 _PySys_SetObjectId(&PyId_ps1, v = PyUnicode_FromString(">>> "));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001310 Py_XDECREF(v);
1311 }
Victor Stinner09054372013-11-06 22:41:44 +01001312 v = _PySys_GetObjectId(&PyId_ps2);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001313 if (v == NULL) {
Victor Stinner09054372013-11-06 22:41:44 +01001314 _PySys_SetObjectId(&PyId_ps2, v = PyUnicode_FromString("... "));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001315 Py_XDECREF(v);
1316 }
Victor Stinner95701bd2013-11-06 18:41:07 +01001317 err = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001318 for (;;) {
Victor Stinner95701bd2013-11-06 18:41:07 +01001319 ret = PyRun_InteractiveOneObject(fp, filename, flags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001320 PRINT_TOTAL_REFS();
Victor Stinner95701bd2013-11-06 18:41:07 +01001321 if (ret == E_EOF) {
1322 err = 0;
1323 break;
1324 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001325 /*
1326 if (ret == E_NOMEM)
Victor Stinner95701bd2013-11-06 18:41:07 +01001327 break;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001328 */
1329 }
Victor Stinner95701bd2013-11-06 18:41:07 +01001330 Py_DECREF(filename);
1331 return err;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001332}
1333
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001334/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001335static int PARSER_FLAGS(PyCompilerFlags *flags)
1336{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001337 int parser_flags = 0;
1338 if (!flags)
1339 return 0;
1340 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1341 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1342 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1343 parser_flags |= PyPARSE_IGNORE_COOKIE;
1344 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1345 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1346 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001347}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001348
Thomas Wouters89f507f2006-12-13 04:49:30 +00001349#if 0
1350/* Keep an example of flags with future keyword support. */
1351#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001352 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1353 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1354 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1355 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001356#endif
1357
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001358int
Victor Stinner95701bd2013-11-06 18:41:07 +01001359PyRun_InteractiveOneObject(FILE *fp, PyObject *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001360{
Victor Stinner95701bd2013-11-06 18:41:07 +01001361 PyObject *m, *d, *v, *w, *oenc = NULL, *mod_name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001362 mod_ty mod;
1363 PyArena *arena;
1364 char *ps1 = "", *ps2 = "", *enc = NULL;
1365 int errcode = 0;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001366 _Py_IDENTIFIER(encoding);
Victor Stinner95701bd2013-11-06 18:41:07 +01001367 _Py_IDENTIFIER(__main__);
1368
1369 mod_name = _PyUnicode_FromId(&PyId___main__); /* borrowed */
1370 if (mod_name == NULL) {
1371 PyErr_Print();
1372 return -1;
1373 }
Tim Petersfe2127d2001-07-16 05:37:24 +00001374
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001375 if (fp == stdin) {
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001376 /* Fetch encoding from sys.stdin if possible. */
Victor Stinnerbd303c12013-11-07 23:07:29 +01001377 v = _PySys_GetObjectId(&PyId_stdin);
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001378 if (v && v != Py_None) {
1379 oenc = _PyObject_GetAttrId(v, &PyId_encoding);
1380 if (oenc)
1381 enc = _PyUnicode_AsString(oenc);
1382 if (!enc)
1383 PyErr_Clear();
1384 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001385 }
Victor Stinner09054372013-11-06 22:41:44 +01001386 v = _PySys_GetObjectId(&PyId_ps1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001387 if (v != NULL) {
1388 v = PyObject_Str(v);
1389 if (v == NULL)
1390 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001391 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001392 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001393 if (ps1 == NULL) {
1394 PyErr_Clear();
1395 ps1 = "";
1396 }
1397 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001398 }
Victor Stinner09054372013-11-06 22:41:44 +01001399 w = _PySys_GetObjectId(&PyId_ps2);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001400 if (w != NULL) {
1401 w = PyObject_Str(w);
1402 if (w == NULL)
1403 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001404 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001405 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001406 if (ps2 == NULL) {
1407 PyErr_Clear();
1408 ps2 = "";
1409 }
1410 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001411 }
1412 arena = PyArena_New();
1413 if (arena == NULL) {
1414 Py_XDECREF(v);
1415 Py_XDECREF(w);
1416 Py_XDECREF(oenc);
1417 return -1;
1418 }
Victor Stinner95701bd2013-11-06 18:41:07 +01001419 mod = PyParser_ASTFromFileObject(fp, filename, enc,
1420 Py_single_input, ps1, ps2,
1421 flags, &errcode, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001422 Py_XDECREF(v);
1423 Py_XDECREF(w);
1424 Py_XDECREF(oenc);
1425 if (mod == NULL) {
1426 PyArena_Free(arena);
1427 if (errcode == E_EOF) {
1428 PyErr_Clear();
1429 return E_EOF;
1430 }
1431 PyErr_Print();
1432 return -1;
1433 }
Victor Stinner95701bd2013-11-06 18:41:07 +01001434 m = PyImport_AddModuleObject(mod_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001435 if (m == NULL) {
1436 PyArena_Free(arena);
1437 return -1;
1438 }
1439 d = PyModule_GetDict(m);
1440 v = run_mod(mod, filename, d, d, flags, arena);
1441 PyArena_Free(arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001442 if (v == NULL) {
1443 PyErr_Print();
Antoine Pitrou9845c7e2014-05-11 13:42:17 +02001444 flush_io();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001445 return -1;
1446 }
1447 Py_DECREF(v);
Antoine Pitrou9845c7e2014-05-11 13:42:17 +02001448 flush_io();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001449 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001450}
1451
Victor Stinner95701bd2013-11-06 18:41:07 +01001452int
1453PyRun_InteractiveOneFlags(FILE *fp, const char *filename_str, PyCompilerFlags *flags)
1454{
1455 PyObject *filename;
1456 int res;
1457
1458 filename = PyUnicode_DecodeFSDefault(filename_str);
1459 if (filename == NULL) {
1460 PyErr_Print();
1461 return -1;
1462 }
1463 res = PyRun_InteractiveOneObject(fp, filename, flags);
1464 Py_DECREF(filename);
1465 return res;
1466}
1467
1468
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001469/* Check whether a file maybe a pyc file: Look at the extension,
1470 the file type, and, if we may close it, at the first few bytes. */
1471
1472static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001473maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001474{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001475 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1476 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001477
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001478 /* Only look into the file if we are allowed to close it, since
1479 it then should also be seekable. */
1480 if (closeit) {
1481 /* Read only two bytes of the magic. If the file was opened in
1482 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1483 be read as they are on disk. */
1484 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1485 unsigned char buf[2];
1486 /* Mess: In case of -x, the stream is NOT at its start now,
1487 and ungetc() was used to push back the first newline,
1488 which makes the current stream position formally undefined,
1489 and a x-platform nightmare.
1490 Unfortunately, we have no direct way to know whether -x
1491 was specified. So we use a terrible hack: if the current
1492 stream position is not 0, we assume -x was specified, and
1493 give up. Bug 132850 on SourceForge spells out the
1494 hopelessness of trying anything else (fseek and ftell
1495 don't work predictably x-platform for text-mode files).
1496 */
1497 int ispyc = 0;
1498 if (ftell(fp) == 0) {
1499 if (fread(buf, 1, 2, fp) == 2 &&
1500 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1501 ispyc = 1;
1502 rewind(fp);
1503 }
1504 return ispyc;
1505 }
1506 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001507}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001508
Antoine Pitrou32d483c2013-07-30 21:01:23 +02001509static int
1510set_main_loader(PyObject *d, const char *filename, const char *loader_name)
Nick Coghlan85e729e2012-07-15 18:09:52 +10001511{
1512 PyInterpreterState *interp;
1513 PyThreadState *tstate;
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001514 PyObject *filename_obj, *loader_type, *loader;
Nick Coghlanb7a58942012-07-15 23:21:08 +10001515 int result = 0;
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001516
1517 filename_obj = PyUnicode_DecodeFSDefault(filename);
1518 if (filename_obj == NULL)
1519 return -1;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001520 /* Get current thread state and interpreter pointer */
1521 tstate = PyThreadState_GET();
1522 interp = tstate->interp;
Nick Coghlan3f94cbf2012-07-15 19:10:39 +10001523 loader_type = PyObject_GetAttrString(interp->importlib, loader_name);
1524 if (loader_type == NULL) {
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001525 Py_DECREF(filename_obj);
Nick Coghlan3f94cbf2012-07-15 19:10:39 +10001526 return -1;
1527 }
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001528 loader = PyObject_CallFunction(loader_type, "sN", "__main__", filename_obj);
Nick Coghlanb7a58942012-07-15 23:21:08 +10001529 Py_DECREF(loader_type);
1530 if (loader == NULL) {
Nick Coghlan85e729e2012-07-15 18:09:52 +10001531 return -1;
1532 }
Nick Coghlanb7a58942012-07-15 23:21:08 +10001533 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
1534 result = -1;
1535 }
Nick Coghlan85e729e2012-07-15 18:09:52 +10001536 Py_DECREF(loader);
Nick Coghlanb7a58942012-07-15 23:21:08 +10001537 return result;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001538}
1539
1540int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001541PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001542 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001543{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001544 PyObject *m, *d, *v;
1545 const char *ext;
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001546 int set_file_name = 0, ret = -1;
Victor Stinner0fcab4a2011-01-04 12:59:15 +00001547 size_t len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001548
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001549 m = PyImport_AddModule("__main__");
1550 if (m == NULL)
1551 return -1;
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001552 Py_INCREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001553 d = PyModule_GetDict(m);
1554 if (PyDict_GetItemString(d, "__file__") == NULL) {
1555 PyObject *f;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001556 f = PyUnicode_DecodeFSDefault(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001557 if (f == NULL)
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001558 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001559 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1560 Py_DECREF(f);
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001561 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001562 }
Barry Warsaw916048d2011-09-20 14:45:44 -04001563 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0) {
1564 Py_DECREF(f);
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001565 goto done;
Barry Warsaw916048d2011-09-20 14:45:44 -04001566 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001567 set_file_name = 1;
1568 Py_DECREF(f);
1569 }
1570 len = strlen(filename);
1571 ext = filename + len - (len > 4 ? 4 : 0);
1572 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Christian Heimes04ac4c12012-09-11 15:47:28 +02001573 FILE *pyc_fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001574 /* Try to run a pyc file. First, re-open in binary */
1575 if (closeit)
1576 fclose(fp);
Victor Stinnerdaf45552013-08-28 00:53:59 +02001577 if ((pyc_fp = _Py_fopen(filename, "rb")) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001578 fprintf(stderr, "python: Can't reopen .pyc file\n");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001579 goto done;
1580 }
1581 /* Turn on optimization if a .pyo file is given */
1582 if (strcmp(ext, ".pyo") == 0)
1583 Py_OptimizeFlag = 1;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001584
1585 if (set_main_loader(d, filename, "SourcelessFileLoader") < 0) {
1586 fprintf(stderr, "python: failed to set __main__.__loader__\n");
1587 ret = -1;
Christian Heimes04ac4c12012-09-11 15:47:28 +02001588 fclose(pyc_fp);
Nick Coghlan85e729e2012-07-15 18:09:52 +10001589 goto done;
1590 }
Christian Heimes04ac4c12012-09-11 15:47:28 +02001591 v = run_pyc_file(pyc_fp, filename, d, d, flags);
1592 fclose(pyc_fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001593 } else {
Nick Coghlan85e729e2012-07-15 18:09:52 +10001594 /* When running from stdin, leave __main__.__loader__ alone */
1595 if (strcmp(filename, "<stdin>") != 0 &&
1596 set_main_loader(d, filename, "SourceFileLoader") < 0) {
1597 fprintf(stderr, "python: failed to set __main__.__loader__\n");
1598 ret = -1;
1599 goto done;
1600 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001601 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1602 closeit, flags);
1603 }
1604 flush_io();
1605 if (v == NULL) {
1606 PyErr_Print();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001607 goto done;
1608 }
1609 Py_DECREF(v);
1610 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001611 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001612 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1613 PyErr_Clear();
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001614 Py_DECREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001615 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001616}
1617
1618int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001619PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001620{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001621 PyObject *m, *d, *v;
1622 m = PyImport_AddModule("__main__");
1623 if (m == NULL)
1624 return -1;
1625 d = PyModule_GetDict(m);
1626 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1627 if (v == NULL) {
1628 PyErr_Print();
1629 return -1;
1630 }
1631 Py_DECREF(v);
1632 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001633}
1634
Barry Warsaw035574d1997-08-29 22:07:17 +00001635static int
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001636parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename,
1637 int *lineno, int *offset, PyObject **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001638{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001639 long hold;
1640 PyObject *v;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001641 _Py_IDENTIFIER(msg);
1642 _Py_IDENTIFIER(filename);
1643 _Py_IDENTIFIER(lineno);
1644 _Py_IDENTIFIER(offset);
1645 _Py_IDENTIFIER(text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001646
Benjamin Peterson80d50422012-04-03 00:30:38 -04001647 *message = NULL;
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001648 *filename = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001649
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001650 /* new style errors. `err' is an instance */
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001651 *message = _PyObject_GetAttrId(err, &PyId_msg);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001652 if (!*message)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001653 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001654
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001655 v = _PyObject_GetAttrId(err, &PyId_filename);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001656 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001657 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001658 if (v == Py_None) {
1659 Py_DECREF(v);
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001660 *filename = _PyUnicode_FromId(&PyId_string);
1661 if (*filename == NULL)
1662 goto finally;
1663 Py_INCREF(*filename);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001664 }
1665 else {
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001666 *filename = v;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001667 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001668
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001669 v = _PyObject_GetAttrId(err, &PyId_lineno);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001670 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001671 goto finally;
1672 hold = PyLong_AsLong(v);
1673 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001674 if (hold < 0 && PyErr_Occurred())
1675 goto finally;
1676 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001677
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001678 v = _PyObject_GetAttrId(err, &PyId_offset);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001679 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001680 goto finally;
1681 if (v == Py_None) {
1682 *offset = -1;
1683 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001684 } else {
1685 hold = PyLong_AsLong(v);
1686 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001687 if (hold < 0 && PyErr_Occurred())
1688 goto finally;
1689 *offset = (int)hold;
1690 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001691
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001692 v = _PyObject_GetAttrId(err, &PyId_text);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001693 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001694 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001695 if (v == Py_None) {
1696 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001697 *text = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001698 }
1699 else {
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001700 *text = v;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001701 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001702 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001703
1704finally:
Benjamin Peterson80d50422012-04-03 00:30:38 -04001705 Py_XDECREF(*message);
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001706 Py_XDECREF(*filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001707 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001708}
1709
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001710void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001711PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001712{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001713 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001714}
1715
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001716static void
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001717print_error_text(PyObject *f, int offset, PyObject *text_obj)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001718{
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001719 char *text;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001720 char *nl;
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001721
1722 text = _PyUnicode_AsString(text_obj);
1723 if (text == NULL)
1724 return;
1725
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001726 if (offset >= 0) {
Benjamin Petersona95e9772010-10-29 03:28:14 +00001727 if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n')
1728 offset--;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001729 for (;;) {
1730 nl = strchr(text, '\n');
1731 if (nl == NULL || nl-text >= offset)
1732 break;
1733 offset -= (int)(nl+1-text);
1734 text = nl+1;
1735 }
1736 while (*text == ' ' || *text == '\t') {
1737 text++;
1738 offset--;
1739 }
1740 }
1741 PyFile_WriteString(" ", f);
1742 PyFile_WriteString(text, f);
1743 if (*text == '\0' || text[strlen(text)-1] != '\n')
1744 PyFile_WriteString("\n", f);
1745 if (offset == -1)
1746 return;
1747 PyFile_WriteString(" ", f);
Benjamin Petersona95e9772010-10-29 03:28:14 +00001748 while (--offset > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001749 PyFile_WriteString(" ", f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001750 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001751}
1752
Guido van Rossum66e8e862001-03-23 17:54:43 +00001753static void
1754handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001755{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001756 PyObject *exception, *value, *tb;
1757 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001758
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001759 if (Py_InspectFlag)
1760 /* Don't exit if -i flag was given. This flag is set to 0
1761 * when entering interactive mode for inspecting. */
1762 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001763
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001764 PyErr_Fetch(&exception, &value, &tb);
1765 fflush(stdout);
1766 if (value == NULL || value == Py_None)
1767 goto done;
1768 if (PyExceptionInstance_Check(value)) {
1769 /* The error code should be in the `code' attribute. */
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001770 _Py_IDENTIFIER(code);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001771 PyObject *code = _PyObject_GetAttrId(value, &PyId_code);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001772 if (code) {
1773 Py_DECREF(value);
1774 value = code;
1775 if (value == Py_None)
1776 goto done;
1777 }
1778 /* If we failed to dig out the 'code' attribute,
1779 just let the else clause below print the error. */
1780 }
1781 if (PyLong_Check(value))
1782 exitcode = (int)PyLong_AsLong(value);
1783 else {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001784 PyObject *sys_stderr = _PySys_GetObjectId(&PyId_stderr);
Nick Coghland979e432014-02-09 10:43:21 +10001785 /* We clear the exception here to avoid triggering the assertion
1786 * in PyObject_Str that ensures it won't silently lose exception
1787 * details.
1788 */
1789 PyErr_Clear();
Victor Stinner7126dbc2010-05-21 23:45:42 +00001790 if (sys_stderr != NULL && sys_stderr != Py_None) {
1791 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1792 } else {
1793 PyObject_Print(value, stderr, Py_PRINT_RAW);
1794 fflush(stderr);
1795 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001796 PySys_WriteStderr("\n");
1797 exitcode = 1;
1798 }
Tim Peterscf615b52003-04-19 18:47:02 +00001799 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001800 /* Restore and clear the exception info, in order to properly decref
1801 * the exception, value, and traceback. If we just exit instead,
1802 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1803 * some finalizers from running.
1804 */
1805 PyErr_Restore(exception, value, tb);
1806 PyErr_Clear();
1807 Py_Exit(exitcode);
1808 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001809}
1810
1811void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001812PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001813{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001814 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001815
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001816 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1817 handle_system_exit();
1818 }
1819 PyErr_Fetch(&exception, &v, &tb);
1820 if (exception == NULL)
1821 return;
1822 PyErr_NormalizeException(&exception, &v, &tb);
1823 if (tb == NULL) {
1824 tb = Py_None;
1825 Py_INCREF(tb);
1826 }
1827 PyException_SetTraceback(v, tb);
1828 if (exception == NULL)
1829 return;
1830 /* Now we know v != NULL too */
1831 if (set_sys_last_vars) {
Victor Stinner09054372013-11-06 22:41:44 +01001832 _PySys_SetObjectId(&PyId_last_type, exception);
1833 _PySys_SetObjectId(&PyId_last_value, v);
1834 _PySys_SetObjectId(&PyId_last_traceback, tb);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001835 }
Victor Stinner09054372013-11-06 22:41:44 +01001836 hook = _PySys_GetObjectId(&PyId_excepthook);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001837 if (hook) {
1838 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1839 PyObject *result = PyEval_CallObject(hook, args);
1840 if (result == NULL) {
1841 PyObject *exception2, *v2, *tb2;
1842 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1843 handle_system_exit();
1844 }
1845 PyErr_Fetch(&exception2, &v2, &tb2);
1846 PyErr_NormalizeException(&exception2, &v2, &tb2);
1847 /* It should not be possible for exception2 or v2
1848 to be NULL. However PyErr_Display() can't
1849 tolerate NULLs, so just be safe. */
1850 if (exception2 == NULL) {
1851 exception2 = Py_None;
1852 Py_INCREF(exception2);
1853 }
1854 if (v2 == NULL) {
1855 v2 = Py_None;
1856 Py_INCREF(v2);
1857 }
1858 fflush(stdout);
1859 PySys_WriteStderr("Error in sys.excepthook:\n");
1860 PyErr_Display(exception2, v2, tb2);
1861 PySys_WriteStderr("\nOriginal exception was:\n");
1862 PyErr_Display(exception, v, tb);
1863 Py_DECREF(exception2);
1864 Py_DECREF(v2);
1865 Py_XDECREF(tb2);
1866 }
1867 Py_XDECREF(result);
1868 Py_XDECREF(args);
1869 } else {
1870 PySys_WriteStderr("sys.excepthook is missing\n");
1871 PyErr_Display(exception, v, tb);
1872 }
1873 Py_XDECREF(exception);
1874 Py_XDECREF(v);
1875 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001876}
1877
Benjamin Petersone6528212008-07-15 15:32:09 +00001878static void
1879print_exception(PyObject *f, PyObject *value)
1880{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001881 int err = 0;
1882 PyObject *type, *tb;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001883 _Py_IDENTIFIER(print_file_and_line);
Benjamin Petersone6528212008-07-15 15:32:09 +00001884
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001885 if (!PyExceptionInstance_Check(value)) {
Victor Stinner52ce3b02013-12-09 02:10:08 +01001886 err = PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1887 err += PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1888 err += PyFile_WriteString(" found\n", f);
1889 if (err)
1890 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001891 return;
1892 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001893
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001894 Py_INCREF(value);
1895 fflush(stdout);
1896 type = (PyObject *) Py_TYPE(value);
1897 tb = PyException_GetTraceback(value);
1898 if (tb && tb != Py_None)
1899 err = PyTraceBack_Print(tb, f);
1900 if (err == 0 &&
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001901 _PyObject_HasAttrId(value, &PyId_print_file_and_line))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001902 {
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001903 PyObject *message, *filename, *text;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001904 int lineno, offset;
1905 if (!parse_syntax_error(value, &message, &filename,
1906 &lineno, &offset, &text))
1907 PyErr_Clear();
1908 else {
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001909 PyObject *line;
1910
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001911 Py_DECREF(value);
1912 value = message;
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001913
1914 line = PyUnicode_FromFormat(" File \"%U\", line %d\n",
1915 filename, lineno);
1916 Py_DECREF(filename);
1917 if (line != NULL) {
1918 PyFile_WriteObject(line, f, Py_PRINT_RAW);
1919 Py_DECREF(line);
1920 }
1921
1922 if (text != NULL) {
1923 print_error_text(f, offset, text);
1924 Py_DECREF(text);
1925 }
1926
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001927 /* Can't be bothered to check all those
1928 PyFile_WriteString() calls */
1929 if (PyErr_Occurred())
1930 err = -1;
1931 }
1932 }
1933 if (err) {
1934 /* Don't do anything else */
1935 }
1936 else {
1937 PyObject* moduleName;
1938 char* className;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001939 _Py_IDENTIFIER(__module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001940 assert(PyExceptionClass_Check(type));
1941 className = PyExceptionClass_Name(type);
1942 if (className != NULL) {
1943 char *dot = strrchr(className, '.');
1944 if (dot != NULL)
1945 className = dot+1;
1946 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001947
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001948 moduleName = _PyObject_GetAttrId(type, &PyId___module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001949 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1950 {
Victor Stinner13b21bd2011-05-26 14:25:13 +02001951 Py_XDECREF(moduleName);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001952 err = PyFile_WriteString("<unknown>", f);
1953 }
1954 else {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001955 if (_PyUnicode_CompareWithId(moduleName, &PyId_builtins) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001956 {
Victor Stinner937114f2013-11-07 00:12:30 +01001957 err = PyFile_WriteObject(moduleName, f, Py_PRINT_RAW);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001958 err += PyFile_WriteString(".", f);
1959 }
1960 Py_DECREF(moduleName);
1961 }
1962 if (err == 0) {
1963 if (className == NULL)
1964 err = PyFile_WriteString("<unknown>", f);
1965 else
1966 err = PyFile_WriteString(className, f);
1967 }
1968 }
1969 if (err == 0 && (value != Py_None)) {
1970 PyObject *s = PyObject_Str(value);
1971 /* only print colon if the str() of the
1972 object is not the empty string
1973 */
1974 if (s == NULL)
1975 err = -1;
1976 else if (!PyUnicode_Check(s) ||
Victor Stinnere251d6d2011-11-20 19:20:00 +01001977 PyUnicode_GetLength(s) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001978 err = PyFile_WriteString(": ", f);
1979 if (err == 0)
1980 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1981 Py_XDECREF(s);
1982 }
1983 /* try to write a newline in any case */
1984 err += PyFile_WriteString("\n", f);
1985 Py_XDECREF(tb);
1986 Py_DECREF(value);
1987 /* If an error happened here, don't show it.
1988 XXX This is wrong, but too many callers rely on this behavior. */
1989 if (err != 0)
1990 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001991}
1992
1993static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001994 "\nThe above exception was the direct cause "
1995 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001996
1997static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001998 "\nDuring handling of the above exception, "
1999 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00002000
2001static void
2002print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
2003{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002004 int err = 0, res;
2005 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00002006
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002007 if (seen != NULL) {
2008 /* Exception chaining */
2009 if (PySet_Add(seen, value) == -1)
2010 PyErr_Clear();
2011 else if (PyExceptionInstance_Check(value)) {
2012 cause = PyException_GetCause(value);
2013 context = PyException_GetContext(value);
Benjamin Petersond5a1c442012-05-14 22:09:31 -07002014 if (cause) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002015 res = PySet_Contains(seen, cause);
2016 if (res == -1)
2017 PyErr_Clear();
2018 if (res == 0) {
2019 print_exception_recursive(
2020 f, cause, seen);
2021 err |= PyFile_WriteString(
2022 cause_message, f);
2023 }
2024 }
Benjamin Petersond5a1c442012-05-14 22:09:31 -07002025 else if (context &&
2026 !((PyBaseExceptionObject *)value)->suppress_context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002027 res = PySet_Contains(seen, context);
2028 if (res == -1)
2029 PyErr_Clear();
2030 if (res == 0) {
2031 print_exception_recursive(
2032 f, context, seen);
2033 err |= PyFile_WriteString(
2034 context_message, f);
2035 }
2036 }
2037 Py_XDECREF(context);
2038 Py_XDECREF(cause);
2039 }
2040 }
2041 print_exception(f, value);
2042 if (err != 0)
2043 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00002044}
2045
Thomas Wouters477c8d52006-05-27 19:21:47 +00002046void
2047PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00002048{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002049 PyObject *seen;
Victor Stinnerbd303c12013-11-07 23:07:29 +01002050 PyObject *f = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrou24201d42013-10-13 21:53:13 +02002051 if (PyExceptionInstance_Check(value)
2052 && tb != NULL && PyTraceBack_Check(tb)) {
2053 /* Put the traceback on the exception, otherwise it won't get
2054 displayed. See issue #18776. */
2055 PyObject *cur_tb = PyException_GetTraceback(value);
2056 if (cur_tb == NULL)
2057 PyException_SetTraceback(value, tb);
2058 else
2059 Py_DECREF(cur_tb);
2060 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002061 if (f == Py_None) {
2062 /* pass */
2063 }
2064 else if (f == NULL) {
2065 _PyObject_Dump(value);
2066 fprintf(stderr, "lost sys.stderr\n");
2067 }
2068 else {
2069 /* We choose to ignore seen being possibly NULL, and report
2070 at least the main exception (it could be a MemoryError).
2071 */
2072 seen = PySet_New(NULL);
2073 if (seen == NULL)
2074 PyErr_Clear();
2075 print_exception_recursive(f, value, seen);
2076 Py_XDECREF(seen);
2077 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002078}
2079
Guido van Rossum82598051997-03-05 00:20:32 +00002080PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002081PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002082 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002083{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002084 PyObject *ret = NULL;
2085 mod_ty mod;
Victor Stinner95701bd2013-11-06 18:41:07 +01002086 PyArena *arena;
Victor Stinner95701bd2013-11-06 18:41:07 +01002087 PyObject *filename;
2088
2089 filename = _PyUnicode_FromId(&PyId_string); /* borrowed */
2090 if (filename == NULL)
2091 return NULL;
2092
2093 arena = PyArena_New();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002094 if (arena == NULL)
2095 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00002096
Victor Stinner95701bd2013-11-06 18:41:07 +01002097 mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002098 if (mod != NULL)
Victor Stinner95701bd2013-11-06 18:41:07 +01002099 ret = run_mod(mod, filename, globals, locals, flags, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002100 PyArena_Free(arena);
2101 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00002102}
2103
2104PyObject *
Victor Stinner95701bd2013-11-06 18:41:07 +01002105PyRun_FileExFlags(FILE *fp, const char *filename_str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002106 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00002107{
Victor Stinner95701bd2013-11-06 18:41:07 +01002108 PyObject *ret = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002109 mod_ty mod;
Victor Stinner95701bd2013-11-06 18:41:07 +01002110 PyArena *arena = NULL;
2111 PyObject *filename;
Guido van Rossum98297ee2007-11-06 21:34:58 +00002112
Victor Stinner95701bd2013-11-06 18:41:07 +01002113 filename = PyUnicode_DecodeFSDefault(filename_str);
2114 if (filename == NULL)
2115 goto exit;
2116
2117 arena = PyArena_New();
2118 if (arena == NULL)
2119 goto exit;
2120
2121 mod = PyParser_ASTFromFileObject(fp, filename, NULL, start, 0, 0,
2122 flags, NULL, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002123 if (closeit)
2124 fclose(fp);
2125 if (mod == NULL) {
Victor Stinner95701bd2013-11-06 18:41:07 +01002126 goto exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002127 }
2128 ret = run_mod(mod, filename, globals, locals, flags, arena);
Victor Stinner95701bd2013-11-06 18:41:07 +01002129
2130exit:
2131 Py_XDECREF(filename);
2132 if (arena != NULL)
2133 PyArena_Free(arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002134 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00002135}
2136
Guido van Rossum6c193fa2007-12-05 05:14:58 +00002137static void
2138flush_io(void)
2139{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002140 PyObject *f, *r;
2141 PyObject *type, *value, *traceback;
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00002142
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002143 /* Save the current exception */
2144 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00002145
Victor Stinnerbd303c12013-11-07 23:07:29 +01002146 f = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002147 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002148 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002149 if (r)
2150 Py_DECREF(r);
2151 else
2152 PyErr_Clear();
2153 }
Victor Stinnerbd303c12013-11-07 23:07:29 +01002154 f = _PySys_GetObjectId(&PyId_stdout);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002155 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002156 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002157 if (r)
2158 Py_DECREF(r);
2159 else
2160 PyErr_Clear();
2161 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00002162
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002163 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00002164}
2165
Guido van Rossum82598051997-03-05 00:20:32 +00002166static PyObject *
Victor Stinner95701bd2013-11-06 18:41:07 +01002167run_mod(mod_ty mod, PyObject *filename, PyObject *globals, PyObject *locals,
2168 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002169{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002170 PyCodeObject *co;
2171 PyObject *v;
Victor Stinner95701bd2013-11-06 18:41:07 +01002172 co = PyAST_CompileObject(mod, filename, flags, -1, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002173 if (co == NULL)
2174 return NULL;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002175 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002176 Py_DECREF(co);
2177 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002178}
2179
Guido van Rossum82598051997-03-05 00:20:32 +00002180static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002181run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002182 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00002183{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002184 PyCodeObject *co;
2185 PyObject *v;
2186 long magic;
2187 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00002188
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002189 magic = PyMarshal_ReadLongFromFile(fp);
2190 if (magic != PyImport_GetMagicNumber()) {
2191 PyErr_SetString(PyExc_RuntimeError,
2192 "Bad magic number in .pyc file");
2193 return NULL;
2194 }
Antoine Pitrou5136ac02012-01-13 18:52:16 +01002195 /* Skip mtime and size */
2196 (void) PyMarshal_ReadLongFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002197 (void) PyMarshal_ReadLongFromFile(fp);
2198 v = PyMarshal_ReadLastObjectFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002199 if (v == NULL || !PyCode_Check(v)) {
2200 Py_XDECREF(v);
2201 PyErr_SetString(PyExc_RuntimeError,
2202 "Bad code object in .pyc file");
2203 return NULL;
2204 }
2205 co = (PyCodeObject *)v;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002206 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002207 if (v && flags)
2208 flags->cf_flags |= (co->co_flags & PyCF_MASK);
2209 Py_DECREF(co);
2210 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00002211}
2212
Guido van Rossum82598051997-03-05 00:20:32 +00002213PyObject *
Victor Stinner14e461d2013-08-26 22:28:21 +02002214Py_CompileStringObject(const char *str, PyObject *filename, int start,
2215 PyCompilerFlags *flags, int optimize)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00002216{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002217 PyCodeObject *co;
2218 mod_ty mod;
2219 PyArena *arena = PyArena_New();
2220 if (arena == NULL)
2221 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002222
Victor Stinner14e461d2013-08-26 22:28:21 +02002223 mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002224 if (mod == NULL) {
2225 PyArena_Free(arena);
2226 return NULL;
2227 }
2228 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
2229 PyObject *result = PyAST_mod2obj(mod);
2230 PyArena_Free(arena);
2231 return result;
2232 }
Victor Stinner14e461d2013-08-26 22:28:21 +02002233 co = PyAST_CompileObject(mod, filename, flags, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002234 PyArena_Free(arena);
2235 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00002236}
2237
Victor Stinner14e461d2013-08-26 22:28:21 +02002238PyObject *
2239Py_CompileStringExFlags(const char *str, const char *filename_str, int start,
2240 PyCompilerFlags *flags, int optimize)
2241{
2242 PyObject *filename, *co;
2243 filename = PyUnicode_DecodeFSDefault(filename_str);
2244 if (filename == NULL)
2245 return NULL;
2246 co = Py_CompileStringObject(str, filename, start, flags, optimize);
2247 Py_DECREF(filename);
2248 return co;
2249}
2250
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002251/* For use in Py_LIMITED_API */
2252#undef Py_CompileString
2253PyObject *
2254PyCompileString(const char *str, const char *filename, int start)
2255{
2256 return Py_CompileStringFlags(str, filename, start, NULL);
2257}
2258
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002259struct symtable *
Victor Stinner14e461d2013-08-26 22:28:21 +02002260Py_SymtableStringObject(const char *str, PyObject *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002261{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002262 struct symtable *st;
2263 mod_ty mod;
2264 PyCompilerFlags flags;
Victor Stinner14e461d2013-08-26 22:28:21 +02002265 PyArena *arena;
2266
2267 arena = PyArena_New();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002268 if (arena == NULL)
2269 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002270
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002271 flags.cf_flags = 0;
Victor Stinner14e461d2013-08-26 22:28:21 +02002272 mod = PyParser_ASTFromStringObject(str, filename, start, &flags, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002273 if (mod == NULL) {
2274 PyArena_Free(arena);
2275 return NULL;
2276 }
Victor Stinner14e461d2013-08-26 22:28:21 +02002277 st = PySymtable_BuildObject(mod, filename, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002278 PyArena_Free(arena);
2279 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002280}
2281
Victor Stinner14e461d2013-08-26 22:28:21 +02002282struct symtable *
2283Py_SymtableString(const char *str, const char *filename_str, int start)
2284{
2285 PyObject *filename;
2286 struct symtable *st;
2287
2288 filename = PyUnicode_DecodeFSDefault(filename_str);
2289 if (filename == NULL)
2290 return NULL;
2291 st = Py_SymtableStringObject(str, filename, start);
2292 Py_DECREF(filename);
2293 return st;
2294}
2295
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002296/* Preferred access to parser is through AST. */
2297mod_ty
Victor Stinner14e461d2013-08-26 22:28:21 +02002298PyParser_ASTFromStringObject(const char *s, PyObject *filename, int start,
2299 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002300{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002301 mod_ty mod;
2302 PyCompilerFlags localflags;
2303 perrdetail err;
2304 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002305
Victor Stinner14e461d2013-08-26 22:28:21 +02002306 node *n = PyParser_ParseStringObject(s, filename,
2307 &_PyParser_Grammar, start, &err,
2308 &iflags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002309 if (flags == NULL) {
2310 localflags.cf_flags = 0;
2311 flags = &localflags;
2312 }
2313 if (n) {
2314 flags->cf_flags |= iflags & PyCF_MASK;
Victor Stinner14e461d2013-08-26 22:28:21 +02002315 mod = PyAST_FromNodeObject(n, flags, filename, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002316 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002317 }
2318 else {
2319 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002320 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002321 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002322 err_free(&err);
2323 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002324}
2325
2326mod_ty
Victor Stinner14e461d2013-08-26 22:28:21 +02002327PyParser_ASTFromString(const char *s, const char *filename_str, int start,
2328 PyCompilerFlags *flags, PyArena *arena)
2329{
2330 PyObject *filename;
2331 mod_ty mod;
2332 filename = PyUnicode_DecodeFSDefault(filename_str);
2333 if (filename == NULL)
2334 return NULL;
2335 mod = PyParser_ASTFromStringObject(s, filename, start, flags, arena);
2336 Py_DECREF(filename);
2337 return mod;
2338}
2339
2340mod_ty
2341PyParser_ASTFromFileObject(FILE *fp, PyObject *filename, const char* enc,
2342 int start, char *ps1,
2343 char *ps2, PyCompilerFlags *flags, int *errcode,
2344 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002345{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002346 mod_ty mod;
2347 PyCompilerFlags localflags;
2348 perrdetail err;
2349 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002350
Victor Stinner14e461d2013-08-26 22:28:21 +02002351 node *n = PyParser_ParseFileObject(fp, filename, enc,
2352 &_PyParser_Grammar,
2353 start, ps1, ps2, &err, &iflags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002354 if (flags == NULL) {
2355 localflags.cf_flags = 0;
2356 flags = &localflags;
2357 }
2358 if (n) {
2359 flags->cf_flags |= iflags & PyCF_MASK;
Victor Stinner14e461d2013-08-26 22:28:21 +02002360 mod = PyAST_FromNodeObject(n, flags, filename, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002361 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002362 }
2363 else {
2364 err_input(&err);
2365 if (errcode)
2366 *errcode = err.error;
Victor Stinner7f2fee32011-04-05 00:39:01 +02002367 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002368 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002369 err_free(&err);
2370 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002371}
2372
Victor Stinner14e461d2013-08-26 22:28:21 +02002373mod_ty
2374PyParser_ASTFromFile(FILE *fp, const char *filename_str, const char* enc,
2375 int start, char *ps1,
2376 char *ps2, PyCompilerFlags *flags, int *errcode,
2377 PyArena *arena)
2378{
2379 mod_ty mod;
2380 PyObject *filename;
2381 filename = PyUnicode_DecodeFSDefault(filename_str);
2382 if (filename == NULL)
2383 return NULL;
2384 mod = PyParser_ASTFromFileObject(fp, filename, enc, start, ps1, ps2,
2385 flags, errcode, arena);
2386 Py_DECREF(filename);
2387 return mod;
2388}
2389
Guido van Rossuma110aa61994-08-29 12:50:44 +00002390/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002391
Guido van Rossuma110aa61994-08-29 12:50:44 +00002392node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002393PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002394{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002395 perrdetail err;
2396 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
2397 &_PyParser_Grammar,
2398 start, NULL, NULL, &err, flags);
2399 if (n == NULL)
2400 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002401 err_free(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002402
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002403 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002404}
2405
Guido van Rossuma110aa61994-08-29 12:50:44 +00002406/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002407
Guido van Rossuma110aa61994-08-29 12:50:44 +00002408node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002409PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00002410{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002411 perrdetail err;
2412 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
2413 start, &err, flags);
2414 if (n == NULL)
2415 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002416 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002417 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00002418}
2419
2420node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002421PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002422 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002423{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002424 perrdetail err;
2425 node *n = PyParser_ParseStringFlagsFilename(str, filename,
2426 &_PyParser_Grammar, start, &err, flags);
2427 if (n == NULL)
2428 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002429 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002430 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00002431}
2432
2433node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002434PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002435{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002436 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00002437}
2438
Guido van Rossum66ebd912003-04-17 16:02:26 +00002439/* May want to move a more generalized form of this to parsetok.c or
2440 even parser modules. */
2441
2442void
Victor Stinner7f2fee32011-04-05 00:39:01 +02002443PyParser_ClearError(perrdetail *err)
2444{
2445 err_free(err);
2446}
2447
2448void
Guido van Rossum66ebd912003-04-17 16:02:26 +00002449PyParser_SetError(perrdetail *err)
2450{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002451 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00002452}
2453
Victor Stinner7f2fee32011-04-05 00:39:01 +02002454static void
2455err_free(perrdetail *err)
2456{
2457 Py_CLEAR(err->filename);
2458}
2459
Guido van Rossuma110aa61994-08-29 12:50:44 +00002460/* Set the error appropriate to the given input error code (see errcode.h) */
2461
2462static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002463err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00002464{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002465 PyObject *v, *w, *errtype, *errtext;
2466 PyObject *msg_obj = NULL;
2467 char *msg = NULL;
Serhiy Storchaka65fd0592014-01-21 22:26:52 +02002468 int offset = err->offset;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002469
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002470 errtype = PyExc_SyntaxError;
2471 switch (err->error) {
2472 case E_ERROR:
2473 return;
2474 case E_SYNTAX:
2475 errtype = PyExc_IndentationError;
2476 if (err->expected == INDENT)
2477 msg = "expected an indented block";
2478 else if (err->token == INDENT)
2479 msg = "unexpected indent";
2480 else if (err->token == DEDENT)
2481 msg = "unexpected unindent";
2482 else {
2483 errtype = PyExc_SyntaxError;
2484 msg = "invalid syntax";
2485 }
2486 break;
2487 case E_TOKEN:
2488 msg = "invalid token";
2489 break;
2490 case E_EOFS:
2491 msg = "EOF while scanning triple-quoted string literal";
2492 break;
2493 case E_EOLS:
2494 msg = "EOL while scanning string literal";
2495 break;
2496 case E_INTR:
2497 if (!PyErr_Occurred())
2498 PyErr_SetNone(PyExc_KeyboardInterrupt);
2499 goto cleanup;
2500 case E_NOMEM:
2501 PyErr_NoMemory();
2502 goto cleanup;
2503 case E_EOF:
2504 msg = "unexpected EOF while parsing";
2505 break;
2506 case E_TABSPACE:
2507 errtype = PyExc_TabError;
2508 msg = "inconsistent use of tabs and spaces in indentation";
2509 break;
2510 case E_OVERFLOW:
2511 msg = "expression too long";
2512 break;
2513 case E_DEDENT:
2514 errtype = PyExc_IndentationError;
2515 msg = "unindent does not match any outer indentation level";
2516 break;
2517 case E_TOODEEP:
2518 errtype = PyExc_IndentationError;
2519 msg = "too many levels of indentation";
2520 break;
2521 case E_DECODE: {
2522 PyObject *type, *value, *tb;
2523 PyErr_Fetch(&type, &value, &tb);
2524 msg = "unknown decode error";
2525 if (value != NULL)
2526 msg_obj = PyObject_Str(value);
2527 Py_XDECREF(type);
2528 Py_XDECREF(value);
2529 Py_XDECREF(tb);
2530 break;
2531 }
2532 case E_LINECONT:
2533 msg = "unexpected character after line continuation character";
2534 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002535
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002536 case E_IDENTIFIER:
2537 msg = "invalid character in identifier";
2538 break;
Meador Ingefa21bf02012-01-19 01:08:41 -06002539 case E_BADSINGLE:
2540 msg = "multiple statements found while compiling a single statement";
2541 break;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002542 default:
2543 fprintf(stderr, "error=%d\n", err->error);
2544 msg = "unknown parsing error";
2545 break;
2546 }
2547 /* err->text may not be UTF-8 in case of decoding errors.
2548 Explicitly convert to an object. */
2549 if (!err->text) {
2550 errtext = Py_None;
2551 Py_INCREF(Py_None);
2552 } else {
Serhiy Storchaka65fd0592014-01-21 22:26:52 +02002553 errtext = PyUnicode_DecodeUTF8(err->text, err->offset,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002554 "replace");
Serhiy Storchaka65fd0592014-01-21 22:26:52 +02002555 if (errtext != NULL) {
2556 Py_ssize_t len = strlen(err->text);
2557 offset = (int)PyUnicode_GET_LENGTH(errtext);
2558 if (len != err->offset) {
2559 Py_DECREF(errtext);
2560 errtext = PyUnicode_DecodeUTF8(err->text, len,
2561 "replace");
2562 }
2563 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002564 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002565 v = Py_BuildValue("(OiiN)", err->filename,
Serhiy Storchaka65fd0592014-01-21 22:26:52 +02002566 err->lineno, offset, errtext);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002567 if (v != NULL) {
2568 if (msg_obj)
2569 w = Py_BuildValue("(OO)", msg_obj, v);
2570 else
2571 w = Py_BuildValue("(sO)", msg, v);
2572 } else
2573 w = NULL;
2574 Py_XDECREF(v);
2575 PyErr_SetObject(errtype, w);
2576 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002577cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002578 Py_XDECREF(msg_obj);
2579 if (err->text != NULL) {
2580 PyObject_FREE(err->text);
2581 err->text = NULL;
2582 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002583}
2584
Victor Stinner0e98a762015-03-24 11:24:06 +01002585/* Print the current exception (if an exception is set) with its traceback,
2586 * or display the current Python stack.
2587 *
2588 * Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
2589 * called on catastrophic cases. */
2590
2591static void
2592_Py_PrintFatalError(int fd)
2593{
Victor Stinnerec4f9592015-03-24 13:44:35 +01002594 PyObject *ferr, *res;
Victor Stinner0e98a762015-03-24 11:24:06 +01002595 PyObject *exception, *v, *tb;
2596 int has_tb;
2597 PyThreadState *tstate;
2598
2599 PyErr_Fetch(&exception, &v, &tb);
2600 if (exception == NULL) {
2601 /* No current exception */
2602 goto display_stack;
2603 }
2604
Victor Stinnerec4f9592015-03-24 13:44:35 +01002605 ferr = _PySys_GetObjectId(&PyId_stderr);
2606 if (ferr == NULL || ferr == Py_None) {
2607 /* sys.stderr is not set yet or set to None,
2608 no need to try to display the exception */
2609 goto display_stack;
2610 }
2611
Victor Stinner0e98a762015-03-24 11:24:06 +01002612 PyErr_NormalizeException(&exception, &v, &tb);
2613 if (tb == NULL) {
2614 tb = Py_None;
2615 Py_INCREF(tb);
2616 }
2617 PyException_SetTraceback(v, tb);
2618 if (exception == NULL) {
Victor Stinnerec4f9592015-03-24 13:44:35 +01002619 /* PyErr_NormalizeException() failed */
Victor Stinner0e98a762015-03-24 11:24:06 +01002620 goto display_stack;
2621 }
2622
2623 has_tb = (tb != NULL && tb != Py_None);
2624 PyErr_Display(exception, v, tb);
2625 Py_XDECREF(exception);
2626 Py_XDECREF(v);
2627 Py_XDECREF(tb);
Victor Stinnerec4f9592015-03-24 13:44:35 +01002628
2629 /* sys.stderr may be buffered: call sys.stderr.flush() */
2630 res = _PyObject_CallMethodId(ferr, &PyId_flush, "");
2631 if (res == NULL)
2632 PyErr_Clear();
2633 else
2634 Py_DECREF(res);
2635
Victor Stinner0e98a762015-03-24 11:24:06 +01002636 if (has_tb)
2637 return;
2638
2639display_stack:
Berker Peksag0bd5fb02015-07-27 16:46:11 +03002640#ifdef WITH_THREAD
Victor Stinner0e98a762015-03-24 11:24:06 +01002641 /* PyGILState_GetThisThreadState() works even if the GIL was released */
2642 tstate = PyGILState_GetThisThreadState();
Berker Peksag0bd5fb02015-07-27 16:46:11 +03002643#else
2644 tstate = PyThreadState_GET();
2645#endif
Victor Stinner0e98a762015-03-24 11:24:06 +01002646 if (tstate == NULL) {
2647 /* _Py_DumpTracebackThreads() requires the thread state to display
2648 * frames */
2649 return;
2650 }
2651
2652 fputc('\n', stderr);
2653 fflush(stderr);
2654
2655 /* display the current Python stack */
2656 _Py_DumpTracebackThreads(fd, tstate->interp, tstate);
2657}
2658
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002659/* Print fatal error message and abort */
2660
2661void
Tim Peters7c321a82002-07-09 02:57:01 +00002662Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002663{
Victor Stinner024e37a2011-03-31 01:31:06 +02002664 const int fd = fileno(stderr);
Victor Stinner84092ac2015-03-25 01:54:46 +01002665 static int reentrant = 0;
2666#ifdef MS_WINDOWS
2667 size_t len;
2668 WCHAR* buffer;
2669 size_t i;
2670#endif
2671
2672 if (reentrant) {
2673 /* Py_FatalError() caused a second fatal error.
2674 Example: flush_std_files() raises a recursion error. */
2675 goto exit;
2676 }
2677 reentrant = 1;
Victor Stinner024e37a2011-03-31 01:31:06 +02002678
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002679 fprintf(stderr, "Fatal Python error: %s\n", msg);
2680 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner0e98a762015-03-24 11:24:06 +01002681
Victor Stinnerec4f9592015-03-24 13:44:35 +01002682 /* Print the exception (if an exception is set) with its traceback,
2683 * or display the current Python stack. */
Victor Stinner0e98a762015-03-24 11:24:06 +01002684 _Py_PrintFatalError(fd);
2685
Victor Stinnerec4f9592015-03-24 13:44:35 +01002686 /* Flush sys.stdout and sys.stderr */
2687 flush_std_files();
2688
Victor Stinner0e98a762015-03-24 11:24:06 +01002689 /* The main purpose of faulthandler is to display the traceback. We already
Victor Stinnerec4f9592015-03-24 13:44:35 +01002690 * did our best to display it. So faulthandler can now be disabled.
2691 * (Don't trigger it on abort().) */
Victor Stinner0e98a762015-03-24 11:24:06 +01002692 _PyFaulthandler_Fini();
Victor Stinner024e37a2011-03-31 01:31:06 +02002693
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002694#ifdef MS_WINDOWS
Victor Stinner84092ac2015-03-25 01:54:46 +01002695 len = strlen(msg);
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002696
Victor Stinner84092ac2015-03-25 01:54:46 +01002697 /* Convert the message to wchar_t. This uses a simple one-to-one
2698 conversion, assuming that the this error message actually uses ASCII
2699 only. If this ceases to be true, we will have to convert. */
2700 buffer = alloca( (len+1) * (sizeof *buffer));
2701 for( i=0; i<=len; ++i)
2702 buffer[i] = msg[i];
2703 OutputDebugStringW(L"Fatal Python error: ");
2704 OutputDebugStringW(buffer);
2705 OutputDebugStringW(L"\n");
2706#endif /* MS_WINDOWS */
2707
2708exit:
2709#if defined(MS_WINDOWS) && defined(_DEBUG)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002710 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002711#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002712 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002713}
2714
2715/* Clean up and exit */
2716
Guido van Rossuma110aa61994-08-29 12:50:44 +00002717#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002718#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002719#endif
2720
Collin Winter670e6922007-03-21 02:57:17 +00002721static void (*pyexitfunc)(void) = NULL;
2722/* For the atexit module. */
2723void _Py_PyAtExit(void (*func)(void))
2724{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002725 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002726}
2727
2728static void
2729call_py_exitfuncs(void)
2730{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002731 if (pyexitfunc == NULL)
2732 return;
Collin Winter670e6922007-03-21 02:57:17 +00002733
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002734 (*pyexitfunc)();
2735 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002736}
2737
Antoine Pitrou011bd622009-10-20 21:52:47 +00002738/* Wait until threading._shutdown completes, provided
2739 the threading module was imported in the first place.
2740 The shutdown routine will wait until all non-daemon
2741 "threading" threads have completed. */
2742static void
2743wait_for_thread_shutdown(void)
2744{
2745#ifdef WITH_THREAD
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002746 _Py_IDENTIFIER(_shutdown);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002747 PyObject *result;
2748 PyThreadState *tstate = PyThreadState_GET();
2749 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2750 "threading");
2751 if (threading == NULL) {
2752 /* threading not imported */
2753 PyErr_Clear();
2754 return;
2755 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002756 result = _PyObject_CallMethodId(threading, &PyId__shutdown, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002757 if (result == NULL) {
2758 PyErr_WriteUnraisable(threading);
2759 }
2760 else {
2761 Py_DECREF(result);
2762 }
2763 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002764#endif
2765}
2766
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002767#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002768static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002769static int nexitfuncs = 0;
2770
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002771int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002772{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002773 if (nexitfuncs >= NEXITFUNCS)
2774 return -1;
2775 exitfuncs[nexitfuncs++] = func;
2776 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002777}
2778
Guido van Rossumcc283f51997-08-05 02:22:03 +00002779static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002780call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002781{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002782 while (nexitfuncs > 0)
2783 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002784
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002785 fflush(stdout);
2786 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002787}
2788
2789void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002790Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002791{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002792 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002793
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002794 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002795}
2796
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002797static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002798initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002799{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002800#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002801 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002802#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002803#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002804 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002805#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002806#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002807 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002808#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002809 PyOS_InitInterrupts(); /* May imply initsignal() */
Victor Stinnerd786ad52013-07-21 13:25:51 +02002810 if (PyErr_Occurred()) {
2811 Py_FatalError("Py_Initialize: can't import signal");
2812 }
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002813}
2814
Guido van Rossum7433b121997-02-14 19:45:36 +00002815
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002816/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2817 *
2818 * All of the code in this function must only use async-signal-safe functions,
2819 * listed at `man 7 signal` or
2820 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2821 */
2822void
2823_Py_RestoreSignals(void)
2824{
2825#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002826 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002827#endif
2828#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002829 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002830#endif
2831#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002832 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002833#endif
2834}
2835
2836
Guido van Rossum7433b121997-02-14 19:45:36 +00002837/*
2838 * The file descriptor fd is considered ``interactive'' if either
2839 * a) isatty(fd) is TRUE, or
2840 * b) the -i flag was given, and the filename associated with
2841 * the descriptor is NULL or "<stdin>" or "???".
2842 */
2843int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002844Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002845{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002846 if (isatty((int)fileno(fp)))
2847 return 1;
2848 if (!Py_InteractiveFlag)
2849 return 0;
2850 return (filename == NULL) ||
2851 (strcmp(filename, "<stdin>") == 0) ||
2852 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002853}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002854
2855
Tim Petersd08e3822003-04-17 15:24:21 +00002856#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002857#if defined(WIN32) && defined(_MSC_VER)
2858
2859/* Stack checking for Microsoft C */
2860
2861#include <malloc.h>
2862#include <excpt.h>
2863
Fred Drakee8de31c2000-08-31 05:38:39 +00002864/*
2865 * Return non-zero when we run out of memory on the stack; zero otherwise.
2866 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002867int
Fred Drake399739f2000-08-31 05:52:44 +00002868PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002869{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002870 __try {
2871 /* alloca throws a stack overflow exception if there's
2872 not enough space left on the stack */
2873 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2874 return 0;
2875 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2876 EXCEPTION_EXECUTE_HANDLER :
2877 EXCEPTION_CONTINUE_SEARCH) {
2878 int errcode = _resetstkoflw();
2879 if (errcode == 0)
2880 {
2881 Py_FatalError("Could not reset the stack!");
2882 }
2883 }
2884 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002885}
2886
2887#endif /* WIN32 && _MSC_VER */
2888
2889/* Alternate implementations can be added here... */
2890
2891#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002892
2893
2894/* Wrappers around sigaction() or signal(). */
2895
2896PyOS_sighandler_t
2897PyOS_getsig(int sig)
2898{
2899#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002900 struct sigaction context;
2901 if (sigaction(sig, NULL, &context) == -1)
2902 return SIG_ERR;
2903 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002904#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002905 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002906/* Special signal handling for the secure CRT in Visual Studio 2005 */
2907#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002908 switch (sig) {
2909 /* Only these signals are valid */
2910 case SIGINT:
2911 case SIGILL:
2912 case SIGFPE:
2913 case SIGSEGV:
2914 case SIGTERM:
2915 case SIGBREAK:
2916 case SIGABRT:
2917 break;
2918 /* Don't call signal() with other values or it will assert */
2919 default:
2920 return SIG_ERR;
2921 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002922#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002923 handler = signal(sig, SIG_IGN);
2924 if (handler != SIG_ERR)
2925 signal(sig, handler);
2926 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002927#endif
2928}
2929
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002930/*
2931 * All of the code in this function must only use async-signal-safe functions,
2932 * listed at `man 7 signal` or
2933 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2934 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002935PyOS_sighandler_t
2936PyOS_setsig(int sig, PyOS_sighandler_t handler)
2937{
2938#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002939 /* Some code in Modules/signalmodule.c depends on sigaction() being
2940 * used here if HAVE_SIGACTION is defined. Fix that if this code
2941 * changes to invalidate that assumption.
2942 */
2943 struct sigaction context, ocontext;
2944 context.sa_handler = handler;
2945 sigemptyset(&context.sa_mask);
2946 context.sa_flags = 0;
2947 if (sigaction(sig, &context, &ocontext) == -1)
2948 return SIG_ERR;
2949 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002950#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002951 PyOS_sighandler_t oldhandler;
2952 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002953#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002954 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002955#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002956 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002957#endif
2958}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002959
2960/* Deprecated C API functions still provided for binary compatiblity */
2961
2962#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002963PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002964PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2965{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002966 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002967}
2968
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002969#undef PyParser_SimpleParseString
2970PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002971PyParser_SimpleParseString(const char *str, int start)
2972{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002973 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002974}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002975
2976#undef PyRun_AnyFile
2977PyAPI_FUNC(int)
2978PyRun_AnyFile(FILE *fp, const char *name)
2979{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002980 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002981}
2982
2983#undef PyRun_AnyFileEx
2984PyAPI_FUNC(int)
2985PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2986{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002987 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002988}
2989
2990#undef PyRun_AnyFileFlags
2991PyAPI_FUNC(int)
2992PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2993{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002994 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002995}
2996
2997#undef PyRun_File
2998PyAPI_FUNC(PyObject *)
2999PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
3000{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003001 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003002}
3003
3004#undef PyRun_FileEx
3005PyAPI_FUNC(PyObject *)
3006PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
3007{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003008 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003009}
3010
3011#undef PyRun_FileFlags
3012PyAPI_FUNC(PyObject *)
3013PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003014 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003015{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003016 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003017}
3018
3019#undef PyRun_SimpleFile
3020PyAPI_FUNC(int)
3021PyRun_SimpleFile(FILE *f, const char *p)
3022{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003023 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003024}
3025
3026#undef PyRun_SimpleFileEx
3027PyAPI_FUNC(int)
3028PyRun_SimpleFileEx(FILE *f, const char *p, int c)
3029{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003030 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003031}
3032
3033
3034#undef PyRun_String
3035PyAPI_FUNC(PyObject *)
3036PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
3037{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003038 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003039}
3040
3041#undef PyRun_SimpleString
3042PyAPI_FUNC(int)
3043PyRun_SimpleString(const char *s)
3044{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003045 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003046}
3047
3048#undef Py_CompileString
3049PyAPI_FUNC(PyObject *)
3050Py_CompileString(const char *str, const char *p, int s)
3051{
Georg Brandl8334fd92010-12-04 10:26:46 +00003052 return Py_CompileStringExFlags(str, p, s, NULL, -1);
3053}
3054
3055#undef Py_CompileStringFlags
3056PyAPI_FUNC(PyObject *)
3057Py_CompileStringFlags(const char *str, const char *p, int s,
3058 PyCompilerFlags *flags)
3059{
3060 return Py_CompileStringExFlags(str, p, s, flags, -1);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003061}
3062
3063#undef PyRun_InteractiveOne
3064PyAPI_FUNC(int)
3065PyRun_InteractiveOne(FILE *f, const char *p)
3066{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003067 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003068}
3069
3070#undef PyRun_InteractiveLoop
3071PyAPI_FUNC(int)
3072PyRun_InteractiveLoop(FILE *f, const char *p)
3073{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003074 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003075}
3076
3077#ifdef __cplusplus
3078}
3079#endif