blob: 040172bb3de7dc64dc860fd90960c5e2bba955f7 [file] [log] [blame]
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001
2/* Python interpreter top-level routines, including init/exit */
3
Guido van Rossum82598051997-03-05 00:20:32 +00004#include "Python.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +00005
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "Python-ast.h"
Guido van Rossumd8faa362007-04-27 19:54:29 +00007#undef Yield /* undefine macro conflicting with winbase.h */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00008#include "grammar.h"
9#include "node.h"
Fred Drake85f36392000-07-11 17:53:00 +000010#include "token.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000011#include "parsetok.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000012#include "errcode.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000013#include "code.h"
Jeremy Hylton4b38da62001-02-02 18:19:15 +000014#include "symtable.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000015#include "ast.h"
Guido van Rossumfdef2711994-09-14 13:31:04 +000016#include "marshal.h"
Martin v. Löwis790465f2008-04-05 20:41:37 +000017#include "osdefs.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000018
Thomas Wouters0e3f5912006-08-11 14:57:12 +000019#ifdef HAVE_SIGNAL_H
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000020#include <signal.h>
Thomas Wouters0e3f5912006-08-11 14:57:12 +000021#endif
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000022
Benjamin Peterson80a50ac2009-01-02 21:24:04 +000023#ifdef MS_WINDOWS
Martin v. Löwis5c88d812009-01-02 20:47:48 +000024#include "malloc.h" /* for alloca */
Benjamin Peterson80a50ac2009-01-02 21:24:04 +000025#endif
Martin v. Löwis5c88d812009-01-02 20:47:48 +000026
Martin v. Löwis73d538b2003-03-05 15:13:47 +000027#ifdef HAVE_LANGINFO_H
28#include <locale.h>
29#include <langinfo.h>
30#endif
31
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000032#ifdef MS_WINDOWS
Guido van Rossuma44823b1995-03-14 15:01:17 +000033#undef BYTE
34#include "windows.h"
Martin v. Löwis790465f2008-04-05 20:41:37 +000035#define PATH_MAX MAXPATHLEN
Guido van Rossuma44823b1995-03-14 15:01:17 +000036#endif
37
Ezio Melotti1f8898a2013-03-26 01:59:56 +020038#ifdef Py_REF_DEBUG
Antoine Pitrou208ac5c2013-04-24 20:17:53 +020039static
40void _print_total_refs(void) {
Ezio Melotti1f8898a2013-03-26 01:59:56 +020041 PyObject *xoptions, *key, *value;
42 xoptions = PySys_GetXOptions();
43 if (xoptions == NULL)
44 return;
45 key = PyUnicode_FromString("showrefcount");
46 if (key == NULL)
47 return;
48 value = PyDict_GetItem(xoptions, key);
49 Py_DECREF(key);
50 if (value == Py_True)
51 fprintf(stderr,
52 "[%" PY_FORMAT_SIZE_T "d refs, "
53 "%" PY_FORMAT_SIZE_T "d blocks]\n",
54 _Py_GetRefTotal(), _Py_GetAllocatedBlocks());
55}
56#endif
57
Neal Norwitz4281cef2006-03-04 19:58:13 +000058#ifndef Py_REF_DEBUG
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000059#define PRINT_TOTAL_REFS()
Neal Norwitz4281cef2006-03-04 19:58:13 +000060#else /* Py_REF_DEBUG */
Ezio Melotti1f8898a2013-03-26 01:59:56 +020061#define PRINT_TOTAL_REFS() _print_total_refs()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000062#endif
63
64#ifdef __cplusplus
65extern "C" {
Neal Norwitz4281cef2006-03-04 19:58:13 +000066#endif
67
Martin v. Löwis790465f2008-04-05 20:41:37 +000068extern wchar_t *Py_GetPath(void);
Guido van Rossum1984f1e1992-08-04 12:41:02 +000069
Guido van Rossum82598051997-03-05 00:20:32 +000070extern grammar _PyParser_Grammar; /* From graminit.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000071
Guido van Rossumb73cc041993-11-01 16:28:59 +000072/* Forward */
Nick Coghlan85e729e2012-07-15 18:09:52 +100073static void initmain(PyInterpreterState *interp);
Victor Stinner793b5312011-04-27 00:24:21 +020074static int initfsencoding(PyInterpreterState *interp);
Tim Petersdbd9ba62000-07-09 03:09:57 +000075static void initsite(void);
Guido van Rossumce3a72a2007-10-19 23:16:50 +000076static int initstdio(void);
Amaury Forgeot d'Arc7fedbe52008-04-10 21:03:09 +000077static void flush_io(void);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000078static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000079 PyCompilerFlags *, PyArena *);
Martin v. Löwis95292d62002-12-11 14:04:59 +000080static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000081 PyCompilerFlags *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000082static void err_input(perrdetail *);
Victor Stinner7f2fee32011-04-05 00:39:01 +020083static void err_free(perrdetail *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000084static void initsigs(void);
Collin Winter670e6922007-03-21 02:57:17 +000085static void call_py_exitfuncs(void);
Antoine Pitrou011bd622009-10-20 21:52:47 +000086static void wait_for_thread_shutdown(void);
Tim Petersdbd9ba62000-07-09 03:09:57 +000087static void call_ll_exitfuncs(void);
Victor Stinner3a50e702011-10-18 21:21:00 +020088extern int _PyUnicode_Init(void);
Victor Stinner26f91992013-07-17 01:22:45 +020089extern int _PyStructSequence_Init(void);
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000090extern void _PyUnicode_Fini(void);
Guido van Rossumddefaf32007-01-14 03:31:43 +000091extern int _PyLong_Init(void);
92extern void PyLong_Fini(void);
Victor Stinner024e37a2011-03-31 01:31:06 +020093extern int _PyFaulthandler_Init(void);
94extern void _PyFaulthandler_Fini(void);
Guido van Rossumc94044c2000-03-10 23:03:54 +000095
Mark Hammond8d98d2c2003-04-19 15:41:53 +000096#ifdef WITH_THREAD
97extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
98extern void _PyGILState_Fini(void);
99#endif /* WITH_THREAD */
100
Guido van Rossum82598051997-03-05 00:20:32 +0000101int Py_DebugFlag; /* Needed by parser.c */
102int Py_VerboseFlag; /* Needed by import.c */
Georg Brandl8aa7e992010-12-28 18:30:18 +0000103int Py_QuietFlag; /* Needed by sysmodule.c */
Guido van Rossum7433b121997-02-14 19:45:36 +0000104int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Georg Brandl0b2489e2011-05-15 08:49:12 +0200105int Py_InspectFlag; /* Needed to determine whether to exit at SystemExit */
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000106int Py_NoSiteFlag; /* Suppress 'import site' */
Guido van Rossum98297ee2007-11-06 21:34:58 +0000107int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */
Christian Heimes790c8232008-01-07 21:14:23 +0000108int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.py[co]) */
Barry Warsaw3ce09642000-05-02 19:18:59 +0000109int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
Guido van Rossuma61691e1998-02-06 22:27:24 +0000110int Py_FrozenFlag; /* Needed by getpath.c */
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000111int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Christian Heimes8dc226f2008-05-06 23:45:46 +0000112int Py_NoUserSiteDirectory = 0; /* for -s and site.py */
Antoine Pitrou05608432009-01-09 18:53:14 +0000113int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */
Georg Brandl2daf6ae2012-02-20 19:54:16 +0100114int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000115
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200116PyThreadState *_Py_Finalizing = NULL;
117
Christian Heimes33fe8092008-04-13 13:53:33 +0000118/* PyModule_GetWarningsModule is no longer necessary as of 2.6
119since _warnings is builtin. This API should not be used. */
120PyObject *
121PyModule_GetWarningsModule(void)
Mark Hammondedd07732003-07-15 23:03:55 +0000122{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000123 return PyImport_ImportModule("warnings");
Mark Hammondedd07732003-07-15 23:03:55 +0000124}
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000125
Guido van Rossum25ce5661997-08-02 03:10:38 +0000126static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000127
Thomas Wouters7e474022000-07-16 12:04:32 +0000128/* API to access the initialized flag -- useful for esoteric use */
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000129
130int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000131Py_IsInitialized(void)
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000132{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000133 return initialized;
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000134}
135
Guido van Rossum25ce5661997-08-02 03:10:38 +0000136/* Global initializations. Can be undone by Py_Finalize(). Don't
137 call this twice without an intervening Py_Finalize() call. When
138 initializations fail, a fatal error is issued and the function does
139 not return. On return, the first thread and interpreter state have
140 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000141
Guido van Rossum25ce5661997-08-02 03:10:38 +0000142 Locking: you must hold the interpreter lock while calling this.
143 (If the lock has not yet been initialized, that's equivalent to
144 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000145
Guido van Rossum25ce5661997-08-02 03:10:38 +0000146*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000147
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000148static int
149add_flag(int flag, const char *envs)
150{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000151 int env = atoi(envs);
152 if (flag < env)
153 flag = env;
154 if (flag < 1)
155 flag = 1;
156 return flag;
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000157}
158
Christian Heimes5833a2f2008-10-30 21:40:04 +0000159static char*
Victor Stinner94908bb2010-08-18 21:23:25 +0000160get_codec_name(const char *encoding)
Christian Heimes5833a2f2008-10-30 21:40:04 +0000161{
Victor Stinner94908bb2010-08-18 21:23:25 +0000162 char *name_utf8, *name_str;
Victor Stinner386fe712010-05-19 00:34:15 +0000163 PyObject *codec, *name = NULL;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200164 _Py_IDENTIFIER(name);
Christian Heimes5833a2f2008-10-30 21:40:04 +0000165
Victor Stinner94908bb2010-08-18 21:23:25 +0000166 codec = _PyCodec_Lookup(encoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000167 if (!codec)
168 goto error;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000169
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200170 name = _PyObject_GetAttrId(codec, &PyId_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000171 Py_CLEAR(codec);
172 if (!name)
173 goto error;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000174
Victor Stinner94908bb2010-08-18 21:23:25 +0000175 name_utf8 = _PyUnicode_AsString(name);
Victor Stinner4ca28092011-03-20 23:09:03 +0100176 if (name_utf8 == NULL)
Victor Stinner386fe712010-05-19 00:34:15 +0000177 goto error;
Victor Stinner49fc8ec2013-07-07 23:30:24 +0200178 name_str = _PyMem_RawStrdup(name_utf8);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000179 Py_DECREF(name);
Victor Stinner94908bb2010-08-18 21:23:25 +0000180 if (name_str == NULL) {
181 PyErr_NoMemory();
182 return NULL;
183 }
184 return name_str;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000185
186error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000187 Py_XDECREF(codec);
Victor Stinner386fe712010-05-19 00:34:15 +0000188 Py_XDECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000189 return NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000190}
Victor Stinner94908bb2010-08-18 21:23:25 +0000191
Victor Stinner94908bb2010-08-18 21:23:25 +0000192static char*
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200193get_locale_encoding(void)
Victor Stinner94908bb2010-08-18 21:23:25 +0000194{
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200195#ifdef MS_WINDOWS
196 char codepage[100];
197 PyOS_snprintf(codepage, sizeof(codepage), "cp%d", GetACP());
198 return get_codec_name(codepage);
199#elif defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94908bb2010-08-18 21:23:25 +0000200 char* codeset = nl_langinfo(CODESET);
201 if (!codeset || codeset[0] == '\0') {
202 PyErr_SetString(PyExc_ValueError, "CODESET is not set or empty");
203 return NULL;
204 }
205 return get_codec_name(codeset);
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200206#else
207 PyErr_SetNone(PyExc_NotImplementedError);
208 return NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000209#endif
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200210}
Christian Heimes5833a2f2008-10-30 21:40:04 +0000211
Brett Cannonfd074152012-04-14 14:10:13 -0400212static void
213import_init(PyInterpreterState *interp, PyObject *sysmod)
214{
215 PyObject *importlib;
216 PyObject *impmod;
217 PyObject *sys_modules;
218 PyObject *value;
219
220 /* Import _importlib through its frozen version, _frozen_importlib. */
Brett Cannonfd074152012-04-14 14:10:13 -0400221 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
222 Py_FatalError("Py_Initialize: can't import _frozen_importlib");
223 }
224 else if (Py_VerboseFlag) {
225 PySys_FormatStderr("import _frozen_importlib # frozen\n");
226 }
227 importlib = PyImport_AddModule("_frozen_importlib");
228 if (importlib == NULL) {
229 Py_FatalError("Py_Initialize: couldn't get _frozen_importlib from "
230 "sys.modules");
231 }
232 interp->importlib = importlib;
233 Py_INCREF(interp->importlib);
234
235 /* Install _importlib as __import__ */
236 impmod = PyInit_imp();
237 if (impmod == NULL) {
238 Py_FatalError("Py_Initialize: can't import imp");
239 }
240 else if (Py_VerboseFlag) {
241 PySys_FormatStderr("import imp # builtin\n");
242 }
243 sys_modules = PyImport_GetModuleDict();
244 if (Py_VerboseFlag) {
245 PySys_FormatStderr("import sys # builtin\n");
246 }
Brett Cannon6f44d662012-04-15 16:08:47 -0400247 if (PyDict_SetItemString(sys_modules, "_imp", impmod) < 0) {
248 Py_FatalError("Py_Initialize: can't save _imp to sys.modules");
Brett Cannonfd074152012-04-14 14:10:13 -0400249 }
250
Brett Cannone0d88a12012-04-25 20:54:04 -0400251 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
Brett Cannonfd074152012-04-14 14:10:13 -0400252 if (value == NULL) {
253 PyErr_Print();
254 Py_FatalError("Py_Initialize: importlib install failed");
255 }
256 Py_DECREF(value);
Brett Cannonfc9ca272012-04-15 01:35:05 -0400257 Py_DECREF(impmod);
Brett Cannonfd074152012-04-14 14:10:13 -0400258
259 _PyImportZip_Init();
260}
261
262
Guido van Rossuma027efa1997-05-05 20:56:21 +0000263void
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200264_Py_InitializeEx_Private(int install_sigs, int install_importlib)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000265{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000266 PyInterpreterState *interp;
267 PyThreadState *tstate;
268 PyObject *bimod, *sysmod, *pstderr;
269 char *p;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000270 extern void _Py_ReadyTypes(void);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000271
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000272 if (initialized)
273 return;
274 initialized = 1;
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200275 _Py_Finalizing = NULL;
Tim Petersd08e3822003-04-17 15:24:21 +0000276
Andrew M. Kuchlingb2ceb3a2010-02-22 23:26:10 +0000277#if defined(HAVE_LANGINFO_H) && defined(HAVE_SETLOCALE)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000278 /* Set up the LC_CTYPE locale, so we can obtain
279 the locale's charset without having to switch
280 locales. */
281 setlocale(LC_CTYPE, "");
Martin v. Löwisd1cd4d42007-08-11 14:02:14 +0000282#endif
283
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000284 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
285 Py_DebugFlag = add_flag(Py_DebugFlag, p);
286 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
287 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
288 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
289 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
290 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0')
291 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);
Georg Brandl2daf6ae2012-02-20 19:54:16 +0100292 /* The variable is only tested for existence here; _PyRandom_Init will
293 check its value further. */
294 if ((p = Py_GETENV("PYTHONHASHSEED")) && *p != '\0')
295 Py_HashRandomizationFlag = add_flag(Py_HashRandomizationFlag, p);
296
297 _PyRandom_Init();
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000298
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000299 interp = PyInterpreterState_New();
300 if (interp == NULL)
301 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000302
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000303 tstate = PyThreadState_New(interp);
304 if (tstate == NULL)
305 Py_FatalError("Py_Initialize: can't make first thread");
306 (void) PyThreadState_Swap(tstate);
Guido van Rossuma027efa1997-05-05 20:56:21 +0000307
Victor Stinner6961bd62010-08-17 22:26:51 +0000308#ifdef WITH_THREAD
Antoine Pitroub0b384b2010-09-20 20:13:48 +0000309 /* We can't call _PyEval_FiniThreads() in Py_Finalize because
310 destroying the GIL might fail when it is being referenced from
311 another running thread (see issue #9901).
312 Instead we destroy the previously created GIL here, which ensures
313 that we can call Py_Initialize / Py_Finalize multiple times. */
314 _PyEval_FiniThreads();
315
316 /* Auto-thread-state API */
Victor Stinner6961bd62010-08-17 22:26:51 +0000317 _PyGILState_Init(interp, tstate);
318#endif /* WITH_THREAD */
319
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000320 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000321
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000322 if (!_PyFrame_Init())
323 Py_FatalError("Py_Initialize: can't init frames");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000324
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000325 if (!_PyLong_Init())
326 Py_FatalError("Py_Initialize: can't init longs");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000327
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000328 if (!PyByteArray_Init())
329 Py_FatalError("Py_Initialize: can't init bytearray");
Neal Norwitz6968b052007-02-27 19:02:19 +0000330
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000331 _PyFloat_Init();
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000332
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000333 interp->modules = PyDict_New();
334 if (interp->modules == NULL)
335 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000336
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000337 /* Init Unicode implementation; relies on the codec registry */
Victor Stinner3a50e702011-10-18 21:21:00 +0200338 if (_PyUnicode_Init() < 0)
339 Py_FatalError("Py_Initialize: can't initialize unicode");
Victor Stinner26f91992013-07-17 01:22:45 +0200340 if (_PyStructSequence_Init() < 0)
341 Py_FatalError("Py_Initialize: can't initialize structseq");
Guido van Rossumc94044c2000-03-10 23:03:54 +0000342
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000343 bimod = _PyBuiltin_Init();
344 if (bimod == NULL)
345 Py_FatalError("Py_Initialize: can't initialize builtins modules");
Victor Stinner49d3f252010-10-17 01:24:53 +0000346 _PyImport_FixupBuiltin(bimod, "builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000347 interp->builtins = PyModule_GetDict(bimod);
348 if (interp->builtins == NULL)
349 Py_FatalError("Py_Initialize: can't initialize builtins dict");
350 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000351
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000352 /* initialize builtin exceptions */
Brett Cannonfd074152012-04-14 14:10:13 -0400353 _PyExc_Init(bimod);
Christian Heimes9a68f8c2007-11-14 00:16:07 +0000354
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000355 sysmod = _PySys_Init();
356 if (sysmod == NULL)
357 Py_FatalError("Py_Initialize: can't initialize sys");
358 interp->sysdict = PyModule_GetDict(sysmod);
359 if (interp->sysdict == NULL)
360 Py_FatalError("Py_Initialize: can't initialize sys dict");
361 Py_INCREF(interp->sysdict);
Victor Stinner49d3f252010-10-17 01:24:53 +0000362 _PyImport_FixupBuiltin(sysmod, "sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000363 PySys_SetPath(Py_GetPath());
364 PyDict_SetItemString(interp->sysdict, "modules",
365 interp->modules);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000366
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000367 /* Set up a preliminary stderr printer until we have enough
368 infrastructure for the io module in place. */
369 pstderr = PyFile_NewStdPrinter(fileno(stderr));
370 if (pstderr == NULL)
371 Py_FatalError("Py_Initialize: can't set preliminary stderr");
372 PySys_SetObject("stderr", pstderr);
373 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000374 Py_DECREF(pstderr);
Guido van Rossum826d8972007-10-30 18:34:07 +0000375
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000376 _PyImport_Init();
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000377
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000378 _PyImportHooks_Init();
Just van Rossum52e14d62002-12-30 22:08:05 +0000379
Victor Stinner7d79b8b2010-05-19 20:40:50 +0000380 /* Initialize _warnings. */
381 _PyWarnings_Init();
382
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200383 if (!install_importlib)
384 return;
385
Brett Cannonfd074152012-04-14 14:10:13 -0400386 import_init(interp, sysmod);
387
Victor Stinnerd5698cb2012-07-31 02:55:49 +0200388 /* initialize the faulthandler module */
389 if (_PyFaulthandler_Init())
390 Py_FatalError("Py_Initialize: can't initialize faulthandler");
391
Alexander Belopolsky6fc4ade2010-08-05 17:34:27 +0000392 _PyTime_Init();
393
Victor Stinner793b5312011-04-27 00:24:21 +0200394 if (initfsencoding(interp) < 0)
395 Py_FatalError("Py_Initialize: unable to load the file system codec");
Martin v. Löwis011e8422009-05-05 04:43:17 +0000396
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000397 if (install_sigs)
398 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000399
Nick Coghlan85e729e2012-07-15 18:09:52 +1000400 initmain(interp); /* Module __main__ */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000401 if (initstdio() < 0)
402 Py_FatalError(
403 "Py_Initialize: can't initialize sys standard streams");
404
Antoine Pitroucf9f9802010-11-10 13:55:25 +0000405 /* Initialize warnings. */
406 if (PySys_HasWarnOptions()) {
407 PyObject *warnings_module = PyImport_ImportModule("warnings");
408 if (warnings_module == NULL) {
409 fprintf(stderr, "'import warnings' failed; traceback:\n");
410 PyErr_Print();
411 }
412 Py_XDECREF(warnings_module);
413 }
414
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000415 if (!Py_NoSiteFlag)
416 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000417}
418
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000419void
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200420Py_InitializeEx(int install_sigs)
421{
422 _Py_InitializeEx_Private(install_sigs, 1);
423}
424
425void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000426Py_Initialize(void)
427{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000428 Py_InitializeEx(1);
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000429}
430
431
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000432#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000433extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000434#endif
435
Guido van Rossume8432ac2007-07-09 15:04:50 +0000436/* Flush stdout and stderr */
437
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100438static int
439file_is_closed(PyObject *fobj)
440{
441 int r;
442 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
443 if (tmp == NULL) {
444 PyErr_Clear();
445 return 0;
446 }
447 r = PyObject_IsTrue(tmp);
448 Py_DECREF(tmp);
449 if (r < 0)
450 PyErr_Clear();
451 return r > 0;
452}
453
Neal Norwitz2bad9702007-08-27 06:19:22 +0000454static void
Guido van Rossum1bd21222007-07-10 20:14:13 +0000455flush_std_files(void)
Guido van Rossume8432ac2007-07-09 15:04:50 +0000456{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000457 PyObject *fout = PySys_GetObject("stdout");
458 PyObject *ferr = PySys_GetObject("stderr");
459 PyObject *tmp;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200460 _Py_IDENTIFIER(flush);
Guido van Rossume8432ac2007-07-09 15:04:50 +0000461
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100462 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200463 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000464 if (tmp == NULL)
Antoine Pitroubddc9fe2010-08-08 20:46:42 +0000465 PyErr_WriteUnraisable(fout);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000466 else
467 Py_DECREF(tmp);
468 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000469
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100470 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200471 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000472 if (tmp == NULL)
473 PyErr_Clear();
474 else
475 Py_DECREF(tmp);
476 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000477}
478
Guido van Rossum25ce5661997-08-02 03:10:38 +0000479/* Undo the effect of Py_Initialize().
480
481 Beware: if multiple interpreter and/or thread states exist, these
482 are not wiped out; only the current thread and interpreter state
483 are deleted. But since everything else is deleted, those other
484 interpreter and thread states should no longer be used.
485
486 (XXX We should do better, e.g. wipe out all interpreters and
487 threads.)
488
489 Locking: as above.
490
491*/
492
493void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000494Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000495{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000496 PyInterpreterState *interp;
497 PyThreadState *tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000498
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000499 if (!initialized)
500 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000501
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000502 wait_for_thread_shutdown();
Antoine Pitrou011bd622009-10-20 21:52:47 +0000503
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000504 /* The interpreter is still entirely intact at this point, and the
505 * exit funcs may be relying on that. In particular, if some thread
506 * or exit func is still waiting to do an import, the import machinery
507 * expects Py_IsInitialized() to return true. So don't say the
508 * interpreter is uninitialized until after the exit funcs have run.
509 * Note that Threading.py uses an exit func to do a join on all the
510 * threads created thru it, so this also protects pending imports in
511 * the threads created via Threading.
512 */
513 call_py_exitfuncs();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000514
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000515 /* Get current thread state and interpreter pointer */
516 tstate = PyThreadState_GET();
517 interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000518
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200519 /* Remaining threads (e.g. daemon threads) will automatically exit
520 after taking the GIL (in PyEval_RestoreThread()). */
521 _Py_Finalizing = tstate;
522 initialized = 0;
523
524 /* Flush stdout+stderr */
525 flush_std_files();
526
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000527 /* Disable signal handling */
528 PyOS_FiniInterrupts();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000529
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000530 /* Collect garbage. This may call finalizers; it's nice to call these
531 * before all modules are destroyed.
532 * XXX If a __del__ or weakref callback is triggered here, and tries to
533 * XXX import a module, bad things can happen, because Python no
534 * XXX longer believes it's initialized.
535 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
536 * XXX is easy to provoke that way. I've also seen, e.g.,
537 * XXX Exception exceptions.ImportError: 'No module named sha'
538 * XXX in <function callback at 0x008F5718> ignored
539 * XXX but I'm unclear on exactly how that one happens. In any case,
540 * XXX I haven't seen a real-life report of either of these.
541 */
542 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000543#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000544 /* With COUNT_ALLOCS, it helps to run GC multiple times:
545 each collection might release some types from the type
546 list, so they become garbage. */
547 while (PyGC_Collect() > 0)
548 /* nothing */;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000549#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000550 /* Destroy all modules */
551 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000552
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000553 /* Flush stdout+stderr (again, in case more was printed) */
554 flush_std_files();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000555
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000556 /* Collect final garbage. This disposes of cycles created by
Florent Xiclunaaa6c1d22011-12-12 18:54:29 +0100557 * class definitions, for example.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000558 * XXX This is disabled because it caused too many problems. If
559 * XXX a __del__ or weakref callback triggers here, Python code has
560 * XXX a hard time running, because even the sys module has been
561 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
562 * XXX One symptom is a sequence of information-free messages
563 * XXX coming from threads (if a __del__ or callback is invoked,
564 * XXX other threads can execute too, and any exception they encounter
565 * XXX triggers a comedy of errors as subsystem after subsystem
566 * XXX fails to find what it *expects* to find in sys to help report
567 * XXX the exception and consequent unexpected failures). I've also
568 * XXX seen segfaults then, after adding print statements to the
569 * XXX Python code getting called.
570 */
Tim Peters1d7323e2003-12-01 21:35:27 +0000571#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000572 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000573#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000574
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000575 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
576 _PyImport_Fini();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000577
Antoine Pitroufd417cc2013-05-05 08:12:42 +0200578 /* Cleanup typeobject.c's internal caches. */
579 _PyType_Fini();
580
Victor Stinner024e37a2011-03-31 01:31:06 +0200581 /* unload faulthandler module */
582 _PyFaulthandler_Fini();
583
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000584 /* Debugging stuff */
Guido van Rossum1707aad1997-12-08 23:43:45 +0000585#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000586 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000587#endif
588
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000589 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000590
Tim Peters9cf25ce2003-04-17 15:21:01 +0000591#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000592 /* Display all objects still alive -- this can invoke arbitrary
593 * __repr__ overrides, so requires a mostly-intact interpreter.
594 * Alas, a lot of stuff may still be alive now that will be cleaned
595 * up later.
596 */
597 if (Py_GETENV("PYTHONDUMPREFS"))
598 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000599#endif /* Py_TRACE_REFS */
600
Antoine Pitroufd417cc2013-05-05 08:12:42 +0200601 /* Clear interpreter state and all thread states. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000602 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000603
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000604 /* Now we decref the exception classes. After this point nothing
605 can raise an exception. That's okay, because each Fini() method
606 below has been checked to make sure no exceptions are ever
607 raised.
608 */
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000609
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000610 _PyExc_Fini();
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000611
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000612 /* Sundry finalizers */
613 PyMethod_Fini();
614 PyFrame_Fini();
615 PyCFunction_Fini();
616 PyTuple_Fini();
617 PyList_Fini();
618 PySet_Fini();
619 PyBytes_Fini();
620 PyByteArray_Fini();
621 PyLong_Fini();
622 PyFloat_Fini();
623 PyDict_Fini();
Antoine Pitrouf34a0cd2011-11-18 20:14:34 +0100624 PySlice_Fini();
Antoine Pitrou5f454a02013-05-06 21:15:57 +0200625 _PyGC_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000626
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000627 /* Cleanup Unicode implementation */
628 _PyUnicode_Fini();
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000629
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000630 /* reset file system default encoding */
Victor Stinnerb744ba12010-05-15 12:27:16 +0000631 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +0200632 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000633 Py_FileSystemDefaultEncoding = NULL;
634 }
Christian Heimesc8967002007-11-30 10:18:26 +0000635
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000636 /* XXX Still allocated:
637 - various static ad-hoc pointers to interned strings
638 - int and float free list blocks
639 - whatever various modules and libraries allocate
640 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000641
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000642 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000643
Victor Stinner51fa4582013-07-07 15:50:49 +0200644 /* Cleanup auto-thread-state */
645#ifdef WITH_THREAD
646 _PyGILState_Fini();
647#endif /* WITH_THREAD */
648
649 /* Delete current thread. After this, many C API calls become crashy. */
650 PyThreadState_Swap(NULL);
651 PyInterpreterState_Delete(interp);
652
Tim Peters269b2a62003-04-17 19:52:29 +0000653#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000654 /* Display addresses (& refcnts) of all objects still alive.
655 * An address can be used to find the repr of the object, printed
656 * above by _Py_PrintReferences.
657 */
658 if (Py_GETENV("PYTHONDUMPREFS"))
659 _Py_PrintReferenceAddresses(stderr);
Tim Peters269b2a62003-04-17 19:52:29 +0000660#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000661#ifdef PYMALLOC_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000662 if (Py_GETENV("PYTHONMALLOCSTATS"))
David Malcolm49526f42012-06-22 14:55:41 -0400663 _PyObject_DebugMallocStats(stderr);
Tim Peters0e871182002-04-13 08:29:14 +0000664#endif
665
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000666 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000667}
668
669/* Create and initialize a new interpreter and thread, and return the
670 new thread. This requires that Py_Initialize() has been called
671 first.
672
673 Unsuccessful initialization yields a NULL pointer. Note that *no*
674 exception information is available even in this case -- the
675 exception information is held in the thread, and there is no
676 thread.
677
678 Locking: as above.
679
680*/
681
682PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000683Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000684{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000685 PyInterpreterState *interp;
686 PyThreadState *tstate, *save_tstate;
687 PyObject *bimod, *sysmod;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000688
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000689 if (!initialized)
690 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000691
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000692 interp = PyInterpreterState_New();
693 if (interp == NULL)
694 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000695
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000696 tstate = PyThreadState_New(interp);
697 if (tstate == NULL) {
698 PyInterpreterState_Delete(interp);
699 return NULL;
700 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000701
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000702 save_tstate = PyThreadState_Swap(tstate);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000703
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000704 /* XXX The following is lax in error checking */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000705
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000706 interp->modules = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000707
Victor Stinner49d3f252010-10-17 01:24:53 +0000708 bimod = _PyImport_FindBuiltin("builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000709 if (bimod != NULL) {
710 interp->builtins = PyModule_GetDict(bimod);
711 if (interp->builtins == NULL)
712 goto handle_error;
713 Py_INCREF(interp->builtins);
714 }
Christian Heimes6a27efa2008-10-30 21:48:26 +0000715
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000716 /* initialize builtin exceptions */
Brett Cannonfd074152012-04-14 14:10:13 -0400717 _PyExc_Init(bimod);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000718
Victor Stinner49d3f252010-10-17 01:24:53 +0000719 sysmod = _PyImport_FindBuiltin("sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000720 if (bimod != NULL && sysmod != NULL) {
721 PyObject *pstderr;
Brett Cannonfd074152012-04-14 14:10:13 -0400722
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000723 interp->sysdict = PyModule_GetDict(sysmod);
724 if (interp->sysdict == NULL)
725 goto handle_error;
726 Py_INCREF(interp->sysdict);
727 PySys_SetPath(Py_GetPath());
728 PyDict_SetItemString(interp->sysdict, "modules",
729 interp->modules);
730 /* Set up a preliminary stderr printer until we have enough
731 infrastructure for the io module in place. */
732 pstderr = PyFile_NewStdPrinter(fileno(stderr));
733 if (pstderr == NULL)
734 Py_FatalError("Py_Initialize: can't set preliminary stderr");
735 PySys_SetObject("stderr", pstderr);
736 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000737 Py_DECREF(pstderr);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000738
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000739 _PyImportHooks_Init();
Victor Stinner793b5312011-04-27 00:24:21 +0200740
Brett Cannonfd074152012-04-14 14:10:13 -0400741 import_init(interp, sysmod);
742
Victor Stinner793b5312011-04-27 00:24:21 +0200743 if (initfsencoding(interp) < 0)
744 goto handle_error;
745
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000746 if (initstdio() < 0)
747 Py_FatalError(
748 "Py_Initialize: can't initialize sys standard streams");
Nick Coghlan85e729e2012-07-15 18:09:52 +1000749 initmain(interp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000750 if (!Py_NoSiteFlag)
751 initsite();
752 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000753
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000754 if (!PyErr_Occurred())
755 return tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000756
Thomas Wouters89f507f2006-12-13 04:49:30 +0000757handle_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000758 /* Oops, it didn't work. Undo it all. */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000759
Victor Stinnerc40a3502011-04-27 00:20:27 +0200760 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000761 PyThreadState_Clear(tstate);
762 PyThreadState_Swap(save_tstate);
763 PyThreadState_Delete(tstate);
764 PyInterpreterState_Delete(interp);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000765
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000766 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000767}
768
769/* Delete an interpreter and its last thread. This requires that the
770 given thread state is current, that the thread has no remaining
771 frames, and that it is its interpreter's only remaining thread.
772 It is a fatal error to violate these constraints.
773
774 (Py_Finalize() doesn't have these constraints -- it zaps
775 everything, regardless.)
776
777 Locking: as above.
778
779*/
780
781void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000782Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000783{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000784 PyInterpreterState *interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000785
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000786 if (tstate != PyThreadState_GET())
787 Py_FatalError("Py_EndInterpreter: thread is not current");
788 if (tstate->frame != NULL)
789 Py_FatalError("Py_EndInterpreter: thread still has a frame");
790 if (tstate != interp->tstate_head || tstate->next != NULL)
791 Py_FatalError("Py_EndInterpreter: not the last thread");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000792
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000793 PyImport_Cleanup();
794 PyInterpreterState_Clear(interp);
795 PyThreadState_Swap(NULL);
796 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000797}
798
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200799#ifdef MS_WINDOWS
Martin v. Löwis790465f2008-04-05 20:41:37 +0000800static wchar_t *progname = L"python";
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200801#else
802static wchar_t *progname = L"python3";
803#endif
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000804
805void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000806Py_SetProgramName(wchar_t *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000807{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000808 if (pn && *pn)
809 progname = pn;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000810}
811
Martin v. Löwis790465f2008-04-05 20:41:37 +0000812wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000813Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000814{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000815 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000816}
817
Martin v. Löwis790465f2008-04-05 20:41:37 +0000818static wchar_t *default_home = NULL;
819static wchar_t env_home[PATH_MAX+1];
Guido van Rossuma61691e1998-02-06 22:27:24 +0000820
821void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000822Py_SetPythonHome(wchar_t *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000823{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000824 default_home = home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000825}
826
Martin v. Löwis790465f2008-04-05 20:41:37 +0000827wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000828Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000829{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000830 wchar_t *home = default_home;
831 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
832 char* chome = Py_GETENV("PYTHONHOME");
833 if (chome) {
834 size_t r = mbstowcs(env_home, chome, PATH_MAX+1);
835 if (r != (size_t)-1 && r <= PATH_MAX)
836 home = env_home;
837 }
Martin v. Löwis790465f2008-04-05 20:41:37 +0000838
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000839 }
840 return home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000841}
842
Guido van Rossum6135a871995-01-09 17:53:26 +0000843/* Create __main__ module */
844
845static void
Nick Coghlan85e729e2012-07-15 18:09:52 +1000846initmain(PyInterpreterState *interp)
Guido van Rossum6135a871995-01-09 17:53:26 +0000847{
Brett Cannon13853a62013-05-04 17:37:09 -0400848 PyObject *m, *d, *loader;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000849 m = PyImport_AddModule("__main__");
850 if (m == NULL)
851 Py_FatalError("can't create __main__ module");
852 d = PyModule_GetDict(m);
853 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
854 PyObject *bimod = PyImport_ImportModule("builtins");
Nick Coghlan85e729e2012-07-15 18:09:52 +1000855 if (bimod == NULL) {
856 Py_FatalError("Failed to retrieve builtins module");
857 }
858 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
859 Py_FatalError("Failed to initialize __main__.__builtins__");
860 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000861 Py_DECREF(bimod);
862 }
Nick Coghlan85e729e2012-07-15 18:09:52 +1000863 /* Main is a little special - imp.is_builtin("__main__") will return
864 * False, but BuiltinImporter is still the most appropriate initial
865 * setting for its __loader__ attribute. A more suitable value will
866 * be set if __main__ gets further initialized later in the startup
867 * process.
868 */
Brett Cannon13853a62013-05-04 17:37:09 -0400869 loader = PyDict_GetItemString(d, "__loader__");
Brett Cannon4c14b5d2013-05-04 13:56:58 -0400870 if (loader == NULL || loader == Py_None) {
Nick Coghlan85e729e2012-07-15 18:09:52 +1000871 PyObject *loader = PyObject_GetAttrString(interp->importlib,
872 "BuiltinImporter");
873 if (loader == NULL) {
874 Py_FatalError("Failed to retrieve BuiltinImporter");
875 }
876 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
877 Py_FatalError("Failed to initialize __main__.__loader__");
878 }
879 Py_DECREF(loader);
880 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000881}
882
Victor Stinner793b5312011-04-27 00:24:21 +0200883static int
884initfsencoding(PyInterpreterState *interp)
Victor Stinnerb744ba12010-05-15 12:27:16 +0000885{
886 PyObject *codec;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000887
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200888 if (Py_FileSystemDefaultEncoding == NULL)
889 {
890 Py_FileSystemDefaultEncoding = get_locale_encoding();
891 if (Py_FileSystemDefaultEncoding == NULL)
Victor Stinnere4743092010-10-19 00:05:51 +0000892 Py_FatalError("Py_Initialize: Unable to get the locale encoding");
Victor Stinnerb744ba12010-05-15 12:27:16 +0000893
Victor Stinnere4743092010-10-19 00:05:51 +0000894 Py_HasFileSystemDefaultEncoding = 0;
Victor Stinner793b5312011-04-27 00:24:21 +0200895 interp->fscodec_initialized = 1;
896 return 0;
Victor Stinner7f84ab52010-06-11 00:36:33 +0000897 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000898
899 /* the encoding is mbcs, utf-8 or ascii */
900 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
901 if (!codec) {
902 /* Such error can only occurs in critical situations: no more
903 * memory, import a module of the standard library failed,
904 * etc. */
Victor Stinner793b5312011-04-27 00:24:21 +0200905 return -1;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000906 }
Victor Stinner793b5312011-04-27 00:24:21 +0200907 Py_DECREF(codec);
908 interp->fscodec_initialized = 1;
909 return 0;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000910}
911
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000912/* Import the site module (not into __main__ though) */
913
914static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000915initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000916{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000917 PyObject *m;
918 m = PyImport_ImportModule("site");
919 if (m == NULL) {
920 PyErr_Print();
921 Py_Finalize();
922 exit(1);
923 }
924 else {
925 Py_DECREF(m);
926 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000927}
928
Antoine Pitrou05608432009-01-09 18:53:14 +0000929static PyObject*
930create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000931 int fd, int write_mode, char* name,
932 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +0000933{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000934 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
935 const char* mode;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +0000936 const char* newline;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000937 PyObject *line_buffering;
938 int buffering, isatty;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200939 _Py_IDENTIFIER(open);
940 _Py_IDENTIFIER(isatty);
941 _Py_IDENTIFIER(TextIOWrapper);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200942 _Py_IDENTIFIER(name);
943 _Py_IDENTIFIER(mode);
Antoine Pitrou05608432009-01-09 18:53:14 +0000944
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000945 /* stdin is always opened in buffered mode, first because it shouldn't
946 make a difference in common use cases, second because TextIOWrapper
947 depends on the presence of a read1() method which only exists on
948 buffered streams.
949 */
950 if (Py_UnbufferedStdioFlag && write_mode)
951 buffering = 0;
952 else
953 buffering = -1;
954 if (write_mode)
955 mode = "wb";
956 else
957 mode = "rb";
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200958 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
959 fd, mode, buffering,
960 Py_None, Py_None, Py_None, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000961 if (buf == NULL)
962 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000963
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000964 if (buffering) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200965 _Py_IDENTIFIER(raw);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200966 raw = _PyObject_GetAttrId(buf, &PyId_raw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000967 if (raw == NULL)
968 goto error;
969 }
970 else {
971 raw = buf;
972 Py_INCREF(raw);
973 }
Antoine Pitrou05608432009-01-09 18:53:14 +0000974
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000975 text = PyUnicode_FromString(name);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200976 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000977 goto error;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200978 res = _PyObject_CallMethodId(raw, &PyId_isatty, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000979 if (res == NULL)
980 goto error;
981 isatty = PyObject_IsTrue(res);
982 Py_DECREF(res);
983 if (isatty == -1)
984 goto error;
985 if (isatty || Py_UnbufferedStdioFlag)
986 line_buffering = Py_True;
987 else
988 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +0000989
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000990 Py_CLEAR(raw);
991 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +0000992
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +0000993#ifdef MS_WINDOWS
Victor Stinner7b3f0fa2012-08-04 01:28:00 +0200994 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
995 newlines to "\n".
996 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
997 newline = NULL;
998#else
999 /* sys.stdin: split lines at "\n".
1000 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1001 newline = "\n";
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001002#endif
1003
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001004 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssO",
1005 buf, encoding, errors,
1006 newline, line_buffering);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001007 Py_CLEAR(buf);
1008 if (stream == NULL)
1009 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +00001010
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001011 if (write_mode)
1012 mode = "w";
1013 else
1014 mode = "r";
1015 text = PyUnicode_FromString(mode);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001016 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001017 goto error;
1018 Py_CLEAR(text);
1019 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +00001020
1021error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001022 Py_XDECREF(buf);
1023 Py_XDECREF(stream);
1024 Py_XDECREF(text);
1025 Py_XDECREF(raw);
1026 return NULL;
Antoine Pitrou05608432009-01-09 18:53:14 +00001027}
1028
Antoine Pitrou11942a52011-11-28 19:08:36 +01001029static int
1030is_valid_fd(int fd)
1031{
1032 int dummy_fd;
1033 if (fd < 0 || !_PyVerify_fd(fd))
1034 return 0;
1035 dummy_fd = dup(fd);
1036 if (dummy_fd < 0)
1037 return 0;
1038 close(dummy_fd);
1039 return 1;
1040}
1041
Georg Brandl1a3284e2007-12-02 09:40:06 +00001042/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001043static int
1044initstdio(void)
1045{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001046 PyObject *iomod = NULL, *wrapper;
1047 PyObject *bimod = NULL;
1048 PyObject *m;
1049 PyObject *std = NULL;
1050 int status = 0, fd;
1051 PyObject * encoding_attr;
1052 char *encoding = NULL, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001053
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001054 /* Hack to avoid a nasty recursion issue when Python is invoked
1055 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1056 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1057 goto error;
1058 }
1059 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001060
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001061 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1062 goto error;
1063 }
1064 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001065
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001066 if (!(bimod = PyImport_ImportModule("builtins"))) {
1067 goto error;
1068 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001069
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001070 if (!(iomod = PyImport_ImportModule("io"))) {
1071 goto error;
1072 }
1073 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1074 goto error;
1075 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001076
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001077 /* Set builtins.open */
1078 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001079 Py_DECREF(wrapper);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001080 goto error;
1081 }
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001082 Py_DECREF(wrapper);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001083
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001084 encoding = Py_GETENV("PYTHONIOENCODING");
1085 errors = NULL;
1086 if (encoding) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001087 encoding = _PyMem_Strdup(encoding);
1088 if (encoding == NULL) {
1089 PyErr_NoMemory();
1090 goto error;
1091 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001092 errors = strchr(encoding, ':');
1093 if (errors) {
1094 *errors = '\0';
1095 errors++;
1096 }
1097 }
Martin v. Löwis0f599892008-06-02 11:13:03 +00001098
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001099 /* Set sys.stdin */
1100 fd = fileno(stdin);
1101 /* Under some conditions stdin, stdout and stderr may not be connected
1102 * and fileno() may point to an invalid file descriptor. For example
1103 * GUI apps don't have valid standard streams by default.
1104 */
Antoine Pitrou11942a52011-11-28 19:08:36 +01001105 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001106 std = Py_None;
1107 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001108 }
1109 else {
1110 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1111 if (std == NULL)
1112 goto error;
1113 } /* if (fd < 0) */
1114 PySys_SetObject("__stdin__", std);
1115 PySys_SetObject("stdin", std);
1116 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001117
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001118 /* Set sys.stdout */
1119 fd = fileno(stdout);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001120 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001121 std = Py_None;
1122 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001123 }
1124 else {
1125 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1126 if (std == NULL)
1127 goto error;
1128 } /* if (fd < 0) */
1129 PySys_SetObject("__stdout__", std);
1130 PySys_SetObject("stdout", std);
1131 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001132
Guido van Rossum98297ee2007-11-06 21:34:58 +00001133#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001134 /* Set sys.stderr, replaces the preliminary stderr */
1135 fd = fileno(stderr);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001136 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001137 std = Py_None;
1138 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001139 }
1140 else {
1141 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1142 if (std == NULL)
1143 goto error;
1144 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +00001145
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001146 /* Same as hack above, pre-import stderr's codec to avoid recursion
1147 when import.c tries to write to stderr in verbose mode. */
1148 encoding_attr = PyObject_GetAttrString(std, "encoding");
1149 if (encoding_attr != NULL) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001150 const char * std_encoding;
1151 std_encoding = _PyUnicode_AsString(encoding_attr);
1152 if (std_encoding != NULL) {
1153 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
Antoine Pitrou2fabfac2012-01-18 15:14:46 +01001154 Py_XDECREF(codec_info);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001155 }
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +00001156 Py_DECREF(encoding_attr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001157 }
1158 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +00001159
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001160 PySys_SetObject("__stderr__", std);
1161 PySys_SetObject("stderr", std);
1162 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001163#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001164
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001165 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001166 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001167 status = -1;
1168 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001169
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001170 PyMem_Free(encoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001171 Py_XDECREF(bimod);
1172 Py_XDECREF(iomod);
1173 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001174}
1175
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001176/* Parse input from a file and execute it */
1177
1178int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001179PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001180 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001181{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001182 if (filename == NULL)
1183 filename = "???";
1184 if (Py_FdIsInteractive(fp, filename)) {
1185 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1186 if (closeit)
1187 fclose(fp);
1188 return err;
1189 }
1190 else
1191 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001192}
1193
1194int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001195PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001196{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001197 PyObject *v;
1198 int ret;
1199 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001200
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001201 if (flags == NULL) {
1202 flags = &local_flags;
1203 local_flags.cf_flags = 0;
1204 }
1205 v = PySys_GetObject("ps1");
1206 if (v == NULL) {
1207 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
1208 Py_XDECREF(v);
1209 }
1210 v = PySys_GetObject("ps2");
1211 if (v == NULL) {
1212 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
1213 Py_XDECREF(v);
1214 }
1215 for (;;) {
1216 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
1217 PRINT_TOTAL_REFS();
1218 if (ret == E_EOF)
1219 return 0;
1220 /*
1221 if (ret == E_NOMEM)
1222 return -1;
1223 */
1224 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001225}
1226
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001227/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001228static int PARSER_FLAGS(PyCompilerFlags *flags)
1229{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001230 int parser_flags = 0;
1231 if (!flags)
1232 return 0;
1233 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1234 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1235 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1236 parser_flags |= PyPARSE_IGNORE_COOKIE;
1237 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1238 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1239 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001240}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001241
Thomas Wouters89f507f2006-12-13 04:49:30 +00001242#if 0
1243/* Keep an example of flags with future keyword support. */
1244#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001245 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1246 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1247 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1248 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001249#endif
1250
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001251int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001252PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001253{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001254 PyObject *m, *d, *v, *w, *oenc = NULL;
1255 mod_ty mod;
1256 PyArena *arena;
1257 char *ps1 = "", *ps2 = "", *enc = NULL;
1258 int errcode = 0;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001259 _Py_IDENTIFIER(encoding);
Tim Petersfe2127d2001-07-16 05:37:24 +00001260
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001261 if (fp == stdin) {
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001262 /* Fetch encoding from sys.stdin if possible. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001263 v = PySys_GetObject("stdin");
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001264 if (v && v != Py_None) {
1265 oenc = _PyObject_GetAttrId(v, &PyId_encoding);
1266 if (oenc)
1267 enc = _PyUnicode_AsString(oenc);
1268 if (!enc)
1269 PyErr_Clear();
1270 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001271 }
1272 v = PySys_GetObject("ps1");
1273 if (v != NULL) {
1274 v = PyObject_Str(v);
1275 if (v == NULL)
1276 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001277 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001278 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001279 if (ps1 == NULL) {
1280 PyErr_Clear();
1281 ps1 = "";
1282 }
1283 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001284 }
1285 w = PySys_GetObject("ps2");
1286 if (w != NULL) {
1287 w = PyObject_Str(w);
1288 if (w == NULL)
1289 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001290 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001291 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001292 if (ps2 == NULL) {
1293 PyErr_Clear();
1294 ps2 = "";
1295 }
1296 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001297 }
1298 arena = PyArena_New();
1299 if (arena == NULL) {
1300 Py_XDECREF(v);
1301 Py_XDECREF(w);
1302 Py_XDECREF(oenc);
1303 return -1;
1304 }
1305 mod = PyParser_ASTFromFile(fp, filename, enc,
1306 Py_single_input, ps1, ps2,
1307 flags, &errcode, arena);
1308 Py_XDECREF(v);
1309 Py_XDECREF(w);
1310 Py_XDECREF(oenc);
1311 if (mod == NULL) {
1312 PyArena_Free(arena);
1313 if (errcode == E_EOF) {
1314 PyErr_Clear();
1315 return E_EOF;
1316 }
1317 PyErr_Print();
1318 return -1;
1319 }
1320 m = PyImport_AddModule("__main__");
1321 if (m == NULL) {
1322 PyArena_Free(arena);
1323 return -1;
1324 }
1325 d = PyModule_GetDict(m);
1326 v = run_mod(mod, filename, d, d, flags, arena);
1327 PyArena_Free(arena);
1328 flush_io();
1329 if (v == NULL) {
1330 PyErr_Print();
1331 return -1;
1332 }
1333 Py_DECREF(v);
1334 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001335}
1336
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001337/* Check whether a file maybe a pyc file: Look at the extension,
1338 the file type, and, if we may close it, at the first few bytes. */
1339
1340static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001341maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001342{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001343 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1344 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001345
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001346 /* Only look into the file if we are allowed to close it, since
1347 it then should also be seekable. */
1348 if (closeit) {
1349 /* Read only two bytes of the magic. If the file was opened in
1350 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1351 be read as they are on disk. */
1352 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1353 unsigned char buf[2];
1354 /* Mess: In case of -x, the stream is NOT at its start now,
1355 and ungetc() was used to push back the first newline,
1356 which makes the current stream position formally undefined,
1357 and a x-platform nightmare.
1358 Unfortunately, we have no direct way to know whether -x
1359 was specified. So we use a terrible hack: if the current
1360 stream position is not 0, we assume -x was specified, and
1361 give up. Bug 132850 on SourceForge spells out the
1362 hopelessness of trying anything else (fseek and ftell
1363 don't work predictably x-platform for text-mode files).
1364 */
1365 int ispyc = 0;
1366 if (ftell(fp) == 0) {
1367 if (fread(buf, 1, 2, fp) == 2 &&
1368 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1369 ispyc = 1;
1370 rewind(fp);
1371 }
1372 return ispyc;
1373 }
1374 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001375}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001376
Guido van Rossum0df002c2000-08-27 19:21:52 +00001377int
Nick Coghlanceda83c2012-07-15 23:18:08 +10001378static set_main_loader(PyObject *d, const char *filename, const char *loader_name)
Nick Coghlan85e729e2012-07-15 18:09:52 +10001379{
1380 PyInterpreterState *interp;
1381 PyThreadState *tstate;
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001382 PyObject *filename_obj, *loader_type, *loader;
Nick Coghlanb7a58942012-07-15 23:21:08 +10001383 int result = 0;
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001384
1385 filename_obj = PyUnicode_DecodeFSDefault(filename);
1386 if (filename_obj == NULL)
1387 return -1;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001388 /* Get current thread state and interpreter pointer */
1389 tstate = PyThreadState_GET();
1390 interp = tstate->interp;
Nick Coghlan3f94cbf2012-07-15 19:10:39 +10001391 loader_type = PyObject_GetAttrString(interp->importlib, loader_name);
1392 if (loader_type == NULL) {
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001393 Py_DECREF(filename_obj);
Nick Coghlan3f94cbf2012-07-15 19:10:39 +10001394 return -1;
1395 }
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001396 loader = PyObject_CallFunction(loader_type, "sN", "__main__", filename_obj);
Nick Coghlanb7a58942012-07-15 23:21:08 +10001397 Py_DECREF(loader_type);
1398 if (loader == NULL) {
Nick Coghlan85e729e2012-07-15 18:09:52 +10001399 return -1;
1400 }
Nick Coghlanb7a58942012-07-15 23:21:08 +10001401 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
1402 result = -1;
1403 }
Nick Coghlan85e729e2012-07-15 18:09:52 +10001404 Py_DECREF(loader);
Nick Coghlanb7a58942012-07-15 23:21:08 +10001405 return result;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001406}
1407
1408int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001409PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001410 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001411{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001412 PyObject *m, *d, *v;
1413 const char *ext;
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001414 int set_file_name = 0, ret = -1;
Victor Stinner0fcab4a2011-01-04 12:59:15 +00001415 size_t len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001416
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001417 m = PyImport_AddModule("__main__");
1418 if (m == NULL)
1419 return -1;
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001420 Py_INCREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001421 d = PyModule_GetDict(m);
1422 if (PyDict_GetItemString(d, "__file__") == NULL) {
1423 PyObject *f;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001424 f = PyUnicode_DecodeFSDefault(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001425 if (f == NULL)
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001426 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001427 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1428 Py_DECREF(f);
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001429 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001430 }
Barry Warsaw916048d2011-09-20 14:45:44 -04001431 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0) {
1432 Py_DECREF(f);
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001433 goto done;
Barry Warsaw916048d2011-09-20 14:45:44 -04001434 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001435 set_file_name = 1;
1436 Py_DECREF(f);
1437 }
1438 len = strlen(filename);
1439 ext = filename + len - (len > 4 ? 4 : 0);
1440 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Christian Heimes04ac4c12012-09-11 15:47:28 +02001441 FILE *pyc_fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001442 /* Try to run a pyc file. First, re-open in binary */
1443 if (closeit)
1444 fclose(fp);
Christian Heimes04ac4c12012-09-11 15:47:28 +02001445 if ((pyc_fp = fopen(filename, "rb")) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001446 fprintf(stderr, "python: Can't reopen .pyc file\n");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001447 goto done;
1448 }
1449 /* Turn on optimization if a .pyo file is given */
1450 if (strcmp(ext, ".pyo") == 0)
1451 Py_OptimizeFlag = 1;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001452
1453 if (set_main_loader(d, filename, "SourcelessFileLoader") < 0) {
1454 fprintf(stderr, "python: failed to set __main__.__loader__\n");
1455 ret = -1;
Christian Heimes04ac4c12012-09-11 15:47:28 +02001456 fclose(pyc_fp);
Nick Coghlan85e729e2012-07-15 18:09:52 +10001457 goto done;
1458 }
Christian Heimes04ac4c12012-09-11 15:47:28 +02001459 v = run_pyc_file(pyc_fp, filename, d, d, flags);
1460 fclose(pyc_fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001461 } else {
Nick Coghlan85e729e2012-07-15 18:09:52 +10001462 /* When running from stdin, leave __main__.__loader__ alone */
1463 if (strcmp(filename, "<stdin>") != 0 &&
1464 set_main_loader(d, filename, "SourceFileLoader") < 0) {
1465 fprintf(stderr, "python: failed to set __main__.__loader__\n");
1466 ret = -1;
1467 goto done;
1468 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001469 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1470 closeit, flags);
1471 }
1472 flush_io();
1473 if (v == NULL) {
1474 PyErr_Print();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001475 goto done;
1476 }
1477 Py_DECREF(v);
1478 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001479 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001480 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1481 PyErr_Clear();
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001482 Py_DECREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001483 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001484}
1485
1486int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001487PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001488{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001489 PyObject *m, *d, *v;
1490 m = PyImport_AddModule("__main__");
1491 if (m == NULL)
1492 return -1;
1493 d = PyModule_GetDict(m);
1494 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1495 if (v == NULL) {
1496 PyErr_Print();
1497 return -1;
1498 }
1499 Py_DECREF(v);
1500 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001501}
1502
Barry Warsaw035574d1997-08-29 22:07:17 +00001503static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001504parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001505 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001506{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001507 long hold;
1508 PyObject *v;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001509 _Py_IDENTIFIER(msg);
1510 _Py_IDENTIFIER(filename);
1511 _Py_IDENTIFIER(lineno);
1512 _Py_IDENTIFIER(offset);
1513 _Py_IDENTIFIER(text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001514
Benjamin Peterson80d50422012-04-03 00:30:38 -04001515 *message = NULL;
1516
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001517 /* new style errors. `err' is an instance */
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001518 *message = _PyObject_GetAttrId(err, &PyId_msg);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001519 if (!*message)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001520 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001521
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001522 v = _PyObject_GetAttrId(err, &PyId_filename);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001523 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001524 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001525 if (v == Py_None) {
1526 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001527 *filename = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001528 }
1529 else {
1530 *filename = _PyUnicode_AsString(v);
1531 Py_DECREF(v);
1532 if (!*filename)
1533 goto finally;
1534 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001535
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001536 v = _PyObject_GetAttrId(err, &PyId_lineno);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001537 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001538 goto finally;
1539 hold = PyLong_AsLong(v);
1540 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001541 if (hold < 0 && PyErr_Occurred())
1542 goto finally;
1543 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001544
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001545 v = _PyObject_GetAttrId(err, &PyId_offset);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001546 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001547 goto finally;
1548 if (v == Py_None) {
1549 *offset = -1;
1550 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001551 } else {
1552 hold = PyLong_AsLong(v);
1553 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001554 if (hold < 0 && PyErr_Occurred())
1555 goto finally;
1556 *offset = (int)hold;
1557 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001558
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001559 v = _PyObject_GetAttrId(err, &PyId_text);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001560 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001561 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001562 if (v == Py_None) {
1563 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001564 *text = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001565 }
1566 else {
1567 *text = _PyUnicode_AsString(v);
1568 Py_DECREF(v);
1569 if (!*text)
1570 goto finally;
1571 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001572 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001573
1574finally:
Benjamin Peterson80d50422012-04-03 00:30:38 -04001575 Py_XDECREF(*message);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001576 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001577}
1578
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001579void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001580PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001581{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001582 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001583}
1584
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001585static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001586print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001587{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001588 char *nl;
1589 if (offset >= 0) {
Benjamin Petersona95e9772010-10-29 03:28:14 +00001590 if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n')
1591 offset--;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001592 for (;;) {
1593 nl = strchr(text, '\n');
1594 if (nl == NULL || nl-text >= offset)
1595 break;
1596 offset -= (int)(nl+1-text);
1597 text = nl+1;
1598 }
1599 while (*text == ' ' || *text == '\t') {
1600 text++;
1601 offset--;
1602 }
1603 }
1604 PyFile_WriteString(" ", f);
1605 PyFile_WriteString(text, f);
1606 if (*text == '\0' || text[strlen(text)-1] != '\n')
1607 PyFile_WriteString("\n", f);
1608 if (offset == -1)
1609 return;
1610 PyFile_WriteString(" ", f);
Benjamin Petersona95e9772010-10-29 03:28:14 +00001611 while (--offset > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001612 PyFile_WriteString(" ", f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001613 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001614}
1615
Guido van Rossum66e8e862001-03-23 17:54:43 +00001616static void
1617handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001618{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001619 PyObject *exception, *value, *tb;
1620 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001621
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001622 if (Py_InspectFlag)
1623 /* Don't exit if -i flag was given. This flag is set to 0
1624 * when entering interactive mode for inspecting. */
1625 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001626
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001627 PyErr_Fetch(&exception, &value, &tb);
1628 fflush(stdout);
1629 if (value == NULL || value == Py_None)
1630 goto done;
1631 if (PyExceptionInstance_Check(value)) {
1632 /* The error code should be in the `code' attribute. */
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001633 _Py_IDENTIFIER(code);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001634 PyObject *code = _PyObject_GetAttrId(value, &PyId_code);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001635 if (code) {
1636 Py_DECREF(value);
1637 value = code;
1638 if (value == Py_None)
1639 goto done;
1640 }
1641 /* If we failed to dig out the 'code' attribute,
1642 just let the else clause below print the error. */
1643 }
1644 if (PyLong_Check(value))
1645 exitcode = (int)PyLong_AsLong(value);
1646 else {
Victor Stinnere9fb3192010-05-17 08:58:51 +00001647 PyObject *sys_stderr = PySys_GetObject("stderr");
Victor Stinner7126dbc2010-05-21 23:45:42 +00001648 if (sys_stderr != NULL && sys_stderr != Py_None) {
1649 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1650 } else {
1651 PyObject_Print(value, stderr, Py_PRINT_RAW);
1652 fflush(stderr);
1653 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001654 PySys_WriteStderr("\n");
1655 exitcode = 1;
1656 }
Tim Peterscf615b52003-04-19 18:47:02 +00001657 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001658 /* Restore and clear the exception info, in order to properly decref
1659 * the exception, value, and traceback. If we just exit instead,
1660 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1661 * some finalizers from running.
1662 */
1663 PyErr_Restore(exception, value, tb);
1664 PyErr_Clear();
1665 Py_Exit(exitcode);
1666 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001667}
1668
1669void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001670PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001671{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001672 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001673
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001674 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1675 handle_system_exit();
1676 }
1677 PyErr_Fetch(&exception, &v, &tb);
1678 if (exception == NULL)
1679 return;
1680 PyErr_NormalizeException(&exception, &v, &tb);
1681 if (tb == NULL) {
1682 tb = Py_None;
1683 Py_INCREF(tb);
1684 }
1685 PyException_SetTraceback(v, tb);
1686 if (exception == NULL)
1687 return;
1688 /* Now we know v != NULL too */
1689 if (set_sys_last_vars) {
1690 PySys_SetObject("last_type", exception);
1691 PySys_SetObject("last_value", v);
1692 PySys_SetObject("last_traceback", tb);
1693 }
1694 hook = PySys_GetObject("excepthook");
1695 if (hook) {
1696 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1697 PyObject *result = PyEval_CallObject(hook, args);
1698 if (result == NULL) {
1699 PyObject *exception2, *v2, *tb2;
1700 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1701 handle_system_exit();
1702 }
1703 PyErr_Fetch(&exception2, &v2, &tb2);
1704 PyErr_NormalizeException(&exception2, &v2, &tb2);
1705 /* It should not be possible for exception2 or v2
1706 to be NULL. However PyErr_Display() can't
1707 tolerate NULLs, so just be safe. */
1708 if (exception2 == NULL) {
1709 exception2 = Py_None;
1710 Py_INCREF(exception2);
1711 }
1712 if (v2 == NULL) {
1713 v2 = Py_None;
1714 Py_INCREF(v2);
1715 }
1716 fflush(stdout);
1717 PySys_WriteStderr("Error in sys.excepthook:\n");
1718 PyErr_Display(exception2, v2, tb2);
1719 PySys_WriteStderr("\nOriginal exception was:\n");
1720 PyErr_Display(exception, v, tb);
1721 Py_DECREF(exception2);
1722 Py_DECREF(v2);
1723 Py_XDECREF(tb2);
1724 }
1725 Py_XDECREF(result);
1726 Py_XDECREF(args);
1727 } else {
1728 PySys_WriteStderr("sys.excepthook is missing\n");
1729 PyErr_Display(exception, v, tb);
1730 }
1731 Py_XDECREF(exception);
1732 Py_XDECREF(v);
1733 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001734}
1735
Benjamin Petersone6528212008-07-15 15:32:09 +00001736static void
1737print_exception(PyObject *f, PyObject *value)
1738{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001739 int err = 0;
1740 PyObject *type, *tb;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001741 _Py_IDENTIFIER(print_file_and_line);
Benjamin Petersone6528212008-07-15 15:32:09 +00001742
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001743 if (!PyExceptionInstance_Check(value)) {
1744 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1745 PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1746 PyFile_WriteString(" found\n", f);
1747 return;
1748 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001749
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001750 Py_INCREF(value);
1751 fflush(stdout);
1752 type = (PyObject *) Py_TYPE(value);
1753 tb = PyException_GetTraceback(value);
1754 if (tb && tb != Py_None)
1755 err = PyTraceBack_Print(tb, f);
1756 if (err == 0 &&
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001757 _PyObject_HasAttrId(value, &PyId_print_file_and_line))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001758 {
1759 PyObject *message;
1760 const char *filename, *text;
1761 int lineno, offset;
1762 if (!parse_syntax_error(value, &message, &filename,
1763 &lineno, &offset, &text))
1764 PyErr_Clear();
1765 else {
1766 char buf[10];
1767 PyFile_WriteString(" File \"", f);
1768 if (filename == NULL)
1769 PyFile_WriteString("<string>", f);
1770 else
1771 PyFile_WriteString(filename, f);
1772 PyFile_WriteString("\", line ", f);
1773 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
1774 PyFile_WriteString(buf, f);
1775 PyFile_WriteString("\n", f);
1776 if (text != NULL)
1777 print_error_text(f, offset, text);
1778 Py_DECREF(value);
1779 value = message;
1780 /* Can't be bothered to check all those
1781 PyFile_WriteString() calls */
1782 if (PyErr_Occurred())
1783 err = -1;
1784 }
1785 }
1786 if (err) {
1787 /* Don't do anything else */
1788 }
1789 else {
1790 PyObject* moduleName;
1791 char* className;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001792 _Py_IDENTIFIER(__module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001793 assert(PyExceptionClass_Check(type));
1794 className = PyExceptionClass_Name(type);
1795 if (className != NULL) {
1796 char *dot = strrchr(className, '.');
1797 if (dot != NULL)
1798 className = dot+1;
1799 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001800
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001801 moduleName = _PyObject_GetAttrId(type, &PyId___module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001802 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1803 {
Victor Stinner13b21bd2011-05-26 14:25:13 +02001804 Py_XDECREF(moduleName);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001805 err = PyFile_WriteString("<unknown>", f);
1806 }
1807 else {
1808 char* modstr = _PyUnicode_AsString(moduleName);
1809 if (modstr && strcmp(modstr, "builtins"))
1810 {
1811 err = PyFile_WriteString(modstr, f);
1812 err += PyFile_WriteString(".", f);
1813 }
1814 Py_DECREF(moduleName);
1815 }
1816 if (err == 0) {
1817 if (className == NULL)
1818 err = PyFile_WriteString("<unknown>", f);
1819 else
1820 err = PyFile_WriteString(className, f);
1821 }
1822 }
1823 if (err == 0 && (value != Py_None)) {
1824 PyObject *s = PyObject_Str(value);
1825 /* only print colon if the str() of the
1826 object is not the empty string
1827 */
1828 if (s == NULL)
1829 err = -1;
1830 else if (!PyUnicode_Check(s) ||
Victor Stinnere251d6d2011-11-20 19:20:00 +01001831 PyUnicode_GetLength(s) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001832 err = PyFile_WriteString(": ", f);
1833 if (err == 0)
1834 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1835 Py_XDECREF(s);
1836 }
1837 /* try to write a newline in any case */
1838 err += PyFile_WriteString("\n", f);
1839 Py_XDECREF(tb);
1840 Py_DECREF(value);
1841 /* If an error happened here, don't show it.
1842 XXX This is wrong, but too many callers rely on this behavior. */
1843 if (err != 0)
1844 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001845}
1846
1847static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001848 "\nThe above exception was the direct cause "
1849 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001850
1851static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001852 "\nDuring handling of the above exception, "
1853 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001854
1855static void
1856print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
1857{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001858 int err = 0, res;
1859 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00001860
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001861 if (seen != NULL) {
1862 /* Exception chaining */
1863 if (PySet_Add(seen, value) == -1)
1864 PyErr_Clear();
1865 else if (PyExceptionInstance_Check(value)) {
1866 cause = PyException_GetCause(value);
1867 context = PyException_GetContext(value);
Benjamin Petersond5a1c442012-05-14 22:09:31 -07001868 if (cause) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001869 res = PySet_Contains(seen, cause);
1870 if (res == -1)
1871 PyErr_Clear();
1872 if (res == 0) {
1873 print_exception_recursive(
1874 f, cause, seen);
1875 err |= PyFile_WriteString(
1876 cause_message, f);
1877 }
1878 }
Benjamin Petersond5a1c442012-05-14 22:09:31 -07001879 else if (context &&
1880 !((PyBaseExceptionObject *)value)->suppress_context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001881 res = PySet_Contains(seen, context);
1882 if (res == -1)
1883 PyErr_Clear();
1884 if (res == 0) {
1885 print_exception_recursive(
1886 f, context, seen);
1887 err |= PyFile_WriteString(
1888 context_message, f);
1889 }
1890 }
1891 Py_XDECREF(context);
1892 Py_XDECREF(cause);
1893 }
1894 }
1895 print_exception(f, value);
1896 if (err != 0)
1897 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001898}
1899
Thomas Wouters477c8d52006-05-27 19:21:47 +00001900void
1901PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001902{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001903 PyObject *seen;
1904 PyObject *f = PySys_GetObject("stderr");
1905 if (f == Py_None) {
1906 /* pass */
1907 }
1908 else if (f == NULL) {
1909 _PyObject_Dump(value);
1910 fprintf(stderr, "lost sys.stderr\n");
1911 }
1912 else {
1913 /* We choose to ignore seen being possibly NULL, and report
1914 at least the main exception (it could be a MemoryError).
1915 */
1916 seen = PySet_New(NULL);
1917 if (seen == NULL)
1918 PyErr_Clear();
1919 print_exception_recursive(f, value, seen);
1920 Py_XDECREF(seen);
1921 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001922}
1923
Guido van Rossum82598051997-03-05 00:20:32 +00001924PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001925PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001926 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001927{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001928 PyObject *ret = NULL;
1929 mod_ty mod;
1930 PyArena *arena = PyArena_New();
1931 if (arena == NULL)
1932 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001933
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001934 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
1935 if (mod != NULL)
1936 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
1937 PyArena_Free(arena);
1938 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001939}
1940
1941PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001942PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001943 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001944{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001945 PyObject *ret;
1946 mod_ty mod;
1947 PyArena *arena = PyArena_New();
1948 if (arena == NULL)
1949 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001950
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001951 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
1952 flags, NULL, arena);
1953 if (closeit)
1954 fclose(fp);
1955 if (mod == NULL) {
1956 PyArena_Free(arena);
1957 return NULL;
1958 }
1959 ret = run_mod(mod, filename, globals, locals, flags, arena);
1960 PyArena_Free(arena);
1961 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001962}
1963
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001964static void
1965flush_io(void)
1966{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001967 PyObject *f, *r;
1968 PyObject *type, *value, *traceback;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001969 _Py_IDENTIFIER(flush);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001970
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001971 /* Save the current exception */
1972 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001973
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001974 f = PySys_GetObject("stderr");
1975 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001976 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001977 if (r)
1978 Py_DECREF(r);
1979 else
1980 PyErr_Clear();
1981 }
1982 f = PySys_GetObject("stdout");
1983 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001984 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001985 if (r)
1986 Py_DECREF(r);
1987 else
1988 PyErr_Clear();
1989 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001990
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001991 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001992}
1993
Guido van Rossum82598051997-03-05 00:20:32 +00001994static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001995run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001996 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001997{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001998 PyCodeObject *co;
1999 PyObject *v;
2000 co = PyAST_Compile(mod, filename, flags, arena);
2001 if (co == NULL)
2002 return NULL;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002003 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002004 Py_DECREF(co);
2005 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002006}
2007
Guido van Rossum82598051997-03-05 00:20:32 +00002008static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002009run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002010 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00002011{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002012 PyCodeObject *co;
2013 PyObject *v;
2014 long magic;
2015 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00002016
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002017 magic = PyMarshal_ReadLongFromFile(fp);
2018 if (magic != PyImport_GetMagicNumber()) {
2019 PyErr_SetString(PyExc_RuntimeError,
2020 "Bad magic number in .pyc file");
2021 return NULL;
2022 }
Antoine Pitrou5136ac02012-01-13 18:52:16 +01002023 /* Skip mtime and size */
2024 (void) PyMarshal_ReadLongFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002025 (void) PyMarshal_ReadLongFromFile(fp);
2026 v = PyMarshal_ReadLastObjectFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002027 if (v == NULL || !PyCode_Check(v)) {
2028 Py_XDECREF(v);
2029 PyErr_SetString(PyExc_RuntimeError,
2030 "Bad code object in .pyc file");
2031 return NULL;
2032 }
2033 co = (PyCodeObject *)v;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002034 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002035 if (v && flags)
2036 flags->cf_flags |= (co->co_flags & PyCF_MASK);
2037 Py_DECREF(co);
2038 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00002039}
2040
Guido van Rossum82598051997-03-05 00:20:32 +00002041PyObject *
Georg Brandl8334fd92010-12-04 10:26:46 +00002042Py_CompileStringExFlags(const char *str, const char *filename, int start,
2043 PyCompilerFlags *flags, int optimize)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00002044{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002045 PyCodeObject *co;
2046 mod_ty mod;
2047 PyArena *arena = PyArena_New();
2048 if (arena == NULL)
2049 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002050
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002051 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
2052 if (mod == NULL) {
2053 PyArena_Free(arena);
2054 return NULL;
2055 }
2056 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
2057 PyObject *result = PyAST_mod2obj(mod);
2058 PyArena_Free(arena);
2059 return result;
2060 }
Georg Brandl8334fd92010-12-04 10:26:46 +00002061 co = PyAST_CompileEx(mod, filename, flags, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002062 PyArena_Free(arena);
2063 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00002064}
2065
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002066/* For use in Py_LIMITED_API */
2067#undef Py_CompileString
2068PyObject *
2069PyCompileString(const char *str, const char *filename, int start)
2070{
2071 return Py_CompileStringFlags(str, filename, start, NULL);
2072}
2073
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002074struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002075Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002076{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002077 struct symtable *st;
2078 mod_ty mod;
2079 PyCompilerFlags flags;
2080 PyArena *arena = PyArena_New();
2081 if (arena == NULL)
2082 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002083
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002084 flags.cf_flags = 0;
2085 mod = PyParser_ASTFromString(str, filename, start, &flags, arena);
2086 if (mod == NULL) {
2087 PyArena_Free(arena);
2088 return NULL;
2089 }
2090 st = PySymtable_Build(mod, filename, 0);
2091 PyArena_Free(arena);
2092 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002093}
2094
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002095/* Preferred access to parser is through AST. */
2096mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002097PyParser_ASTFromString(const char *s, const char *filename, int start,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002098 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002099{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002100 mod_ty mod;
2101 PyCompilerFlags localflags;
2102 perrdetail err;
2103 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002104
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002105 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename,
2106 &_PyParser_Grammar, start, &err,
2107 &iflags);
2108 if (flags == NULL) {
2109 localflags.cf_flags = 0;
2110 flags = &localflags;
2111 }
2112 if (n) {
2113 flags->cf_flags |= iflags & PyCF_MASK;
2114 mod = PyAST_FromNode(n, flags, filename, arena);
2115 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002116 }
2117 else {
2118 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002119 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002120 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002121 err_free(&err);
2122 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002123}
2124
2125mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00002126PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002127 int start, char *ps1,
2128 char *ps2, PyCompilerFlags *flags, int *errcode,
2129 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002130{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002131 mod_ty mod;
2132 PyCompilerFlags localflags;
2133 perrdetail err;
2134 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002135
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002136 node *n = PyParser_ParseFileFlagsEx(fp, filename, enc,
2137 &_PyParser_Grammar,
2138 start, ps1, ps2, &err, &iflags);
2139 if (flags == NULL) {
2140 localflags.cf_flags = 0;
2141 flags = &localflags;
2142 }
2143 if (n) {
2144 flags->cf_flags |= iflags & PyCF_MASK;
2145 mod = PyAST_FromNode(n, flags, filename, arena);
2146 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002147 }
2148 else {
2149 err_input(&err);
2150 if (errcode)
2151 *errcode = err.error;
Victor Stinner7f2fee32011-04-05 00:39:01 +02002152 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002153 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002154 err_free(&err);
2155 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002156}
2157
Guido van Rossuma110aa61994-08-29 12:50:44 +00002158/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002159
Guido van Rossuma110aa61994-08-29 12:50:44 +00002160node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002161PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002162{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002163 perrdetail err;
2164 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
2165 &_PyParser_Grammar,
2166 start, NULL, NULL, &err, flags);
2167 if (n == NULL)
2168 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002169 err_free(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002170
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002171 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002172}
2173
Guido van Rossuma110aa61994-08-29 12:50:44 +00002174/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002175
Guido van Rossuma110aa61994-08-29 12:50:44 +00002176node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002177PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00002178{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002179 perrdetail err;
2180 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
2181 start, &err, flags);
2182 if (n == NULL)
2183 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002184 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002185 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00002186}
2187
2188node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002189PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002190 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002191{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002192 perrdetail err;
2193 node *n = PyParser_ParseStringFlagsFilename(str, filename,
2194 &_PyParser_Grammar, start, &err, flags);
2195 if (n == NULL)
2196 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002197 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002198 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00002199}
2200
2201node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002202PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002203{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002204 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00002205}
2206
Guido van Rossum66ebd912003-04-17 16:02:26 +00002207/* May want to move a more generalized form of this to parsetok.c or
2208 even parser modules. */
2209
2210void
Victor Stinner7f2fee32011-04-05 00:39:01 +02002211PyParser_ClearError(perrdetail *err)
2212{
2213 err_free(err);
2214}
2215
2216void
Guido van Rossum66ebd912003-04-17 16:02:26 +00002217PyParser_SetError(perrdetail *err)
2218{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002219 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00002220}
2221
Victor Stinner7f2fee32011-04-05 00:39:01 +02002222static void
2223err_free(perrdetail *err)
2224{
2225 Py_CLEAR(err->filename);
2226}
2227
Guido van Rossuma110aa61994-08-29 12:50:44 +00002228/* Set the error appropriate to the given input error code (see errcode.h) */
2229
2230static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002231err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00002232{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002233 PyObject *v, *w, *errtype, *errtext;
2234 PyObject *msg_obj = NULL;
2235 char *msg = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002236
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002237 errtype = PyExc_SyntaxError;
2238 switch (err->error) {
2239 case E_ERROR:
2240 return;
2241 case E_SYNTAX:
2242 errtype = PyExc_IndentationError;
2243 if (err->expected == INDENT)
2244 msg = "expected an indented block";
2245 else if (err->token == INDENT)
2246 msg = "unexpected indent";
2247 else if (err->token == DEDENT)
2248 msg = "unexpected unindent";
2249 else {
2250 errtype = PyExc_SyntaxError;
2251 msg = "invalid syntax";
2252 }
2253 break;
2254 case E_TOKEN:
2255 msg = "invalid token";
2256 break;
2257 case E_EOFS:
2258 msg = "EOF while scanning triple-quoted string literal";
2259 break;
2260 case E_EOLS:
2261 msg = "EOL while scanning string literal";
2262 break;
2263 case E_INTR:
2264 if (!PyErr_Occurred())
2265 PyErr_SetNone(PyExc_KeyboardInterrupt);
2266 goto cleanup;
2267 case E_NOMEM:
2268 PyErr_NoMemory();
2269 goto cleanup;
2270 case E_EOF:
2271 msg = "unexpected EOF while parsing";
2272 break;
2273 case E_TABSPACE:
2274 errtype = PyExc_TabError;
2275 msg = "inconsistent use of tabs and spaces in indentation";
2276 break;
2277 case E_OVERFLOW:
2278 msg = "expression too long";
2279 break;
2280 case E_DEDENT:
2281 errtype = PyExc_IndentationError;
2282 msg = "unindent does not match any outer indentation level";
2283 break;
2284 case E_TOODEEP:
2285 errtype = PyExc_IndentationError;
2286 msg = "too many levels of indentation";
2287 break;
2288 case E_DECODE: {
2289 PyObject *type, *value, *tb;
2290 PyErr_Fetch(&type, &value, &tb);
2291 msg = "unknown decode error";
2292 if (value != NULL)
2293 msg_obj = PyObject_Str(value);
2294 Py_XDECREF(type);
2295 Py_XDECREF(value);
2296 Py_XDECREF(tb);
2297 break;
2298 }
2299 case E_LINECONT:
2300 msg = "unexpected character after line continuation character";
2301 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002302
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002303 case E_IDENTIFIER:
2304 msg = "invalid character in identifier";
2305 break;
Meador Ingefa21bf02012-01-19 01:08:41 -06002306 case E_BADSINGLE:
2307 msg = "multiple statements found while compiling a single statement";
2308 break;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002309 default:
2310 fprintf(stderr, "error=%d\n", err->error);
2311 msg = "unknown parsing error";
2312 break;
2313 }
2314 /* err->text may not be UTF-8 in case of decoding errors.
2315 Explicitly convert to an object. */
2316 if (!err->text) {
2317 errtext = Py_None;
2318 Py_INCREF(Py_None);
2319 } else {
2320 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
2321 "replace");
2322 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002323 v = Py_BuildValue("(OiiN)", err->filename,
2324 err->lineno, err->offset, errtext);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002325 if (v != NULL) {
2326 if (msg_obj)
2327 w = Py_BuildValue("(OO)", msg_obj, v);
2328 else
2329 w = Py_BuildValue("(sO)", msg, v);
2330 } else
2331 w = NULL;
2332 Py_XDECREF(v);
2333 PyErr_SetObject(errtype, w);
2334 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002335cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002336 Py_XDECREF(msg_obj);
2337 if (err->text != NULL) {
2338 PyObject_FREE(err->text);
2339 err->text = NULL;
2340 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002341}
2342
2343/* Print fatal error message and abort */
2344
2345void
Tim Peters7c321a82002-07-09 02:57:01 +00002346Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002347{
Victor Stinner024e37a2011-03-31 01:31:06 +02002348 const int fd = fileno(stderr);
2349 PyThreadState *tstate;
2350
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002351 fprintf(stderr, "Fatal Python error: %s\n", msg);
2352 fflush(stderr); /* it helps in Windows debug build */
2353 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002354 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002355 }
Victor Stinner024e37a2011-03-31 01:31:06 +02002356 else {
2357 tstate = _Py_atomic_load_relaxed(&_PyThreadState_Current);
2358 if (tstate != NULL) {
2359 fputc('\n', stderr);
2360 fflush(stderr);
Victor Stinner7bba62f2011-05-07 12:43:00 +02002361 _Py_DumpTracebackThreads(fd, tstate->interp, tstate);
Victor Stinner024e37a2011-03-31 01:31:06 +02002362 }
Victor Stinnerd727e232011-04-01 12:13:55 +02002363 _PyFaulthandler_Fini();
Victor Stinner024e37a2011-03-31 01:31:06 +02002364 }
2365
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002366#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002367 {
2368 size_t len = strlen(msg);
2369 WCHAR* buffer;
2370 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002371
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002372 /* Convert the message to wchar_t. This uses a simple one-to-one
2373 conversion, assuming that the this error message actually uses ASCII
2374 only. If this ceases to be true, we will have to convert. */
2375 buffer = alloca( (len+1) * (sizeof *buffer));
2376 for( i=0; i<=len; ++i)
2377 buffer[i] = msg[i];
2378 OutputDebugStringW(L"Fatal Python error: ");
2379 OutputDebugStringW(buffer);
2380 OutputDebugStringW(L"\n");
2381 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002382#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002383 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002384#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002385#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002386 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002387}
2388
2389/* Clean up and exit */
2390
Guido van Rossuma110aa61994-08-29 12:50:44 +00002391#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002392#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002393#endif
2394
Collin Winter670e6922007-03-21 02:57:17 +00002395static void (*pyexitfunc)(void) = NULL;
2396/* For the atexit module. */
2397void _Py_PyAtExit(void (*func)(void))
2398{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002399 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002400}
2401
2402static void
2403call_py_exitfuncs(void)
2404{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002405 if (pyexitfunc == NULL)
2406 return;
Collin Winter670e6922007-03-21 02:57:17 +00002407
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002408 (*pyexitfunc)();
2409 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002410}
2411
Antoine Pitrou011bd622009-10-20 21:52:47 +00002412/* Wait until threading._shutdown completes, provided
2413 the threading module was imported in the first place.
2414 The shutdown routine will wait until all non-daemon
2415 "threading" threads have completed. */
2416static void
2417wait_for_thread_shutdown(void)
2418{
2419#ifdef WITH_THREAD
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002420 _Py_IDENTIFIER(_shutdown);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002421 PyObject *result;
2422 PyThreadState *tstate = PyThreadState_GET();
2423 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2424 "threading");
2425 if (threading == NULL) {
2426 /* threading not imported */
2427 PyErr_Clear();
2428 return;
2429 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002430 result = _PyObject_CallMethodId(threading, &PyId__shutdown, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002431 if (result == NULL) {
2432 PyErr_WriteUnraisable(threading);
2433 }
2434 else {
2435 Py_DECREF(result);
2436 }
2437 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002438#endif
2439}
2440
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002441#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002442static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002443static int nexitfuncs = 0;
2444
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002445int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002446{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002447 if (nexitfuncs >= NEXITFUNCS)
2448 return -1;
2449 exitfuncs[nexitfuncs++] = func;
2450 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002451}
2452
Guido van Rossumcc283f51997-08-05 02:22:03 +00002453static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002454call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002455{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002456 while (nexitfuncs > 0)
2457 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002458
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002459 fflush(stdout);
2460 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002461}
2462
2463void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002464Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002465{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002466 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002467
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002468 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002469}
2470
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002471static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002472initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002473{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002474#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002475 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002476#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002477#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002478 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002479#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002480#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002481 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002482#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002483 PyOS_InitInterrupts(); /* May imply initsignal() */
Victor Stinnerd786ad52013-07-21 13:25:51 +02002484 if (PyErr_Occurred()) {
2485 Py_FatalError("Py_Initialize: can't import signal");
2486 }
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002487}
2488
Guido van Rossum7433b121997-02-14 19:45:36 +00002489
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002490/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2491 *
2492 * All of the code in this function must only use async-signal-safe functions,
2493 * listed at `man 7 signal` or
2494 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2495 */
2496void
2497_Py_RestoreSignals(void)
2498{
2499#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002500 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002501#endif
2502#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002503 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002504#endif
2505#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002506 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002507#endif
2508}
2509
2510
Guido van Rossum7433b121997-02-14 19:45:36 +00002511/*
2512 * The file descriptor fd is considered ``interactive'' if either
2513 * a) isatty(fd) is TRUE, or
2514 * b) the -i flag was given, and the filename associated with
2515 * the descriptor is NULL or "<stdin>" or "???".
2516 */
2517int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002518Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002519{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002520 if (isatty((int)fileno(fp)))
2521 return 1;
2522 if (!Py_InteractiveFlag)
2523 return 0;
2524 return (filename == NULL) ||
2525 (strcmp(filename, "<stdin>") == 0) ||
2526 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002527}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002528
2529
Tim Petersd08e3822003-04-17 15:24:21 +00002530#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002531#if defined(WIN32) && defined(_MSC_VER)
2532
2533/* Stack checking for Microsoft C */
2534
2535#include <malloc.h>
2536#include <excpt.h>
2537
Fred Drakee8de31c2000-08-31 05:38:39 +00002538/*
2539 * Return non-zero when we run out of memory on the stack; zero otherwise.
2540 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002541int
Fred Drake399739f2000-08-31 05:52:44 +00002542PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002543{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002544 __try {
2545 /* alloca throws a stack overflow exception if there's
2546 not enough space left on the stack */
2547 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2548 return 0;
2549 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2550 EXCEPTION_EXECUTE_HANDLER :
2551 EXCEPTION_CONTINUE_SEARCH) {
2552 int errcode = _resetstkoflw();
2553 if (errcode == 0)
2554 {
2555 Py_FatalError("Could not reset the stack!");
2556 }
2557 }
2558 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002559}
2560
2561#endif /* WIN32 && _MSC_VER */
2562
2563/* Alternate implementations can be added here... */
2564
2565#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002566
2567
2568/* Wrappers around sigaction() or signal(). */
2569
2570PyOS_sighandler_t
2571PyOS_getsig(int sig)
2572{
2573#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002574 struct sigaction context;
2575 if (sigaction(sig, NULL, &context) == -1)
2576 return SIG_ERR;
2577 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002578#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002579 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002580/* Special signal handling for the secure CRT in Visual Studio 2005 */
2581#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002582 switch (sig) {
2583 /* Only these signals are valid */
2584 case SIGINT:
2585 case SIGILL:
2586 case SIGFPE:
2587 case SIGSEGV:
2588 case SIGTERM:
2589 case SIGBREAK:
2590 case SIGABRT:
2591 break;
2592 /* Don't call signal() with other values or it will assert */
2593 default:
2594 return SIG_ERR;
2595 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002596#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002597 handler = signal(sig, SIG_IGN);
2598 if (handler != SIG_ERR)
2599 signal(sig, handler);
2600 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002601#endif
2602}
2603
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002604/*
2605 * All of the code in this function must only use async-signal-safe functions,
2606 * listed at `man 7 signal` or
2607 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2608 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002609PyOS_sighandler_t
2610PyOS_setsig(int sig, PyOS_sighandler_t handler)
2611{
2612#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002613 /* Some code in Modules/signalmodule.c depends on sigaction() being
2614 * used here if HAVE_SIGACTION is defined. Fix that if this code
2615 * changes to invalidate that assumption.
2616 */
2617 struct sigaction context, ocontext;
2618 context.sa_handler = handler;
2619 sigemptyset(&context.sa_mask);
2620 context.sa_flags = 0;
2621 if (sigaction(sig, &context, &ocontext) == -1)
2622 return SIG_ERR;
2623 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002624#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002625 PyOS_sighandler_t oldhandler;
2626 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002627#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002628 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002629#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002630 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002631#endif
2632}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002633
2634/* Deprecated C API functions still provided for binary compatiblity */
2635
2636#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002637PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002638PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2639{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002640 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002641}
2642
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002643#undef PyParser_SimpleParseString
2644PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002645PyParser_SimpleParseString(const char *str, int start)
2646{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002647 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002648}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002649
2650#undef PyRun_AnyFile
2651PyAPI_FUNC(int)
2652PyRun_AnyFile(FILE *fp, const char *name)
2653{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002654 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002655}
2656
2657#undef PyRun_AnyFileEx
2658PyAPI_FUNC(int)
2659PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2660{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002661 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002662}
2663
2664#undef PyRun_AnyFileFlags
2665PyAPI_FUNC(int)
2666PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2667{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002668 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002669}
2670
2671#undef PyRun_File
2672PyAPI_FUNC(PyObject *)
2673PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2674{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002675 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002676}
2677
2678#undef PyRun_FileEx
2679PyAPI_FUNC(PyObject *)
2680PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2681{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002682 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002683}
2684
2685#undef PyRun_FileFlags
2686PyAPI_FUNC(PyObject *)
2687PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002688 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002689{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002690 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002691}
2692
2693#undef PyRun_SimpleFile
2694PyAPI_FUNC(int)
2695PyRun_SimpleFile(FILE *f, const char *p)
2696{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002697 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002698}
2699
2700#undef PyRun_SimpleFileEx
2701PyAPI_FUNC(int)
2702PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2703{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002704 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002705}
2706
2707
2708#undef PyRun_String
2709PyAPI_FUNC(PyObject *)
2710PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2711{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002712 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002713}
2714
2715#undef PyRun_SimpleString
2716PyAPI_FUNC(int)
2717PyRun_SimpleString(const char *s)
2718{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002719 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002720}
2721
2722#undef Py_CompileString
2723PyAPI_FUNC(PyObject *)
2724Py_CompileString(const char *str, const char *p, int s)
2725{
Georg Brandl8334fd92010-12-04 10:26:46 +00002726 return Py_CompileStringExFlags(str, p, s, NULL, -1);
2727}
2728
2729#undef Py_CompileStringFlags
2730PyAPI_FUNC(PyObject *)
2731Py_CompileStringFlags(const char *str, const char *p, int s,
2732 PyCompilerFlags *flags)
2733{
2734 return Py_CompileStringExFlags(str, p, s, flags, -1);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002735}
2736
2737#undef PyRun_InteractiveOne
2738PyAPI_FUNC(int)
2739PyRun_InteractiveOne(FILE *f, const char *p)
2740{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002741 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002742}
2743
2744#undef PyRun_InteractiveLoop
2745PyAPI_FUNC(int)
2746PyRun_InteractiveLoop(FILE *f, const char *p)
2747{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002748 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002749}
2750
2751#ifdef __cplusplus
2752}
2753#endif