blob: 86c32068297d5580a37964cfe5eda24d23c8c72c [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
Victor Stinner1c8f0592013-07-22 22:24:54 +0200331 if (!_PyFloat_Init())
332 Py_FatalError("Py_Initialize: can't init float");
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000333
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000334 interp->modules = PyDict_New();
335 if (interp->modules == NULL)
336 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000337
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000338 /* Init Unicode implementation; relies on the codec registry */
Victor Stinner3a50e702011-10-18 21:21:00 +0200339 if (_PyUnicode_Init() < 0)
340 Py_FatalError("Py_Initialize: can't initialize unicode");
Victor Stinner26f91992013-07-17 01:22:45 +0200341 if (_PyStructSequence_Init() < 0)
342 Py_FatalError("Py_Initialize: can't initialize structseq");
Guido van Rossumc94044c2000-03-10 23:03:54 +0000343
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000344 bimod = _PyBuiltin_Init();
345 if (bimod == NULL)
346 Py_FatalError("Py_Initialize: can't initialize builtins modules");
Victor Stinner49d3f252010-10-17 01:24:53 +0000347 _PyImport_FixupBuiltin(bimod, "builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000348 interp->builtins = PyModule_GetDict(bimod);
349 if (interp->builtins == NULL)
350 Py_FatalError("Py_Initialize: can't initialize builtins dict");
351 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000352
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000353 /* initialize builtin exceptions */
Brett Cannonfd074152012-04-14 14:10:13 -0400354 _PyExc_Init(bimod);
Christian Heimes9a68f8c2007-11-14 00:16:07 +0000355
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000356 sysmod = _PySys_Init();
357 if (sysmod == NULL)
358 Py_FatalError("Py_Initialize: can't initialize sys");
359 interp->sysdict = PyModule_GetDict(sysmod);
360 if (interp->sysdict == NULL)
361 Py_FatalError("Py_Initialize: can't initialize sys dict");
362 Py_INCREF(interp->sysdict);
Victor Stinner49d3f252010-10-17 01:24:53 +0000363 _PyImport_FixupBuiltin(sysmod, "sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000364 PySys_SetPath(Py_GetPath());
365 PyDict_SetItemString(interp->sysdict, "modules",
366 interp->modules);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000367
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000368 /* Set up a preliminary stderr printer until we have enough
369 infrastructure for the io module in place. */
370 pstderr = PyFile_NewStdPrinter(fileno(stderr));
371 if (pstderr == NULL)
372 Py_FatalError("Py_Initialize: can't set preliminary stderr");
373 PySys_SetObject("stderr", pstderr);
374 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000375 Py_DECREF(pstderr);
Guido van Rossum826d8972007-10-30 18:34:07 +0000376
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000377 _PyImport_Init();
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000378
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000379 _PyImportHooks_Init();
Just van Rossum52e14d62002-12-30 22:08:05 +0000380
Victor Stinner7d79b8b2010-05-19 20:40:50 +0000381 /* Initialize _warnings. */
382 _PyWarnings_Init();
383
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200384 if (!install_importlib)
385 return;
386
Brett Cannonfd074152012-04-14 14:10:13 -0400387 import_init(interp, sysmod);
388
Victor Stinnerd5698cb2012-07-31 02:55:49 +0200389 /* initialize the faulthandler module */
390 if (_PyFaulthandler_Init())
391 Py_FatalError("Py_Initialize: can't initialize faulthandler");
392
Alexander Belopolsky6fc4ade2010-08-05 17:34:27 +0000393 _PyTime_Init();
394
Victor Stinner793b5312011-04-27 00:24:21 +0200395 if (initfsencoding(interp) < 0)
396 Py_FatalError("Py_Initialize: unable to load the file system codec");
Martin v. Löwis011e8422009-05-05 04:43:17 +0000397
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000398 if (install_sigs)
399 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000400
Nick Coghlan85e729e2012-07-15 18:09:52 +1000401 initmain(interp); /* Module __main__ */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000402 if (initstdio() < 0)
403 Py_FatalError(
404 "Py_Initialize: can't initialize sys standard streams");
405
Antoine Pitroucf9f9802010-11-10 13:55:25 +0000406 /* Initialize warnings. */
407 if (PySys_HasWarnOptions()) {
408 PyObject *warnings_module = PyImport_ImportModule("warnings");
409 if (warnings_module == NULL) {
410 fprintf(stderr, "'import warnings' failed; traceback:\n");
411 PyErr_Print();
412 }
413 Py_XDECREF(warnings_module);
414 }
415
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000416 if (!Py_NoSiteFlag)
417 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000418}
419
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000420void
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200421Py_InitializeEx(int install_sigs)
422{
423 _Py_InitializeEx_Private(install_sigs, 1);
424}
425
426void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000427Py_Initialize(void)
428{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000429 Py_InitializeEx(1);
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000430}
431
432
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000433#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000434extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000435#endif
436
Guido van Rossume8432ac2007-07-09 15:04:50 +0000437/* Flush stdout and stderr */
438
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100439static int
440file_is_closed(PyObject *fobj)
441{
442 int r;
443 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
444 if (tmp == NULL) {
445 PyErr_Clear();
446 return 0;
447 }
448 r = PyObject_IsTrue(tmp);
449 Py_DECREF(tmp);
450 if (r < 0)
451 PyErr_Clear();
452 return r > 0;
453}
454
Neal Norwitz2bad9702007-08-27 06:19:22 +0000455static void
Guido van Rossum1bd21222007-07-10 20:14:13 +0000456flush_std_files(void)
Guido van Rossume8432ac2007-07-09 15:04:50 +0000457{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000458 PyObject *fout = PySys_GetObject("stdout");
459 PyObject *ferr = PySys_GetObject("stderr");
460 PyObject *tmp;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200461 _Py_IDENTIFIER(flush);
Guido van Rossume8432ac2007-07-09 15:04:50 +0000462
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100463 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200464 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000465 if (tmp == NULL)
Antoine Pitroubddc9fe2010-08-08 20:46:42 +0000466 PyErr_WriteUnraisable(fout);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000467 else
468 Py_DECREF(tmp);
469 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000470
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100471 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200472 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000473 if (tmp == NULL)
474 PyErr_Clear();
475 else
476 Py_DECREF(tmp);
477 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000478}
479
Guido van Rossum25ce5661997-08-02 03:10:38 +0000480/* Undo the effect of Py_Initialize().
481
482 Beware: if multiple interpreter and/or thread states exist, these
483 are not wiped out; only the current thread and interpreter state
484 are deleted. But since everything else is deleted, those other
485 interpreter and thread states should no longer be used.
486
487 (XXX We should do better, e.g. wipe out all interpreters and
488 threads.)
489
490 Locking: as above.
491
492*/
493
494void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000495Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000496{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000497 PyInterpreterState *interp;
498 PyThreadState *tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000499
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000500 if (!initialized)
501 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000502
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000503 wait_for_thread_shutdown();
Antoine Pitrou011bd622009-10-20 21:52:47 +0000504
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000505 /* The interpreter is still entirely intact at this point, and the
506 * exit funcs may be relying on that. In particular, if some thread
507 * or exit func is still waiting to do an import, the import machinery
508 * expects Py_IsInitialized() to return true. So don't say the
509 * interpreter is uninitialized until after the exit funcs have run.
510 * Note that Threading.py uses an exit func to do a join on all the
511 * threads created thru it, so this also protects pending imports in
512 * the threads created via Threading.
513 */
514 call_py_exitfuncs();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000515
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000516 /* Get current thread state and interpreter pointer */
517 tstate = PyThreadState_GET();
518 interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000519
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200520 /* Remaining threads (e.g. daemon threads) will automatically exit
521 after taking the GIL (in PyEval_RestoreThread()). */
522 _Py_Finalizing = tstate;
523 initialized = 0;
524
525 /* Flush stdout+stderr */
526 flush_std_files();
527
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000528 /* Disable signal handling */
529 PyOS_FiniInterrupts();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000530
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000531 /* Collect garbage. This may call finalizers; it's nice to call these
532 * before all modules are destroyed.
533 * XXX If a __del__ or weakref callback is triggered here, and tries to
534 * XXX import a module, bad things can happen, because Python no
535 * XXX longer believes it's initialized.
536 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
537 * XXX is easy to provoke that way. I've also seen, e.g.,
538 * XXX Exception exceptions.ImportError: 'No module named sha'
539 * XXX in <function callback at 0x008F5718> ignored
540 * XXX but I'm unclear on exactly how that one happens. In any case,
541 * XXX I haven't seen a real-life report of either of these.
542 */
543 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000544#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000545 /* With COUNT_ALLOCS, it helps to run GC multiple times:
546 each collection might release some types from the type
547 list, so they become garbage. */
548 while (PyGC_Collect() > 0)
549 /* nothing */;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000550#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000551 /* Destroy all modules */
552 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000553
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000554 /* Flush stdout+stderr (again, in case more was printed) */
555 flush_std_files();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000556
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000557 /* Collect final garbage. This disposes of cycles created by
Florent Xiclunaaa6c1d22011-12-12 18:54:29 +0100558 * class definitions, for example.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000559 * XXX This is disabled because it caused too many problems. If
560 * XXX a __del__ or weakref callback triggers here, Python code has
561 * XXX a hard time running, because even the sys module has been
562 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
563 * XXX One symptom is a sequence of information-free messages
564 * XXX coming from threads (if a __del__ or callback is invoked,
565 * XXX other threads can execute too, and any exception they encounter
566 * XXX triggers a comedy of errors as subsystem after subsystem
567 * XXX fails to find what it *expects* to find in sys to help report
568 * XXX the exception and consequent unexpected failures). I've also
569 * XXX seen segfaults then, after adding print statements to the
570 * XXX Python code getting called.
571 */
Tim Peters1d7323e2003-12-01 21:35:27 +0000572#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000573 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000574#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000575
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000576 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
577 _PyImport_Fini();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000578
Antoine Pitroufd417cc2013-05-05 08:12:42 +0200579 /* Cleanup typeobject.c's internal caches. */
580 _PyType_Fini();
581
Victor Stinner024e37a2011-03-31 01:31:06 +0200582 /* unload faulthandler module */
583 _PyFaulthandler_Fini();
584
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000585 /* Debugging stuff */
Guido van Rossum1707aad1997-12-08 23:43:45 +0000586#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000587 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000588#endif
589
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000590 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000591
Tim Peters9cf25ce2003-04-17 15:21:01 +0000592#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000593 /* Display all objects still alive -- this can invoke arbitrary
594 * __repr__ overrides, so requires a mostly-intact interpreter.
595 * Alas, a lot of stuff may still be alive now that will be cleaned
596 * up later.
597 */
598 if (Py_GETENV("PYTHONDUMPREFS"))
599 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000600#endif /* Py_TRACE_REFS */
601
Antoine Pitroufd417cc2013-05-05 08:12:42 +0200602 /* Clear interpreter state and all thread states. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000603 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000604
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000605 /* Now we decref the exception classes. After this point nothing
606 can raise an exception. That's okay, because each Fini() method
607 below has been checked to make sure no exceptions are ever
608 raised.
609 */
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000610
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000611 _PyExc_Fini();
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000612
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000613 /* Sundry finalizers */
614 PyMethod_Fini();
615 PyFrame_Fini();
616 PyCFunction_Fini();
617 PyTuple_Fini();
618 PyList_Fini();
619 PySet_Fini();
620 PyBytes_Fini();
621 PyByteArray_Fini();
622 PyLong_Fini();
623 PyFloat_Fini();
624 PyDict_Fini();
Antoine Pitrouf34a0cd2011-11-18 20:14:34 +0100625 PySlice_Fini();
Antoine Pitrou5f454a02013-05-06 21:15:57 +0200626 _PyGC_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000627
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000628 /* Cleanup Unicode implementation */
629 _PyUnicode_Fini();
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000630
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000631 /* reset file system default encoding */
Victor Stinnerb744ba12010-05-15 12:27:16 +0000632 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +0200633 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000634 Py_FileSystemDefaultEncoding = NULL;
635 }
Christian Heimesc8967002007-11-30 10:18:26 +0000636
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000637 /* XXX Still allocated:
638 - various static ad-hoc pointers to interned strings
639 - int and float free list blocks
640 - whatever various modules and libraries allocate
641 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000642
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000643 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000644
Victor Stinner51fa4582013-07-07 15:50:49 +0200645 /* Cleanup auto-thread-state */
646#ifdef WITH_THREAD
647 _PyGILState_Fini();
648#endif /* WITH_THREAD */
649
650 /* Delete current thread. After this, many C API calls become crashy. */
651 PyThreadState_Swap(NULL);
652 PyInterpreterState_Delete(interp);
653
Tim Peters269b2a62003-04-17 19:52:29 +0000654#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000655 /* Display addresses (& refcnts) of all objects still alive.
656 * An address can be used to find the repr of the object, printed
657 * above by _Py_PrintReferences.
658 */
659 if (Py_GETENV("PYTHONDUMPREFS"))
660 _Py_PrintReferenceAddresses(stderr);
Tim Peters269b2a62003-04-17 19:52:29 +0000661#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000662#ifdef PYMALLOC_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000663 if (Py_GETENV("PYTHONMALLOCSTATS"))
David Malcolm49526f42012-06-22 14:55:41 -0400664 _PyObject_DebugMallocStats(stderr);
Tim Peters0e871182002-04-13 08:29:14 +0000665#endif
666
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000667 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000668}
669
670/* Create and initialize a new interpreter and thread, and return the
671 new thread. This requires that Py_Initialize() has been called
672 first.
673
674 Unsuccessful initialization yields a NULL pointer. Note that *no*
675 exception information is available even in this case -- the
676 exception information is held in the thread, and there is no
677 thread.
678
679 Locking: as above.
680
681*/
682
683PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000684Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000685{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000686 PyInterpreterState *interp;
687 PyThreadState *tstate, *save_tstate;
688 PyObject *bimod, *sysmod;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000689
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000690 if (!initialized)
691 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000692
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000693 interp = PyInterpreterState_New();
694 if (interp == NULL)
695 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000696
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000697 tstate = PyThreadState_New(interp);
698 if (tstate == NULL) {
699 PyInterpreterState_Delete(interp);
700 return NULL;
701 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000702
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000703 save_tstate = PyThreadState_Swap(tstate);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000704
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000705 /* XXX The following is lax in error checking */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000706
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000707 interp->modules = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000708
Victor Stinner49d3f252010-10-17 01:24:53 +0000709 bimod = _PyImport_FindBuiltin("builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000710 if (bimod != NULL) {
711 interp->builtins = PyModule_GetDict(bimod);
712 if (interp->builtins == NULL)
713 goto handle_error;
714 Py_INCREF(interp->builtins);
715 }
Christian Heimes6a27efa2008-10-30 21:48:26 +0000716
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000717 /* initialize builtin exceptions */
Brett Cannonfd074152012-04-14 14:10:13 -0400718 _PyExc_Init(bimod);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000719
Victor Stinner49d3f252010-10-17 01:24:53 +0000720 sysmod = _PyImport_FindBuiltin("sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000721 if (bimod != NULL && sysmod != NULL) {
722 PyObject *pstderr;
Brett Cannonfd074152012-04-14 14:10:13 -0400723
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000724 interp->sysdict = PyModule_GetDict(sysmod);
725 if (interp->sysdict == NULL)
726 goto handle_error;
727 Py_INCREF(interp->sysdict);
728 PySys_SetPath(Py_GetPath());
729 PyDict_SetItemString(interp->sysdict, "modules",
730 interp->modules);
731 /* Set up a preliminary stderr printer until we have enough
732 infrastructure for the io module in place. */
733 pstderr = PyFile_NewStdPrinter(fileno(stderr));
734 if (pstderr == NULL)
735 Py_FatalError("Py_Initialize: can't set preliminary stderr");
736 PySys_SetObject("stderr", pstderr);
737 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000738 Py_DECREF(pstderr);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000739
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000740 _PyImportHooks_Init();
Victor Stinner793b5312011-04-27 00:24:21 +0200741
Brett Cannonfd074152012-04-14 14:10:13 -0400742 import_init(interp, sysmod);
743
Victor Stinner793b5312011-04-27 00:24:21 +0200744 if (initfsencoding(interp) < 0)
745 goto handle_error;
746
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000747 if (initstdio() < 0)
748 Py_FatalError(
749 "Py_Initialize: can't initialize sys standard streams");
Nick Coghlan85e729e2012-07-15 18:09:52 +1000750 initmain(interp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000751 if (!Py_NoSiteFlag)
752 initsite();
753 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000754
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000755 if (!PyErr_Occurred())
756 return tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000757
Thomas Wouters89f507f2006-12-13 04:49:30 +0000758handle_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000759 /* Oops, it didn't work. Undo it all. */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000760
Victor Stinnerc40a3502011-04-27 00:20:27 +0200761 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000762 PyThreadState_Clear(tstate);
763 PyThreadState_Swap(save_tstate);
764 PyThreadState_Delete(tstate);
765 PyInterpreterState_Delete(interp);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000766
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000767 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000768}
769
770/* Delete an interpreter and its last thread. This requires that the
771 given thread state is current, that the thread has no remaining
772 frames, and that it is its interpreter's only remaining thread.
773 It is a fatal error to violate these constraints.
774
775 (Py_Finalize() doesn't have these constraints -- it zaps
776 everything, regardless.)
777
778 Locking: as above.
779
780*/
781
782void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000783Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000784{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000785 PyInterpreterState *interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000786
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000787 if (tstate != PyThreadState_GET())
788 Py_FatalError("Py_EndInterpreter: thread is not current");
789 if (tstate->frame != NULL)
790 Py_FatalError("Py_EndInterpreter: thread still has a frame");
791 if (tstate != interp->tstate_head || tstate->next != NULL)
792 Py_FatalError("Py_EndInterpreter: not the last thread");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000793
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000794 PyImport_Cleanup();
795 PyInterpreterState_Clear(interp);
796 PyThreadState_Swap(NULL);
797 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000798}
799
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200800#ifdef MS_WINDOWS
Martin v. Löwis790465f2008-04-05 20:41:37 +0000801static wchar_t *progname = L"python";
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200802#else
803static wchar_t *progname = L"python3";
804#endif
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000805
806void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000807Py_SetProgramName(wchar_t *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000808{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000809 if (pn && *pn)
810 progname = pn;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000811}
812
Martin v. Löwis790465f2008-04-05 20:41:37 +0000813wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000814Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000815{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000817}
818
Martin v. Löwis790465f2008-04-05 20:41:37 +0000819static wchar_t *default_home = NULL;
820static wchar_t env_home[PATH_MAX+1];
Guido van Rossuma61691e1998-02-06 22:27:24 +0000821
822void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000823Py_SetPythonHome(wchar_t *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000824{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000825 default_home = home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000826}
827
Martin v. Löwis790465f2008-04-05 20:41:37 +0000828wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000829Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000830{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000831 wchar_t *home = default_home;
832 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
833 char* chome = Py_GETENV("PYTHONHOME");
834 if (chome) {
835 size_t r = mbstowcs(env_home, chome, PATH_MAX+1);
836 if (r != (size_t)-1 && r <= PATH_MAX)
837 home = env_home;
838 }
Martin v. Löwis790465f2008-04-05 20:41:37 +0000839
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000840 }
841 return home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000842}
843
Guido van Rossum6135a871995-01-09 17:53:26 +0000844/* Create __main__ module */
845
846static void
Nick Coghlan85e729e2012-07-15 18:09:52 +1000847initmain(PyInterpreterState *interp)
Guido van Rossum6135a871995-01-09 17:53:26 +0000848{
Brett Cannon13853a62013-05-04 17:37:09 -0400849 PyObject *m, *d, *loader;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000850 m = PyImport_AddModule("__main__");
851 if (m == NULL)
852 Py_FatalError("can't create __main__ module");
853 d = PyModule_GetDict(m);
854 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
855 PyObject *bimod = PyImport_ImportModule("builtins");
Nick Coghlan85e729e2012-07-15 18:09:52 +1000856 if (bimod == NULL) {
857 Py_FatalError("Failed to retrieve builtins module");
858 }
859 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
860 Py_FatalError("Failed to initialize __main__.__builtins__");
861 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000862 Py_DECREF(bimod);
863 }
Nick Coghlan85e729e2012-07-15 18:09:52 +1000864 /* Main is a little special - imp.is_builtin("__main__") will return
865 * False, but BuiltinImporter is still the most appropriate initial
866 * setting for its __loader__ attribute. A more suitable value will
867 * be set if __main__ gets further initialized later in the startup
868 * process.
869 */
Brett Cannon13853a62013-05-04 17:37:09 -0400870 loader = PyDict_GetItemString(d, "__loader__");
Brett Cannon4c14b5d2013-05-04 13:56:58 -0400871 if (loader == NULL || loader == Py_None) {
Nick Coghlan85e729e2012-07-15 18:09:52 +1000872 PyObject *loader = PyObject_GetAttrString(interp->importlib,
873 "BuiltinImporter");
874 if (loader == NULL) {
875 Py_FatalError("Failed to retrieve BuiltinImporter");
876 }
877 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
878 Py_FatalError("Failed to initialize __main__.__loader__");
879 }
880 Py_DECREF(loader);
881 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000882}
883
Victor Stinner793b5312011-04-27 00:24:21 +0200884static int
885initfsencoding(PyInterpreterState *interp)
Victor Stinnerb744ba12010-05-15 12:27:16 +0000886{
887 PyObject *codec;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000888
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200889 if (Py_FileSystemDefaultEncoding == NULL)
890 {
891 Py_FileSystemDefaultEncoding = get_locale_encoding();
892 if (Py_FileSystemDefaultEncoding == NULL)
Victor Stinnere4743092010-10-19 00:05:51 +0000893 Py_FatalError("Py_Initialize: Unable to get the locale encoding");
Victor Stinnerb744ba12010-05-15 12:27:16 +0000894
Victor Stinnere4743092010-10-19 00:05:51 +0000895 Py_HasFileSystemDefaultEncoding = 0;
Victor Stinner793b5312011-04-27 00:24:21 +0200896 interp->fscodec_initialized = 1;
897 return 0;
Victor Stinner7f84ab52010-06-11 00:36:33 +0000898 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000899
900 /* the encoding is mbcs, utf-8 or ascii */
901 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
902 if (!codec) {
903 /* Such error can only occurs in critical situations: no more
904 * memory, import a module of the standard library failed,
905 * etc. */
Victor Stinner793b5312011-04-27 00:24:21 +0200906 return -1;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000907 }
Victor Stinner793b5312011-04-27 00:24:21 +0200908 Py_DECREF(codec);
909 interp->fscodec_initialized = 1;
910 return 0;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000911}
912
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000913/* Import the site module (not into __main__ though) */
914
915static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000916initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000917{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000918 PyObject *m;
919 m = PyImport_ImportModule("site");
920 if (m == NULL) {
Victor Stinner62ce62a2013-07-22 22:53:28 +0200921 fprintf(stderr, "Failed to import the site module\n");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000922 PyErr_Print();
923 Py_Finalize();
924 exit(1);
925 }
926 else {
927 Py_DECREF(m);
928 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000929}
930
Antoine Pitrou05608432009-01-09 18:53:14 +0000931static PyObject*
932create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000933 int fd, int write_mode, char* name,
934 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +0000935{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000936 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
937 const char* mode;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +0000938 const char* newline;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000939 PyObject *line_buffering;
940 int buffering, isatty;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200941 _Py_IDENTIFIER(open);
942 _Py_IDENTIFIER(isatty);
943 _Py_IDENTIFIER(TextIOWrapper);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200944 _Py_IDENTIFIER(name);
945 _Py_IDENTIFIER(mode);
Antoine Pitrou05608432009-01-09 18:53:14 +0000946
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000947 /* stdin is always opened in buffered mode, first because it shouldn't
948 make a difference in common use cases, second because TextIOWrapper
949 depends on the presence of a read1() method which only exists on
950 buffered streams.
951 */
952 if (Py_UnbufferedStdioFlag && write_mode)
953 buffering = 0;
954 else
955 buffering = -1;
956 if (write_mode)
957 mode = "wb";
958 else
959 mode = "rb";
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200960 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
961 fd, mode, buffering,
962 Py_None, Py_None, Py_None, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000963 if (buf == NULL)
964 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000965
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000966 if (buffering) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200967 _Py_IDENTIFIER(raw);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200968 raw = _PyObject_GetAttrId(buf, &PyId_raw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000969 if (raw == NULL)
970 goto error;
971 }
972 else {
973 raw = buf;
974 Py_INCREF(raw);
975 }
Antoine Pitrou05608432009-01-09 18:53:14 +0000976
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000977 text = PyUnicode_FromString(name);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200978 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000979 goto error;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200980 res = _PyObject_CallMethodId(raw, &PyId_isatty, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000981 if (res == NULL)
982 goto error;
983 isatty = PyObject_IsTrue(res);
984 Py_DECREF(res);
985 if (isatty == -1)
986 goto error;
987 if (isatty || Py_UnbufferedStdioFlag)
988 line_buffering = Py_True;
989 else
990 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +0000991
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000992 Py_CLEAR(raw);
993 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +0000994
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +0000995#ifdef MS_WINDOWS
Victor Stinner7b3f0fa2012-08-04 01:28:00 +0200996 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
997 newlines to "\n".
998 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
999 newline = NULL;
1000#else
1001 /* sys.stdin: split lines at "\n".
1002 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1003 newline = "\n";
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001004#endif
1005
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001006 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssO",
1007 buf, encoding, errors,
1008 newline, line_buffering);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001009 Py_CLEAR(buf);
1010 if (stream == NULL)
1011 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +00001012
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001013 if (write_mode)
1014 mode = "w";
1015 else
1016 mode = "r";
1017 text = PyUnicode_FromString(mode);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001018 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001019 goto error;
1020 Py_CLEAR(text);
1021 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +00001022
1023error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001024 Py_XDECREF(buf);
1025 Py_XDECREF(stream);
1026 Py_XDECREF(text);
1027 Py_XDECREF(raw);
1028 return NULL;
Antoine Pitrou05608432009-01-09 18:53:14 +00001029}
1030
Antoine Pitrou11942a52011-11-28 19:08:36 +01001031static int
1032is_valid_fd(int fd)
1033{
1034 int dummy_fd;
1035 if (fd < 0 || !_PyVerify_fd(fd))
1036 return 0;
1037 dummy_fd = dup(fd);
1038 if (dummy_fd < 0)
1039 return 0;
1040 close(dummy_fd);
1041 return 1;
1042}
1043
Georg Brandl1a3284e2007-12-02 09:40:06 +00001044/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001045static int
1046initstdio(void)
1047{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001048 PyObject *iomod = NULL, *wrapper;
1049 PyObject *bimod = NULL;
1050 PyObject *m;
1051 PyObject *std = NULL;
1052 int status = 0, fd;
1053 PyObject * encoding_attr;
1054 char *encoding = NULL, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001055
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001056 /* Hack to avoid a nasty recursion issue when Python is invoked
1057 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1058 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1059 goto error;
1060 }
1061 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001062
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001063 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1064 goto error;
1065 }
1066 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001067
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001068 if (!(bimod = PyImport_ImportModule("builtins"))) {
1069 goto error;
1070 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001071
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001072 if (!(iomod = PyImport_ImportModule("io"))) {
1073 goto error;
1074 }
1075 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1076 goto error;
1077 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001078
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001079 /* Set builtins.open */
1080 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001081 Py_DECREF(wrapper);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001082 goto error;
1083 }
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001084 Py_DECREF(wrapper);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001085
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001086 encoding = Py_GETENV("PYTHONIOENCODING");
1087 errors = NULL;
1088 if (encoding) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001089 encoding = _PyMem_Strdup(encoding);
1090 if (encoding == NULL) {
1091 PyErr_NoMemory();
1092 goto error;
1093 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001094 errors = strchr(encoding, ':');
1095 if (errors) {
1096 *errors = '\0';
1097 errors++;
1098 }
1099 }
Martin v. Löwis0f599892008-06-02 11:13:03 +00001100
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001101 /* Set sys.stdin */
1102 fd = fileno(stdin);
1103 /* Under some conditions stdin, stdout and stderr may not be connected
1104 * and fileno() may point to an invalid file descriptor. For example
1105 * GUI apps don't have valid standard streams by default.
1106 */
Antoine Pitrou11942a52011-11-28 19:08:36 +01001107 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001108 std = Py_None;
1109 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001110 }
1111 else {
1112 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1113 if (std == NULL)
1114 goto error;
1115 } /* if (fd < 0) */
1116 PySys_SetObject("__stdin__", std);
1117 PySys_SetObject("stdin", std);
1118 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001119
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001120 /* Set sys.stdout */
1121 fd = fileno(stdout);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001122 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001123 std = Py_None;
1124 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001125 }
1126 else {
1127 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1128 if (std == NULL)
1129 goto error;
1130 } /* if (fd < 0) */
1131 PySys_SetObject("__stdout__", std);
1132 PySys_SetObject("stdout", std);
1133 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001134
Guido van Rossum98297ee2007-11-06 21:34:58 +00001135#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001136 /* Set sys.stderr, replaces the preliminary stderr */
1137 fd = fileno(stderr);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001138 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001139 std = Py_None;
1140 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001141 }
1142 else {
1143 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1144 if (std == NULL)
1145 goto error;
1146 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +00001147
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001148 /* Same as hack above, pre-import stderr's codec to avoid recursion
1149 when import.c tries to write to stderr in verbose mode. */
1150 encoding_attr = PyObject_GetAttrString(std, "encoding");
1151 if (encoding_attr != NULL) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001152 const char * std_encoding;
1153 std_encoding = _PyUnicode_AsString(encoding_attr);
1154 if (std_encoding != NULL) {
1155 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
Antoine Pitrou2fabfac2012-01-18 15:14:46 +01001156 Py_XDECREF(codec_info);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001157 }
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +00001158 Py_DECREF(encoding_attr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001159 }
1160 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +00001161
Victor Stinnerba308832013-07-22 23:55:19 +02001162 if (PySys_SetObject("__stderr__", std) < 0) {
1163 Py_DECREF(std);
1164 goto error;
1165 }
1166 if (PySys_SetObject("stderr", std) < 0) {
1167 Py_DECREF(std);
1168 goto error;
1169 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001170 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001171#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001172
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001173 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001174 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001175 status = -1;
1176 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001177
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001178 PyMem_Free(encoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001179 Py_XDECREF(bimod);
1180 Py_XDECREF(iomod);
1181 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001182}
1183
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001184/* Parse input from a file and execute it */
1185
1186int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001187PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001188 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001189{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001190 if (filename == NULL)
1191 filename = "???";
1192 if (Py_FdIsInteractive(fp, filename)) {
1193 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1194 if (closeit)
1195 fclose(fp);
1196 return err;
1197 }
1198 else
1199 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001200}
1201
1202int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001203PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001204{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001205 PyObject *v;
1206 int ret;
1207 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001208
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001209 if (flags == NULL) {
1210 flags = &local_flags;
1211 local_flags.cf_flags = 0;
1212 }
1213 v = PySys_GetObject("ps1");
1214 if (v == NULL) {
1215 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
1216 Py_XDECREF(v);
1217 }
1218 v = PySys_GetObject("ps2");
1219 if (v == NULL) {
1220 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
1221 Py_XDECREF(v);
1222 }
1223 for (;;) {
1224 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
1225 PRINT_TOTAL_REFS();
1226 if (ret == E_EOF)
1227 return 0;
1228 /*
1229 if (ret == E_NOMEM)
1230 return -1;
1231 */
1232 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001233}
1234
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001235/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001236static int PARSER_FLAGS(PyCompilerFlags *flags)
1237{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001238 int parser_flags = 0;
1239 if (!flags)
1240 return 0;
1241 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1242 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1243 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1244 parser_flags |= PyPARSE_IGNORE_COOKIE;
1245 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1246 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1247 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001248}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001249
Thomas Wouters89f507f2006-12-13 04:49:30 +00001250#if 0
1251/* Keep an example of flags with future keyword support. */
1252#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001253 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1254 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1255 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1256 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001257#endif
1258
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001259int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001260PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001261{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001262 PyObject *m, *d, *v, *w, *oenc = NULL;
1263 mod_ty mod;
1264 PyArena *arena;
1265 char *ps1 = "", *ps2 = "", *enc = NULL;
1266 int errcode = 0;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001267 _Py_IDENTIFIER(encoding);
Tim Petersfe2127d2001-07-16 05:37:24 +00001268
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001269 if (fp == stdin) {
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001270 /* Fetch encoding from sys.stdin if possible. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001271 v = PySys_GetObject("stdin");
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001272 if (v && v != Py_None) {
1273 oenc = _PyObject_GetAttrId(v, &PyId_encoding);
1274 if (oenc)
1275 enc = _PyUnicode_AsString(oenc);
1276 if (!enc)
1277 PyErr_Clear();
1278 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001279 }
1280 v = PySys_GetObject("ps1");
1281 if (v != NULL) {
1282 v = PyObject_Str(v);
1283 if (v == NULL)
1284 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001285 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001286 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001287 if (ps1 == NULL) {
1288 PyErr_Clear();
1289 ps1 = "";
1290 }
1291 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001292 }
1293 w = PySys_GetObject("ps2");
1294 if (w != NULL) {
1295 w = PyObject_Str(w);
1296 if (w == NULL)
1297 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001298 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001299 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001300 if (ps2 == NULL) {
1301 PyErr_Clear();
1302 ps2 = "";
1303 }
1304 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001305 }
1306 arena = PyArena_New();
1307 if (arena == NULL) {
1308 Py_XDECREF(v);
1309 Py_XDECREF(w);
1310 Py_XDECREF(oenc);
1311 return -1;
1312 }
1313 mod = PyParser_ASTFromFile(fp, filename, enc,
1314 Py_single_input, ps1, ps2,
1315 flags, &errcode, arena);
1316 Py_XDECREF(v);
1317 Py_XDECREF(w);
1318 Py_XDECREF(oenc);
1319 if (mod == NULL) {
1320 PyArena_Free(arena);
1321 if (errcode == E_EOF) {
1322 PyErr_Clear();
1323 return E_EOF;
1324 }
1325 PyErr_Print();
1326 return -1;
1327 }
1328 m = PyImport_AddModule("__main__");
1329 if (m == NULL) {
1330 PyArena_Free(arena);
1331 return -1;
1332 }
1333 d = PyModule_GetDict(m);
1334 v = run_mod(mod, filename, d, d, flags, arena);
1335 PyArena_Free(arena);
1336 flush_io();
1337 if (v == NULL) {
1338 PyErr_Print();
1339 return -1;
1340 }
1341 Py_DECREF(v);
1342 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001343}
1344
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001345/* Check whether a file maybe a pyc file: Look at the extension,
1346 the file type, and, if we may close it, at the first few bytes. */
1347
1348static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001349maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001350{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001351 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1352 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001353
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001354 /* Only look into the file if we are allowed to close it, since
1355 it then should also be seekable. */
1356 if (closeit) {
1357 /* Read only two bytes of the magic. If the file was opened in
1358 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1359 be read as they are on disk. */
1360 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1361 unsigned char buf[2];
1362 /* Mess: In case of -x, the stream is NOT at its start now,
1363 and ungetc() was used to push back the first newline,
1364 which makes the current stream position formally undefined,
1365 and a x-platform nightmare.
1366 Unfortunately, we have no direct way to know whether -x
1367 was specified. So we use a terrible hack: if the current
1368 stream position is not 0, we assume -x was specified, and
1369 give up. Bug 132850 on SourceForge spells out the
1370 hopelessness of trying anything else (fseek and ftell
1371 don't work predictably x-platform for text-mode files).
1372 */
1373 int ispyc = 0;
1374 if (ftell(fp) == 0) {
1375 if (fread(buf, 1, 2, fp) == 2 &&
1376 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1377 ispyc = 1;
1378 rewind(fp);
1379 }
1380 return ispyc;
1381 }
1382 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001383}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001384
Antoine Pitrou32d483c2013-07-30 21:01:23 +02001385static int
1386set_main_loader(PyObject *d, const char *filename, const char *loader_name)
Nick Coghlan85e729e2012-07-15 18:09:52 +10001387{
1388 PyInterpreterState *interp;
1389 PyThreadState *tstate;
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001390 PyObject *filename_obj, *loader_type, *loader;
Nick Coghlanb7a58942012-07-15 23:21:08 +10001391 int result = 0;
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001392
1393 filename_obj = PyUnicode_DecodeFSDefault(filename);
1394 if (filename_obj == NULL)
1395 return -1;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001396 /* Get current thread state and interpreter pointer */
1397 tstate = PyThreadState_GET();
1398 interp = tstate->interp;
Nick Coghlan3f94cbf2012-07-15 19:10:39 +10001399 loader_type = PyObject_GetAttrString(interp->importlib, loader_name);
1400 if (loader_type == NULL) {
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001401 Py_DECREF(filename_obj);
Nick Coghlan3f94cbf2012-07-15 19:10:39 +10001402 return -1;
1403 }
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001404 loader = PyObject_CallFunction(loader_type, "sN", "__main__", filename_obj);
Nick Coghlanb7a58942012-07-15 23:21:08 +10001405 Py_DECREF(loader_type);
1406 if (loader == NULL) {
Nick Coghlan85e729e2012-07-15 18:09:52 +10001407 return -1;
1408 }
Nick Coghlanb7a58942012-07-15 23:21:08 +10001409 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
1410 result = -1;
1411 }
Nick Coghlan85e729e2012-07-15 18:09:52 +10001412 Py_DECREF(loader);
Nick Coghlanb7a58942012-07-15 23:21:08 +10001413 return result;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001414}
1415
1416int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001417PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001418 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001419{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001420 PyObject *m, *d, *v;
1421 const char *ext;
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001422 int set_file_name = 0, ret = -1;
Victor Stinner0fcab4a2011-01-04 12:59:15 +00001423 size_t len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001424
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001425 m = PyImport_AddModule("__main__");
1426 if (m == NULL)
1427 return -1;
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001428 Py_INCREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001429 d = PyModule_GetDict(m);
1430 if (PyDict_GetItemString(d, "__file__") == NULL) {
1431 PyObject *f;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001432 f = PyUnicode_DecodeFSDefault(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001433 if (f == NULL)
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001434 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001435 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1436 Py_DECREF(f);
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001437 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001438 }
Barry Warsaw916048d2011-09-20 14:45:44 -04001439 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0) {
1440 Py_DECREF(f);
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001441 goto done;
Barry Warsaw916048d2011-09-20 14:45:44 -04001442 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001443 set_file_name = 1;
1444 Py_DECREF(f);
1445 }
1446 len = strlen(filename);
1447 ext = filename + len - (len > 4 ? 4 : 0);
1448 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Christian Heimes04ac4c12012-09-11 15:47:28 +02001449 FILE *pyc_fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001450 /* Try to run a pyc file. First, re-open in binary */
1451 if (closeit)
1452 fclose(fp);
Christian Heimes04ac4c12012-09-11 15:47:28 +02001453 if ((pyc_fp = fopen(filename, "rb")) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001454 fprintf(stderr, "python: Can't reopen .pyc file\n");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001455 goto done;
1456 }
1457 /* Turn on optimization if a .pyo file is given */
1458 if (strcmp(ext, ".pyo") == 0)
1459 Py_OptimizeFlag = 1;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001460
1461 if (set_main_loader(d, filename, "SourcelessFileLoader") < 0) {
1462 fprintf(stderr, "python: failed to set __main__.__loader__\n");
1463 ret = -1;
Christian Heimes04ac4c12012-09-11 15:47:28 +02001464 fclose(pyc_fp);
Nick Coghlan85e729e2012-07-15 18:09:52 +10001465 goto done;
1466 }
Christian Heimes04ac4c12012-09-11 15:47:28 +02001467 v = run_pyc_file(pyc_fp, filename, d, d, flags);
1468 fclose(pyc_fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001469 } else {
Nick Coghlan85e729e2012-07-15 18:09:52 +10001470 /* When running from stdin, leave __main__.__loader__ alone */
1471 if (strcmp(filename, "<stdin>") != 0 &&
1472 set_main_loader(d, filename, "SourceFileLoader") < 0) {
1473 fprintf(stderr, "python: failed to set __main__.__loader__\n");
1474 ret = -1;
1475 goto done;
1476 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001477 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1478 closeit, flags);
1479 }
1480 flush_io();
1481 if (v == NULL) {
1482 PyErr_Print();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001483 goto done;
1484 }
1485 Py_DECREF(v);
1486 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001487 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001488 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1489 PyErr_Clear();
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001490 Py_DECREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001491 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001492}
1493
1494int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001495PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001496{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001497 PyObject *m, *d, *v;
1498 m = PyImport_AddModule("__main__");
1499 if (m == NULL)
1500 return -1;
1501 d = PyModule_GetDict(m);
1502 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1503 if (v == NULL) {
1504 PyErr_Print();
1505 return -1;
1506 }
1507 Py_DECREF(v);
1508 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001509}
1510
Barry Warsaw035574d1997-08-29 22:07:17 +00001511static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001512parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001513 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001514{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001515 long hold;
1516 PyObject *v;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001517 _Py_IDENTIFIER(msg);
1518 _Py_IDENTIFIER(filename);
1519 _Py_IDENTIFIER(lineno);
1520 _Py_IDENTIFIER(offset);
1521 _Py_IDENTIFIER(text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001522
Benjamin Peterson80d50422012-04-03 00:30:38 -04001523 *message = NULL;
1524
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001525 /* new style errors. `err' is an instance */
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001526 *message = _PyObject_GetAttrId(err, &PyId_msg);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001527 if (!*message)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001528 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001529
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001530 v = _PyObject_GetAttrId(err, &PyId_filename);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001531 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001532 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001533 if (v == Py_None) {
1534 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001535 *filename = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001536 }
1537 else {
1538 *filename = _PyUnicode_AsString(v);
1539 Py_DECREF(v);
1540 if (!*filename)
1541 goto finally;
1542 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001543
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001544 v = _PyObject_GetAttrId(err, &PyId_lineno);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001545 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001546 goto finally;
1547 hold = PyLong_AsLong(v);
1548 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001549 if (hold < 0 && PyErr_Occurred())
1550 goto finally;
1551 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001552
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001553 v = _PyObject_GetAttrId(err, &PyId_offset);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001554 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001555 goto finally;
1556 if (v == Py_None) {
1557 *offset = -1;
1558 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001559 } else {
1560 hold = PyLong_AsLong(v);
1561 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001562 if (hold < 0 && PyErr_Occurred())
1563 goto finally;
1564 *offset = (int)hold;
1565 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001566
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001567 v = _PyObject_GetAttrId(err, &PyId_text);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001568 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001569 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001570 if (v == Py_None) {
1571 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001572 *text = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001573 }
1574 else {
1575 *text = _PyUnicode_AsString(v);
1576 Py_DECREF(v);
1577 if (!*text)
1578 goto finally;
1579 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001580 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001581
1582finally:
Benjamin Peterson80d50422012-04-03 00:30:38 -04001583 Py_XDECREF(*message);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001584 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001585}
1586
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001587void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001588PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001589{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001590 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001591}
1592
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001593static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001594print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001595{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001596 char *nl;
1597 if (offset >= 0) {
Benjamin Petersona95e9772010-10-29 03:28:14 +00001598 if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n')
1599 offset--;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001600 for (;;) {
1601 nl = strchr(text, '\n');
1602 if (nl == NULL || nl-text >= offset)
1603 break;
1604 offset -= (int)(nl+1-text);
1605 text = nl+1;
1606 }
1607 while (*text == ' ' || *text == '\t') {
1608 text++;
1609 offset--;
1610 }
1611 }
1612 PyFile_WriteString(" ", f);
1613 PyFile_WriteString(text, f);
1614 if (*text == '\0' || text[strlen(text)-1] != '\n')
1615 PyFile_WriteString("\n", f);
1616 if (offset == -1)
1617 return;
1618 PyFile_WriteString(" ", f);
Benjamin Petersona95e9772010-10-29 03:28:14 +00001619 while (--offset > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001620 PyFile_WriteString(" ", f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001621 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001622}
1623
Guido van Rossum66e8e862001-03-23 17:54:43 +00001624static void
1625handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001626{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001627 PyObject *exception, *value, *tb;
1628 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001629
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001630 if (Py_InspectFlag)
1631 /* Don't exit if -i flag was given. This flag is set to 0
1632 * when entering interactive mode for inspecting. */
1633 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001634
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001635 PyErr_Fetch(&exception, &value, &tb);
1636 fflush(stdout);
1637 if (value == NULL || value == Py_None)
1638 goto done;
1639 if (PyExceptionInstance_Check(value)) {
1640 /* The error code should be in the `code' attribute. */
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001641 _Py_IDENTIFIER(code);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001642 PyObject *code = _PyObject_GetAttrId(value, &PyId_code);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001643 if (code) {
1644 Py_DECREF(value);
1645 value = code;
1646 if (value == Py_None)
1647 goto done;
1648 }
1649 /* If we failed to dig out the 'code' attribute,
1650 just let the else clause below print the error. */
1651 }
1652 if (PyLong_Check(value))
1653 exitcode = (int)PyLong_AsLong(value);
1654 else {
Victor Stinnere9fb3192010-05-17 08:58:51 +00001655 PyObject *sys_stderr = PySys_GetObject("stderr");
Victor Stinner7126dbc2010-05-21 23:45:42 +00001656 if (sys_stderr != NULL && sys_stderr != Py_None) {
1657 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1658 } else {
1659 PyObject_Print(value, stderr, Py_PRINT_RAW);
1660 fflush(stderr);
1661 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001662 PySys_WriteStderr("\n");
1663 exitcode = 1;
1664 }
Tim Peterscf615b52003-04-19 18:47:02 +00001665 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001666 /* Restore and clear the exception info, in order to properly decref
1667 * the exception, value, and traceback. If we just exit instead,
1668 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1669 * some finalizers from running.
1670 */
1671 PyErr_Restore(exception, value, tb);
1672 PyErr_Clear();
1673 Py_Exit(exitcode);
1674 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001675}
1676
1677void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001678PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001679{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001680 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001681
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001682 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1683 handle_system_exit();
1684 }
1685 PyErr_Fetch(&exception, &v, &tb);
1686 if (exception == NULL)
1687 return;
1688 PyErr_NormalizeException(&exception, &v, &tb);
1689 if (tb == NULL) {
1690 tb = Py_None;
1691 Py_INCREF(tb);
1692 }
1693 PyException_SetTraceback(v, tb);
1694 if (exception == NULL)
1695 return;
1696 /* Now we know v != NULL too */
1697 if (set_sys_last_vars) {
1698 PySys_SetObject("last_type", exception);
1699 PySys_SetObject("last_value", v);
1700 PySys_SetObject("last_traceback", tb);
1701 }
1702 hook = PySys_GetObject("excepthook");
1703 if (hook) {
1704 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1705 PyObject *result = PyEval_CallObject(hook, args);
1706 if (result == NULL) {
1707 PyObject *exception2, *v2, *tb2;
1708 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1709 handle_system_exit();
1710 }
1711 PyErr_Fetch(&exception2, &v2, &tb2);
1712 PyErr_NormalizeException(&exception2, &v2, &tb2);
1713 /* It should not be possible for exception2 or v2
1714 to be NULL. However PyErr_Display() can't
1715 tolerate NULLs, so just be safe. */
1716 if (exception2 == NULL) {
1717 exception2 = Py_None;
1718 Py_INCREF(exception2);
1719 }
1720 if (v2 == NULL) {
1721 v2 = Py_None;
1722 Py_INCREF(v2);
1723 }
1724 fflush(stdout);
1725 PySys_WriteStderr("Error in sys.excepthook:\n");
1726 PyErr_Display(exception2, v2, tb2);
1727 PySys_WriteStderr("\nOriginal exception was:\n");
1728 PyErr_Display(exception, v, tb);
1729 Py_DECREF(exception2);
1730 Py_DECREF(v2);
1731 Py_XDECREF(tb2);
1732 }
1733 Py_XDECREF(result);
1734 Py_XDECREF(args);
1735 } else {
1736 PySys_WriteStderr("sys.excepthook is missing\n");
1737 PyErr_Display(exception, v, tb);
1738 }
1739 Py_XDECREF(exception);
1740 Py_XDECREF(v);
1741 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001742}
1743
Benjamin Petersone6528212008-07-15 15:32:09 +00001744static void
1745print_exception(PyObject *f, PyObject *value)
1746{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001747 int err = 0;
1748 PyObject *type, *tb;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001749 _Py_IDENTIFIER(print_file_and_line);
Benjamin Petersone6528212008-07-15 15:32:09 +00001750
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001751 if (!PyExceptionInstance_Check(value)) {
1752 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1753 PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1754 PyFile_WriteString(" found\n", f);
1755 return;
1756 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001757
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001758 Py_INCREF(value);
1759 fflush(stdout);
1760 type = (PyObject *) Py_TYPE(value);
1761 tb = PyException_GetTraceback(value);
1762 if (tb && tb != Py_None)
1763 err = PyTraceBack_Print(tb, f);
1764 if (err == 0 &&
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001765 _PyObject_HasAttrId(value, &PyId_print_file_and_line))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001766 {
1767 PyObject *message;
1768 const char *filename, *text;
1769 int lineno, offset;
1770 if (!parse_syntax_error(value, &message, &filename,
1771 &lineno, &offset, &text))
1772 PyErr_Clear();
1773 else {
1774 char buf[10];
1775 PyFile_WriteString(" File \"", f);
1776 if (filename == NULL)
1777 PyFile_WriteString("<string>", f);
1778 else
1779 PyFile_WriteString(filename, f);
1780 PyFile_WriteString("\", line ", f);
1781 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
1782 PyFile_WriteString(buf, f);
1783 PyFile_WriteString("\n", f);
1784 if (text != NULL)
1785 print_error_text(f, offset, text);
1786 Py_DECREF(value);
1787 value = message;
1788 /* Can't be bothered to check all those
1789 PyFile_WriteString() calls */
1790 if (PyErr_Occurred())
1791 err = -1;
1792 }
1793 }
1794 if (err) {
1795 /* Don't do anything else */
1796 }
1797 else {
1798 PyObject* moduleName;
1799 char* className;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001800 _Py_IDENTIFIER(__module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001801 assert(PyExceptionClass_Check(type));
1802 className = PyExceptionClass_Name(type);
1803 if (className != NULL) {
1804 char *dot = strrchr(className, '.');
1805 if (dot != NULL)
1806 className = dot+1;
1807 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001808
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001809 moduleName = _PyObject_GetAttrId(type, &PyId___module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001810 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1811 {
Victor Stinner13b21bd2011-05-26 14:25:13 +02001812 Py_XDECREF(moduleName);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001813 err = PyFile_WriteString("<unknown>", f);
1814 }
1815 else {
1816 char* modstr = _PyUnicode_AsString(moduleName);
1817 if (modstr && strcmp(modstr, "builtins"))
1818 {
1819 err = PyFile_WriteString(modstr, f);
1820 err += PyFile_WriteString(".", f);
1821 }
1822 Py_DECREF(moduleName);
1823 }
1824 if (err == 0) {
1825 if (className == NULL)
1826 err = PyFile_WriteString("<unknown>", f);
1827 else
1828 err = PyFile_WriteString(className, f);
1829 }
1830 }
1831 if (err == 0 && (value != Py_None)) {
1832 PyObject *s = PyObject_Str(value);
1833 /* only print colon if the str() of the
1834 object is not the empty string
1835 */
1836 if (s == NULL)
1837 err = -1;
1838 else if (!PyUnicode_Check(s) ||
Victor Stinnere251d6d2011-11-20 19:20:00 +01001839 PyUnicode_GetLength(s) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001840 err = PyFile_WriteString(": ", f);
1841 if (err == 0)
1842 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1843 Py_XDECREF(s);
1844 }
1845 /* try to write a newline in any case */
1846 err += PyFile_WriteString("\n", f);
1847 Py_XDECREF(tb);
1848 Py_DECREF(value);
1849 /* If an error happened here, don't show it.
1850 XXX This is wrong, but too many callers rely on this behavior. */
1851 if (err != 0)
1852 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001853}
1854
1855static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001856 "\nThe above exception was the direct cause "
1857 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001858
1859static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001860 "\nDuring handling of the above exception, "
1861 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001862
1863static void
1864print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
1865{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001866 int err = 0, res;
1867 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00001868
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001869 if (seen != NULL) {
1870 /* Exception chaining */
1871 if (PySet_Add(seen, value) == -1)
1872 PyErr_Clear();
1873 else if (PyExceptionInstance_Check(value)) {
1874 cause = PyException_GetCause(value);
1875 context = PyException_GetContext(value);
Benjamin Petersond5a1c442012-05-14 22:09:31 -07001876 if (cause) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001877 res = PySet_Contains(seen, cause);
1878 if (res == -1)
1879 PyErr_Clear();
1880 if (res == 0) {
1881 print_exception_recursive(
1882 f, cause, seen);
1883 err |= PyFile_WriteString(
1884 cause_message, f);
1885 }
1886 }
Benjamin Petersond5a1c442012-05-14 22:09:31 -07001887 else if (context &&
1888 !((PyBaseExceptionObject *)value)->suppress_context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001889 res = PySet_Contains(seen, context);
1890 if (res == -1)
1891 PyErr_Clear();
1892 if (res == 0) {
1893 print_exception_recursive(
1894 f, context, seen);
1895 err |= PyFile_WriteString(
1896 context_message, f);
1897 }
1898 }
1899 Py_XDECREF(context);
1900 Py_XDECREF(cause);
1901 }
1902 }
1903 print_exception(f, value);
1904 if (err != 0)
1905 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001906}
1907
Thomas Wouters477c8d52006-05-27 19:21:47 +00001908void
1909PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001910{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001911 PyObject *seen;
1912 PyObject *f = PySys_GetObject("stderr");
1913 if (f == Py_None) {
1914 /* pass */
1915 }
1916 else if (f == NULL) {
1917 _PyObject_Dump(value);
1918 fprintf(stderr, "lost sys.stderr\n");
1919 }
1920 else {
1921 /* We choose to ignore seen being possibly NULL, and report
1922 at least the main exception (it could be a MemoryError).
1923 */
1924 seen = PySet_New(NULL);
1925 if (seen == NULL)
1926 PyErr_Clear();
1927 print_exception_recursive(f, value, seen);
1928 Py_XDECREF(seen);
1929 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001930}
1931
Guido van Rossum82598051997-03-05 00:20:32 +00001932PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001933PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001934 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001935{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001936 PyObject *ret = NULL;
1937 mod_ty mod;
1938 PyArena *arena = PyArena_New();
1939 if (arena == NULL)
1940 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001941
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001942 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
1943 if (mod != NULL)
1944 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
1945 PyArena_Free(arena);
1946 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001947}
1948
1949PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001950PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001951 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001952{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001953 PyObject *ret;
1954 mod_ty mod;
1955 PyArena *arena = PyArena_New();
1956 if (arena == NULL)
1957 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001958
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001959 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
1960 flags, NULL, arena);
1961 if (closeit)
1962 fclose(fp);
1963 if (mod == NULL) {
1964 PyArena_Free(arena);
1965 return NULL;
1966 }
1967 ret = run_mod(mod, filename, globals, locals, flags, arena);
1968 PyArena_Free(arena);
1969 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001970}
1971
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001972static void
1973flush_io(void)
1974{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001975 PyObject *f, *r;
1976 PyObject *type, *value, *traceback;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001977 _Py_IDENTIFIER(flush);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001978
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001979 /* Save the current exception */
1980 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001982 f = PySys_GetObject("stderr");
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 }
1990 f = PySys_GetObject("stdout");
1991 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001992 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001993 if (r)
1994 Py_DECREF(r);
1995 else
1996 PyErr_Clear();
1997 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001998
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001999 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00002000}
2001
Guido van Rossum82598051997-03-05 00:20:32 +00002002static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002003run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002004 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002005{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002006 PyCodeObject *co;
2007 PyObject *v;
2008 co = PyAST_Compile(mod, filename, flags, arena);
2009 if (co == NULL)
2010 return NULL;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002011 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002012 Py_DECREF(co);
2013 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002014}
2015
Guido van Rossum82598051997-03-05 00:20:32 +00002016static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002017run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002018 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00002019{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002020 PyCodeObject *co;
2021 PyObject *v;
2022 long magic;
2023 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00002024
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002025 magic = PyMarshal_ReadLongFromFile(fp);
2026 if (magic != PyImport_GetMagicNumber()) {
2027 PyErr_SetString(PyExc_RuntimeError,
2028 "Bad magic number in .pyc file");
2029 return NULL;
2030 }
Antoine Pitrou5136ac02012-01-13 18:52:16 +01002031 /* Skip mtime and size */
2032 (void) PyMarshal_ReadLongFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002033 (void) PyMarshal_ReadLongFromFile(fp);
2034 v = PyMarshal_ReadLastObjectFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002035 if (v == NULL || !PyCode_Check(v)) {
2036 Py_XDECREF(v);
2037 PyErr_SetString(PyExc_RuntimeError,
2038 "Bad code object in .pyc file");
2039 return NULL;
2040 }
2041 co = (PyCodeObject *)v;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002042 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002043 if (v && flags)
2044 flags->cf_flags |= (co->co_flags & PyCF_MASK);
2045 Py_DECREF(co);
2046 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00002047}
2048
Guido van Rossum82598051997-03-05 00:20:32 +00002049PyObject *
Georg Brandl8334fd92010-12-04 10:26:46 +00002050Py_CompileStringExFlags(const char *str, const char *filename, int start,
2051 PyCompilerFlags *flags, int optimize)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00002052{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002053 PyCodeObject *co;
2054 mod_ty mod;
2055 PyArena *arena = PyArena_New();
2056 if (arena == NULL)
2057 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002058
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002059 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
2060 if (mod == NULL) {
2061 PyArena_Free(arena);
2062 return NULL;
2063 }
2064 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
2065 PyObject *result = PyAST_mod2obj(mod);
2066 PyArena_Free(arena);
2067 return result;
2068 }
Georg Brandl8334fd92010-12-04 10:26:46 +00002069 co = PyAST_CompileEx(mod, filename, flags, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002070 PyArena_Free(arena);
2071 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00002072}
2073
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002074/* For use in Py_LIMITED_API */
2075#undef Py_CompileString
2076PyObject *
2077PyCompileString(const char *str, const char *filename, int start)
2078{
2079 return Py_CompileStringFlags(str, filename, start, NULL);
2080}
2081
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002082struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002083Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002084{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002085 struct symtable *st;
2086 mod_ty mod;
2087 PyCompilerFlags flags;
2088 PyArena *arena = PyArena_New();
2089 if (arena == NULL)
2090 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002091
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002092 flags.cf_flags = 0;
2093 mod = PyParser_ASTFromString(str, filename, start, &flags, arena);
2094 if (mod == NULL) {
2095 PyArena_Free(arena);
2096 return NULL;
2097 }
2098 st = PySymtable_Build(mod, filename, 0);
2099 PyArena_Free(arena);
2100 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002101}
2102
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002103/* Preferred access to parser is through AST. */
2104mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002105PyParser_ASTFromString(const char *s, const char *filename, int start,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002106 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002107{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002108 mod_ty mod;
2109 PyCompilerFlags localflags;
2110 perrdetail err;
2111 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002112
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002113 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename,
2114 &_PyParser_Grammar, start, &err,
2115 &iflags);
2116 if (flags == NULL) {
2117 localflags.cf_flags = 0;
2118 flags = &localflags;
2119 }
2120 if (n) {
2121 flags->cf_flags |= iflags & PyCF_MASK;
2122 mod = PyAST_FromNode(n, flags, filename, arena);
2123 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002124 }
2125 else {
2126 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002127 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002128 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002129 err_free(&err);
2130 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002131}
2132
2133mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00002134PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002135 int start, char *ps1,
2136 char *ps2, PyCompilerFlags *flags, int *errcode,
2137 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002138{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002139 mod_ty mod;
2140 PyCompilerFlags localflags;
2141 perrdetail err;
2142 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002143
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002144 node *n = PyParser_ParseFileFlagsEx(fp, filename, enc,
2145 &_PyParser_Grammar,
2146 start, ps1, ps2, &err, &iflags);
2147 if (flags == NULL) {
2148 localflags.cf_flags = 0;
2149 flags = &localflags;
2150 }
2151 if (n) {
2152 flags->cf_flags |= iflags & PyCF_MASK;
2153 mod = PyAST_FromNode(n, flags, filename, arena);
2154 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002155 }
2156 else {
2157 err_input(&err);
2158 if (errcode)
2159 *errcode = err.error;
Victor Stinner7f2fee32011-04-05 00:39:01 +02002160 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002161 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002162 err_free(&err);
2163 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002164}
2165
Guido van Rossuma110aa61994-08-29 12:50:44 +00002166/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002167
Guido van Rossuma110aa61994-08-29 12:50:44 +00002168node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002169PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002170{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002171 perrdetail err;
2172 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
2173 &_PyParser_Grammar,
2174 start, NULL, NULL, &err, flags);
2175 if (n == NULL)
2176 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002177 err_free(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002178
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002179 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002180}
2181
Guido van Rossuma110aa61994-08-29 12:50:44 +00002182/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002183
Guido van Rossuma110aa61994-08-29 12:50:44 +00002184node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002185PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00002186{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002187 perrdetail err;
2188 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
2189 start, &err, flags);
2190 if (n == NULL)
2191 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002192 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002193 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00002194}
2195
2196node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002197PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002198 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002199{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002200 perrdetail err;
2201 node *n = PyParser_ParseStringFlagsFilename(str, filename,
2202 &_PyParser_Grammar, start, &err, flags);
2203 if (n == NULL)
2204 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002205 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002206 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00002207}
2208
2209node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002210PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002211{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002212 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00002213}
2214
Guido van Rossum66ebd912003-04-17 16:02:26 +00002215/* May want to move a more generalized form of this to parsetok.c or
2216 even parser modules. */
2217
2218void
Victor Stinner7f2fee32011-04-05 00:39:01 +02002219PyParser_ClearError(perrdetail *err)
2220{
2221 err_free(err);
2222}
2223
2224void
Guido van Rossum66ebd912003-04-17 16:02:26 +00002225PyParser_SetError(perrdetail *err)
2226{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002227 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00002228}
2229
Victor Stinner7f2fee32011-04-05 00:39:01 +02002230static void
2231err_free(perrdetail *err)
2232{
2233 Py_CLEAR(err->filename);
2234}
2235
Guido van Rossuma110aa61994-08-29 12:50:44 +00002236/* Set the error appropriate to the given input error code (see errcode.h) */
2237
2238static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002239err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00002240{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002241 PyObject *v, *w, *errtype, *errtext;
2242 PyObject *msg_obj = NULL;
2243 char *msg = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002244
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002245 errtype = PyExc_SyntaxError;
2246 switch (err->error) {
2247 case E_ERROR:
2248 return;
2249 case E_SYNTAX:
2250 errtype = PyExc_IndentationError;
2251 if (err->expected == INDENT)
2252 msg = "expected an indented block";
2253 else if (err->token == INDENT)
2254 msg = "unexpected indent";
2255 else if (err->token == DEDENT)
2256 msg = "unexpected unindent";
2257 else {
2258 errtype = PyExc_SyntaxError;
2259 msg = "invalid syntax";
2260 }
2261 break;
2262 case E_TOKEN:
2263 msg = "invalid token";
2264 break;
2265 case E_EOFS:
2266 msg = "EOF while scanning triple-quoted string literal";
2267 break;
2268 case E_EOLS:
2269 msg = "EOL while scanning string literal";
2270 break;
2271 case E_INTR:
2272 if (!PyErr_Occurred())
2273 PyErr_SetNone(PyExc_KeyboardInterrupt);
2274 goto cleanup;
2275 case E_NOMEM:
2276 PyErr_NoMemory();
2277 goto cleanup;
2278 case E_EOF:
2279 msg = "unexpected EOF while parsing";
2280 break;
2281 case E_TABSPACE:
2282 errtype = PyExc_TabError;
2283 msg = "inconsistent use of tabs and spaces in indentation";
2284 break;
2285 case E_OVERFLOW:
2286 msg = "expression too long";
2287 break;
2288 case E_DEDENT:
2289 errtype = PyExc_IndentationError;
2290 msg = "unindent does not match any outer indentation level";
2291 break;
2292 case E_TOODEEP:
2293 errtype = PyExc_IndentationError;
2294 msg = "too many levels of indentation";
2295 break;
2296 case E_DECODE: {
2297 PyObject *type, *value, *tb;
2298 PyErr_Fetch(&type, &value, &tb);
2299 msg = "unknown decode error";
2300 if (value != NULL)
2301 msg_obj = PyObject_Str(value);
2302 Py_XDECREF(type);
2303 Py_XDECREF(value);
2304 Py_XDECREF(tb);
2305 break;
2306 }
2307 case E_LINECONT:
2308 msg = "unexpected character after line continuation character";
2309 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002310
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002311 case E_IDENTIFIER:
2312 msg = "invalid character in identifier";
2313 break;
Meador Ingefa21bf02012-01-19 01:08:41 -06002314 case E_BADSINGLE:
2315 msg = "multiple statements found while compiling a single statement";
2316 break;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002317 default:
2318 fprintf(stderr, "error=%d\n", err->error);
2319 msg = "unknown parsing error";
2320 break;
2321 }
2322 /* err->text may not be UTF-8 in case of decoding errors.
2323 Explicitly convert to an object. */
2324 if (!err->text) {
2325 errtext = Py_None;
2326 Py_INCREF(Py_None);
2327 } else {
2328 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
2329 "replace");
2330 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002331 v = Py_BuildValue("(OiiN)", err->filename,
2332 err->lineno, err->offset, errtext);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002333 if (v != NULL) {
2334 if (msg_obj)
2335 w = Py_BuildValue("(OO)", msg_obj, v);
2336 else
2337 w = Py_BuildValue("(sO)", msg, v);
2338 } else
2339 w = NULL;
2340 Py_XDECREF(v);
2341 PyErr_SetObject(errtype, w);
2342 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002343cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002344 Py_XDECREF(msg_obj);
2345 if (err->text != NULL) {
2346 PyObject_FREE(err->text);
2347 err->text = NULL;
2348 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002349}
2350
2351/* Print fatal error message and abort */
2352
2353void
Tim Peters7c321a82002-07-09 02:57:01 +00002354Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002355{
Victor Stinner024e37a2011-03-31 01:31:06 +02002356 const int fd = fileno(stderr);
2357 PyThreadState *tstate;
2358
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002359 fprintf(stderr, "Fatal Python error: %s\n", msg);
2360 fflush(stderr); /* it helps in Windows debug build */
2361 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002362 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002363 }
Victor Stinner024e37a2011-03-31 01:31:06 +02002364 else {
2365 tstate = _Py_atomic_load_relaxed(&_PyThreadState_Current);
2366 if (tstate != NULL) {
2367 fputc('\n', stderr);
2368 fflush(stderr);
Victor Stinner7bba62f2011-05-07 12:43:00 +02002369 _Py_DumpTracebackThreads(fd, tstate->interp, tstate);
Victor Stinner024e37a2011-03-31 01:31:06 +02002370 }
Victor Stinnerd727e232011-04-01 12:13:55 +02002371 _PyFaulthandler_Fini();
Victor Stinner024e37a2011-03-31 01:31:06 +02002372 }
2373
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002374#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002375 {
2376 size_t len = strlen(msg);
2377 WCHAR* buffer;
2378 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002379
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002380 /* Convert the message to wchar_t. This uses a simple one-to-one
2381 conversion, assuming that the this error message actually uses ASCII
2382 only. If this ceases to be true, we will have to convert. */
2383 buffer = alloca( (len+1) * (sizeof *buffer));
2384 for( i=0; i<=len; ++i)
2385 buffer[i] = msg[i];
2386 OutputDebugStringW(L"Fatal Python error: ");
2387 OutputDebugStringW(buffer);
2388 OutputDebugStringW(L"\n");
2389 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002390#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002391 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002392#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002393#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002394 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002395}
2396
2397/* Clean up and exit */
2398
Guido van Rossuma110aa61994-08-29 12:50:44 +00002399#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002400#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002401#endif
2402
Collin Winter670e6922007-03-21 02:57:17 +00002403static void (*pyexitfunc)(void) = NULL;
2404/* For the atexit module. */
2405void _Py_PyAtExit(void (*func)(void))
2406{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002407 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002408}
2409
2410static void
2411call_py_exitfuncs(void)
2412{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002413 if (pyexitfunc == NULL)
2414 return;
Collin Winter670e6922007-03-21 02:57:17 +00002415
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002416 (*pyexitfunc)();
2417 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002418}
2419
Antoine Pitrou011bd622009-10-20 21:52:47 +00002420/* Wait until threading._shutdown completes, provided
2421 the threading module was imported in the first place.
2422 The shutdown routine will wait until all non-daemon
2423 "threading" threads have completed. */
2424static void
2425wait_for_thread_shutdown(void)
2426{
2427#ifdef WITH_THREAD
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002428 _Py_IDENTIFIER(_shutdown);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002429 PyObject *result;
2430 PyThreadState *tstate = PyThreadState_GET();
2431 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2432 "threading");
2433 if (threading == NULL) {
2434 /* threading not imported */
2435 PyErr_Clear();
2436 return;
2437 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002438 result = _PyObject_CallMethodId(threading, &PyId__shutdown, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002439 if (result == NULL) {
2440 PyErr_WriteUnraisable(threading);
2441 }
2442 else {
2443 Py_DECREF(result);
2444 }
2445 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002446#endif
2447}
2448
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002449#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002450static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002451static int nexitfuncs = 0;
2452
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002453int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002454{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002455 if (nexitfuncs >= NEXITFUNCS)
2456 return -1;
2457 exitfuncs[nexitfuncs++] = func;
2458 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002459}
2460
Guido van Rossumcc283f51997-08-05 02:22:03 +00002461static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002462call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002463{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002464 while (nexitfuncs > 0)
2465 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002466
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002467 fflush(stdout);
2468 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002469}
2470
2471void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002472Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002473{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002474 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002475
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002476 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002477}
2478
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002479static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002480initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002481{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002482#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002483 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002484#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002485#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002486 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002487#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002488#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002489 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002490#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002491 PyOS_InitInterrupts(); /* May imply initsignal() */
Victor Stinnerd786ad52013-07-21 13:25:51 +02002492 if (PyErr_Occurred()) {
2493 Py_FatalError("Py_Initialize: can't import signal");
2494 }
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002495}
2496
Guido van Rossum7433b121997-02-14 19:45:36 +00002497
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002498/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2499 *
2500 * All of the code in this function must only use async-signal-safe functions,
2501 * listed at `man 7 signal` or
2502 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2503 */
2504void
2505_Py_RestoreSignals(void)
2506{
2507#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002508 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002509#endif
2510#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002511 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002512#endif
2513#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002514 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002515#endif
2516}
2517
2518
Guido van Rossum7433b121997-02-14 19:45:36 +00002519/*
2520 * The file descriptor fd is considered ``interactive'' if either
2521 * a) isatty(fd) is TRUE, or
2522 * b) the -i flag was given, and the filename associated with
2523 * the descriptor is NULL or "<stdin>" or "???".
2524 */
2525int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002526Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002527{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002528 if (isatty((int)fileno(fp)))
2529 return 1;
2530 if (!Py_InteractiveFlag)
2531 return 0;
2532 return (filename == NULL) ||
2533 (strcmp(filename, "<stdin>") == 0) ||
2534 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002535}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002536
2537
Tim Petersd08e3822003-04-17 15:24:21 +00002538#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002539#if defined(WIN32) && defined(_MSC_VER)
2540
2541/* Stack checking for Microsoft C */
2542
2543#include <malloc.h>
2544#include <excpt.h>
2545
Fred Drakee8de31c2000-08-31 05:38:39 +00002546/*
2547 * Return non-zero when we run out of memory on the stack; zero otherwise.
2548 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002549int
Fred Drake399739f2000-08-31 05:52:44 +00002550PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002551{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002552 __try {
2553 /* alloca throws a stack overflow exception if there's
2554 not enough space left on the stack */
2555 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2556 return 0;
2557 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2558 EXCEPTION_EXECUTE_HANDLER :
2559 EXCEPTION_CONTINUE_SEARCH) {
2560 int errcode = _resetstkoflw();
2561 if (errcode == 0)
2562 {
2563 Py_FatalError("Could not reset the stack!");
2564 }
2565 }
2566 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002567}
2568
2569#endif /* WIN32 && _MSC_VER */
2570
2571/* Alternate implementations can be added here... */
2572
2573#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002574
2575
2576/* Wrappers around sigaction() or signal(). */
2577
2578PyOS_sighandler_t
2579PyOS_getsig(int sig)
2580{
2581#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002582 struct sigaction context;
2583 if (sigaction(sig, NULL, &context) == -1)
2584 return SIG_ERR;
2585 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002586#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002587 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002588/* Special signal handling for the secure CRT in Visual Studio 2005 */
2589#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002590 switch (sig) {
2591 /* Only these signals are valid */
2592 case SIGINT:
2593 case SIGILL:
2594 case SIGFPE:
2595 case SIGSEGV:
2596 case SIGTERM:
2597 case SIGBREAK:
2598 case SIGABRT:
2599 break;
2600 /* Don't call signal() with other values or it will assert */
2601 default:
2602 return SIG_ERR;
2603 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002604#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002605 handler = signal(sig, SIG_IGN);
2606 if (handler != SIG_ERR)
2607 signal(sig, handler);
2608 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002609#endif
2610}
2611
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002612/*
2613 * All of the code in this function must only use async-signal-safe functions,
2614 * listed at `man 7 signal` or
2615 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2616 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002617PyOS_sighandler_t
2618PyOS_setsig(int sig, PyOS_sighandler_t handler)
2619{
2620#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002621 /* Some code in Modules/signalmodule.c depends on sigaction() being
2622 * used here if HAVE_SIGACTION is defined. Fix that if this code
2623 * changes to invalidate that assumption.
2624 */
2625 struct sigaction context, ocontext;
2626 context.sa_handler = handler;
2627 sigemptyset(&context.sa_mask);
2628 context.sa_flags = 0;
2629 if (sigaction(sig, &context, &ocontext) == -1)
2630 return SIG_ERR;
2631 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002632#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002633 PyOS_sighandler_t oldhandler;
2634 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002635#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002636 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002637#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002638 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002639#endif
2640}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002641
2642/* Deprecated C API functions still provided for binary compatiblity */
2643
2644#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002645PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002646PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2647{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002648 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002649}
2650
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002651#undef PyParser_SimpleParseString
2652PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002653PyParser_SimpleParseString(const char *str, int start)
2654{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002655 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002656}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002657
2658#undef PyRun_AnyFile
2659PyAPI_FUNC(int)
2660PyRun_AnyFile(FILE *fp, const char *name)
2661{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002662 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002663}
2664
2665#undef PyRun_AnyFileEx
2666PyAPI_FUNC(int)
2667PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2668{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002669 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002670}
2671
2672#undef PyRun_AnyFileFlags
2673PyAPI_FUNC(int)
2674PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2675{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002676 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002677}
2678
2679#undef PyRun_File
2680PyAPI_FUNC(PyObject *)
2681PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2682{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002683 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002684}
2685
2686#undef PyRun_FileEx
2687PyAPI_FUNC(PyObject *)
2688PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2689{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002690 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002691}
2692
2693#undef PyRun_FileFlags
2694PyAPI_FUNC(PyObject *)
2695PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002696 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002697{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002698 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002699}
2700
2701#undef PyRun_SimpleFile
2702PyAPI_FUNC(int)
2703PyRun_SimpleFile(FILE *f, const char *p)
2704{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002705 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002706}
2707
2708#undef PyRun_SimpleFileEx
2709PyAPI_FUNC(int)
2710PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2711{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002712 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002713}
2714
2715
2716#undef PyRun_String
2717PyAPI_FUNC(PyObject *)
2718PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2719{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002720 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002721}
2722
2723#undef PyRun_SimpleString
2724PyAPI_FUNC(int)
2725PyRun_SimpleString(const char *s)
2726{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002727 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002728}
2729
2730#undef Py_CompileString
2731PyAPI_FUNC(PyObject *)
2732Py_CompileString(const char *str, const char *p, int s)
2733{
Georg Brandl8334fd92010-12-04 10:26:46 +00002734 return Py_CompileStringExFlags(str, p, s, NULL, -1);
2735}
2736
2737#undef Py_CompileStringFlags
2738PyAPI_FUNC(PyObject *)
2739Py_CompileStringFlags(const char *str, const char *p, int s,
2740 PyCompilerFlags *flags)
2741{
2742 return Py_CompileStringExFlags(str, p, s, flags, -1);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002743}
2744
2745#undef PyRun_InteractiveOne
2746PyAPI_FUNC(int)
2747PyRun_InteractiveOne(FILE *f, const char *p)
2748{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002749 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002750}
2751
2752#undef PyRun_InteractiveLoop
2753PyAPI_FUNC(int)
2754PyRun_InteractiveLoop(FILE *f, const char *p)
2755{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002756 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002757}
2758
2759#ifdef __cplusplus
2760}
2761#endif