blob: bb9f425fb1fd2bcb5fb17a709d4a550da215cf97 [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) {
Victor Stinner71430292014-03-18 01:18:21 +01001159 if (!errors) {
1160 /* When the LC_CTYPE locale is the POSIX locale ("C locale"),
1161 stdin and stdout use the surrogateescape error handler by
1162 default, instead of the strict error handler. */
1163 char *loc = setlocale(LC_CTYPE, NULL);
1164 if (loc != NULL && strcmp(loc, "C") == 0)
1165 errors = "surrogateescape";
1166 }
1167
Nick Coghlan7d270ee2013-10-17 22:35:35 +10001168 pythonioencoding = Py_GETENV("PYTHONIOENCODING");
1169 if (pythonioencoding) {
1170 char *err;
1171 pythonioencoding = _PyMem_Strdup(pythonioencoding);
1172 if (pythonioencoding == NULL) {
1173 PyErr_NoMemory();
1174 goto error;
1175 }
1176 err = strchr(pythonioencoding, ':');
1177 if (err) {
1178 *err = '\0';
1179 err++;
Victor Stinner71430292014-03-18 01:18:21 +01001180 if (*err && !_Py_StandardStreamErrors) {
Nick Coghlan7d270ee2013-10-17 22:35:35 +10001181 errors = err;
1182 }
1183 }
1184 if (*pythonioencoding && !encoding) {
1185 encoding = pythonioencoding;
1186 }
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001187 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001188 }
Martin v. Löwis0f599892008-06-02 11:13:03 +00001189
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001190 /* Set sys.stdin */
1191 fd = fileno(stdin);
1192 /* Under some conditions stdin, stdout and stderr may not be connected
1193 * and fileno() may point to an invalid file descriptor. For example
1194 * GUI apps don't have valid standard streams by default.
1195 */
Antoine Pitrou11942a52011-11-28 19:08:36 +01001196 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001197 std = Py_None;
1198 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001199 }
1200 else {
1201 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1202 if (std == NULL)
1203 goto error;
1204 } /* if (fd < 0) */
1205 PySys_SetObject("__stdin__", std);
Victor Stinnerbd303c12013-11-07 23:07:29 +01001206 _PySys_SetObjectId(&PyId_stdin, std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001207 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001208
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001209 /* Set sys.stdout */
1210 fd = fileno(stdout);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001211 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001212 std = Py_None;
1213 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001214 }
1215 else {
1216 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1217 if (std == NULL)
1218 goto error;
1219 } /* if (fd < 0) */
1220 PySys_SetObject("__stdout__", std);
Victor Stinnerbd303c12013-11-07 23:07:29 +01001221 _PySys_SetObjectId(&PyId_stdout, std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001222 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001223
Guido van Rossum98297ee2007-11-06 21:34:58 +00001224#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001225 /* Set sys.stderr, replaces the preliminary stderr */
1226 fd = fileno(stderr);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001227 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001228 std = Py_None;
1229 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001230 }
1231 else {
1232 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1233 if (std == NULL)
1234 goto error;
1235 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +00001236
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001237 /* Same as hack above, pre-import stderr's codec to avoid recursion
1238 when import.c tries to write to stderr in verbose mode. */
1239 encoding_attr = PyObject_GetAttrString(std, "encoding");
1240 if (encoding_attr != NULL) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001241 const char * std_encoding;
1242 std_encoding = _PyUnicode_AsString(encoding_attr);
1243 if (std_encoding != NULL) {
1244 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
Antoine Pitrou2fabfac2012-01-18 15:14:46 +01001245 Py_XDECREF(codec_info);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001246 }
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +00001247 Py_DECREF(encoding_attr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 }
1249 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +00001250
Victor Stinnerba308832013-07-22 23:55:19 +02001251 if (PySys_SetObject("__stderr__", std) < 0) {
1252 Py_DECREF(std);
1253 goto error;
1254 }
Victor Stinnerbd303c12013-11-07 23:07:29 +01001255 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
Victor Stinnerba308832013-07-22 23:55:19 +02001256 Py_DECREF(std);
1257 goto error;
1258 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001259 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001260#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001261
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001262 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001263 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001264 status = -1;
1265 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001266
Nick Coghlan7d270ee2013-10-17 22:35:35 +10001267 /* We won't need them anymore. */
1268 if (_Py_StandardStreamEncoding) {
1269 PyMem_RawFree(_Py_StandardStreamEncoding);
1270 _Py_StandardStreamEncoding = NULL;
1271 }
1272 if (_Py_StandardStreamErrors) {
1273 PyMem_RawFree(_Py_StandardStreamErrors);
1274 _Py_StandardStreamErrors = NULL;
1275 }
Serhiy Storchakabf28d2d2013-09-13 11:46:24 +03001276 PyMem_Free(pythonioencoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001277 Py_XDECREF(bimod);
1278 Py_XDECREF(iomod);
1279 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001280}
1281
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001282/* Parse input from a file and execute it */
1283
1284int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001285PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001286 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001287{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001288 if (filename == NULL)
1289 filename = "???";
1290 if (Py_FdIsInteractive(fp, filename)) {
1291 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1292 if (closeit)
1293 fclose(fp);
1294 return err;
1295 }
1296 else
1297 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001298}
1299
1300int
Victor Stinner95701bd2013-11-06 18:41:07 +01001301PyRun_InteractiveLoopFlags(FILE *fp, const char *filename_str, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001302{
Victor Stinner95701bd2013-11-06 18:41:07 +01001303 PyObject *filename, *v;
1304 int ret, err;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001305 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001306
Victor Stinner95701bd2013-11-06 18:41:07 +01001307 filename = PyUnicode_DecodeFSDefault(filename_str);
1308 if (filename == NULL) {
1309 PyErr_Print();
1310 return -1;
1311 }
1312
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001313 if (flags == NULL) {
1314 flags = &local_flags;
1315 local_flags.cf_flags = 0;
1316 }
Victor Stinner09054372013-11-06 22:41:44 +01001317 v = _PySys_GetObjectId(&PyId_ps1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001318 if (v == NULL) {
Victor Stinner09054372013-11-06 22:41:44 +01001319 _PySys_SetObjectId(&PyId_ps1, v = PyUnicode_FromString(">>> "));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001320 Py_XDECREF(v);
1321 }
Victor Stinner09054372013-11-06 22:41:44 +01001322 v = _PySys_GetObjectId(&PyId_ps2);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001323 if (v == NULL) {
Victor Stinner09054372013-11-06 22:41:44 +01001324 _PySys_SetObjectId(&PyId_ps2, v = PyUnicode_FromString("... "));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001325 Py_XDECREF(v);
1326 }
Victor Stinner95701bd2013-11-06 18:41:07 +01001327 err = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001328 for (;;) {
Victor Stinner95701bd2013-11-06 18:41:07 +01001329 ret = PyRun_InteractiveOneObject(fp, filename, flags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001330 PRINT_TOTAL_REFS();
Victor Stinner95701bd2013-11-06 18:41:07 +01001331 if (ret == E_EOF) {
1332 err = 0;
1333 break;
1334 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001335 /*
1336 if (ret == E_NOMEM)
Victor Stinner95701bd2013-11-06 18:41:07 +01001337 break;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001338 */
1339 }
Victor Stinner95701bd2013-11-06 18:41:07 +01001340 Py_DECREF(filename);
1341 return err;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001342}
1343
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001344/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001345static int PARSER_FLAGS(PyCompilerFlags *flags)
1346{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001347 int parser_flags = 0;
1348 if (!flags)
1349 return 0;
1350 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1351 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1352 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1353 parser_flags |= PyPARSE_IGNORE_COOKIE;
1354 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1355 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1356 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001357}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001358
Thomas Wouters89f507f2006-12-13 04:49:30 +00001359#if 0
1360/* Keep an example of flags with future keyword support. */
1361#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001362 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1363 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1364 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1365 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001366#endif
1367
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001368int
Victor Stinner95701bd2013-11-06 18:41:07 +01001369PyRun_InteractiveOneObject(FILE *fp, PyObject *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001370{
Victor Stinner95701bd2013-11-06 18:41:07 +01001371 PyObject *m, *d, *v, *w, *oenc = NULL, *mod_name;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001372 mod_ty mod;
1373 PyArena *arena;
1374 char *ps1 = "", *ps2 = "", *enc = NULL;
1375 int errcode = 0;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001376 _Py_IDENTIFIER(encoding);
Victor Stinner95701bd2013-11-06 18:41:07 +01001377 _Py_IDENTIFIER(__main__);
1378
1379 mod_name = _PyUnicode_FromId(&PyId___main__); /* borrowed */
1380 if (mod_name == NULL) {
1381 PyErr_Print();
1382 return -1;
1383 }
Tim Petersfe2127d2001-07-16 05:37:24 +00001384
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001385 if (fp == stdin) {
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001386 /* Fetch encoding from sys.stdin if possible. */
Victor Stinnerbd303c12013-11-07 23:07:29 +01001387 v = _PySys_GetObjectId(&PyId_stdin);
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001388 if (v && v != Py_None) {
1389 oenc = _PyObject_GetAttrId(v, &PyId_encoding);
1390 if (oenc)
1391 enc = _PyUnicode_AsString(oenc);
1392 if (!enc)
1393 PyErr_Clear();
1394 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001395 }
Victor Stinner09054372013-11-06 22:41:44 +01001396 v = _PySys_GetObjectId(&PyId_ps1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001397 if (v != NULL) {
1398 v = PyObject_Str(v);
1399 if (v == NULL)
1400 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001401 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001402 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001403 if (ps1 == NULL) {
1404 PyErr_Clear();
1405 ps1 = "";
1406 }
1407 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001408 }
Victor Stinner09054372013-11-06 22:41:44 +01001409 w = _PySys_GetObjectId(&PyId_ps2);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001410 if (w != NULL) {
1411 w = PyObject_Str(w);
1412 if (w == NULL)
1413 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001414 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001415 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001416 if (ps2 == NULL) {
1417 PyErr_Clear();
1418 ps2 = "";
1419 }
1420 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001421 }
1422 arena = PyArena_New();
1423 if (arena == NULL) {
1424 Py_XDECREF(v);
1425 Py_XDECREF(w);
1426 Py_XDECREF(oenc);
1427 return -1;
1428 }
Victor Stinner95701bd2013-11-06 18:41:07 +01001429 mod = PyParser_ASTFromFileObject(fp, filename, enc,
1430 Py_single_input, ps1, ps2,
1431 flags, &errcode, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001432 Py_XDECREF(v);
1433 Py_XDECREF(w);
1434 Py_XDECREF(oenc);
1435 if (mod == NULL) {
1436 PyArena_Free(arena);
1437 if (errcode == E_EOF) {
1438 PyErr_Clear();
1439 return E_EOF;
1440 }
1441 PyErr_Print();
1442 return -1;
1443 }
Victor Stinner95701bd2013-11-06 18:41:07 +01001444 m = PyImport_AddModuleObject(mod_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001445 if (m == NULL) {
1446 PyArena_Free(arena);
1447 return -1;
1448 }
1449 d = PyModule_GetDict(m);
1450 v = run_mod(mod, filename, d, d, flags, arena);
1451 PyArena_Free(arena);
1452 flush_io();
1453 if (v == NULL) {
1454 PyErr_Print();
1455 return -1;
1456 }
1457 Py_DECREF(v);
1458 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001459}
1460
Victor Stinner95701bd2013-11-06 18:41:07 +01001461int
1462PyRun_InteractiveOneFlags(FILE *fp, const char *filename_str, PyCompilerFlags *flags)
1463{
1464 PyObject *filename;
1465 int res;
1466
1467 filename = PyUnicode_DecodeFSDefault(filename_str);
1468 if (filename == NULL) {
1469 PyErr_Print();
1470 return -1;
1471 }
1472 res = PyRun_InteractiveOneObject(fp, filename, flags);
1473 Py_DECREF(filename);
1474 return res;
1475}
1476
1477
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001478/* Check whether a file maybe a pyc file: Look at the extension,
1479 the file type, and, if we may close it, at the first few bytes. */
1480
1481static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001482maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001483{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001484 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1485 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001486
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001487 /* Only look into the file if we are allowed to close it, since
1488 it then should also be seekable. */
1489 if (closeit) {
1490 /* Read only two bytes of the magic. If the file was opened in
1491 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1492 be read as they are on disk. */
1493 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1494 unsigned char buf[2];
1495 /* Mess: In case of -x, the stream is NOT at its start now,
1496 and ungetc() was used to push back the first newline,
1497 which makes the current stream position formally undefined,
1498 and a x-platform nightmare.
1499 Unfortunately, we have no direct way to know whether -x
1500 was specified. So we use a terrible hack: if the current
1501 stream position is not 0, we assume -x was specified, and
1502 give up. Bug 132850 on SourceForge spells out the
1503 hopelessness of trying anything else (fseek and ftell
1504 don't work predictably x-platform for text-mode files).
1505 */
1506 int ispyc = 0;
1507 if (ftell(fp) == 0) {
1508 if (fread(buf, 1, 2, fp) == 2 &&
1509 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1510 ispyc = 1;
1511 rewind(fp);
1512 }
1513 return ispyc;
1514 }
1515 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001516}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001517
Antoine Pitrou32d483c2013-07-30 21:01:23 +02001518static int
1519set_main_loader(PyObject *d, const char *filename, const char *loader_name)
Nick Coghlan85e729e2012-07-15 18:09:52 +10001520{
1521 PyInterpreterState *interp;
1522 PyThreadState *tstate;
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001523 PyObject *filename_obj, *loader_type, *loader;
Nick Coghlanb7a58942012-07-15 23:21:08 +10001524 int result = 0;
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001525
1526 filename_obj = PyUnicode_DecodeFSDefault(filename);
1527 if (filename_obj == NULL)
1528 return -1;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001529 /* Get current thread state and interpreter pointer */
1530 tstate = PyThreadState_GET();
1531 interp = tstate->interp;
Nick Coghlan3f94cbf2012-07-15 19:10:39 +10001532 loader_type = PyObject_GetAttrString(interp->importlib, loader_name);
1533 if (loader_type == NULL) {
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001534 Py_DECREF(filename_obj);
Nick Coghlan3f94cbf2012-07-15 19:10:39 +10001535 return -1;
1536 }
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001537 loader = PyObject_CallFunction(loader_type, "sN", "__main__", filename_obj);
Nick Coghlanb7a58942012-07-15 23:21:08 +10001538 Py_DECREF(loader_type);
1539 if (loader == NULL) {
Nick Coghlan85e729e2012-07-15 18:09:52 +10001540 return -1;
1541 }
Nick Coghlanb7a58942012-07-15 23:21:08 +10001542 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
1543 result = -1;
1544 }
Nick Coghlan85e729e2012-07-15 18:09:52 +10001545 Py_DECREF(loader);
Nick Coghlanb7a58942012-07-15 23:21:08 +10001546 return result;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001547}
1548
1549int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001550PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001551 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001552{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001553 PyObject *m, *d, *v;
1554 const char *ext;
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001555 int set_file_name = 0, ret = -1;
Victor Stinner0fcab4a2011-01-04 12:59:15 +00001556 size_t len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001557
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001558 m = PyImport_AddModule("__main__");
1559 if (m == NULL)
1560 return -1;
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001561 Py_INCREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001562 d = PyModule_GetDict(m);
1563 if (PyDict_GetItemString(d, "__file__") == NULL) {
1564 PyObject *f;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001565 f = PyUnicode_DecodeFSDefault(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001566 if (f == NULL)
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001567 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001568 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1569 Py_DECREF(f);
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001570 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001571 }
Barry Warsaw916048d2011-09-20 14:45:44 -04001572 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0) {
1573 Py_DECREF(f);
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001574 goto done;
Barry Warsaw916048d2011-09-20 14:45:44 -04001575 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001576 set_file_name = 1;
1577 Py_DECREF(f);
1578 }
1579 len = strlen(filename);
1580 ext = filename + len - (len > 4 ? 4 : 0);
1581 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Christian Heimes04ac4c12012-09-11 15:47:28 +02001582 FILE *pyc_fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001583 /* Try to run a pyc file. First, re-open in binary */
1584 if (closeit)
1585 fclose(fp);
Victor Stinnerdaf45552013-08-28 00:53:59 +02001586 if ((pyc_fp = _Py_fopen(filename, "rb")) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001587 fprintf(stderr, "python: Can't reopen .pyc file\n");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001588 goto done;
1589 }
1590 /* Turn on optimization if a .pyo file is given */
1591 if (strcmp(ext, ".pyo") == 0)
1592 Py_OptimizeFlag = 1;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001593
1594 if (set_main_loader(d, filename, "SourcelessFileLoader") < 0) {
1595 fprintf(stderr, "python: failed to set __main__.__loader__\n");
1596 ret = -1;
Christian Heimes04ac4c12012-09-11 15:47:28 +02001597 fclose(pyc_fp);
Nick Coghlan85e729e2012-07-15 18:09:52 +10001598 goto done;
1599 }
Christian Heimes04ac4c12012-09-11 15:47:28 +02001600 v = run_pyc_file(pyc_fp, filename, d, d, flags);
1601 fclose(pyc_fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001602 } else {
Nick Coghlan85e729e2012-07-15 18:09:52 +10001603 /* When running from stdin, leave __main__.__loader__ alone */
1604 if (strcmp(filename, "<stdin>") != 0 &&
1605 set_main_loader(d, filename, "SourceFileLoader") < 0) {
1606 fprintf(stderr, "python: failed to set __main__.__loader__\n");
1607 ret = -1;
1608 goto done;
1609 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001610 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1611 closeit, flags);
1612 }
1613 flush_io();
1614 if (v == NULL) {
1615 PyErr_Print();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001616 goto done;
1617 }
1618 Py_DECREF(v);
1619 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001620 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001621 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1622 PyErr_Clear();
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001623 Py_DECREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001624 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001625}
1626
1627int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001628PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001629{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001630 PyObject *m, *d, *v;
1631 m = PyImport_AddModule("__main__");
1632 if (m == NULL)
1633 return -1;
1634 d = PyModule_GetDict(m);
1635 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1636 if (v == NULL) {
1637 PyErr_Print();
1638 return -1;
1639 }
1640 Py_DECREF(v);
1641 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001642}
1643
Barry Warsaw035574d1997-08-29 22:07:17 +00001644static int
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001645parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename,
1646 int *lineno, int *offset, PyObject **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001647{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001648 long hold;
1649 PyObject *v;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001650 _Py_IDENTIFIER(msg);
1651 _Py_IDENTIFIER(filename);
1652 _Py_IDENTIFIER(lineno);
1653 _Py_IDENTIFIER(offset);
1654 _Py_IDENTIFIER(text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001655
Benjamin Peterson80d50422012-04-03 00:30:38 -04001656 *message = NULL;
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001657 *filename = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001658
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001659 /* new style errors. `err' is an instance */
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001660 *message = _PyObject_GetAttrId(err, &PyId_msg);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001661 if (!*message)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001662 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001663
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001664 v = _PyObject_GetAttrId(err, &PyId_filename);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001665 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001666 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001667 if (v == Py_None) {
1668 Py_DECREF(v);
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001669 *filename = _PyUnicode_FromId(&PyId_string);
1670 if (*filename == NULL)
1671 goto finally;
1672 Py_INCREF(*filename);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001673 }
1674 else {
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001675 *filename = v;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001676 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001677
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001678 v = _PyObject_GetAttrId(err, &PyId_lineno);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001679 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001680 goto finally;
1681 hold = PyLong_AsLong(v);
1682 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001683 if (hold < 0 && PyErr_Occurred())
1684 goto finally;
1685 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001686
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001687 v = _PyObject_GetAttrId(err, &PyId_offset);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001688 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001689 goto finally;
1690 if (v == Py_None) {
1691 *offset = -1;
1692 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001693 } else {
1694 hold = PyLong_AsLong(v);
1695 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001696 if (hold < 0 && PyErr_Occurred())
1697 goto finally;
1698 *offset = (int)hold;
1699 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001700
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001701 v = _PyObject_GetAttrId(err, &PyId_text);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001702 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001703 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001704 if (v == Py_None) {
1705 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 *text = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001707 }
1708 else {
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001709 *text = v;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001710 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001711 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001712
1713finally:
Benjamin Peterson80d50422012-04-03 00:30:38 -04001714 Py_XDECREF(*message);
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001715 Py_XDECREF(*filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001716 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001717}
1718
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001719void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001720PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001721{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001722 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001723}
1724
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001725static void
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001726print_error_text(PyObject *f, int offset, PyObject *text_obj)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001727{
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001728 char *text;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001729 char *nl;
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001730
1731 text = _PyUnicode_AsString(text_obj);
1732 if (text == NULL)
1733 return;
1734
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001735 if (offset >= 0) {
Benjamin Petersona95e9772010-10-29 03:28:14 +00001736 if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n')
1737 offset--;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001738 for (;;) {
1739 nl = strchr(text, '\n');
1740 if (nl == NULL || nl-text >= offset)
1741 break;
1742 offset -= (int)(nl+1-text);
1743 text = nl+1;
1744 }
1745 while (*text == ' ' || *text == '\t') {
1746 text++;
1747 offset--;
1748 }
1749 }
1750 PyFile_WriteString(" ", f);
1751 PyFile_WriteString(text, f);
1752 if (*text == '\0' || text[strlen(text)-1] != '\n')
1753 PyFile_WriteString("\n", f);
1754 if (offset == -1)
1755 return;
1756 PyFile_WriteString(" ", f);
Benjamin Petersona95e9772010-10-29 03:28:14 +00001757 while (--offset > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001758 PyFile_WriteString(" ", f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001759 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001760}
1761
Guido van Rossum66e8e862001-03-23 17:54:43 +00001762static void
1763handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001764{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001765 PyObject *exception, *value, *tb;
1766 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001767
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001768 if (Py_InspectFlag)
1769 /* Don't exit if -i flag was given. This flag is set to 0
1770 * when entering interactive mode for inspecting. */
1771 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001772
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001773 PyErr_Fetch(&exception, &value, &tb);
1774 fflush(stdout);
1775 if (value == NULL || value == Py_None)
1776 goto done;
1777 if (PyExceptionInstance_Check(value)) {
1778 /* The error code should be in the `code' attribute. */
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001779 _Py_IDENTIFIER(code);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001780 PyObject *code = _PyObject_GetAttrId(value, &PyId_code);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001781 if (code) {
1782 Py_DECREF(value);
1783 value = code;
1784 if (value == Py_None)
1785 goto done;
1786 }
1787 /* If we failed to dig out the 'code' attribute,
1788 just let the else clause below print the error. */
1789 }
1790 if (PyLong_Check(value))
1791 exitcode = (int)PyLong_AsLong(value);
1792 else {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001793 PyObject *sys_stderr = _PySys_GetObjectId(&PyId_stderr);
Nick Coghland979e432014-02-09 10:43:21 +10001794 /* We clear the exception here to avoid triggering the assertion
1795 * in PyObject_Str that ensures it won't silently lose exception
1796 * details.
1797 */
1798 PyErr_Clear();
Victor Stinner7126dbc2010-05-21 23:45:42 +00001799 if (sys_stderr != NULL && sys_stderr != Py_None) {
1800 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1801 } else {
1802 PyObject_Print(value, stderr, Py_PRINT_RAW);
1803 fflush(stderr);
1804 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001805 PySys_WriteStderr("\n");
1806 exitcode = 1;
1807 }
Tim Peterscf615b52003-04-19 18:47:02 +00001808 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001809 /* Restore and clear the exception info, in order to properly decref
1810 * the exception, value, and traceback. If we just exit instead,
1811 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1812 * some finalizers from running.
1813 */
1814 PyErr_Restore(exception, value, tb);
1815 PyErr_Clear();
1816 Py_Exit(exitcode);
1817 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001818}
1819
1820void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001821PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001822{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001823 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001824
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001825 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1826 handle_system_exit();
1827 }
1828 PyErr_Fetch(&exception, &v, &tb);
1829 if (exception == NULL)
1830 return;
1831 PyErr_NormalizeException(&exception, &v, &tb);
1832 if (tb == NULL) {
1833 tb = Py_None;
1834 Py_INCREF(tb);
1835 }
1836 PyException_SetTraceback(v, tb);
1837 if (exception == NULL)
1838 return;
1839 /* Now we know v != NULL too */
1840 if (set_sys_last_vars) {
Victor Stinner09054372013-11-06 22:41:44 +01001841 _PySys_SetObjectId(&PyId_last_type, exception);
1842 _PySys_SetObjectId(&PyId_last_value, v);
1843 _PySys_SetObjectId(&PyId_last_traceback, tb);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001844 }
Victor Stinner09054372013-11-06 22:41:44 +01001845 hook = _PySys_GetObjectId(&PyId_excepthook);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001846 if (hook) {
1847 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1848 PyObject *result = PyEval_CallObject(hook, args);
1849 if (result == NULL) {
1850 PyObject *exception2, *v2, *tb2;
1851 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1852 handle_system_exit();
1853 }
1854 PyErr_Fetch(&exception2, &v2, &tb2);
1855 PyErr_NormalizeException(&exception2, &v2, &tb2);
1856 /* It should not be possible for exception2 or v2
1857 to be NULL. However PyErr_Display() can't
1858 tolerate NULLs, so just be safe. */
1859 if (exception2 == NULL) {
1860 exception2 = Py_None;
1861 Py_INCREF(exception2);
1862 }
1863 if (v2 == NULL) {
1864 v2 = Py_None;
1865 Py_INCREF(v2);
1866 }
1867 fflush(stdout);
1868 PySys_WriteStderr("Error in sys.excepthook:\n");
1869 PyErr_Display(exception2, v2, tb2);
1870 PySys_WriteStderr("\nOriginal exception was:\n");
1871 PyErr_Display(exception, v, tb);
1872 Py_DECREF(exception2);
1873 Py_DECREF(v2);
1874 Py_XDECREF(tb2);
1875 }
1876 Py_XDECREF(result);
1877 Py_XDECREF(args);
1878 } else {
1879 PySys_WriteStderr("sys.excepthook is missing\n");
1880 PyErr_Display(exception, v, tb);
1881 }
1882 Py_XDECREF(exception);
1883 Py_XDECREF(v);
1884 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001885}
1886
Benjamin Petersone6528212008-07-15 15:32:09 +00001887static void
1888print_exception(PyObject *f, PyObject *value)
1889{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001890 int err = 0;
1891 PyObject *type, *tb;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001892 _Py_IDENTIFIER(print_file_and_line);
Benjamin Petersone6528212008-07-15 15:32:09 +00001893
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001894 if (!PyExceptionInstance_Check(value)) {
Victor Stinner52ce3b02013-12-09 02:10:08 +01001895 err = PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1896 err += PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1897 err += PyFile_WriteString(" found\n", f);
1898 if (err)
1899 PyErr_Clear();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001900 return;
1901 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001902
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001903 Py_INCREF(value);
1904 fflush(stdout);
1905 type = (PyObject *) Py_TYPE(value);
1906 tb = PyException_GetTraceback(value);
1907 if (tb && tb != Py_None)
1908 err = PyTraceBack_Print(tb, f);
1909 if (err == 0 &&
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001910 _PyObject_HasAttrId(value, &PyId_print_file_and_line))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001911 {
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001912 PyObject *message, *filename, *text;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001913 int lineno, offset;
1914 if (!parse_syntax_error(value, &message, &filename,
1915 &lineno, &offset, &text))
1916 PyErr_Clear();
1917 else {
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001918 PyObject *line;
1919
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001920 Py_DECREF(value);
1921 value = message;
Victor Stinnerefa7a0e2013-11-07 12:37:56 +01001922
1923 line = PyUnicode_FromFormat(" File \"%U\", line %d\n",
1924 filename, lineno);
1925 Py_DECREF(filename);
1926 if (line != NULL) {
1927 PyFile_WriteObject(line, f, Py_PRINT_RAW);
1928 Py_DECREF(line);
1929 }
1930
1931 if (text != NULL) {
1932 print_error_text(f, offset, text);
1933 Py_DECREF(text);
1934 }
1935
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001936 /* Can't be bothered to check all those
1937 PyFile_WriteString() calls */
1938 if (PyErr_Occurred())
1939 err = -1;
1940 }
1941 }
1942 if (err) {
1943 /* Don't do anything else */
1944 }
1945 else {
1946 PyObject* moduleName;
1947 char* className;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001948 _Py_IDENTIFIER(__module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001949 assert(PyExceptionClass_Check(type));
1950 className = PyExceptionClass_Name(type);
1951 if (className != NULL) {
1952 char *dot = strrchr(className, '.');
1953 if (dot != NULL)
1954 className = dot+1;
1955 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001956
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001957 moduleName = _PyObject_GetAttrId(type, &PyId___module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001958 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1959 {
Victor Stinner13b21bd2011-05-26 14:25:13 +02001960 Py_XDECREF(moduleName);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001961 err = PyFile_WriteString("<unknown>", f);
1962 }
1963 else {
Victor Stinnerbd303c12013-11-07 23:07:29 +01001964 if (_PyUnicode_CompareWithId(moduleName, &PyId_builtins) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001965 {
Victor Stinner937114f2013-11-07 00:12:30 +01001966 err = PyFile_WriteObject(moduleName, f, Py_PRINT_RAW);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001967 err += PyFile_WriteString(".", f);
1968 }
1969 Py_DECREF(moduleName);
1970 }
1971 if (err == 0) {
1972 if (className == NULL)
1973 err = PyFile_WriteString("<unknown>", f);
1974 else
1975 err = PyFile_WriteString(className, f);
1976 }
1977 }
1978 if (err == 0 && (value != Py_None)) {
1979 PyObject *s = PyObject_Str(value);
1980 /* only print colon if the str() of the
1981 object is not the empty string
1982 */
1983 if (s == NULL)
1984 err = -1;
1985 else if (!PyUnicode_Check(s) ||
Victor Stinnere251d6d2011-11-20 19:20:00 +01001986 PyUnicode_GetLength(s) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001987 err = PyFile_WriteString(": ", f);
1988 if (err == 0)
1989 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1990 Py_XDECREF(s);
1991 }
1992 /* try to write a newline in any case */
1993 err += PyFile_WriteString("\n", f);
1994 Py_XDECREF(tb);
1995 Py_DECREF(value);
1996 /* If an error happened here, don't show it.
1997 XXX This is wrong, but too many callers rely on this behavior. */
1998 if (err != 0)
1999 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00002000}
2001
2002static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002003 "\nThe above exception was the direct cause "
2004 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00002005
2006static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002007 "\nDuring handling of the above exception, "
2008 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00002009
2010static void
2011print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
2012{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002013 int err = 0, res;
2014 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00002015
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002016 if (seen != NULL) {
2017 /* Exception chaining */
2018 if (PySet_Add(seen, value) == -1)
2019 PyErr_Clear();
2020 else if (PyExceptionInstance_Check(value)) {
2021 cause = PyException_GetCause(value);
2022 context = PyException_GetContext(value);
Benjamin Petersond5a1c442012-05-14 22:09:31 -07002023 if (cause) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002024 res = PySet_Contains(seen, cause);
2025 if (res == -1)
2026 PyErr_Clear();
2027 if (res == 0) {
2028 print_exception_recursive(
2029 f, cause, seen);
2030 err |= PyFile_WriteString(
2031 cause_message, f);
2032 }
2033 }
Benjamin Petersond5a1c442012-05-14 22:09:31 -07002034 else if (context &&
2035 !((PyBaseExceptionObject *)value)->suppress_context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002036 res = PySet_Contains(seen, context);
2037 if (res == -1)
2038 PyErr_Clear();
2039 if (res == 0) {
2040 print_exception_recursive(
2041 f, context, seen);
2042 err |= PyFile_WriteString(
2043 context_message, f);
2044 }
2045 }
2046 Py_XDECREF(context);
2047 Py_XDECREF(cause);
2048 }
2049 }
2050 print_exception(f, value);
2051 if (err != 0)
2052 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00002053}
2054
Thomas Wouters477c8d52006-05-27 19:21:47 +00002055void
2056PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00002057{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002058 PyObject *seen;
Victor Stinnerbd303c12013-11-07 23:07:29 +01002059 PyObject *f = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrou24201d42013-10-13 21:53:13 +02002060 if (PyExceptionInstance_Check(value)
2061 && tb != NULL && PyTraceBack_Check(tb)) {
2062 /* Put the traceback on the exception, otherwise it won't get
2063 displayed. See issue #18776. */
2064 PyObject *cur_tb = PyException_GetTraceback(value);
2065 if (cur_tb == NULL)
2066 PyException_SetTraceback(value, tb);
2067 else
2068 Py_DECREF(cur_tb);
2069 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002070 if (f == Py_None) {
2071 /* pass */
2072 }
2073 else if (f == NULL) {
2074 _PyObject_Dump(value);
2075 fprintf(stderr, "lost sys.stderr\n");
2076 }
2077 else {
2078 /* We choose to ignore seen being possibly NULL, and report
2079 at least the main exception (it could be a MemoryError).
2080 */
2081 seen = PySet_New(NULL);
2082 if (seen == NULL)
2083 PyErr_Clear();
2084 print_exception_recursive(f, value, seen);
2085 Py_XDECREF(seen);
2086 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002087}
2088
Guido van Rossum82598051997-03-05 00:20:32 +00002089PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002090PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002091 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002092{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002093 PyObject *ret = NULL;
2094 mod_ty mod;
Victor Stinner95701bd2013-11-06 18:41:07 +01002095 PyArena *arena;
Victor Stinner95701bd2013-11-06 18:41:07 +01002096 PyObject *filename;
2097
2098 filename = _PyUnicode_FromId(&PyId_string); /* borrowed */
2099 if (filename == NULL)
2100 return NULL;
2101
2102 arena = PyArena_New();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002103 if (arena == NULL)
2104 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00002105
Victor Stinner95701bd2013-11-06 18:41:07 +01002106 mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002107 if (mod != NULL)
Victor Stinner95701bd2013-11-06 18:41:07 +01002108 ret = run_mod(mod, filename, globals, locals, flags, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002109 PyArena_Free(arena);
2110 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00002111}
2112
2113PyObject *
Victor Stinner95701bd2013-11-06 18:41:07 +01002114PyRun_FileExFlags(FILE *fp, const char *filename_str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002115 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00002116{
Victor Stinner95701bd2013-11-06 18:41:07 +01002117 PyObject *ret = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002118 mod_ty mod;
Victor Stinner95701bd2013-11-06 18:41:07 +01002119 PyArena *arena = NULL;
2120 PyObject *filename;
Guido van Rossum98297ee2007-11-06 21:34:58 +00002121
Victor Stinner95701bd2013-11-06 18:41:07 +01002122 filename = PyUnicode_DecodeFSDefault(filename_str);
2123 if (filename == NULL)
2124 goto exit;
2125
2126 arena = PyArena_New();
2127 if (arena == NULL)
2128 goto exit;
2129
2130 mod = PyParser_ASTFromFileObject(fp, filename, NULL, start, 0, 0,
2131 flags, NULL, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002132 if (closeit)
2133 fclose(fp);
2134 if (mod == NULL) {
Victor Stinner95701bd2013-11-06 18:41:07 +01002135 goto exit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002136 }
2137 ret = run_mod(mod, filename, globals, locals, flags, arena);
Victor Stinner95701bd2013-11-06 18:41:07 +01002138
2139exit:
2140 Py_XDECREF(filename);
2141 if (arena != NULL)
2142 PyArena_Free(arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002143 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00002144}
2145
Guido van Rossum6c193fa2007-12-05 05:14:58 +00002146static void
2147flush_io(void)
2148{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002149 PyObject *f, *r;
2150 PyObject *type, *value, *traceback;
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00002151
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002152 /* Save the current exception */
2153 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00002154
Victor Stinnerbd303c12013-11-07 23:07:29 +01002155 f = _PySys_GetObjectId(&PyId_stderr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002156 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002157 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002158 if (r)
2159 Py_DECREF(r);
2160 else
2161 PyErr_Clear();
2162 }
Victor Stinnerbd303c12013-11-07 23:07:29 +01002163 f = _PySys_GetObjectId(&PyId_stdout);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002164 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002165 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002166 if (r)
2167 Py_DECREF(r);
2168 else
2169 PyErr_Clear();
2170 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00002171
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002172 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00002173}
2174
Guido van Rossum82598051997-03-05 00:20:32 +00002175static PyObject *
Victor Stinner95701bd2013-11-06 18:41:07 +01002176run_mod(mod_ty mod, PyObject *filename, PyObject *globals, PyObject *locals,
2177 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002178{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002179 PyCodeObject *co;
2180 PyObject *v;
Victor Stinner95701bd2013-11-06 18:41:07 +01002181 co = PyAST_CompileObject(mod, filename, flags, -1, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002182 if (co == NULL)
2183 return NULL;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002184 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002185 Py_DECREF(co);
2186 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002187}
2188
Guido van Rossum82598051997-03-05 00:20:32 +00002189static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002190run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002191 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00002192{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002193 PyCodeObject *co;
2194 PyObject *v;
2195 long magic;
2196 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00002197
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002198 magic = PyMarshal_ReadLongFromFile(fp);
2199 if (magic != PyImport_GetMagicNumber()) {
2200 PyErr_SetString(PyExc_RuntimeError,
2201 "Bad magic number in .pyc file");
2202 return NULL;
2203 }
Antoine Pitrou5136ac02012-01-13 18:52:16 +01002204 /* Skip mtime and size */
2205 (void) PyMarshal_ReadLongFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002206 (void) PyMarshal_ReadLongFromFile(fp);
2207 v = PyMarshal_ReadLastObjectFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002208 if (v == NULL || !PyCode_Check(v)) {
2209 Py_XDECREF(v);
2210 PyErr_SetString(PyExc_RuntimeError,
2211 "Bad code object in .pyc file");
2212 return NULL;
2213 }
2214 co = (PyCodeObject *)v;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002215 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002216 if (v && flags)
2217 flags->cf_flags |= (co->co_flags & PyCF_MASK);
2218 Py_DECREF(co);
2219 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00002220}
2221
Guido van Rossum82598051997-03-05 00:20:32 +00002222PyObject *
Victor Stinner14e461d2013-08-26 22:28:21 +02002223Py_CompileStringObject(const char *str, PyObject *filename, int start,
2224 PyCompilerFlags *flags, int optimize)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00002225{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002226 PyCodeObject *co;
2227 mod_ty mod;
2228 PyArena *arena = PyArena_New();
2229 if (arena == NULL)
2230 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002231
Victor Stinner14e461d2013-08-26 22:28:21 +02002232 mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002233 if (mod == NULL) {
2234 PyArena_Free(arena);
2235 return NULL;
2236 }
2237 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
2238 PyObject *result = PyAST_mod2obj(mod);
2239 PyArena_Free(arena);
2240 return result;
2241 }
Victor Stinner14e461d2013-08-26 22:28:21 +02002242 co = PyAST_CompileObject(mod, filename, flags, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002243 PyArena_Free(arena);
2244 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00002245}
2246
Victor Stinner14e461d2013-08-26 22:28:21 +02002247PyObject *
2248Py_CompileStringExFlags(const char *str, const char *filename_str, int start,
2249 PyCompilerFlags *flags, int optimize)
2250{
2251 PyObject *filename, *co;
2252 filename = PyUnicode_DecodeFSDefault(filename_str);
2253 if (filename == NULL)
2254 return NULL;
2255 co = Py_CompileStringObject(str, filename, start, flags, optimize);
2256 Py_DECREF(filename);
2257 return co;
2258}
2259
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002260/* For use in Py_LIMITED_API */
2261#undef Py_CompileString
2262PyObject *
2263PyCompileString(const char *str, const char *filename, int start)
2264{
2265 return Py_CompileStringFlags(str, filename, start, NULL);
2266}
2267
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002268struct symtable *
Victor Stinner14e461d2013-08-26 22:28:21 +02002269Py_SymtableStringObject(const char *str, PyObject *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002270{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002271 struct symtable *st;
2272 mod_ty mod;
2273 PyCompilerFlags flags;
Victor Stinner14e461d2013-08-26 22:28:21 +02002274 PyArena *arena;
2275
2276 arena = PyArena_New();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002277 if (arena == NULL)
2278 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002279
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002280 flags.cf_flags = 0;
Victor Stinner14e461d2013-08-26 22:28:21 +02002281 mod = PyParser_ASTFromStringObject(str, filename, start, &flags, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002282 if (mod == NULL) {
2283 PyArena_Free(arena);
2284 return NULL;
2285 }
Victor Stinner14e461d2013-08-26 22:28:21 +02002286 st = PySymtable_BuildObject(mod, filename, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002287 PyArena_Free(arena);
2288 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002289}
2290
Victor Stinner14e461d2013-08-26 22:28:21 +02002291struct symtable *
2292Py_SymtableString(const char *str, const char *filename_str, int start)
2293{
2294 PyObject *filename;
2295 struct symtable *st;
2296
2297 filename = PyUnicode_DecodeFSDefault(filename_str);
2298 if (filename == NULL)
2299 return NULL;
2300 st = Py_SymtableStringObject(str, filename, start);
2301 Py_DECREF(filename);
2302 return st;
2303}
2304
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002305/* Preferred access to parser is through AST. */
2306mod_ty
Victor Stinner14e461d2013-08-26 22:28:21 +02002307PyParser_ASTFromStringObject(const char *s, PyObject *filename, int start,
2308 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002309{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002310 mod_ty mod;
2311 PyCompilerFlags localflags;
2312 perrdetail err;
2313 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002314
Victor Stinner14e461d2013-08-26 22:28:21 +02002315 node *n = PyParser_ParseStringObject(s, filename,
2316 &_PyParser_Grammar, start, &err,
2317 &iflags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002318 if (flags == NULL) {
2319 localflags.cf_flags = 0;
2320 flags = &localflags;
2321 }
2322 if (n) {
2323 flags->cf_flags |= iflags & PyCF_MASK;
Victor Stinner14e461d2013-08-26 22:28:21 +02002324 mod = PyAST_FromNodeObject(n, flags, filename, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002325 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002326 }
2327 else {
2328 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002329 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002330 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002331 err_free(&err);
2332 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002333}
2334
2335mod_ty
Victor Stinner14e461d2013-08-26 22:28:21 +02002336PyParser_ASTFromString(const char *s, const char *filename_str, int start,
2337 PyCompilerFlags *flags, PyArena *arena)
2338{
2339 PyObject *filename;
2340 mod_ty mod;
2341 filename = PyUnicode_DecodeFSDefault(filename_str);
2342 if (filename == NULL)
2343 return NULL;
2344 mod = PyParser_ASTFromStringObject(s, filename, start, flags, arena);
2345 Py_DECREF(filename);
2346 return mod;
2347}
2348
2349mod_ty
2350PyParser_ASTFromFileObject(FILE *fp, PyObject *filename, const char* enc,
2351 int start, char *ps1,
2352 char *ps2, PyCompilerFlags *flags, int *errcode,
2353 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002354{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002355 mod_ty mod;
2356 PyCompilerFlags localflags;
2357 perrdetail err;
2358 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002359
Victor Stinner14e461d2013-08-26 22:28:21 +02002360 node *n = PyParser_ParseFileObject(fp, filename, enc,
2361 &_PyParser_Grammar,
2362 start, ps1, ps2, &err, &iflags);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002363 if (flags == NULL) {
2364 localflags.cf_flags = 0;
2365 flags = &localflags;
2366 }
2367 if (n) {
2368 flags->cf_flags |= iflags & PyCF_MASK;
Victor Stinner14e461d2013-08-26 22:28:21 +02002369 mod = PyAST_FromNodeObject(n, flags, filename, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002370 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002371 }
2372 else {
2373 err_input(&err);
2374 if (errcode)
2375 *errcode = err.error;
Victor Stinner7f2fee32011-04-05 00:39:01 +02002376 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002377 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002378 err_free(&err);
2379 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002380}
2381
Victor Stinner14e461d2013-08-26 22:28:21 +02002382mod_ty
2383PyParser_ASTFromFile(FILE *fp, const char *filename_str, const char* enc,
2384 int start, char *ps1,
2385 char *ps2, PyCompilerFlags *flags, int *errcode,
2386 PyArena *arena)
2387{
2388 mod_ty mod;
2389 PyObject *filename;
2390 filename = PyUnicode_DecodeFSDefault(filename_str);
2391 if (filename == NULL)
2392 return NULL;
2393 mod = PyParser_ASTFromFileObject(fp, filename, enc, start, ps1, ps2,
2394 flags, errcode, arena);
2395 Py_DECREF(filename);
2396 return mod;
2397}
2398
Guido van Rossuma110aa61994-08-29 12:50:44 +00002399/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002400
Guido van Rossuma110aa61994-08-29 12:50:44 +00002401node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002402PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002403{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002404 perrdetail err;
2405 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
2406 &_PyParser_Grammar,
2407 start, NULL, NULL, &err, flags);
2408 if (n == NULL)
2409 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002410 err_free(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002411
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002412 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002413}
2414
Guido van Rossuma110aa61994-08-29 12:50:44 +00002415/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002416
Guido van Rossuma110aa61994-08-29 12:50:44 +00002417node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002418PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00002419{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002420 perrdetail err;
2421 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
2422 start, &err, flags);
2423 if (n == NULL)
2424 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002425 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002426 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00002427}
2428
2429node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002430PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002431 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002432{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002433 perrdetail err;
2434 node *n = PyParser_ParseStringFlagsFilename(str, filename,
2435 &_PyParser_Grammar, start, &err, flags);
2436 if (n == NULL)
2437 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002438 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002439 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00002440}
2441
2442node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002443PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002444{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002445 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00002446}
2447
Guido van Rossum66ebd912003-04-17 16:02:26 +00002448/* May want to move a more generalized form of this to parsetok.c or
2449 even parser modules. */
2450
2451void
Victor Stinner7f2fee32011-04-05 00:39:01 +02002452PyParser_ClearError(perrdetail *err)
2453{
2454 err_free(err);
2455}
2456
2457void
Guido van Rossum66ebd912003-04-17 16:02:26 +00002458PyParser_SetError(perrdetail *err)
2459{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002460 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00002461}
2462
Victor Stinner7f2fee32011-04-05 00:39:01 +02002463static void
2464err_free(perrdetail *err)
2465{
2466 Py_CLEAR(err->filename);
2467}
2468
Guido van Rossuma110aa61994-08-29 12:50:44 +00002469/* Set the error appropriate to the given input error code (see errcode.h) */
2470
2471static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002472err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00002473{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002474 PyObject *v, *w, *errtype, *errtext;
2475 PyObject *msg_obj = NULL;
2476 char *msg = NULL;
Serhiy Storchaka65fd0592014-01-21 22:26:52 +02002477 int offset = err->offset;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002478
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002479 errtype = PyExc_SyntaxError;
2480 switch (err->error) {
2481 case E_ERROR:
2482 return;
2483 case E_SYNTAX:
2484 errtype = PyExc_IndentationError;
2485 if (err->expected == INDENT)
2486 msg = "expected an indented block";
2487 else if (err->token == INDENT)
2488 msg = "unexpected indent";
2489 else if (err->token == DEDENT)
2490 msg = "unexpected unindent";
2491 else {
2492 errtype = PyExc_SyntaxError;
2493 msg = "invalid syntax";
2494 }
2495 break;
2496 case E_TOKEN:
2497 msg = "invalid token";
2498 break;
2499 case E_EOFS:
2500 msg = "EOF while scanning triple-quoted string literal";
2501 break;
2502 case E_EOLS:
2503 msg = "EOL while scanning string literal";
2504 break;
2505 case E_INTR:
2506 if (!PyErr_Occurred())
2507 PyErr_SetNone(PyExc_KeyboardInterrupt);
2508 goto cleanup;
2509 case E_NOMEM:
2510 PyErr_NoMemory();
2511 goto cleanup;
2512 case E_EOF:
2513 msg = "unexpected EOF while parsing";
2514 break;
2515 case E_TABSPACE:
2516 errtype = PyExc_TabError;
2517 msg = "inconsistent use of tabs and spaces in indentation";
2518 break;
2519 case E_OVERFLOW:
2520 msg = "expression too long";
2521 break;
2522 case E_DEDENT:
2523 errtype = PyExc_IndentationError;
2524 msg = "unindent does not match any outer indentation level";
2525 break;
2526 case E_TOODEEP:
2527 errtype = PyExc_IndentationError;
2528 msg = "too many levels of indentation";
2529 break;
2530 case E_DECODE: {
2531 PyObject *type, *value, *tb;
2532 PyErr_Fetch(&type, &value, &tb);
2533 msg = "unknown decode error";
2534 if (value != NULL)
2535 msg_obj = PyObject_Str(value);
2536 Py_XDECREF(type);
2537 Py_XDECREF(value);
2538 Py_XDECREF(tb);
2539 break;
2540 }
2541 case E_LINECONT:
2542 msg = "unexpected character after line continuation character";
2543 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002544
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002545 case E_IDENTIFIER:
2546 msg = "invalid character in identifier";
2547 break;
Meador Ingefa21bf02012-01-19 01:08:41 -06002548 case E_BADSINGLE:
2549 msg = "multiple statements found while compiling a single statement";
2550 break;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002551 default:
2552 fprintf(stderr, "error=%d\n", err->error);
2553 msg = "unknown parsing error";
2554 break;
2555 }
2556 /* err->text may not be UTF-8 in case of decoding errors.
2557 Explicitly convert to an object. */
2558 if (!err->text) {
2559 errtext = Py_None;
2560 Py_INCREF(Py_None);
2561 } else {
Serhiy Storchaka65fd0592014-01-21 22:26:52 +02002562 errtext = PyUnicode_DecodeUTF8(err->text, err->offset,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002563 "replace");
Serhiy Storchaka65fd0592014-01-21 22:26:52 +02002564 if (errtext != NULL) {
2565 Py_ssize_t len = strlen(err->text);
2566 offset = (int)PyUnicode_GET_LENGTH(errtext);
2567 if (len != err->offset) {
2568 Py_DECREF(errtext);
2569 errtext = PyUnicode_DecodeUTF8(err->text, len,
2570 "replace");
2571 }
2572 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002573 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002574 v = Py_BuildValue("(OiiN)", err->filename,
Serhiy Storchaka65fd0592014-01-21 22:26:52 +02002575 err->lineno, offset, errtext);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002576 if (v != NULL) {
2577 if (msg_obj)
2578 w = Py_BuildValue("(OO)", msg_obj, v);
2579 else
2580 w = Py_BuildValue("(sO)", msg, v);
2581 } else
2582 w = NULL;
2583 Py_XDECREF(v);
2584 PyErr_SetObject(errtype, w);
2585 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002586cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002587 Py_XDECREF(msg_obj);
2588 if (err->text != NULL) {
2589 PyObject_FREE(err->text);
2590 err->text = NULL;
2591 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002592}
2593
2594/* Print fatal error message and abort */
2595
2596void
Tim Peters7c321a82002-07-09 02:57:01 +00002597Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002598{
Victor Stinner024e37a2011-03-31 01:31:06 +02002599 const int fd = fileno(stderr);
2600 PyThreadState *tstate;
2601
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002602 fprintf(stderr, "Fatal Python error: %s\n", msg);
2603 fflush(stderr); /* it helps in Windows debug build */
2604 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002605 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002606 }
Victor Stinner024e37a2011-03-31 01:31:06 +02002607 else {
2608 tstate = _Py_atomic_load_relaxed(&_PyThreadState_Current);
2609 if (tstate != NULL) {
2610 fputc('\n', stderr);
2611 fflush(stderr);
Victor Stinner7bba62f2011-05-07 12:43:00 +02002612 _Py_DumpTracebackThreads(fd, tstate->interp, tstate);
Victor Stinner024e37a2011-03-31 01:31:06 +02002613 }
Victor Stinnerd727e232011-04-01 12:13:55 +02002614 _PyFaulthandler_Fini();
Victor Stinner024e37a2011-03-31 01:31:06 +02002615 }
2616
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002617#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002618 {
2619 size_t len = strlen(msg);
2620 WCHAR* buffer;
2621 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002622
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002623 /* Convert the message to wchar_t. This uses a simple one-to-one
2624 conversion, assuming that the this error message actually uses ASCII
2625 only. If this ceases to be true, we will have to convert. */
2626 buffer = alloca( (len+1) * (sizeof *buffer));
2627 for( i=0; i<=len; ++i)
2628 buffer[i] = msg[i];
2629 OutputDebugStringW(L"Fatal Python error: ");
2630 OutputDebugStringW(buffer);
2631 OutputDebugStringW(L"\n");
2632 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002633#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002634 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002635#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002636#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002637 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002638}
2639
2640/* Clean up and exit */
2641
Guido van Rossuma110aa61994-08-29 12:50:44 +00002642#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002643#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002644#endif
2645
Collin Winter670e6922007-03-21 02:57:17 +00002646static void (*pyexitfunc)(void) = NULL;
2647/* For the atexit module. */
2648void _Py_PyAtExit(void (*func)(void))
2649{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002650 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002651}
2652
2653static void
2654call_py_exitfuncs(void)
2655{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002656 if (pyexitfunc == NULL)
2657 return;
Collin Winter670e6922007-03-21 02:57:17 +00002658
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002659 (*pyexitfunc)();
2660 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002661}
2662
Antoine Pitrou011bd622009-10-20 21:52:47 +00002663/* Wait until threading._shutdown completes, provided
2664 the threading module was imported in the first place.
2665 The shutdown routine will wait until all non-daemon
2666 "threading" threads have completed. */
2667static void
2668wait_for_thread_shutdown(void)
2669{
2670#ifdef WITH_THREAD
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002671 _Py_IDENTIFIER(_shutdown);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002672 PyObject *result;
2673 PyThreadState *tstate = PyThreadState_GET();
2674 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2675 "threading");
2676 if (threading == NULL) {
2677 /* threading not imported */
2678 PyErr_Clear();
2679 return;
2680 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002681 result = _PyObject_CallMethodId(threading, &PyId__shutdown, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002682 if (result == NULL) {
2683 PyErr_WriteUnraisable(threading);
2684 }
2685 else {
2686 Py_DECREF(result);
2687 }
2688 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002689#endif
2690}
2691
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002692#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002693static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002694static int nexitfuncs = 0;
2695
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002696int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002697{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002698 if (nexitfuncs >= NEXITFUNCS)
2699 return -1;
2700 exitfuncs[nexitfuncs++] = func;
2701 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002702}
2703
Guido van Rossumcc283f51997-08-05 02:22:03 +00002704static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002705call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002706{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002707 while (nexitfuncs > 0)
2708 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002709
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002710 fflush(stdout);
2711 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002712}
2713
2714void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002715Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002716{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002717 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002718
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002719 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002720}
2721
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002722static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002723initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002724{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002725#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002726 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002727#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002728#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002729 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002730#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002731#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002732 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002733#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002734 PyOS_InitInterrupts(); /* May imply initsignal() */
Victor Stinnerd786ad52013-07-21 13:25:51 +02002735 if (PyErr_Occurred()) {
2736 Py_FatalError("Py_Initialize: can't import signal");
2737 }
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002738}
2739
Guido van Rossum7433b121997-02-14 19:45:36 +00002740
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002741/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2742 *
2743 * All of the code in this function must only use async-signal-safe functions,
2744 * listed at `man 7 signal` or
2745 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2746 */
2747void
2748_Py_RestoreSignals(void)
2749{
2750#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002751 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002752#endif
2753#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002754 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002755#endif
2756#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002757 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002758#endif
2759}
2760
2761
Guido van Rossum7433b121997-02-14 19:45:36 +00002762/*
2763 * The file descriptor fd is considered ``interactive'' if either
2764 * a) isatty(fd) is TRUE, or
2765 * b) the -i flag was given, and the filename associated with
2766 * the descriptor is NULL or "<stdin>" or "???".
2767 */
2768int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002769Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002770{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002771 if (isatty((int)fileno(fp)))
2772 return 1;
2773 if (!Py_InteractiveFlag)
2774 return 0;
2775 return (filename == NULL) ||
2776 (strcmp(filename, "<stdin>") == 0) ||
2777 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002778}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002779
2780
Tim Petersd08e3822003-04-17 15:24:21 +00002781#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002782#if defined(WIN32) && defined(_MSC_VER)
2783
2784/* Stack checking for Microsoft C */
2785
2786#include <malloc.h>
2787#include <excpt.h>
2788
Fred Drakee8de31c2000-08-31 05:38:39 +00002789/*
2790 * Return non-zero when we run out of memory on the stack; zero otherwise.
2791 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002792int
Fred Drake399739f2000-08-31 05:52:44 +00002793PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002794{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002795 __try {
2796 /* alloca throws a stack overflow exception if there's
2797 not enough space left on the stack */
2798 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2799 return 0;
2800 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2801 EXCEPTION_EXECUTE_HANDLER :
2802 EXCEPTION_CONTINUE_SEARCH) {
2803 int errcode = _resetstkoflw();
2804 if (errcode == 0)
2805 {
2806 Py_FatalError("Could not reset the stack!");
2807 }
2808 }
2809 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002810}
2811
2812#endif /* WIN32 && _MSC_VER */
2813
2814/* Alternate implementations can be added here... */
2815
2816#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002817
2818
2819/* Wrappers around sigaction() or signal(). */
2820
2821PyOS_sighandler_t
2822PyOS_getsig(int sig)
2823{
2824#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002825 struct sigaction context;
2826 if (sigaction(sig, NULL, &context) == -1)
2827 return SIG_ERR;
2828 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002829#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002830 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002831/* Special signal handling for the secure CRT in Visual Studio 2005 */
2832#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002833 switch (sig) {
2834 /* Only these signals are valid */
2835 case SIGINT:
2836 case SIGILL:
2837 case SIGFPE:
2838 case SIGSEGV:
2839 case SIGTERM:
2840 case SIGBREAK:
2841 case SIGABRT:
2842 break;
2843 /* Don't call signal() with other values or it will assert */
2844 default:
2845 return SIG_ERR;
2846 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002847#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002848 handler = signal(sig, SIG_IGN);
2849 if (handler != SIG_ERR)
2850 signal(sig, handler);
2851 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002852#endif
2853}
2854
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002855/*
2856 * All of the code in this function must only use async-signal-safe functions,
2857 * listed at `man 7 signal` or
2858 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2859 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002860PyOS_sighandler_t
2861PyOS_setsig(int sig, PyOS_sighandler_t handler)
2862{
2863#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002864 /* Some code in Modules/signalmodule.c depends on sigaction() being
2865 * used here if HAVE_SIGACTION is defined. Fix that if this code
2866 * changes to invalidate that assumption.
2867 */
2868 struct sigaction context, ocontext;
2869 context.sa_handler = handler;
2870 sigemptyset(&context.sa_mask);
2871 context.sa_flags = 0;
2872 if (sigaction(sig, &context, &ocontext) == -1)
2873 return SIG_ERR;
2874 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002875#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002876 PyOS_sighandler_t oldhandler;
2877 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002878#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002879 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002880#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002881 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002882#endif
2883}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002884
2885/* Deprecated C API functions still provided for binary compatiblity */
2886
2887#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002888PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002889PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2890{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002891 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002892}
2893
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002894#undef PyParser_SimpleParseString
2895PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002896PyParser_SimpleParseString(const char *str, int start)
2897{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002898 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002899}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002900
2901#undef PyRun_AnyFile
2902PyAPI_FUNC(int)
2903PyRun_AnyFile(FILE *fp, const char *name)
2904{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002905 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002906}
2907
2908#undef PyRun_AnyFileEx
2909PyAPI_FUNC(int)
2910PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2911{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002912 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002913}
2914
2915#undef PyRun_AnyFileFlags
2916PyAPI_FUNC(int)
2917PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2918{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002919 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002920}
2921
2922#undef PyRun_File
2923PyAPI_FUNC(PyObject *)
2924PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2925{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002926 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002927}
2928
2929#undef PyRun_FileEx
2930PyAPI_FUNC(PyObject *)
2931PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2932{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002933 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002934}
2935
2936#undef PyRun_FileFlags
2937PyAPI_FUNC(PyObject *)
2938PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002939 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002940{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002941 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002942}
2943
2944#undef PyRun_SimpleFile
2945PyAPI_FUNC(int)
2946PyRun_SimpleFile(FILE *f, const char *p)
2947{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002948 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002949}
2950
2951#undef PyRun_SimpleFileEx
2952PyAPI_FUNC(int)
2953PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2954{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002955 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002956}
2957
2958
2959#undef PyRun_String
2960PyAPI_FUNC(PyObject *)
2961PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2962{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002963 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002964}
2965
2966#undef PyRun_SimpleString
2967PyAPI_FUNC(int)
2968PyRun_SimpleString(const char *s)
2969{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002970 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002971}
2972
2973#undef Py_CompileString
2974PyAPI_FUNC(PyObject *)
2975Py_CompileString(const char *str, const char *p, int s)
2976{
Georg Brandl8334fd92010-12-04 10:26:46 +00002977 return Py_CompileStringExFlags(str, p, s, NULL, -1);
2978}
2979
2980#undef Py_CompileStringFlags
2981PyAPI_FUNC(PyObject *)
2982Py_CompileStringFlags(const char *str, const char *p, int s,
2983 PyCompilerFlags *flags)
2984{
2985 return Py_CompileStringExFlags(str, p, s, flags, -1);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002986}
2987
2988#undef PyRun_InteractiveOne
2989PyAPI_FUNC(int)
2990PyRun_InteractiveOne(FILE *f, const char *p)
2991{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002992 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002993}
2994
2995#undef PyRun_InteractiveLoop
2996PyAPI_FUNC(int)
2997PyRun_InteractiveLoop(FILE *f, const char *p)
2998{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002999 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003000}
3001
3002#ifdef __cplusplus
3003}
3004#endif