blob: e9947e9ff68be0952c3f6010b7ea3c15033fe9b9 [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
Victor Stinnerbd303c12013-11-07 23:07:29 +010038_Py_IDENTIFIER(builtins);
Victor Stinner09054372013-11-06 22:41:44 +010039_Py_IDENTIFIER(excepthook);
Victor Stinner3f36a572013-11-12 21:39:02 +010040_Py_IDENTIFIER(flush);
Victor Stinnerbd303c12013-11-07 23:07:29 +010041_Py_IDENTIFIER(last_traceback);
Victor Stinner09054372013-11-06 22:41:44 +010042_Py_IDENTIFIER(last_type);
43_Py_IDENTIFIER(last_value);
Victor Stinner3f36a572013-11-12 21:39:02 +010044_Py_IDENTIFIER(name);
Victor Stinnerbd303c12013-11-07 23:07:29 +010045_Py_IDENTIFIER(ps1);
46_Py_IDENTIFIER(ps2);
47_Py_IDENTIFIER(stdin);
48_Py_IDENTIFIER(stdout);
49_Py_IDENTIFIER(stderr);
Victor Stinnerefa7a0e2013-11-07 12:37:56 +010050_Py_static_string(PyId_string, "<string>");
Victor Stinner09054372013-11-06 22:41:44 +010051
Ezio Melotti1f8898a2013-03-26 01:59:56 +020052#ifdef Py_REF_DEBUG
Antoine Pitrou208ac5c2013-04-24 20:17:53 +020053static
54void _print_total_refs(void) {
Victor Stinner4ee41c52013-11-06 18:28:21 +010055 PyObject *xoptions, *value;
56 _Py_IDENTIFIER(showrefcount);
57
Ezio Melotti1f8898a2013-03-26 01:59:56 +020058 xoptions = PySys_GetXOptions();
59 if (xoptions == NULL)
60 return;
Victor Stinner4ee41c52013-11-06 18:28:21 +010061 value = _PyDict_GetItemId(xoptions, &PyId_showrefcount);
Ezio Melotti1f8898a2013-03-26 01:59:56 +020062 if (value == Py_True)
63 fprintf(stderr,
64 "[%" PY_FORMAT_SIZE_T "d refs, "
65 "%" PY_FORMAT_SIZE_T "d blocks]\n",
66 _Py_GetRefTotal(), _Py_GetAllocatedBlocks());
67}
68#endif
69
Neal Norwitz4281cef2006-03-04 19:58:13 +000070#ifndef Py_REF_DEBUG
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000071#define PRINT_TOTAL_REFS()
Neal Norwitz4281cef2006-03-04 19:58:13 +000072#else /* Py_REF_DEBUG */
Ezio Melotti1f8898a2013-03-26 01:59:56 +020073#define PRINT_TOTAL_REFS() _print_total_refs()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000074#endif
75
76#ifdef __cplusplus
77extern "C" {
Neal Norwitz4281cef2006-03-04 19:58:13 +000078#endif
79
Martin v. Löwis790465f2008-04-05 20:41:37 +000080extern wchar_t *Py_GetPath(void);
Guido van Rossum1984f1e1992-08-04 12:41:02 +000081
Guido van Rossum82598051997-03-05 00:20:32 +000082extern grammar _PyParser_Grammar; /* From graminit.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000083
Guido van Rossumb73cc041993-11-01 16:28:59 +000084/* Forward */
Nick Coghlan85e729e2012-07-15 18:09:52 +100085static void initmain(PyInterpreterState *interp);
Victor Stinner793b5312011-04-27 00:24:21 +020086static int initfsencoding(PyInterpreterState *interp);
Tim Petersdbd9ba62000-07-09 03:09:57 +000087static void initsite(void);
Guido van Rossumce3a72a2007-10-19 23:16:50 +000088static int initstdio(void);
Amaury Forgeot d'Arc7fedbe52008-04-10 21:03:09 +000089static void flush_io(void);
Victor Stinner95701bd2013-11-06 18:41:07 +010090static PyObject *run_mod(mod_ty, PyObject *, PyObject *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000091 PyCompilerFlags *, PyArena *);
Martin v. Löwis95292d62002-12-11 14:04:59 +000092static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000093 PyCompilerFlags *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000094static void err_input(perrdetail *);
Victor Stinner7f2fee32011-04-05 00:39:01 +020095static void err_free(perrdetail *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000096static void initsigs(void);
Collin Winter670e6922007-03-21 02:57:17 +000097static void call_py_exitfuncs(void);
Antoine Pitrou011bd622009-10-20 21:52:47 +000098static void wait_for_thread_shutdown(void);
Tim Petersdbd9ba62000-07-09 03:09:57 +000099static void call_ll_exitfuncs(void);
Victor Stinner3a50e702011-10-18 21:21:00 +0200100extern int _PyUnicode_Init(void);
Victor Stinner26f91992013-07-17 01:22:45 +0200101extern int _PyStructSequence_Init(void);
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000102extern void _PyUnicode_Fini(void);
Guido van Rossumddefaf32007-01-14 03:31:43 +0000103extern int _PyLong_Init(void);
104extern void PyLong_Fini(void);
Victor Stinner024e37a2011-03-31 01:31:06 +0200105extern int _PyFaulthandler_Init(void);
106extern void _PyFaulthandler_Fini(void);
Christian Heimes985ecdc2013-11-20 11:46:18 +0100107extern void _PyHash_Fini(void);
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100108extern int _PyTraceMalloc_Init(void);
Victor Stinnerbe0708f2013-12-01 10:03:26 +0100109extern int _PyTraceMalloc_Fini(void);
Guido van Rossumc94044c2000-03-10 23:03:54 +0000110
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000111#ifdef WITH_THREAD
112extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
113extern void _PyGILState_Fini(void);
114#endif /* WITH_THREAD */
115
Guido van Rossum82598051997-03-05 00:20:32 +0000116int Py_DebugFlag; /* Needed by parser.c */
117int Py_VerboseFlag; /* Needed by import.c */
Georg Brandl8aa7e992010-12-28 18:30:18 +0000118int Py_QuietFlag; /* Needed by sysmodule.c */
Guido van Rossum7433b121997-02-14 19:45:36 +0000119int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Georg Brandl0b2489e2011-05-15 08:49:12 +0200120int Py_InspectFlag; /* Needed to determine whether to exit at SystemExit */
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000121int Py_NoSiteFlag; /* Suppress 'import site' */
Guido van Rossum98297ee2007-11-06 21:34:58 +0000122int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */
Christian Heimes790c8232008-01-07 21:14:23 +0000123int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.py[co]) */
Barry Warsaw3ce09642000-05-02 19:18:59 +0000124int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
Guido van Rossuma61691e1998-02-06 22:27:24 +0000125int Py_FrozenFlag; /* Needed by getpath.c */
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000126int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Christian Heimes8dc226f2008-05-06 23:45:46 +0000127int Py_NoUserSiteDirectory = 0; /* for -s and site.py */
Antoine Pitrou05608432009-01-09 18:53:14 +0000128int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */
Georg Brandl2daf6ae2012-02-20 19:54:16 +0100129int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */
Christian Heimesad73a9c2013-08-10 16:36:18 +0200130int Py_IsolatedFlag = 0; /* for -I, isolate from user's env */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000131
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200132PyThreadState *_Py_Finalizing = NULL;
133
Christian Heimes49e61802013-10-22 10:22:29 +0200134/* Hack to force loading of object files */
135int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \
136 PyOS_mystrnicmp; /* Python/pystrcmp.o */
137
Christian Heimes33fe8092008-04-13 13:53:33 +0000138/* PyModule_GetWarningsModule is no longer necessary as of 2.6
139since _warnings is builtin. This API should not be used. */
140PyObject *
141PyModule_GetWarningsModule(void)
Mark Hammondedd07732003-07-15 23:03:55 +0000142{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000143 return PyImport_ImportModule("warnings");
Mark Hammondedd07732003-07-15 23:03:55 +0000144}
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000145
Guido van Rossum25ce5661997-08-02 03:10:38 +0000146static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000147
Thomas Wouters7e474022000-07-16 12:04:32 +0000148/* API to access the initialized flag -- useful for esoteric use */
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000149
150int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000151Py_IsInitialized(void)
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000152{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000153 return initialized;
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000154}
155
Nick Coghlan7d270ee2013-10-17 22:35:35 +1000156/* Helper to allow an embedding application to override the normal
157 * mechanism that attempts to figure out an appropriate IO encoding
158 */
159
160static char *_Py_StandardStreamEncoding = NULL;
161static char *_Py_StandardStreamErrors = NULL;
162
163int
164Py_SetStandardStreamEncoding(const char *encoding, const char *errors)
165{
166 if (Py_IsInitialized()) {
167 /* This is too late to have any effect */
168 return -1;
169 }
Nick Coghlan1805a622013-10-18 23:11:47 +1000170 /* Can't call PyErr_NoMemory() on errors, as Python hasn't been
171 * initialised yet.
172 *
173 * However, the raw memory allocators are initialised appropriately
174 * as C static variables, so _PyMem_RawStrdup is OK even though
175 * Py_Initialize hasn't been called yet.
176 */
Nick Coghlan7d270ee2013-10-17 22:35:35 +1000177 if (encoding) {
178 _Py_StandardStreamEncoding = _PyMem_RawStrdup(encoding);
179 if (!_Py_StandardStreamEncoding) {
Nick Coghlan1805a622013-10-18 23:11:47 +1000180 return -2;
Nick Coghlan7d270ee2013-10-17 22:35:35 +1000181 }
182 }
183 if (errors) {
184 _Py_StandardStreamErrors = _PyMem_RawStrdup(errors);
185 if (!_Py_StandardStreamErrors) {
186 if (_Py_StandardStreamEncoding) {
187 PyMem_RawFree(_Py_StandardStreamEncoding);
188 }
Nick Coghlan1805a622013-10-18 23:11:47 +1000189 return -3;
Nick Coghlan7d270ee2013-10-17 22:35:35 +1000190 }
191 }
192 return 0;
193}
194
Guido van Rossum25ce5661997-08-02 03:10:38 +0000195/* Global initializations. Can be undone by Py_Finalize(). Don't
196 call this twice without an intervening Py_Finalize() call. When
197 initializations fail, a fatal error is issued and the function does
198 not return. On return, the first thread and interpreter state have
199 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000200
Guido van Rossum25ce5661997-08-02 03:10:38 +0000201 Locking: you must hold the interpreter lock while calling this.
202 (If the lock has not yet been initialized, that's equivalent to
203 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000204
Guido van Rossum25ce5661997-08-02 03:10:38 +0000205*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000206
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000207static int
208add_flag(int flag, const char *envs)
209{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000210 int env = atoi(envs);
211 if (flag < env)
212 flag = env;
213 if (flag < 1)
214 flag = 1;
215 return flag;
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000216}
217
Christian Heimes5833a2f2008-10-30 21:40:04 +0000218static char*
Victor Stinner94908bb2010-08-18 21:23:25 +0000219get_codec_name(const char *encoding)
Christian Heimes5833a2f2008-10-30 21:40:04 +0000220{
Victor Stinner94908bb2010-08-18 21:23:25 +0000221 char *name_utf8, *name_str;
Victor Stinner386fe712010-05-19 00:34:15 +0000222 PyObject *codec, *name = NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000223
Victor Stinner94908bb2010-08-18 21:23:25 +0000224 codec = _PyCodec_Lookup(encoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000225 if (!codec)
226 goto error;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000227
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200228 name = _PyObject_GetAttrId(codec, &PyId_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000229 Py_CLEAR(codec);
230 if (!name)
231 goto error;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000232
Victor Stinner94908bb2010-08-18 21:23:25 +0000233 name_utf8 = _PyUnicode_AsString(name);
Victor Stinner4ca28092011-03-20 23:09:03 +0100234 if (name_utf8 == NULL)
Victor Stinner386fe712010-05-19 00:34:15 +0000235 goto error;
Victor Stinner49fc8ec2013-07-07 23:30:24 +0200236 name_str = _PyMem_RawStrdup(name_utf8);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000237 Py_DECREF(name);
Victor Stinner94908bb2010-08-18 21:23:25 +0000238 if (name_str == NULL) {
239 PyErr_NoMemory();
240 return NULL;
241 }
242 return name_str;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000243
244error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000245 Py_XDECREF(codec);
Victor Stinner386fe712010-05-19 00:34:15 +0000246 Py_XDECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000247 return NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000248}
Victor Stinner94908bb2010-08-18 21:23:25 +0000249
Victor Stinner94908bb2010-08-18 21:23:25 +0000250static char*
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200251get_locale_encoding(void)
Victor Stinner94908bb2010-08-18 21:23:25 +0000252{
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200253#ifdef MS_WINDOWS
254 char codepage[100];
255 PyOS_snprintf(codepage, sizeof(codepage), "cp%d", GetACP());
256 return get_codec_name(codepage);
257#elif defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94908bb2010-08-18 21:23:25 +0000258 char* codeset = nl_langinfo(CODESET);
259 if (!codeset || codeset[0] == '\0') {
260 PyErr_SetString(PyExc_ValueError, "CODESET is not set or empty");
261 return NULL;
262 }
263 return get_codec_name(codeset);
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200264#else
265 PyErr_SetNone(PyExc_NotImplementedError);
266 return NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000267#endif
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200268}
Christian Heimes5833a2f2008-10-30 21:40:04 +0000269
Brett Cannonfd074152012-04-14 14:10:13 -0400270static void
271import_init(PyInterpreterState *interp, PyObject *sysmod)
272{
273 PyObject *importlib;
274 PyObject *impmod;
275 PyObject *sys_modules;
276 PyObject *value;
277
278 /* Import _importlib through its frozen version, _frozen_importlib. */
Brett Cannonfd074152012-04-14 14:10:13 -0400279 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
280 Py_FatalError("Py_Initialize: can't import _frozen_importlib");
281 }
282 else if (Py_VerboseFlag) {
283 PySys_FormatStderr("import _frozen_importlib # frozen\n");
284 }
285 importlib = PyImport_AddModule("_frozen_importlib");
286 if (importlib == NULL) {
287 Py_FatalError("Py_Initialize: couldn't get _frozen_importlib from "
288 "sys.modules");
289 }
290 interp->importlib = importlib;
291 Py_INCREF(interp->importlib);
292
293 /* Install _importlib as __import__ */
294 impmod = PyInit_imp();
295 if (impmod == NULL) {
296 Py_FatalError("Py_Initialize: can't import imp");
297 }
298 else if (Py_VerboseFlag) {
299 PySys_FormatStderr("import imp # builtin\n");
300 }
301 sys_modules = PyImport_GetModuleDict();
302 if (Py_VerboseFlag) {
303 PySys_FormatStderr("import sys # builtin\n");
304 }
Brett Cannon6f44d662012-04-15 16:08:47 -0400305 if (PyDict_SetItemString(sys_modules, "_imp", impmod) < 0) {
306 Py_FatalError("Py_Initialize: can't save _imp to sys.modules");
Brett Cannonfd074152012-04-14 14:10:13 -0400307 }
308
Brett Cannone0d88a12012-04-25 20:54:04 -0400309 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
Brett Cannonfd074152012-04-14 14:10:13 -0400310 if (value == NULL) {
311 PyErr_Print();
312 Py_FatalError("Py_Initialize: importlib install failed");
313 }
314 Py_DECREF(value);
Brett Cannonfc9ca272012-04-15 01:35:05 -0400315 Py_DECREF(impmod);
Brett Cannonfd074152012-04-14 14:10:13 -0400316
317 _PyImportZip_Init();
318}
319
320
Guido van Rossuma027efa1997-05-05 20:56:21 +0000321void
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200322_Py_InitializeEx_Private(int install_sigs, int install_importlib)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000323{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000324 PyInterpreterState *interp;
325 PyThreadState *tstate;
326 PyObject *bimod, *sysmod, *pstderr;
327 char *p;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000328 extern void _Py_ReadyTypes(void);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000329
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000330 if (initialized)
331 return;
332 initialized = 1;
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200333 _Py_Finalizing = NULL;
Tim Petersd08e3822003-04-17 15:24:21 +0000334
Andrew M. Kuchlingb2ceb3a2010-02-22 23:26:10 +0000335#if defined(HAVE_LANGINFO_H) && defined(HAVE_SETLOCALE)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000336 /* Set up the LC_CTYPE locale, so we can obtain
337 the locale's charset without having to switch
338 locales. */
339 setlocale(LC_CTYPE, "");
Martin v. Löwisd1cd4d42007-08-11 14:02:14 +0000340#endif
341
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000342 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
343 Py_DebugFlag = add_flag(Py_DebugFlag, p);
344 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
345 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
346 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
347 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
348 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0')
349 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);
Georg Brandl2daf6ae2012-02-20 19:54:16 +0100350 /* The variable is only tested for existence here; _PyRandom_Init will
351 check its value further. */
352 if ((p = Py_GETENV("PYTHONHASHSEED")) && *p != '\0')
353 Py_HashRandomizationFlag = add_flag(Py_HashRandomizationFlag, p);
354
355 _PyRandom_Init();
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000356
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000357 interp = PyInterpreterState_New();
358 if (interp == NULL)
359 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000360
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000361 tstate = PyThreadState_New(interp);
362 if (tstate == NULL)
363 Py_FatalError("Py_Initialize: can't make first thread");
364 (void) PyThreadState_Swap(tstate);
Guido van Rossuma027efa1997-05-05 20:56:21 +0000365
Victor Stinner6961bd62010-08-17 22:26:51 +0000366#ifdef WITH_THREAD
Antoine Pitroub0b384b2010-09-20 20:13:48 +0000367 /* We can't call _PyEval_FiniThreads() in Py_Finalize because
368 destroying the GIL might fail when it is being referenced from
369 another running thread (see issue #9901).
370 Instead we destroy the previously created GIL here, which ensures
371 that we can call Py_Initialize / Py_Finalize multiple times. */
372 _PyEval_FiniThreads();
373
374 /* Auto-thread-state API */
Victor Stinner6961bd62010-08-17 22:26:51 +0000375 _PyGILState_Init(interp, tstate);
376#endif /* WITH_THREAD */
377
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000378 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000379
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000380 if (!_PyFrame_Init())
381 Py_FatalError("Py_Initialize: can't init frames");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000382
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000383 if (!_PyLong_Init())
384 Py_FatalError("Py_Initialize: can't init longs");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000385
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000386 if (!PyByteArray_Init())
387 Py_FatalError("Py_Initialize: can't init bytearray");
Neal Norwitz6968b052007-02-27 19:02:19 +0000388
Victor Stinner1c8f0592013-07-22 22:24:54 +0200389 if (!_PyFloat_Init())
390 Py_FatalError("Py_Initialize: can't init float");
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000391
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000392 interp->modules = PyDict_New();
393 if (interp->modules == NULL)
394 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000395
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000396 /* Init Unicode implementation; relies on the codec registry */
Victor Stinner3a50e702011-10-18 21:21:00 +0200397 if (_PyUnicode_Init() < 0)
398 Py_FatalError("Py_Initialize: can't initialize unicode");
Victor Stinner26f91992013-07-17 01:22:45 +0200399 if (_PyStructSequence_Init() < 0)
400 Py_FatalError("Py_Initialize: can't initialize structseq");
Guido van Rossumc94044c2000-03-10 23:03:54 +0000401
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000402 bimod = _PyBuiltin_Init();
403 if (bimod == NULL)
404 Py_FatalError("Py_Initialize: can't initialize builtins modules");
Victor Stinner49d3f252010-10-17 01:24:53 +0000405 _PyImport_FixupBuiltin(bimod, "builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000406 interp->builtins = PyModule_GetDict(bimod);
407 if (interp->builtins == NULL)
408 Py_FatalError("Py_Initialize: can't initialize builtins dict");
409 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000410
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000411 /* initialize builtin exceptions */
Brett Cannonfd074152012-04-14 14:10:13 -0400412 _PyExc_Init(bimod);
Christian Heimes9a68f8c2007-11-14 00:16:07 +0000413
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000414 sysmod = _PySys_Init();
415 if (sysmod == NULL)
416 Py_FatalError("Py_Initialize: can't initialize sys");
417 interp->sysdict = PyModule_GetDict(sysmod);
418 if (interp->sysdict == NULL)
419 Py_FatalError("Py_Initialize: can't initialize sys dict");
420 Py_INCREF(interp->sysdict);
Victor Stinner49d3f252010-10-17 01:24:53 +0000421 _PyImport_FixupBuiltin(sysmod, "sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000422 PySys_SetPath(Py_GetPath());
423 PyDict_SetItemString(interp->sysdict, "modules",
424 interp->modules);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000425
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000426 /* Set up a preliminary stderr printer until we have enough
427 infrastructure for the io module in place. */
428 pstderr = PyFile_NewStdPrinter(fileno(stderr));
429 if (pstderr == NULL)
430 Py_FatalError("Py_Initialize: can't set preliminary stderr");
Victor Stinnerbd303c12013-11-07 23:07:29 +0100431 _PySys_SetObjectId(&PyId_stderr, pstderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000432 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000433 Py_DECREF(pstderr);
Guido van Rossum826d8972007-10-30 18:34:07 +0000434
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000435 _PyImport_Init();
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000436
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000437 _PyImportHooks_Init();
Just van Rossum52e14d62002-12-30 22:08:05 +0000438
Victor Stinner7d79b8b2010-05-19 20:40:50 +0000439 /* Initialize _warnings. */
440 _PyWarnings_Init();
441
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200442 if (!install_importlib)
443 return;
444
Brett Cannonfd074152012-04-14 14:10:13 -0400445 import_init(interp, sysmod);
446
Victor Stinnerd5698cb2012-07-31 02:55:49 +0200447 /* initialize the faulthandler module */
448 if (_PyFaulthandler_Init())
449 Py_FatalError("Py_Initialize: can't initialize faulthandler");
450
Alexander Belopolsky6fc4ade2010-08-05 17:34:27 +0000451 _PyTime_Init();
452
Victor Stinner793b5312011-04-27 00:24:21 +0200453 if (initfsencoding(interp) < 0)
454 Py_FatalError("Py_Initialize: unable to load the file system codec");
Martin v. Löwis011e8422009-05-05 04:43:17 +0000455
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000456 if (install_sigs)
457 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000458
Victor Stinnered3b0bc2013-11-23 12:27:24 +0100459 if (_PyTraceMalloc_Init() < 0)
460 Py_FatalError("Py_Initialize: can't initialize tracemalloc");
461
Nick Coghlan85e729e2012-07-15 18:09:52 +1000462 initmain(interp); /* Module __main__ */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000463 if (initstdio() < 0)
464 Py_FatalError(
465 "Py_Initialize: can't initialize sys standard streams");
466
Antoine Pitroucf9f9802010-11-10 13:55:25 +0000467 /* Initialize warnings. */
468 if (PySys_HasWarnOptions()) {
469 PyObject *warnings_module = PyImport_ImportModule("warnings");
470 if (warnings_module == NULL) {
471 fprintf(stderr, "'import warnings' failed; traceback:\n");
472 PyErr_Print();
473 }
474 Py_XDECREF(warnings_module);
475 }
476
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000477 if (!Py_NoSiteFlag)
478 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000479}
480
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000481void
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200482Py_InitializeEx(int install_sigs)
483{
484 _Py_InitializeEx_Private(install_sigs, 1);
485}
486
487void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000488Py_Initialize(void)
489{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000490 Py_InitializeEx(1);
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000491}
492
493
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000494#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000495extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000496#endif
497
Guido van Rossume8432ac2007-07-09 15:04:50 +0000498/* Flush stdout and stderr */
499
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100500static int
501file_is_closed(PyObject *fobj)
502{
503 int r;
504 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
505 if (tmp == NULL) {
506 PyErr_Clear();
507 return 0;
508 }
509 r = PyObject_IsTrue(tmp);
510 Py_DECREF(tmp);
511 if (r < 0)
512 PyErr_Clear();
513 return r > 0;
514}
515
Neal Norwitz2bad9702007-08-27 06:19:22 +0000516static void
Guido van Rossum1bd21222007-07-10 20:14:13 +0000517flush_std_files(void)
Guido van Rossume8432ac2007-07-09 15:04:50 +0000518{
Victor Stinnerbd303c12013-11-07 23:07:29 +0100519 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
520 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000521 PyObject *tmp;
Guido van Rossume8432ac2007-07-09 15:04:50 +0000522
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100523 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200524 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000525 if (tmp == NULL)
Antoine Pitroubddc9fe2010-08-08 20:46:42 +0000526 PyErr_WriteUnraisable(fout);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000527 else
528 Py_DECREF(tmp);
529 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000530
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100531 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200532 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000533 if (tmp == NULL)
534 PyErr_Clear();
535 else
536 Py_DECREF(tmp);
537 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000538}
539
Guido van Rossum25ce5661997-08-02 03:10:38 +0000540/* Undo the effect of Py_Initialize().
541
542 Beware: if multiple interpreter and/or thread states exist, these
543 are not wiped out; only the current thread and interpreter state
544 are deleted. But since everything else is deleted, those other
545 interpreter and thread states should no longer be used.
546
547 (XXX We should do better, e.g. wipe out all interpreters and
548 threads.)
549
550 Locking: as above.
551
552*/
553
554void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000555Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000556{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000557 PyInterpreterState *interp;
558 PyThreadState *tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000559
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000560 if (!initialized)
561 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000562
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000563 wait_for_thread_shutdown();
Antoine Pitrou011bd622009-10-20 21:52:47 +0000564
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000565 /* The interpreter is still entirely intact at this point, and the
566 * exit funcs may be relying on that. In particular, if some thread
567 * or exit func is still waiting to do an import, the import machinery
568 * expects Py_IsInitialized() to return true. So don't say the
569 * interpreter is uninitialized until after the exit funcs have run.
570 * Note that Threading.py uses an exit func to do a join on all the
571 * threads created thru it, so this also protects pending imports in
572 * the threads created via Threading.
573 */
574 call_py_exitfuncs();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000575
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000576 /* Get current thread state and interpreter pointer */
577 tstate = PyThreadState_GET();
578 interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000579
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200580 /* Remaining threads (e.g. daemon threads) will automatically exit
581 after taking the GIL (in PyEval_RestoreThread()). */
582 _Py_Finalizing = tstate;
583 initialized = 0;
584
Victor Stinner15054c12014-02-13 12:48:54 +0100585 /* Flush stdout+stderr */
586 flush_std_files();
587
588 /* Disable signal handling */
589 PyOS_FiniInterrupts();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000590
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000591 /* Collect garbage. This may call finalizers; it's nice to call these
592 * before all modules are destroyed.
593 * XXX If a __del__ or weakref callback is triggered here, and tries to
594 * XXX import a module, bad things can happen, because Python no
595 * XXX longer believes it's initialized.
596 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
597 * XXX is easy to provoke that way. I've also seen, e.g.,
598 * XXX Exception exceptions.ImportError: 'No module named sha'
599 * XXX in <function callback at 0x008F5718> ignored
600 * XXX but I'm unclear on exactly how that one happens. In any case,
601 * XXX I haven't seen a real-life report of either of these.
602 */
603 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000604#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000605 /* With COUNT_ALLOCS, it helps to run GC multiple times:
606 each collection might release some types from the type
607 list, so they become garbage. */
608 while (PyGC_Collect() > 0)
609 /* nothing */;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000610#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000611 /* Destroy all modules */
612 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000613
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000614 /* Flush stdout+stderr (again, in case more was printed) */
615 flush_std_files();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000616
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000617 /* Collect final garbage. This disposes of cycles created by
Florent Xiclunaaa6c1d22011-12-12 18:54:29 +0100618 * class definitions, for example.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000619 * XXX This is disabled because it caused too many problems. If
620 * XXX a __del__ or weakref callback triggers here, Python code has
621 * XXX a hard time running, because even the sys module has been
622 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
623 * XXX One symptom is a sequence of information-free messages
624 * XXX coming from threads (if a __del__ or callback is invoked,
625 * XXX other threads can execute too, and any exception they encounter
626 * XXX triggers a comedy of errors as subsystem after subsystem
627 * XXX fails to find what it *expects* to find in sys to help report
628 * XXX the exception and consequent unexpected failures). I've also
629 * XXX seen segfaults then, after adding print statements to the
630 * XXX Python code getting called.
631 */
Tim Peters1d7323e2003-12-01 21:35:27 +0000632#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000633 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000634#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000635
Victor Stinnerbe0708f2013-12-01 10:03:26 +0100636 /* Disable tracemalloc after all Python objects have been destroyed,
637 so it is possible to use tracemalloc in objects destructor. */
638 _PyTraceMalloc_Fini();
639
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000640 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
641 _PyImport_Fini();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000642
Antoine Pitroufd417cc2013-05-05 08:12:42 +0200643 /* Cleanup typeobject.c's internal caches. */
644 _PyType_Fini();
645
Victor Stinner024e37a2011-03-31 01:31:06 +0200646 /* unload faulthandler module */
647 _PyFaulthandler_Fini();
648
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000649 /* Debugging stuff */
Guido van Rossum1707aad1997-12-08 23:43:45 +0000650#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000651 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000652#endif
Christian Heimes985ecdc2013-11-20 11:46:18 +0100653 /* dump hash stats */
654 _PyHash_Fini();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000655
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000656 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000657
Tim Peters9cf25ce2003-04-17 15:21:01 +0000658#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000659 /* Display all objects still alive -- this can invoke arbitrary
660 * __repr__ overrides, so requires a mostly-intact interpreter.
661 * Alas, a lot of stuff may still be alive now that will be cleaned
662 * up later.
663 */
664 if (Py_GETENV("PYTHONDUMPREFS"))
665 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000666#endif /* Py_TRACE_REFS */
667
Antoine Pitroufd417cc2013-05-05 08:12:42 +0200668 /* Clear interpreter state and all thread states. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000669 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000670
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000671 /* Now we decref the exception classes. After this point nothing
672 can raise an exception. That's okay, because each Fini() method
673 below has been checked to make sure no exceptions are ever
674 raised.
675 */
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000676
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000677 _PyExc_Fini();
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000678
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000679 /* Sundry finalizers */
680 PyMethod_Fini();
681 PyFrame_Fini();
682 PyCFunction_Fini();
683 PyTuple_Fini();
684 PyList_Fini();
685 PySet_Fini();
686 PyBytes_Fini();
687 PyByteArray_Fini();
688 PyLong_Fini();
689 PyFloat_Fini();
690 PyDict_Fini();
Antoine Pitrouf34a0cd2011-11-18 20:14:34 +0100691 PySlice_Fini();
Antoine Pitrou5f454a02013-05-06 21:15:57 +0200692 _PyGC_Fini();
Antoine Pitrou4879a962013-08-31 00:26:02 +0200693 _PyRandom_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000694
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000695 /* Cleanup Unicode implementation */
696 _PyUnicode_Fini();
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000697
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000698 /* reset file system default encoding */
Victor Stinnerb744ba12010-05-15 12:27:16 +0000699 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +0200700 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000701 Py_FileSystemDefaultEncoding = NULL;
702 }
Christian Heimesc8967002007-11-30 10:18:26 +0000703
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000704 /* XXX Still allocated:
705 - various static ad-hoc pointers to interned strings
706 - int and float free list blocks
707 - whatever various modules and libraries allocate
708 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000709
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000710 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000711
Victor Stinner51fa4582013-07-07 15:50:49 +0200712 /* Cleanup auto-thread-state */
713#ifdef WITH_THREAD
714 _PyGILState_Fini();
715#endif /* WITH_THREAD */
716
717 /* Delete current thread. After this, many C API calls become crashy. */
718 PyThreadState_Swap(NULL);
719 PyInterpreterState_Delete(interp);
720
Tim Peters269b2a62003-04-17 19:52:29 +0000721#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000722 /* Display addresses (& refcnts) of all objects still alive.
723 * An address can be used to find the repr of the object, printed
724 * above by _Py_PrintReferences.
725 */
726 if (Py_GETENV("PYTHONDUMPREFS"))
727 _Py_PrintReferenceAddresses(stderr);
Tim Peters269b2a62003-04-17 19:52:29 +0000728#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000729#ifdef PYMALLOC_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000730 if (Py_GETENV("PYTHONMALLOCSTATS"))
David Malcolm49526f42012-06-22 14:55:41 -0400731 _PyObject_DebugMallocStats(stderr);
Tim Peters0e871182002-04-13 08:29:14 +0000732#endif
733
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000734 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000735}
736
737/* Create and initialize a new interpreter and thread, and return the
738 new thread. This requires that Py_Initialize() has been called
739 first.
740
741 Unsuccessful initialization yields a NULL pointer. Note that *no*
742 exception information is available even in this case -- the
743 exception information is held in the thread, and there is no
744 thread.
745
746 Locking: as above.
747
748*/
749
750PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000751Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000752{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000753 PyInterpreterState *interp;
754 PyThreadState *tstate, *save_tstate;
755 PyObject *bimod, *sysmod;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000756
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000757 if (!initialized)
758 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000759
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000760 interp = PyInterpreterState_New();
761 if (interp == NULL)
762 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000763
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000764 tstate = PyThreadState_New(interp);
765 if (tstate == NULL) {
766 PyInterpreterState_Delete(interp);
767 return NULL;
768 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000769
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000770 save_tstate = PyThreadState_Swap(tstate);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000771
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000772 /* XXX The following is lax in error checking */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000773
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000774 interp->modules = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000775
Victor Stinner49d3f252010-10-17 01:24:53 +0000776 bimod = _PyImport_FindBuiltin("builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000777 if (bimod != NULL) {
778 interp->builtins = PyModule_GetDict(bimod);
779 if (interp->builtins == NULL)
780 goto handle_error;
781 Py_INCREF(interp->builtins);
782 }
Christian Heimes6a27efa2008-10-30 21:48:26 +0000783
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000784 /* initialize builtin exceptions */
Brett Cannonfd074152012-04-14 14:10:13 -0400785 _PyExc_Init(bimod);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000786
Victor Stinner49d3f252010-10-17 01:24:53 +0000787 sysmod = _PyImport_FindBuiltin("sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000788 if (bimod != NULL && sysmod != NULL) {
789 PyObject *pstderr;
Brett Cannonfd074152012-04-14 14:10:13 -0400790
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000791 interp->sysdict = PyModule_GetDict(sysmod);
792 if (interp->sysdict == NULL)
793 goto handle_error;
794 Py_INCREF(interp->sysdict);
795 PySys_SetPath(Py_GetPath());
796 PyDict_SetItemString(interp->sysdict, "modules",
797 interp->modules);
798 /* Set up a preliminary stderr printer until we have enough
799 infrastructure for the io module in place. */
800 pstderr = PyFile_NewStdPrinter(fileno(stderr));
801 if (pstderr == NULL)
802 Py_FatalError("Py_Initialize: can't set preliminary stderr");
Victor Stinnerbd303c12013-11-07 23:07:29 +0100803 _PySys_SetObjectId(&PyId_stderr, pstderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000804 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000805 Py_DECREF(pstderr);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000806
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000807 _PyImportHooks_Init();
Victor Stinner793b5312011-04-27 00:24:21 +0200808
Brett Cannonfd074152012-04-14 14:10:13 -0400809 import_init(interp, sysmod);
810
Victor Stinner793b5312011-04-27 00:24:21 +0200811 if (initfsencoding(interp) < 0)
812 goto handle_error;
813
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000814 if (initstdio() < 0)
815 Py_FatalError(
816 "Py_Initialize: can't initialize sys standard streams");
Nick Coghlan85e729e2012-07-15 18:09:52 +1000817 initmain(interp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000818 if (!Py_NoSiteFlag)
819 initsite();
820 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000821
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000822 if (!PyErr_Occurred())
823 return tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000824
Thomas Wouters89f507f2006-12-13 04:49:30 +0000825handle_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000826 /* Oops, it didn't work. Undo it all. */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000827
Victor Stinnerc40a3502011-04-27 00:20:27 +0200828 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000829 PyThreadState_Clear(tstate);
830 PyThreadState_Swap(save_tstate);
831 PyThreadState_Delete(tstate);
832 PyInterpreterState_Delete(interp);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000833
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000834 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000835}
836
837/* Delete an interpreter and its last thread. This requires that the
838 given thread state is current, that the thread has no remaining
839 frames, and that it is its interpreter's only remaining thread.
840 It is a fatal error to violate these constraints.
841
842 (Py_Finalize() doesn't have these constraints -- it zaps
843 everything, regardless.)
844
845 Locking: as above.
846
847*/
848
849void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000850Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000851{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000852 PyInterpreterState *interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000853
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000854 if (tstate != PyThreadState_GET())
855 Py_FatalError("Py_EndInterpreter: thread is not current");
856 if (tstate->frame != NULL)
857 Py_FatalError("Py_EndInterpreter: thread still has a frame");
Antoine Pitrou7eaf3f72013-08-25 19:48:18 +0200858
859 wait_for_thread_shutdown();
860
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000861 if (tstate != interp->tstate_head || tstate->next != NULL)
862 Py_FatalError("Py_EndInterpreter: not the last thread");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000863
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000864 PyImport_Cleanup();
865 PyInterpreterState_Clear(interp);
866 PyThreadState_Swap(NULL);
867 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000868}
869
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200870#ifdef MS_WINDOWS
Martin v. Löwis790465f2008-04-05 20:41:37 +0000871static wchar_t *progname = L"python";
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200872#else
873static wchar_t *progname = L"python3";
874#endif
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000875
876void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000877Py_SetProgramName(wchar_t *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000878{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000879 if (pn && *pn)
880 progname = pn;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000881}
882
Martin v. Löwis790465f2008-04-05 20:41:37 +0000883wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000884Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000885{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000886 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000887}
888
Martin v. Löwis790465f2008-04-05 20:41:37 +0000889static wchar_t *default_home = NULL;
Victor Stinner55a12202013-08-28 01:47:46 +0200890static wchar_t env_home[MAXPATHLEN+1];
Guido van Rossuma61691e1998-02-06 22:27:24 +0000891
892void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000893Py_SetPythonHome(wchar_t *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000894{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000895 default_home = home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000896}
897
Martin v. Löwis790465f2008-04-05 20:41:37 +0000898wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000899Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000900{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000901 wchar_t *home = default_home;
902 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
903 char* chome = Py_GETENV("PYTHONHOME");
904 if (chome) {
Victor Stinner2f5bbc62013-11-15 17:09:24 +0100905 size_t size = Py_ARRAY_LENGTH(env_home);
906 size_t r = mbstowcs(env_home, chome, size);
907 if (r != (size_t)-1 && r < size)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000908 home = env_home;
909 }
Martin v. Löwis790465f2008-04-05 20:41:37 +0000910
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000911 }
912 return home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000913}
914
Guido van Rossum6135a871995-01-09 17:53:26 +0000915/* Create __main__ module */
916
917static void
Nick Coghlan85e729e2012-07-15 18:09:52 +1000918initmain(PyInterpreterState *interp)
Guido van Rossum6135a871995-01-09 17:53:26 +0000919{
Brett Cannon13853a62013-05-04 17:37:09 -0400920 PyObject *m, *d, *loader;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000921 m = PyImport_AddModule("__main__");
922 if (m == NULL)
923 Py_FatalError("can't create __main__ module");
924 d = PyModule_GetDict(m);
925 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
926 PyObject *bimod = PyImport_ImportModule("builtins");
Nick Coghlan85e729e2012-07-15 18:09:52 +1000927 if (bimod == NULL) {
928 Py_FatalError("Failed to retrieve builtins module");
929 }
930 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
931 Py_FatalError("Failed to initialize __main__.__builtins__");
932 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000933 Py_DECREF(bimod);
934 }
Nick Coghlan85e729e2012-07-15 18:09:52 +1000935 /* Main is a little special - imp.is_builtin("__main__") will return
936 * False, but BuiltinImporter is still the most appropriate initial
937 * setting for its __loader__ attribute. A more suitable value will
938 * be set if __main__ gets further initialized later in the startup
939 * process.
940 */
Brett Cannon13853a62013-05-04 17:37:09 -0400941 loader = PyDict_GetItemString(d, "__loader__");
Brett Cannon4c14b5d2013-05-04 13:56:58 -0400942 if (loader == NULL || loader == Py_None) {
Nick Coghlan85e729e2012-07-15 18:09:52 +1000943 PyObject *loader = PyObject_GetAttrString(interp->importlib,
944 "BuiltinImporter");
945 if (loader == NULL) {
946 Py_FatalError("Failed to retrieve BuiltinImporter");
947 }
948 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
949 Py_FatalError("Failed to initialize __main__.__loader__");
950 }
951 Py_DECREF(loader);
952 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000953}
954
Victor Stinner793b5312011-04-27 00:24:21 +0200955static int
956initfsencoding(PyInterpreterState *interp)
Victor Stinnerb744ba12010-05-15 12:27:16 +0000957{
958 PyObject *codec;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000959
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200960 if (Py_FileSystemDefaultEncoding == NULL)
961 {
962 Py_FileSystemDefaultEncoding = get_locale_encoding();
963 if (Py_FileSystemDefaultEncoding == NULL)
Victor Stinnere4743092010-10-19 00:05:51 +0000964 Py_FatalError("Py_Initialize: Unable to get the locale encoding");
Victor Stinnerb744ba12010-05-15 12:27:16 +0000965
Victor Stinnere4743092010-10-19 00:05:51 +0000966 Py_HasFileSystemDefaultEncoding = 0;
Victor Stinner793b5312011-04-27 00:24:21 +0200967 interp->fscodec_initialized = 1;
968 return 0;
Victor Stinner7f84ab52010-06-11 00:36:33 +0000969 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000970
971 /* the encoding is mbcs, utf-8 or ascii */
972 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
973 if (!codec) {
974 /* Such error can only occurs in critical situations: no more
975 * memory, import a module of the standard library failed,
976 * etc. */
Victor Stinner793b5312011-04-27 00:24:21 +0200977 return -1;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000978 }
Victor Stinner793b5312011-04-27 00:24:21 +0200979 Py_DECREF(codec);
980 interp->fscodec_initialized = 1;
981 return 0;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000982}
983
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000984/* Import the site module (not into __main__ though) */
985
986static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000987initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000988{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000989 PyObject *m;
990 m = PyImport_ImportModule("site");
991 if (m == NULL) {
Victor Stinner62ce62a2013-07-22 22:53:28 +0200992 fprintf(stderr, "Failed to import the site module\n");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000993 PyErr_Print();
994 Py_Finalize();
995 exit(1);
996 }
997 else {
998 Py_DECREF(m);
999 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +00001000}
1001
Antoine Pitrou05608432009-01-09 18:53:14 +00001002static PyObject*
1003create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001004 int fd, int write_mode, char* name,
1005 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +00001006{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001007 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1008 const char* mode;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001009 const char* newline;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001010 PyObject *line_buffering;
1011 int buffering, isatty;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001012 _Py_IDENTIFIER(open);
1013 _Py_IDENTIFIER(isatty);
1014 _Py_IDENTIFIER(TextIOWrapper);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001015 _Py_IDENTIFIER(mode);
Antoine Pitrou05608432009-01-09 18:53:14 +00001016
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001017 /* stdin is always opened in buffered mode, first because it shouldn't
1018 make a difference in common use cases, second because TextIOWrapper
1019 depends on the presence of a read1() method which only exists on
1020 buffered streams.
1021 */
1022 if (Py_UnbufferedStdioFlag && write_mode)
1023 buffering = 0;
1024 else
1025 buffering = -1;
1026 if (write_mode)
1027 mode = "wb";
1028 else
1029 mode = "rb";
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001030 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1031 fd, mode, buffering,
1032 Py_None, Py_None, Py_None, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001033 if (buf == NULL)
1034 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +00001035
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001036 if (buffering) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001037 _Py_IDENTIFIER(raw);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001038 raw = _PyObject_GetAttrId(buf, &PyId_raw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001039 if (raw == NULL)
1040 goto error;
1041 }
1042 else {
1043 raw = buf;
1044 Py_INCREF(raw);
1045 }
Antoine Pitrou05608432009-01-09 18:53:14 +00001046
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001047 text = PyUnicode_FromString(name);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001048 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001049 goto error;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001050 res = _PyObject_CallMethodId(raw, &PyId_isatty, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001051 if (res == NULL)
1052 goto error;
1053 isatty = PyObject_IsTrue(res);
1054 Py_DECREF(res);
1055 if (isatty == -1)
1056 goto error;
1057 if (isatty || Py_UnbufferedStdioFlag)
1058 line_buffering = Py_True;
1059 else
1060 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +00001061
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001062 Py_CLEAR(raw);
1063 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +00001064
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001065#ifdef MS_WINDOWS
Victor Stinner7b3f0fa2012-08-04 01:28:00 +02001066 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1067 newlines to "\n".
1068 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1069 newline = NULL;
1070#else
1071 /* sys.stdin: split lines at "\n".
1072 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1073 newline = "\n";
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001074#endif
1075
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001076 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssO",
1077 buf, encoding, errors,
1078 newline, line_buffering);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001079 Py_CLEAR(buf);
1080 if (stream == NULL)
1081 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +00001082
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001083 if (write_mode)
1084 mode = "w";
1085 else
1086 mode = "r";
1087 text = PyUnicode_FromString(mode);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001088 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001089 goto error;
1090 Py_CLEAR(text);
1091 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +00001092
1093error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001094 Py_XDECREF(buf);
1095 Py_XDECREF(stream);
1096 Py_XDECREF(text);
1097 Py_XDECREF(raw);
1098 return NULL;
Antoine Pitrou05608432009-01-09 18:53:14 +00001099}
1100
Antoine Pitrou11942a52011-11-28 19:08:36 +01001101static int
1102is_valid_fd(int fd)
1103{
1104 int dummy_fd;
1105 if (fd < 0 || !_PyVerify_fd(fd))
1106 return 0;
1107 dummy_fd = dup(fd);
1108 if (dummy_fd < 0)
1109 return 0;
1110 close(dummy_fd);
1111 return 1;
1112}
1113
Georg Brandl1a3284e2007-12-02 09:40:06 +00001114/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001115static int
1116initstdio(void)
1117{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001118 PyObject *iomod = NULL, *wrapper;
1119 PyObject *bimod = NULL;
1120 PyObject *m;
1121 PyObject *std = NULL;
1122 int status = 0, fd;
1123 PyObject * encoding_attr;
Serhiy Storchakabf28d2d2013-09-13 11:46:24 +03001124 char *pythonioencoding = NULL, *encoding, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001125
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001126 /* Hack to avoid a nasty recursion issue when Python is invoked
1127 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1128 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1129 goto error;
1130 }
1131 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001132
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001133 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1134 goto error;
1135 }
1136 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001137
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001138 if (!(bimod = PyImport_ImportModule("builtins"))) {
1139 goto error;
1140 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001141
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 if (!(iomod = PyImport_ImportModule("io"))) {
1143 goto error;
1144 }
1145 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1146 goto error;
1147 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001148
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001149 /* Set builtins.open */
1150 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001151 Py_DECREF(wrapper);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001152 goto error;
1153 }
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001154 Py_DECREF(wrapper);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001155
Nick Coghlan7d270ee2013-10-17 22:35:35 +10001156 encoding = _Py_StandardStreamEncoding;
1157 errors = _Py_StandardStreamErrors;
1158 if (!encoding || !errors) {
1159 pythonioencoding = Py_GETENV("PYTHONIOENCODING");
1160 if (pythonioencoding) {
1161 char *err;
1162 pythonioencoding = _PyMem_Strdup(pythonioencoding);
1163 if (pythonioencoding == NULL) {
1164 PyErr_NoMemory();
1165 goto error;
1166 }
1167 err = strchr(pythonioencoding, ':');
1168 if (err) {
1169 *err = '\0';
1170 err++;
1171 if (*err && !errors) {
1172 errors = err;
1173 }
1174 }
1175 if (*pythonioencoding && !encoding) {
1176 encoding = pythonioencoding;
1177 }
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001178 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001179 }
Martin v. Löwis0f599892008-06-02 11:13:03 +00001180
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001181 /* Set sys.stdin */
1182 fd = fileno(stdin);
1183 /* Under some conditions stdin, stdout and stderr may not be connected
1184 * and fileno() may point to an invalid file descriptor. For example
1185 * GUI apps don't have valid standard streams by default.
1186 */
Antoine Pitrou11942a52011-11-28 19:08:36 +01001187 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001188 std = Py_None;
1189 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001190 }
1191 else {
1192 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1193 if (std == NULL)
1194 goto error;
1195 } /* if (fd < 0) */
1196 PySys_SetObject("__stdin__", std);
Victor Stinnerbd303c12013-11-07 23:07:29 +01001197 _PySys_SetObjectId(&PyId_stdin, std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001198 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001199
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001200 /* Set sys.stdout */
1201 fd = fileno(stdout);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001202 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001203 std = Py_None;
1204 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001205 }
1206 else {
1207 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1208 if (std == NULL)
1209 goto error;
1210 } /* if (fd < 0) */
1211 PySys_SetObject("__stdout__", std);
Victor Stinnerbd303c12013-11-07 23:07:29 +01001212 _PySys_SetObjectId(&PyId_stdout, std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001213 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001214
Guido van Rossum98297ee2007-11-06 21:34:58 +00001215#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001216 /* Set sys.stderr, replaces the preliminary stderr */
1217 fd = fileno(stderr);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001218 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001219 std = Py_None;
1220 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001221 }
1222 else {
1223 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1224 if (std == NULL)
1225 goto error;
1226 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +00001227
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001228 /* Same as hack above, pre-import stderr's codec to avoid recursion
1229 when import.c tries to write to stderr in verbose mode. */
1230 encoding_attr = PyObject_GetAttrString(std, "encoding");
1231 if (encoding_attr != NULL) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001232 const char * std_encoding;
1233 std_encoding = _PyUnicode_AsString(encoding_attr);
1234 if (std_encoding != NULL) {
1235 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
Antoine Pitrou2fabfac2012-01-18 15:14:46 +01001236 Py_XDECREF(codec_info);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001237 }
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +00001238 Py_DECREF(encoding_attr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001239 }
1240 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +00001241
Victor Stinnerba308832013-07-22 23:55:19 +02001242 if (PySys_SetObject("__stderr__", std) < 0) {
1243 Py_DECREF(std);
1244 goto error;
1245 }
Victor Stinnerbd303c12013-11-07 23:07:29 +01001246 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
Victor Stinnerba308832013-07-22 23:55:19 +02001247 Py_DECREF(std);
1248 goto error;
1249 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001250 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001251#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001252
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001253 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001254 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001255 status = -1;
1256 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001257
Nick Coghlan7d270ee2013-10-17 22:35:35 +10001258 /* We won't need them anymore. */
1259 if (_Py_StandardStreamEncoding) {
1260 PyMem_RawFree(_Py_StandardStreamEncoding);
1261 _Py_StandardStreamEncoding = NULL;
1262 }
1263 if (_Py_StandardStreamErrors) {
1264 PyMem_RawFree(_Py_StandardStreamErrors);
1265 _Py_StandardStreamErrors = NULL;
1266 }
Serhiy Storchakabf28d2d2013-09-13 11:46:24 +03001267 PyMem_Free(pythonioencoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001268 Py_XDECREF(bimod);
1269 Py_XDECREF(iomod);
1270 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001271}
1272
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001273/* Parse input from a file and execute it */
1274
1275int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001276PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001277 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001278{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001279 if (filename == NULL)
1280 filename = "???";
1281 if (Py_FdIsInteractive(fp, filename)) {
1282 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1283 if (closeit)
1284 fclose(fp);
1285 return err;
1286 }
1287 else
1288 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001289}
1290
1291int
Victor Stinner95701bd2013-11-06 18:41:07 +01001292PyRun_InteractiveLoopFlags(FILE *fp, const char *filename_str, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001293{
Victor Stinner95701bd2013-11-06 18:41:07 +01001294 PyObject *filename, *v;
1295 int ret, err;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001296 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001297
Victor Stinner95701bd2013-11-06 18:41:07 +01001298 filename = PyUnicode_DecodeFSDefault(filename_str);
1299 if (filename == NULL) {
1300 PyErr_Print();
1301 return -1;
1302 }
1303
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001304 if (flags == NULL) {
1305 flags = &local_flags;
1306 local_flags.cf_flags = 0;
1307 }
Victor Stinner09054372013-11-06 22:41:44 +01001308 v = _PySys_GetObjectId(&PyId_ps1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001309 if (v == NULL) {
Victor Stinner09054372013-11-06 22:41:44 +01001310 _PySys_SetObjectId(&PyId_ps1, v = PyUnicode_FromString(">>> "));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001311 Py_XDECREF(v);
1312 }
Victor Stinner09054372013-11-06 22:41:44 +01001313 v = _PySys_GetObjectId(&PyId_ps2);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001314 if (v == NULL) {
Victor Stinner09054372013-11-06 22:41:44 +01001315 _PySys_SetObjectId(&PyId_ps2, v = PyUnicode_FromString("... "));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001316 Py_XDECREF(v);
1317 }
Victor Stinner95701bd2013-11-06 18:41:07 +01001318 err = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001319 for (;;) {
Victor Stinner95701bd2013-11-06 18:41:07 +01001320 ret = PyRun_InteractiveOneObject(fp, filename, flags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001321 PRINT_TOTAL_REFS();
Victor Stinner95701bd2013-11-06 18:41:07 +01001322 if (ret == E_EOF) {
1323 err = 0;
1324 break;
1325 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001326 /*
1327 if (ret == E_NOMEM)
Victor Stinner95701bd2013-11-06 18:41:07 +01001328 break;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001329 */
1330 }
Victor Stinner95701bd2013-11-06 18:41:07 +01001331 Py_DECREF(filename);
1332 return err;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001333}
1334
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001335/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001336static int PARSER_FLAGS(PyCompilerFlags *flags)
1337{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001338 int parser_flags = 0;
1339 if (!flags)
1340 return 0;
1341 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1342 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1343 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1344 parser_flags |= PyPARSE_IGNORE_COOKIE;
1345 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1346 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1347 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001348}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001349
Thomas Wouters89f507f2006-12-13 04:49:30 +00001350#if 0
1351/* Keep an example of flags with future keyword support. */
1352#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001353 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1354 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1355 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1356 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001357#endif
1358
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001359int
Victor Stinner95701bd2013-11-06 18:41:07 +01001360PyRun_InteractiveOneObject(FILE *fp, PyObject *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001361{
Victor Stinner95701bd2013-11-06 18:41:07 +01001362 PyObject *m, *d, *v, *w, *oenc = NULL, *mod_name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001363 mod_ty mod;
1364 PyArena *arena;
1365 char *ps1 = "", *ps2 = "", *enc = NULL;
1366 int errcode = 0;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001367 _Py_IDENTIFIER(encoding);
Victor Stinner95701bd2013-11-06 18:41:07 +01001368 _Py_IDENTIFIER(__main__);
1369
1370 mod_name = _PyUnicode_FromId(&PyId___main__); /* borrowed */
1371 if (mod_name == NULL) {
1372 PyErr_Print();
1373 return -1;
1374 }
Tim Petersfe2127d2001-07-16 05:37:24 +00001375
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001376 if (fp == stdin) {
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001377 /* Fetch encoding from sys.stdin if possible. */
Victor Stinnerbd303c12013-11-07 23:07:29 +01001378 v = _PySys_GetObjectId(&PyId_stdin);
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001379 if (v && v != Py_None) {
1380 oenc = _PyObject_GetAttrId(v, &PyId_encoding);
1381 if (oenc)
1382 enc = _PyUnicode_AsString(oenc);
1383 if (!enc)
1384 PyErr_Clear();
1385 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001386 }
Victor Stinner09054372013-11-06 22:41:44 +01001387 v = _PySys_GetObjectId(&PyId_ps1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001388 if (v != NULL) {
1389 v = PyObject_Str(v);
1390 if (v == NULL)
1391 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001392 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001393 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001394 if (ps1 == NULL) {
1395 PyErr_Clear();
1396 ps1 = "";
1397 }
1398 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001399 }
Victor Stinner09054372013-11-06 22:41:44 +01001400 w = _PySys_GetObjectId(&PyId_ps2);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001401 if (w != NULL) {
1402 w = PyObject_Str(w);
1403 if (w == NULL)
1404 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001405 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001406 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001407 if (ps2 == NULL) {
1408 PyErr_Clear();
1409 ps2 = "";
1410 }
1411 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001412 }
1413 arena = PyArena_New();
1414 if (arena == NULL) {
1415 Py_XDECREF(v);
1416 Py_XDECREF(w);
1417 Py_XDECREF(oenc);
1418 return -1;
1419 }
Victor Stinner95701bd2013-11-06 18:41:07 +01001420 mod = PyParser_ASTFromFileObject(fp, filename, enc,
1421 Py_single_input, ps1, ps2,
1422 flags, &errcode, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001423 Py_XDECREF(v);
1424 Py_XDECREF(w);
1425 Py_XDECREF(oenc);
1426 if (mod == NULL) {
1427 PyArena_Free(arena);
1428 if (errcode == E_EOF) {
1429 PyErr_Clear();
1430 return E_EOF;
1431 }
1432 PyErr_Print();
1433 return -1;
1434 }
Victor Stinner95701bd2013-11-06 18:41:07 +01001435 m = PyImport_AddModuleObject(mod_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001436 if (m == NULL) {
1437 PyArena_Free(arena);
1438 return -1;
1439 }
1440 d = PyModule_GetDict(m);
1441 v = run_mod(mod, filename, d, d, flags, arena);
1442 PyArena_Free(arena);
1443 flush_io();
1444 if (v == NULL) {
1445 PyErr_Print();
1446 return -1;
1447 }
1448 Py_DECREF(v);
1449 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
2585/* Print fatal error message and abort */
2586
2587void
Tim Peters7c321a82002-07-09 02:57:01 +00002588Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002589{
Victor Stinner024e37a2011-03-31 01:31:06 +02002590 const int fd = fileno(stderr);
2591 PyThreadState *tstate;
2592
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002593 fprintf(stderr, "Fatal Python error: %s\n", msg);
2594 fflush(stderr); /* it helps in Windows debug build */
2595 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002596 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002597 }
Victor Stinner024e37a2011-03-31 01:31:06 +02002598 else {
2599 tstate = _Py_atomic_load_relaxed(&_PyThreadState_Current);
2600 if (tstate != NULL) {
2601 fputc('\n', stderr);
2602 fflush(stderr);
Victor Stinner7bba62f2011-05-07 12:43:00 +02002603 _Py_DumpTracebackThreads(fd, tstate->interp, tstate);
Victor Stinner024e37a2011-03-31 01:31:06 +02002604 }
Victor Stinnerd727e232011-04-01 12:13:55 +02002605 _PyFaulthandler_Fini();
Victor Stinner024e37a2011-03-31 01:31:06 +02002606 }
2607
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002608#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002609 {
2610 size_t len = strlen(msg);
2611 WCHAR* buffer;
2612 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002613
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002614 /* Convert the message to wchar_t. This uses a simple one-to-one
2615 conversion, assuming that the this error message actually uses ASCII
2616 only. If this ceases to be true, we will have to convert. */
2617 buffer = alloca( (len+1) * (sizeof *buffer));
2618 for( i=0; i<=len; ++i)
2619 buffer[i] = msg[i];
2620 OutputDebugStringW(L"Fatal Python error: ");
2621 OutputDebugStringW(buffer);
2622 OutputDebugStringW(L"\n");
2623 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002624#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002625 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002626#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002627#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002628 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002629}
2630
2631/* Clean up and exit */
2632
Guido van Rossuma110aa61994-08-29 12:50:44 +00002633#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002634#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002635#endif
2636
Collin Winter670e6922007-03-21 02:57:17 +00002637static void (*pyexitfunc)(void) = NULL;
2638/* For the atexit module. */
2639void _Py_PyAtExit(void (*func)(void))
2640{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002641 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002642}
2643
2644static void
2645call_py_exitfuncs(void)
2646{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002647 if (pyexitfunc == NULL)
2648 return;
Collin Winter670e6922007-03-21 02:57:17 +00002649
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002650 (*pyexitfunc)();
2651 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002652}
2653
Antoine Pitrou011bd622009-10-20 21:52:47 +00002654/* Wait until threading._shutdown completes, provided
2655 the threading module was imported in the first place.
2656 The shutdown routine will wait until all non-daemon
2657 "threading" threads have completed. */
2658static void
2659wait_for_thread_shutdown(void)
2660{
2661#ifdef WITH_THREAD
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002662 _Py_IDENTIFIER(_shutdown);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002663 PyObject *result;
2664 PyThreadState *tstate = PyThreadState_GET();
2665 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2666 "threading");
2667 if (threading == NULL) {
2668 /* threading not imported */
2669 PyErr_Clear();
2670 return;
2671 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002672 result = _PyObject_CallMethodId(threading, &PyId__shutdown, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002673 if (result == NULL) {
2674 PyErr_WriteUnraisable(threading);
2675 }
2676 else {
2677 Py_DECREF(result);
2678 }
2679 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002680#endif
2681}
2682
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002683#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002684static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002685static int nexitfuncs = 0;
2686
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002687int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002688{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002689 if (nexitfuncs >= NEXITFUNCS)
2690 return -1;
2691 exitfuncs[nexitfuncs++] = func;
2692 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002693}
2694
Guido van Rossumcc283f51997-08-05 02:22:03 +00002695static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002696call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002697{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002698 while (nexitfuncs > 0)
2699 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002700
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002701 fflush(stdout);
2702 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002703}
2704
2705void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002706Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002707{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002708 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002709
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002710 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002711}
2712
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002713static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002714initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002715{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002716#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002717 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002718#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002719#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002720 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002721#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002722#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002723 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002724#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002725 PyOS_InitInterrupts(); /* May imply initsignal() */
Victor Stinnerd786ad52013-07-21 13:25:51 +02002726 if (PyErr_Occurred()) {
2727 Py_FatalError("Py_Initialize: can't import signal");
2728 }
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002729}
2730
Guido van Rossum7433b121997-02-14 19:45:36 +00002731
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002732/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2733 *
2734 * All of the code in this function must only use async-signal-safe functions,
2735 * listed at `man 7 signal` or
2736 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2737 */
2738void
2739_Py_RestoreSignals(void)
2740{
2741#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002742 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002743#endif
2744#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002745 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002746#endif
2747#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002748 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002749#endif
2750}
2751
2752
Guido van Rossum7433b121997-02-14 19:45:36 +00002753/*
2754 * The file descriptor fd is considered ``interactive'' if either
2755 * a) isatty(fd) is TRUE, or
2756 * b) the -i flag was given, and the filename associated with
2757 * the descriptor is NULL or "<stdin>" or "???".
2758 */
2759int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002760Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002761{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002762 if (isatty((int)fileno(fp)))
2763 return 1;
2764 if (!Py_InteractiveFlag)
2765 return 0;
2766 return (filename == NULL) ||
2767 (strcmp(filename, "<stdin>") == 0) ||
2768 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002769}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002770
2771
Tim Petersd08e3822003-04-17 15:24:21 +00002772#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002773#if defined(WIN32) && defined(_MSC_VER)
2774
2775/* Stack checking for Microsoft C */
2776
2777#include <malloc.h>
2778#include <excpt.h>
2779
Fred Drakee8de31c2000-08-31 05:38:39 +00002780/*
2781 * Return non-zero when we run out of memory on the stack; zero otherwise.
2782 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002783int
Fred Drake399739f2000-08-31 05:52:44 +00002784PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002785{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002786 __try {
2787 /* alloca throws a stack overflow exception if there's
2788 not enough space left on the stack */
2789 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2790 return 0;
2791 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2792 EXCEPTION_EXECUTE_HANDLER :
2793 EXCEPTION_CONTINUE_SEARCH) {
2794 int errcode = _resetstkoflw();
2795 if (errcode == 0)
2796 {
2797 Py_FatalError("Could not reset the stack!");
2798 }
2799 }
2800 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002801}
2802
2803#endif /* WIN32 && _MSC_VER */
2804
2805/* Alternate implementations can be added here... */
2806
2807#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002808
2809
2810/* Wrappers around sigaction() or signal(). */
2811
2812PyOS_sighandler_t
2813PyOS_getsig(int sig)
2814{
2815#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002816 struct sigaction context;
2817 if (sigaction(sig, NULL, &context) == -1)
2818 return SIG_ERR;
2819 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002820#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002821 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002822/* Special signal handling for the secure CRT in Visual Studio 2005 */
2823#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002824 switch (sig) {
2825 /* Only these signals are valid */
2826 case SIGINT:
2827 case SIGILL:
2828 case SIGFPE:
2829 case SIGSEGV:
2830 case SIGTERM:
2831 case SIGBREAK:
2832 case SIGABRT:
2833 break;
2834 /* Don't call signal() with other values or it will assert */
2835 default:
2836 return SIG_ERR;
2837 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002838#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002839 handler = signal(sig, SIG_IGN);
2840 if (handler != SIG_ERR)
2841 signal(sig, handler);
2842 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002843#endif
2844}
2845
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002846/*
2847 * All of the code in this function must only use async-signal-safe functions,
2848 * listed at `man 7 signal` or
2849 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2850 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002851PyOS_sighandler_t
2852PyOS_setsig(int sig, PyOS_sighandler_t handler)
2853{
2854#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002855 /* Some code in Modules/signalmodule.c depends on sigaction() being
2856 * used here if HAVE_SIGACTION is defined. Fix that if this code
2857 * changes to invalidate that assumption.
2858 */
2859 struct sigaction context, ocontext;
2860 context.sa_handler = handler;
2861 sigemptyset(&context.sa_mask);
2862 context.sa_flags = 0;
2863 if (sigaction(sig, &context, &ocontext) == -1)
2864 return SIG_ERR;
2865 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002866#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002867 PyOS_sighandler_t oldhandler;
2868 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002869#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002870 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002871#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002872 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002873#endif
2874}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002875
2876/* Deprecated C API functions still provided for binary compatiblity */
2877
2878#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002879PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002880PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2881{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002882 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002883}
2884
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002885#undef PyParser_SimpleParseString
2886PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002887PyParser_SimpleParseString(const char *str, int start)
2888{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002889 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002890}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002891
2892#undef PyRun_AnyFile
2893PyAPI_FUNC(int)
2894PyRun_AnyFile(FILE *fp, const char *name)
2895{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002896 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002897}
2898
2899#undef PyRun_AnyFileEx
2900PyAPI_FUNC(int)
2901PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2902{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002903 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002904}
2905
2906#undef PyRun_AnyFileFlags
2907PyAPI_FUNC(int)
2908PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2909{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002910 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002911}
2912
2913#undef PyRun_File
2914PyAPI_FUNC(PyObject *)
2915PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2916{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002917 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002918}
2919
2920#undef PyRun_FileEx
2921PyAPI_FUNC(PyObject *)
2922PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2923{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002924 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002925}
2926
2927#undef PyRun_FileFlags
2928PyAPI_FUNC(PyObject *)
2929PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002930 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002931{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002932 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002933}
2934
2935#undef PyRun_SimpleFile
2936PyAPI_FUNC(int)
2937PyRun_SimpleFile(FILE *f, const char *p)
2938{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002939 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002940}
2941
2942#undef PyRun_SimpleFileEx
2943PyAPI_FUNC(int)
2944PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2945{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002946 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002947}
2948
2949
2950#undef PyRun_String
2951PyAPI_FUNC(PyObject *)
2952PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2953{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002954 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002955}
2956
2957#undef PyRun_SimpleString
2958PyAPI_FUNC(int)
2959PyRun_SimpleString(const char *s)
2960{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002961 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002962}
2963
2964#undef Py_CompileString
2965PyAPI_FUNC(PyObject *)
2966Py_CompileString(const char *str, const char *p, int s)
2967{
Georg Brandl8334fd92010-12-04 10:26:46 +00002968 return Py_CompileStringExFlags(str, p, s, NULL, -1);
2969}
2970
2971#undef Py_CompileStringFlags
2972PyAPI_FUNC(PyObject *)
2973Py_CompileStringFlags(const char *str, const char *p, int s,
2974 PyCompilerFlags *flags)
2975{
2976 return Py_CompileStringExFlags(str, p, s, flags, -1);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002977}
2978
2979#undef PyRun_InteractiveOne
2980PyAPI_FUNC(int)
2981PyRun_InteractiveOne(FILE *f, const char *p)
2982{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002983 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002984}
2985
2986#undef PyRun_InteractiveLoop
2987PyAPI_FUNC(int)
2988PyRun_InteractiveLoop(FILE *f, const char *p)
2989{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002990 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002991}
2992
2993#ifdef __cplusplus
2994}
2995#endif