blob: edf9b6b54269e4973de226907aab9efce7158161 [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) {
921 PyErr_Print();
922 Py_Finalize();
923 exit(1);
924 }
925 else {
926 Py_DECREF(m);
927 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000928}
929
Antoine Pitrou05608432009-01-09 18:53:14 +0000930static PyObject*
931create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000932 int fd, int write_mode, char* name,
933 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +0000934{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000935 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
936 const char* mode;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +0000937 const char* newline;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000938 PyObject *line_buffering;
939 int buffering, isatty;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200940 _Py_IDENTIFIER(open);
941 _Py_IDENTIFIER(isatty);
942 _Py_IDENTIFIER(TextIOWrapper);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200943 _Py_IDENTIFIER(name);
944 _Py_IDENTIFIER(mode);
Antoine Pitrou05608432009-01-09 18:53:14 +0000945
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000946 /* stdin is always opened in buffered mode, first because it shouldn't
947 make a difference in common use cases, second because TextIOWrapper
948 depends on the presence of a read1() method which only exists on
949 buffered streams.
950 */
951 if (Py_UnbufferedStdioFlag && write_mode)
952 buffering = 0;
953 else
954 buffering = -1;
955 if (write_mode)
956 mode = "wb";
957 else
958 mode = "rb";
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200959 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
960 fd, mode, buffering,
961 Py_None, Py_None, Py_None, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000962 if (buf == NULL)
963 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000964
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000965 if (buffering) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200966 _Py_IDENTIFIER(raw);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200967 raw = _PyObject_GetAttrId(buf, &PyId_raw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000968 if (raw == NULL)
969 goto error;
970 }
971 else {
972 raw = buf;
973 Py_INCREF(raw);
974 }
Antoine Pitrou05608432009-01-09 18:53:14 +0000975
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000976 text = PyUnicode_FromString(name);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200977 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000978 goto error;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200979 res = _PyObject_CallMethodId(raw, &PyId_isatty, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000980 if (res == NULL)
981 goto error;
982 isatty = PyObject_IsTrue(res);
983 Py_DECREF(res);
984 if (isatty == -1)
985 goto error;
986 if (isatty || Py_UnbufferedStdioFlag)
987 line_buffering = Py_True;
988 else
989 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +0000990
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000991 Py_CLEAR(raw);
992 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +0000993
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +0000994#ifdef MS_WINDOWS
Victor Stinner7b3f0fa2012-08-04 01:28:00 +0200995 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
996 newlines to "\n".
997 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
998 newline = NULL;
999#else
1000 /* sys.stdin: split lines at "\n".
1001 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1002 newline = "\n";
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001003#endif
1004
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001005 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssO",
1006 buf, encoding, errors,
1007 newline, line_buffering);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001008 Py_CLEAR(buf);
1009 if (stream == NULL)
1010 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +00001011
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001012 if (write_mode)
1013 mode = "w";
1014 else
1015 mode = "r";
1016 text = PyUnicode_FromString(mode);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001017 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001018 goto error;
1019 Py_CLEAR(text);
1020 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +00001021
1022error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001023 Py_XDECREF(buf);
1024 Py_XDECREF(stream);
1025 Py_XDECREF(text);
1026 Py_XDECREF(raw);
1027 return NULL;
Antoine Pitrou05608432009-01-09 18:53:14 +00001028}
1029
Antoine Pitrou11942a52011-11-28 19:08:36 +01001030static int
1031is_valid_fd(int fd)
1032{
1033 int dummy_fd;
1034 if (fd < 0 || !_PyVerify_fd(fd))
1035 return 0;
1036 dummy_fd = dup(fd);
1037 if (dummy_fd < 0)
1038 return 0;
1039 close(dummy_fd);
1040 return 1;
1041}
1042
Georg Brandl1a3284e2007-12-02 09:40:06 +00001043/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001044static int
1045initstdio(void)
1046{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001047 PyObject *iomod = NULL, *wrapper;
1048 PyObject *bimod = NULL;
1049 PyObject *m;
1050 PyObject *std = NULL;
1051 int status = 0, fd;
1052 PyObject * encoding_attr;
1053 char *encoding = NULL, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001054
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001055 /* Hack to avoid a nasty recursion issue when Python is invoked
1056 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1057 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1058 goto error;
1059 }
1060 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001061
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001062 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1063 goto error;
1064 }
1065 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001066
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001067 if (!(bimod = PyImport_ImportModule("builtins"))) {
1068 goto error;
1069 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001070
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001071 if (!(iomod = PyImport_ImportModule("io"))) {
1072 goto error;
1073 }
1074 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1075 goto error;
1076 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001077
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001078 /* Set builtins.open */
1079 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001080 Py_DECREF(wrapper);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001081 goto error;
1082 }
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001083 Py_DECREF(wrapper);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001084
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001085 encoding = Py_GETENV("PYTHONIOENCODING");
1086 errors = NULL;
1087 if (encoding) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001088 encoding = _PyMem_Strdup(encoding);
1089 if (encoding == NULL) {
1090 PyErr_NoMemory();
1091 goto error;
1092 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001093 errors = strchr(encoding, ':');
1094 if (errors) {
1095 *errors = '\0';
1096 errors++;
1097 }
1098 }
Martin v. Löwis0f599892008-06-02 11:13:03 +00001099
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001100 /* Set sys.stdin */
1101 fd = fileno(stdin);
1102 /* Under some conditions stdin, stdout and stderr may not be connected
1103 * and fileno() may point to an invalid file descriptor. For example
1104 * GUI apps don't have valid standard streams by default.
1105 */
Antoine Pitrou11942a52011-11-28 19:08:36 +01001106 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001107 std = Py_None;
1108 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001109 }
1110 else {
1111 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1112 if (std == NULL)
1113 goto error;
1114 } /* if (fd < 0) */
1115 PySys_SetObject("__stdin__", std);
1116 PySys_SetObject("stdin", std);
1117 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001118
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001119 /* Set sys.stdout */
1120 fd = fileno(stdout);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001121 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001122 std = Py_None;
1123 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001124 }
1125 else {
1126 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1127 if (std == NULL)
1128 goto error;
1129 } /* if (fd < 0) */
1130 PySys_SetObject("__stdout__", std);
1131 PySys_SetObject("stdout", std);
1132 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001133
Guido van Rossum98297ee2007-11-06 21:34:58 +00001134#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001135 /* Set sys.stderr, replaces the preliminary stderr */
1136 fd = fileno(stderr);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001137 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001138 std = Py_None;
1139 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001140 }
1141 else {
1142 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1143 if (std == NULL)
1144 goto error;
1145 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +00001146
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001147 /* Same as hack above, pre-import stderr's codec to avoid recursion
1148 when import.c tries to write to stderr in verbose mode. */
1149 encoding_attr = PyObject_GetAttrString(std, "encoding");
1150 if (encoding_attr != NULL) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001151 const char * std_encoding;
1152 std_encoding = _PyUnicode_AsString(encoding_attr);
1153 if (std_encoding != NULL) {
1154 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
Antoine Pitrou2fabfac2012-01-18 15:14:46 +01001155 Py_XDECREF(codec_info);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001156 }
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +00001157 Py_DECREF(encoding_attr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001158 }
1159 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +00001160
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001161 PySys_SetObject("__stderr__", std);
1162 PySys_SetObject("stderr", std);
1163 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001164#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001165
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001166 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001167 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001168 status = -1;
1169 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001170
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001171 PyMem_Free(encoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001172 Py_XDECREF(bimod);
1173 Py_XDECREF(iomod);
1174 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001175}
1176
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001177/* Parse input from a file and execute it */
1178
1179int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001180PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001181 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001182{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001183 if (filename == NULL)
1184 filename = "???";
1185 if (Py_FdIsInteractive(fp, filename)) {
1186 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1187 if (closeit)
1188 fclose(fp);
1189 return err;
1190 }
1191 else
1192 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001193}
1194
1195int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001196PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001197{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001198 PyObject *v;
1199 int ret;
1200 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001201
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001202 if (flags == NULL) {
1203 flags = &local_flags;
1204 local_flags.cf_flags = 0;
1205 }
1206 v = PySys_GetObject("ps1");
1207 if (v == NULL) {
1208 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
1209 Py_XDECREF(v);
1210 }
1211 v = PySys_GetObject("ps2");
1212 if (v == NULL) {
1213 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
1214 Py_XDECREF(v);
1215 }
1216 for (;;) {
1217 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
1218 PRINT_TOTAL_REFS();
1219 if (ret == E_EOF)
1220 return 0;
1221 /*
1222 if (ret == E_NOMEM)
1223 return -1;
1224 */
1225 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001226}
1227
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001228/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001229static int PARSER_FLAGS(PyCompilerFlags *flags)
1230{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001231 int parser_flags = 0;
1232 if (!flags)
1233 return 0;
1234 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1235 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1236 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1237 parser_flags |= PyPARSE_IGNORE_COOKIE;
1238 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1239 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1240 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001241}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001242
Thomas Wouters89f507f2006-12-13 04:49:30 +00001243#if 0
1244/* Keep an example of flags with future keyword support. */
1245#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001246 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1247 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1248 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1249 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001250#endif
1251
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001252int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001253PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001254{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001255 PyObject *m, *d, *v, *w, *oenc = NULL;
1256 mod_ty mod;
1257 PyArena *arena;
1258 char *ps1 = "", *ps2 = "", *enc = NULL;
1259 int errcode = 0;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001260 _Py_IDENTIFIER(encoding);
Tim Petersfe2127d2001-07-16 05:37:24 +00001261
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001262 if (fp == stdin) {
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001263 /* Fetch encoding from sys.stdin if possible. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001264 v = PySys_GetObject("stdin");
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001265 if (v && v != Py_None) {
1266 oenc = _PyObject_GetAttrId(v, &PyId_encoding);
1267 if (oenc)
1268 enc = _PyUnicode_AsString(oenc);
1269 if (!enc)
1270 PyErr_Clear();
1271 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001272 }
1273 v = PySys_GetObject("ps1");
1274 if (v != NULL) {
1275 v = PyObject_Str(v);
1276 if (v == NULL)
1277 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001278 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001279 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001280 if (ps1 == NULL) {
1281 PyErr_Clear();
1282 ps1 = "";
1283 }
1284 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001285 }
1286 w = PySys_GetObject("ps2");
1287 if (w != NULL) {
1288 w = PyObject_Str(w);
1289 if (w == NULL)
1290 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001291 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001292 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001293 if (ps2 == NULL) {
1294 PyErr_Clear();
1295 ps2 = "";
1296 }
1297 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001298 }
1299 arena = PyArena_New();
1300 if (arena == NULL) {
1301 Py_XDECREF(v);
1302 Py_XDECREF(w);
1303 Py_XDECREF(oenc);
1304 return -1;
1305 }
1306 mod = PyParser_ASTFromFile(fp, filename, enc,
1307 Py_single_input, ps1, ps2,
1308 flags, &errcode, arena);
1309 Py_XDECREF(v);
1310 Py_XDECREF(w);
1311 Py_XDECREF(oenc);
1312 if (mod == NULL) {
1313 PyArena_Free(arena);
1314 if (errcode == E_EOF) {
1315 PyErr_Clear();
1316 return E_EOF;
1317 }
1318 PyErr_Print();
1319 return -1;
1320 }
1321 m = PyImport_AddModule("__main__");
1322 if (m == NULL) {
1323 PyArena_Free(arena);
1324 return -1;
1325 }
1326 d = PyModule_GetDict(m);
1327 v = run_mod(mod, filename, d, d, flags, arena);
1328 PyArena_Free(arena);
1329 flush_io();
1330 if (v == NULL) {
1331 PyErr_Print();
1332 return -1;
1333 }
1334 Py_DECREF(v);
1335 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001336}
1337
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001338/* Check whether a file maybe a pyc file: Look at the extension,
1339 the file type, and, if we may close it, at the first few bytes. */
1340
1341static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001342maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001343{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001344 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1345 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001346
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001347 /* Only look into the file if we are allowed to close it, since
1348 it then should also be seekable. */
1349 if (closeit) {
1350 /* Read only two bytes of the magic. If the file was opened in
1351 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1352 be read as they are on disk. */
1353 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1354 unsigned char buf[2];
1355 /* Mess: In case of -x, the stream is NOT at its start now,
1356 and ungetc() was used to push back the first newline,
1357 which makes the current stream position formally undefined,
1358 and a x-platform nightmare.
1359 Unfortunately, we have no direct way to know whether -x
1360 was specified. So we use a terrible hack: if the current
1361 stream position is not 0, we assume -x was specified, and
1362 give up. Bug 132850 on SourceForge spells out the
1363 hopelessness of trying anything else (fseek and ftell
1364 don't work predictably x-platform for text-mode files).
1365 */
1366 int ispyc = 0;
1367 if (ftell(fp) == 0) {
1368 if (fread(buf, 1, 2, fp) == 2 &&
1369 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1370 ispyc = 1;
1371 rewind(fp);
1372 }
1373 return ispyc;
1374 }
1375 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001376}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001377
Guido van Rossum0df002c2000-08-27 19:21:52 +00001378int
Nick Coghlanceda83c2012-07-15 23:18:08 +10001379static set_main_loader(PyObject *d, const char *filename, const char *loader_name)
Nick Coghlan85e729e2012-07-15 18:09:52 +10001380{
1381 PyInterpreterState *interp;
1382 PyThreadState *tstate;
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001383 PyObject *filename_obj, *loader_type, *loader;
Nick Coghlanb7a58942012-07-15 23:21:08 +10001384 int result = 0;
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001385
1386 filename_obj = PyUnicode_DecodeFSDefault(filename);
1387 if (filename_obj == NULL)
1388 return -1;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001389 /* Get current thread state and interpreter pointer */
1390 tstate = PyThreadState_GET();
1391 interp = tstate->interp;
Nick Coghlan3f94cbf2012-07-15 19:10:39 +10001392 loader_type = PyObject_GetAttrString(interp->importlib, loader_name);
1393 if (loader_type == NULL) {
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001394 Py_DECREF(filename_obj);
Nick Coghlan3f94cbf2012-07-15 19:10:39 +10001395 return -1;
1396 }
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001397 loader = PyObject_CallFunction(loader_type, "sN", "__main__", filename_obj);
Nick Coghlanb7a58942012-07-15 23:21:08 +10001398 Py_DECREF(loader_type);
1399 if (loader == NULL) {
Nick Coghlan85e729e2012-07-15 18:09:52 +10001400 return -1;
1401 }
Nick Coghlanb7a58942012-07-15 23:21:08 +10001402 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
1403 result = -1;
1404 }
Nick Coghlan85e729e2012-07-15 18:09:52 +10001405 Py_DECREF(loader);
Nick Coghlanb7a58942012-07-15 23:21:08 +10001406 return result;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001407}
1408
1409int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001410PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001411 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001412{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001413 PyObject *m, *d, *v;
1414 const char *ext;
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001415 int set_file_name = 0, ret = -1;
Victor Stinner0fcab4a2011-01-04 12:59:15 +00001416 size_t len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001417
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001418 m = PyImport_AddModule("__main__");
1419 if (m == NULL)
1420 return -1;
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001421 Py_INCREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001422 d = PyModule_GetDict(m);
1423 if (PyDict_GetItemString(d, "__file__") == NULL) {
1424 PyObject *f;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001425 f = PyUnicode_DecodeFSDefault(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001426 if (f == NULL)
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001427 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001428 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1429 Py_DECREF(f);
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001430 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001431 }
Barry Warsaw916048d2011-09-20 14:45:44 -04001432 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0) {
1433 Py_DECREF(f);
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001434 goto done;
Barry Warsaw916048d2011-09-20 14:45:44 -04001435 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001436 set_file_name = 1;
1437 Py_DECREF(f);
1438 }
1439 len = strlen(filename);
1440 ext = filename + len - (len > 4 ? 4 : 0);
1441 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Christian Heimes04ac4c12012-09-11 15:47:28 +02001442 FILE *pyc_fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001443 /* Try to run a pyc file. First, re-open in binary */
1444 if (closeit)
1445 fclose(fp);
Christian Heimes04ac4c12012-09-11 15:47:28 +02001446 if ((pyc_fp = fopen(filename, "rb")) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001447 fprintf(stderr, "python: Can't reopen .pyc file\n");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001448 goto done;
1449 }
1450 /* Turn on optimization if a .pyo file is given */
1451 if (strcmp(ext, ".pyo") == 0)
1452 Py_OptimizeFlag = 1;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001453
1454 if (set_main_loader(d, filename, "SourcelessFileLoader") < 0) {
1455 fprintf(stderr, "python: failed to set __main__.__loader__\n");
1456 ret = -1;
Christian Heimes04ac4c12012-09-11 15:47:28 +02001457 fclose(pyc_fp);
Nick Coghlan85e729e2012-07-15 18:09:52 +10001458 goto done;
1459 }
Christian Heimes04ac4c12012-09-11 15:47:28 +02001460 v = run_pyc_file(pyc_fp, filename, d, d, flags);
1461 fclose(pyc_fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001462 } else {
Nick Coghlan85e729e2012-07-15 18:09:52 +10001463 /* When running from stdin, leave __main__.__loader__ alone */
1464 if (strcmp(filename, "<stdin>") != 0 &&
1465 set_main_loader(d, filename, "SourceFileLoader") < 0) {
1466 fprintf(stderr, "python: failed to set __main__.__loader__\n");
1467 ret = -1;
1468 goto done;
1469 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001470 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1471 closeit, flags);
1472 }
1473 flush_io();
1474 if (v == NULL) {
1475 PyErr_Print();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001476 goto done;
1477 }
1478 Py_DECREF(v);
1479 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001480 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001481 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1482 PyErr_Clear();
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001483 Py_DECREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001484 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001485}
1486
1487int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001488PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001489{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001490 PyObject *m, *d, *v;
1491 m = PyImport_AddModule("__main__");
1492 if (m == NULL)
1493 return -1;
1494 d = PyModule_GetDict(m);
1495 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1496 if (v == NULL) {
1497 PyErr_Print();
1498 return -1;
1499 }
1500 Py_DECREF(v);
1501 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001502}
1503
Barry Warsaw035574d1997-08-29 22:07:17 +00001504static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001505parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001506 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001507{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001508 long hold;
1509 PyObject *v;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001510 _Py_IDENTIFIER(msg);
1511 _Py_IDENTIFIER(filename);
1512 _Py_IDENTIFIER(lineno);
1513 _Py_IDENTIFIER(offset);
1514 _Py_IDENTIFIER(text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001515
Benjamin Peterson80d50422012-04-03 00:30:38 -04001516 *message = NULL;
1517
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001518 /* new style errors. `err' is an instance */
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001519 *message = _PyObject_GetAttrId(err, &PyId_msg);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001520 if (!*message)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001521 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001522
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001523 v = _PyObject_GetAttrId(err, &PyId_filename);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001524 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001525 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001526 if (v == Py_None) {
1527 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001528 *filename = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001529 }
1530 else {
1531 *filename = _PyUnicode_AsString(v);
1532 Py_DECREF(v);
1533 if (!*filename)
1534 goto finally;
1535 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001536
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001537 v = _PyObject_GetAttrId(err, &PyId_lineno);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001538 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001539 goto finally;
1540 hold = PyLong_AsLong(v);
1541 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001542 if (hold < 0 && PyErr_Occurred())
1543 goto finally;
1544 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001545
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001546 v = _PyObject_GetAttrId(err, &PyId_offset);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001547 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001548 goto finally;
1549 if (v == Py_None) {
1550 *offset = -1;
1551 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001552 } else {
1553 hold = PyLong_AsLong(v);
1554 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001555 if (hold < 0 && PyErr_Occurred())
1556 goto finally;
1557 *offset = (int)hold;
1558 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001559
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001560 v = _PyObject_GetAttrId(err, &PyId_text);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001561 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001562 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001563 if (v == Py_None) {
1564 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001565 *text = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001566 }
1567 else {
1568 *text = _PyUnicode_AsString(v);
1569 Py_DECREF(v);
1570 if (!*text)
1571 goto finally;
1572 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001573 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001574
1575finally:
Benjamin Peterson80d50422012-04-03 00:30:38 -04001576 Py_XDECREF(*message);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001577 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001578}
1579
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001580void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001581PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001582{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001583 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001584}
1585
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001586static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001587print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001588{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001589 char *nl;
1590 if (offset >= 0) {
Benjamin Petersona95e9772010-10-29 03:28:14 +00001591 if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n')
1592 offset--;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001593 for (;;) {
1594 nl = strchr(text, '\n');
1595 if (nl == NULL || nl-text >= offset)
1596 break;
1597 offset -= (int)(nl+1-text);
1598 text = nl+1;
1599 }
1600 while (*text == ' ' || *text == '\t') {
1601 text++;
1602 offset--;
1603 }
1604 }
1605 PyFile_WriteString(" ", f);
1606 PyFile_WriteString(text, f);
1607 if (*text == '\0' || text[strlen(text)-1] != '\n')
1608 PyFile_WriteString("\n", f);
1609 if (offset == -1)
1610 return;
1611 PyFile_WriteString(" ", f);
Benjamin Petersona95e9772010-10-29 03:28:14 +00001612 while (--offset > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001613 PyFile_WriteString(" ", f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001614 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001615}
1616
Guido van Rossum66e8e862001-03-23 17:54:43 +00001617static void
1618handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001619{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001620 PyObject *exception, *value, *tb;
1621 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001622
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001623 if (Py_InspectFlag)
1624 /* Don't exit if -i flag was given. This flag is set to 0
1625 * when entering interactive mode for inspecting. */
1626 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001627
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001628 PyErr_Fetch(&exception, &value, &tb);
1629 fflush(stdout);
1630 if (value == NULL || value == Py_None)
1631 goto done;
1632 if (PyExceptionInstance_Check(value)) {
1633 /* The error code should be in the `code' attribute. */
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001634 _Py_IDENTIFIER(code);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001635 PyObject *code = _PyObject_GetAttrId(value, &PyId_code);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001636 if (code) {
1637 Py_DECREF(value);
1638 value = code;
1639 if (value == Py_None)
1640 goto done;
1641 }
1642 /* If we failed to dig out the 'code' attribute,
1643 just let the else clause below print the error. */
1644 }
1645 if (PyLong_Check(value))
1646 exitcode = (int)PyLong_AsLong(value);
1647 else {
Victor Stinnere9fb3192010-05-17 08:58:51 +00001648 PyObject *sys_stderr = PySys_GetObject("stderr");
Victor Stinner7126dbc2010-05-21 23:45:42 +00001649 if (sys_stderr != NULL && sys_stderr != Py_None) {
1650 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1651 } else {
1652 PyObject_Print(value, stderr, Py_PRINT_RAW);
1653 fflush(stderr);
1654 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001655 PySys_WriteStderr("\n");
1656 exitcode = 1;
1657 }
Tim Peterscf615b52003-04-19 18:47:02 +00001658 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001659 /* Restore and clear the exception info, in order to properly decref
1660 * the exception, value, and traceback. If we just exit instead,
1661 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1662 * some finalizers from running.
1663 */
1664 PyErr_Restore(exception, value, tb);
1665 PyErr_Clear();
1666 Py_Exit(exitcode);
1667 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001668}
1669
1670void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001671PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001672{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001673 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001674
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001675 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1676 handle_system_exit();
1677 }
1678 PyErr_Fetch(&exception, &v, &tb);
1679 if (exception == NULL)
1680 return;
1681 PyErr_NormalizeException(&exception, &v, &tb);
1682 if (tb == NULL) {
1683 tb = Py_None;
1684 Py_INCREF(tb);
1685 }
1686 PyException_SetTraceback(v, tb);
1687 if (exception == NULL)
1688 return;
1689 /* Now we know v != NULL too */
1690 if (set_sys_last_vars) {
1691 PySys_SetObject("last_type", exception);
1692 PySys_SetObject("last_value", v);
1693 PySys_SetObject("last_traceback", tb);
1694 }
1695 hook = PySys_GetObject("excepthook");
1696 if (hook) {
1697 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1698 PyObject *result = PyEval_CallObject(hook, args);
1699 if (result == NULL) {
1700 PyObject *exception2, *v2, *tb2;
1701 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1702 handle_system_exit();
1703 }
1704 PyErr_Fetch(&exception2, &v2, &tb2);
1705 PyErr_NormalizeException(&exception2, &v2, &tb2);
1706 /* It should not be possible for exception2 or v2
1707 to be NULL. However PyErr_Display() can't
1708 tolerate NULLs, so just be safe. */
1709 if (exception2 == NULL) {
1710 exception2 = Py_None;
1711 Py_INCREF(exception2);
1712 }
1713 if (v2 == NULL) {
1714 v2 = Py_None;
1715 Py_INCREF(v2);
1716 }
1717 fflush(stdout);
1718 PySys_WriteStderr("Error in sys.excepthook:\n");
1719 PyErr_Display(exception2, v2, tb2);
1720 PySys_WriteStderr("\nOriginal exception was:\n");
1721 PyErr_Display(exception, v, tb);
1722 Py_DECREF(exception2);
1723 Py_DECREF(v2);
1724 Py_XDECREF(tb2);
1725 }
1726 Py_XDECREF(result);
1727 Py_XDECREF(args);
1728 } else {
1729 PySys_WriteStderr("sys.excepthook is missing\n");
1730 PyErr_Display(exception, v, tb);
1731 }
1732 Py_XDECREF(exception);
1733 Py_XDECREF(v);
1734 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001735}
1736
Benjamin Petersone6528212008-07-15 15:32:09 +00001737static void
1738print_exception(PyObject *f, PyObject *value)
1739{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001740 int err = 0;
1741 PyObject *type, *tb;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001742 _Py_IDENTIFIER(print_file_and_line);
Benjamin Petersone6528212008-07-15 15:32:09 +00001743
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001744 if (!PyExceptionInstance_Check(value)) {
1745 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1746 PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1747 PyFile_WriteString(" found\n", f);
1748 return;
1749 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001750
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001751 Py_INCREF(value);
1752 fflush(stdout);
1753 type = (PyObject *) Py_TYPE(value);
1754 tb = PyException_GetTraceback(value);
1755 if (tb && tb != Py_None)
1756 err = PyTraceBack_Print(tb, f);
1757 if (err == 0 &&
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001758 _PyObject_HasAttrId(value, &PyId_print_file_and_line))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001759 {
1760 PyObject *message;
1761 const char *filename, *text;
1762 int lineno, offset;
1763 if (!parse_syntax_error(value, &message, &filename,
1764 &lineno, &offset, &text))
1765 PyErr_Clear();
1766 else {
1767 char buf[10];
1768 PyFile_WriteString(" File \"", f);
1769 if (filename == NULL)
1770 PyFile_WriteString("<string>", f);
1771 else
1772 PyFile_WriteString(filename, f);
1773 PyFile_WriteString("\", line ", f);
1774 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
1775 PyFile_WriteString(buf, f);
1776 PyFile_WriteString("\n", f);
1777 if (text != NULL)
1778 print_error_text(f, offset, text);
1779 Py_DECREF(value);
1780 value = message;
1781 /* Can't be bothered to check all those
1782 PyFile_WriteString() calls */
1783 if (PyErr_Occurred())
1784 err = -1;
1785 }
1786 }
1787 if (err) {
1788 /* Don't do anything else */
1789 }
1790 else {
1791 PyObject* moduleName;
1792 char* className;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001793 _Py_IDENTIFIER(__module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001794 assert(PyExceptionClass_Check(type));
1795 className = PyExceptionClass_Name(type);
1796 if (className != NULL) {
1797 char *dot = strrchr(className, '.');
1798 if (dot != NULL)
1799 className = dot+1;
1800 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001801
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001802 moduleName = _PyObject_GetAttrId(type, &PyId___module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001803 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1804 {
Victor Stinner13b21bd2011-05-26 14:25:13 +02001805 Py_XDECREF(moduleName);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001806 err = PyFile_WriteString("<unknown>", f);
1807 }
1808 else {
1809 char* modstr = _PyUnicode_AsString(moduleName);
1810 if (modstr && strcmp(modstr, "builtins"))
1811 {
1812 err = PyFile_WriteString(modstr, f);
1813 err += PyFile_WriteString(".", f);
1814 }
1815 Py_DECREF(moduleName);
1816 }
1817 if (err == 0) {
1818 if (className == NULL)
1819 err = PyFile_WriteString("<unknown>", f);
1820 else
1821 err = PyFile_WriteString(className, f);
1822 }
1823 }
1824 if (err == 0 && (value != Py_None)) {
1825 PyObject *s = PyObject_Str(value);
1826 /* only print colon if the str() of the
1827 object is not the empty string
1828 */
1829 if (s == NULL)
1830 err = -1;
1831 else if (!PyUnicode_Check(s) ||
Victor Stinnere251d6d2011-11-20 19:20:00 +01001832 PyUnicode_GetLength(s) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001833 err = PyFile_WriteString(": ", f);
1834 if (err == 0)
1835 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1836 Py_XDECREF(s);
1837 }
1838 /* try to write a newline in any case */
1839 err += PyFile_WriteString("\n", f);
1840 Py_XDECREF(tb);
1841 Py_DECREF(value);
1842 /* If an error happened here, don't show it.
1843 XXX This is wrong, but too many callers rely on this behavior. */
1844 if (err != 0)
1845 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001846}
1847
1848static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001849 "\nThe above exception was the direct cause "
1850 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001851
1852static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001853 "\nDuring handling of the above exception, "
1854 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001855
1856static void
1857print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
1858{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001859 int err = 0, res;
1860 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00001861
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001862 if (seen != NULL) {
1863 /* Exception chaining */
1864 if (PySet_Add(seen, value) == -1)
1865 PyErr_Clear();
1866 else if (PyExceptionInstance_Check(value)) {
1867 cause = PyException_GetCause(value);
1868 context = PyException_GetContext(value);
Benjamin Petersond5a1c442012-05-14 22:09:31 -07001869 if (cause) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001870 res = PySet_Contains(seen, cause);
1871 if (res == -1)
1872 PyErr_Clear();
1873 if (res == 0) {
1874 print_exception_recursive(
1875 f, cause, seen);
1876 err |= PyFile_WriteString(
1877 cause_message, f);
1878 }
1879 }
Benjamin Petersond5a1c442012-05-14 22:09:31 -07001880 else if (context &&
1881 !((PyBaseExceptionObject *)value)->suppress_context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001882 res = PySet_Contains(seen, context);
1883 if (res == -1)
1884 PyErr_Clear();
1885 if (res == 0) {
1886 print_exception_recursive(
1887 f, context, seen);
1888 err |= PyFile_WriteString(
1889 context_message, f);
1890 }
1891 }
1892 Py_XDECREF(context);
1893 Py_XDECREF(cause);
1894 }
1895 }
1896 print_exception(f, value);
1897 if (err != 0)
1898 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001899}
1900
Thomas Wouters477c8d52006-05-27 19:21:47 +00001901void
1902PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001903{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001904 PyObject *seen;
1905 PyObject *f = PySys_GetObject("stderr");
1906 if (f == Py_None) {
1907 /* pass */
1908 }
1909 else if (f == NULL) {
1910 _PyObject_Dump(value);
1911 fprintf(stderr, "lost sys.stderr\n");
1912 }
1913 else {
1914 /* We choose to ignore seen being possibly NULL, and report
1915 at least the main exception (it could be a MemoryError).
1916 */
1917 seen = PySet_New(NULL);
1918 if (seen == NULL)
1919 PyErr_Clear();
1920 print_exception_recursive(f, value, seen);
1921 Py_XDECREF(seen);
1922 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001923}
1924
Guido van Rossum82598051997-03-05 00:20:32 +00001925PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001926PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001927 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001928{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001929 PyObject *ret = NULL;
1930 mod_ty mod;
1931 PyArena *arena = PyArena_New();
1932 if (arena == NULL)
1933 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001934
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001935 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
1936 if (mod != NULL)
1937 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
1938 PyArena_Free(arena);
1939 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001940}
1941
1942PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001943PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001944 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001945{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001946 PyObject *ret;
1947 mod_ty mod;
1948 PyArena *arena = PyArena_New();
1949 if (arena == NULL)
1950 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001951
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001952 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
1953 flags, NULL, arena);
1954 if (closeit)
1955 fclose(fp);
1956 if (mod == NULL) {
1957 PyArena_Free(arena);
1958 return NULL;
1959 }
1960 ret = run_mod(mod, filename, globals, locals, flags, arena);
1961 PyArena_Free(arena);
1962 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001963}
1964
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001965static void
1966flush_io(void)
1967{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001968 PyObject *f, *r;
1969 PyObject *type, *value, *traceback;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001970 _Py_IDENTIFIER(flush);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001971
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001972 /* Save the current exception */
1973 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001974
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001975 f = PySys_GetObject("stderr");
1976 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001977 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001978 if (r)
1979 Py_DECREF(r);
1980 else
1981 PyErr_Clear();
1982 }
1983 f = PySys_GetObject("stdout");
1984 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001985 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001986 if (r)
1987 Py_DECREF(r);
1988 else
1989 PyErr_Clear();
1990 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001991
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001992 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001993}
1994
Guido van Rossum82598051997-03-05 00:20:32 +00001995static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001996run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001997 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001998{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001999 PyCodeObject *co;
2000 PyObject *v;
2001 co = PyAST_Compile(mod, filename, flags, arena);
2002 if (co == NULL)
2003 return NULL;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002004 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002005 Py_DECREF(co);
2006 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002007}
2008
Guido van Rossum82598051997-03-05 00:20:32 +00002009static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002010run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002011 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00002012{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002013 PyCodeObject *co;
2014 PyObject *v;
2015 long magic;
2016 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00002017
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002018 magic = PyMarshal_ReadLongFromFile(fp);
2019 if (magic != PyImport_GetMagicNumber()) {
2020 PyErr_SetString(PyExc_RuntimeError,
2021 "Bad magic number in .pyc file");
2022 return NULL;
2023 }
Antoine Pitrou5136ac02012-01-13 18:52:16 +01002024 /* Skip mtime and size */
2025 (void) PyMarshal_ReadLongFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002026 (void) PyMarshal_ReadLongFromFile(fp);
2027 v = PyMarshal_ReadLastObjectFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002028 if (v == NULL || !PyCode_Check(v)) {
2029 Py_XDECREF(v);
2030 PyErr_SetString(PyExc_RuntimeError,
2031 "Bad code object in .pyc file");
2032 return NULL;
2033 }
2034 co = (PyCodeObject *)v;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002035 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002036 if (v && flags)
2037 flags->cf_flags |= (co->co_flags & PyCF_MASK);
2038 Py_DECREF(co);
2039 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00002040}
2041
Guido van Rossum82598051997-03-05 00:20:32 +00002042PyObject *
Georg Brandl8334fd92010-12-04 10:26:46 +00002043Py_CompileStringExFlags(const char *str, const char *filename, int start,
2044 PyCompilerFlags *flags, int optimize)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00002045{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002046 PyCodeObject *co;
2047 mod_ty mod;
2048 PyArena *arena = PyArena_New();
2049 if (arena == NULL)
2050 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002051
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002052 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
2053 if (mod == NULL) {
2054 PyArena_Free(arena);
2055 return NULL;
2056 }
2057 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
2058 PyObject *result = PyAST_mod2obj(mod);
2059 PyArena_Free(arena);
2060 return result;
2061 }
Georg Brandl8334fd92010-12-04 10:26:46 +00002062 co = PyAST_CompileEx(mod, filename, flags, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002063 PyArena_Free(arena);
2064 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00002065}
2066
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002067/* For use in Py_LIMITED_API */
2068#undef Py_CompileString
2069PyObject *
2070PyCompileString(const char *str, const char *filename, int start)
2071{
2072 return Py_CompileStringFlags(str, filename, start, NULL);
2073}
2074
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002075struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002076Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002077{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002078 struct symtable *st;
2079 mod_ty mod;
2080 PyCompilerFlags flags;
2081 PyArena *arena = PyArena_New();
2082 if (arena == NULL)
2083 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002084
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002085 flags.cf_flags = 0;
2086 mod = PyParser_ASTFromString(str, filename, start, &flags, arena);
2087 if (mod == NULL) {
2088 PyArena_Free(arena);
2089 return NULL;
2090 }
2091 st = PySymtable_Build(mod, filename, 0);
2092 PyArena_Free(arena);
2093 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002094}
2095
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002096/* Preferred access to parser is through AST. */
2097mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002098PyParser_ASTFromString(const char *s, const char *filename, int start,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002099 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002100{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002101 mod_ty mod;
2102 PyCompilerFlags localflags;
2103 perrdetail err;
2104 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002105
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002106 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename,
2107 &_PyParser_Grammar, start, &err,
2108 &iflags);
2109 if (flags == NULL) {
2110 localflags.cf_flags = 0;
2111 flags = &localflags;
2112 }
2113 if (n) {
2114 flags->cf_flags |= iflags & PyCF_MASK;
2115 mod = PyAST_FromNode(n, flags, filename, arena);
2116 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002117 }
2118 else {
2119 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002120 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002121 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002122 err_free(&err);
2123 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002124}
2125
2126mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00002127PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002128 int start, char *ps1,
2129 char *ps2, PyCompilerFlags *flags, int *errcode,
2130 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002131{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002132 mod_ty mod;
2133 PyCompilerFlags localflags;
2134 perrdetail err;
2135 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002136
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002137 node *n = PyParser_ParseFileFlagsEx(fp, filename, enc,
2138 &_PyParser_Grammar,
2139 start, ps1, ps2, &err, &iflags);
2140 if (flags == NULL) {
2141 localflags.cf_flags = 0;
2142 flags = &localflags;
2143 }
2144 if (n) {
2145 flags->cf_flags |= iflags & PyCF_MASK;
2146 mod = PyAST_FromNode(n, flags, filename, arena);
2147 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002148 }
2149 else {
2150 err_input(&err);
2151 if (errcode)
2152 *errcode = err.error;
Victor Stinner7f2fee32011-04-05 00:39:01 +02002153 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002154 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002155 err_free(&err);
2156 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002157}
2158
Guido van Rossuma110aa61994-08-29 12:50:44 +00002159/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002160
Guido van Rossuma110aa61994-08-29 12:50:44 +00002161node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002162PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002163{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002164 perrdetail err;
2165 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
2166 &_PyParser_Grammar,
2167 start, NULL, NULL, &err, flags);
2168 if (n == NULL)
2169 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002170 err_free(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002171
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002172 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002173}
2174
Guido van Rossuma110aa61994-08-29 12:50:44 +00002175/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002176
Guido van Rossuma110aa61994-08-29 12:50:44 +00002177node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002178PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00002179{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002180 perrdetail err;
2181 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
2182 start, &err, flags);
2183 if (n == NULL)
2184 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002185 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002186 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00002187}
2188
2189node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002190PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002191 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002192{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002193 perrdetail err;
2194 node *n = PyParser_ParseStringFlagsFilename(str, filename,
2195 &_PyParser_Grammar, start, &err, flags);
2196 if (n == NULL)
2197 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002198 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002199 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00002200}
2201
2202node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002203PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002204{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002205 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00002206}
2207
Guido van Rossum66ebd912003-04-17 16:02:26 +00002208/* May want to move a more generalized form of this to parsetok.c or
2209 even parser modules. */
2210
2211void
Victor Stinner7f2fee32011-04-05 00:39:01 +02002212PyParser_ClearError(perrdetail *err)
2213{
2214 err_free(err);
2215}
2216
2217void
Guido van Rossum66ebd912003-04-17 16:02:26 +00002218PyParser_SetError(perrdetail *err)
2219{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002220 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00002221}
2222
Victor Stinner7f2fee32011-04-05 00:39:01 +02002223static void
2224err_free(perrdetail *err)
2225{
2226 Py_CLEAR(err->filename);
2227}
2228
Guido van Rossuma110aa61994-08-29 12:50:44 +00002229/* Set the error appropriate to the given input error code (see errcode.h) */
2230
2231static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002232err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00002233{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002234 PyObject *v, *w, *errtype, *errtext;
2235 PyObject *msg_obj = NULL;
2236 char *msg = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002237
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002238 errtype = PyExc_SyntaxError;
2239 switch (err->error) {
2240 case E_ERROR:
2241 return;
2242 case E_SYNTAX:
2243 errtype = PyExc_IndentationError;
2244 if (err->expected == INDENT)
2245 msg = "expected an indented block";
2246 else if (err->token == INDENT)
2247 msg = "unexpected indent";
2248 else if (err->token == DEDENT)
2249 msg = "unexpected unindent";
2250 else {
2251 errtype = PyExc_SyntaxError;
2252 msg = "invalid syntax";
2253 }
2254 break;
2255 case E_TOKEN:
2256 msg = "invalid token";
2257 break;
2258 case E_EOFS:
2259 msg = "EOF while scanning triple-quoted string literal";
2260 break;
2261 case E_EOLS:
2262 msg = "EOL while scanning string literal";
2263 break;
2264 case E_INTR:
2265 if (!PyErr_Occurred())
2266 PyErr_SetNone(PyExc_KeyboardInterrupt);
2267 goto cleanup;
2268 case E_NOMEM:
2269 PyErr_NoMemory();
2270 goto cleanup;
2271 case E_EOF:
2272 msg = "unexpected EOF while parsing";
2273 break;
2274 case E_TABSPACE:
2275 errtype = PyExc_TabError;
2276 msg = "inconsistent use of tabs and spaces in indentation";
2277 break;
2278 case E_OVERFLOW:
2279 msg = "expression too long";
2280 break;
2281 case E_DEDENT:
2282 errtype = PyExc_IndentationError;
2283 msg = "unindent does not match any outer indentation level";
2284 break;
2285 case E_TOODEEP:
2286 errtype = PyExc_IndentationError;
2287 msg = "too many levels of indentation";
2288 break;
2289 case E_DECODE: {
2290 PyObject *type, *value, *tb;
2291 PyErr_Fetch(&type, &value, &tb);
2292 msg = "unknown decode error";
2293 if (value != NULL)
2294 msg_obj = PyObject_Str(value);
2295 Py_XDECREF(type);
2296 Py_XDECREF(value);
2297 Py_XDECREF(tb);
2298 break;
2299 }
2300 case E_LINECONT:
2301 msg = "unexpected character after line continuation character";
2302 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002303
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002304 case E_IDENTIFIER:
2305 msg = "invalid character in identifier";
2306 break;
Meador Ingefa21bf02012-01-19 01:08:41 -06002307 case E_BADSINGLE:
2308 msg = "multiple statements found while compiling a single statement";
2309 break;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002310 default:
2311 fprintf(stderr, "error=%d\n", err->error);
2312 msg = "unknown parsing error";
2313 break;
2314 }
2315 /* err->text may not be UTF-8 in case of decoding errors.
2316 Explicitly convert to an object. */
2317 if (!err->text) {
2318 errtext = Py_None;
2319 Py_INCREF(Py_None);
2320 } else {
2321 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
2322 "replace");
2323 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002324 v = Py_BuildValue("(OiiN)", err->filename,
2325 err->lineno, err->offset, errtext);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002326 if (v != NULL) {
2327 if (msg_obj)
2328 w = Py_BuildValue("(OO)", msg_obj, v);
2329 else
2330 w = Py_BuildValue("(sO)", msg, v);
2331 } else
2332 w = NULL;
2333 Py_XDECREF(v);
2334 PyErr_SetObject(errtype, w);
2335 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002336cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002337 Py_XDECREF(msg_obj);
2338 if (err->text != NULL) {
2339 PyObject_FREE(err->text);
2340 err->text = NULL;
2341 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002342}
2343
2344/* Print fatal error message and abort */
2345
2346void
Tim Peters7c321a82002-07-09 02:57:01 +00002347Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002348{
Victor Stinner024e37a2011-03-31 01:31:06 +02002349 const int fd = fileno(stderr);
2350 PyThreadState *tstate;
2351
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002352 fprintf(stderr, "Fatal Python error: %s\n", msg);
2353 fflush(stderr); /* it helps in Windows debug build */
2354 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002355 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002356 }
Victor Stinner024e37a2011-03-31 01:31:06 +02002357 else {
2358 tstate = _Py_atomic_load_relaxed(&_PyThreadState_Current);
2359 if (tstate != NULL) {
2360 fputc('\n', stderr);
2361 fflush(stderr);
Victor Stinner7bba62f2011-05-07 12:43:00 +02002362 _Py_DumpTracebackThreads(fd, tstate->interp, tstate);
Victor Stinner024e37a2011-03-31 01:31:06 +02002363 }
Victor Stinnerd727e232011-04-01 12:13:55 +02002364 _PyFaulthandler_Fini();
Victor Stinner024e37a2011-03-31 01:31:06 +02002365 }
2366
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002367#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002368 {
2369 size_t len = strlen(msg);
2370 WCHAR* buffer;
2371 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002372
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002373 /* Convert the message to wchar_t. This uses a simple one-to-one
2374 conversion, assuming that the this error message actually uses ASCII
2375 only. If this ceases to be true, we will have to convert. */
2376 buffer = alloca( (len+1) * (sizeof *buffer));
2377 for( i=0; i<=len; ++i)
2378 buffer[i] = msg[i];
2379 OutputDebugStringW(L"Fatal Python error: ");
2380 OutputDebugStringW(buffer);
2381 OutputDebugStringW(L"\n");
2382 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002383#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002384 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002385#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002386#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002387 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002388}
2389
2390/* Clean up and exit */
2391
Guido van Rossuma110aa61994-08-29 12:50:44 +00002392#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002393#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002394#endif
2395
Collin Winter670e6922007-03-21 02:57:17 +00002396static void (*pyexitfunc)(void) = NULL;
2397/* For the atexit module. */
2398void _Py_PyAtExit(void (*func)(void))
2399{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002400 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002401}
2402
2403static void
2404call_py_exitfuncs(void)
2405{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002406 if (pyexitfunc == NULL)
2407 return;
Collin Winter670e6922007-03-21 02:57:17 +00002408
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002409 (*pyexitfunc)();
2410 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002411}
2412
Antoine Pitrou011bd622009-10-20 21:52:47 +00002413/* Wait until threading._shutdown completes, provided
2414 the threading module was imported in the first place.
2415 The shutdown routine will wait until all non-daemon
2416 "threading" threads have completed. */
2417static void
2418wait_for_thread_shutdown(void)
2419{
2420#ifdef WITH_THREAD
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002421 _Py_IDENTIFIER(_shutdown);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002422 PyObject *result;
2423 PyThreadState *tstate = PyThreadState_GET();
2424 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2425 "threading");
2426 if (threading == NULL) {
2427 /* threading not imported */
2428 PyErr_Clear();
2429 return;
2430 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002431 result = _PyObject_CallMethodId(threading, &PyId__shutdown, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002432 if (result == NULL) {
2433 PyErr_WriteUnraisable(threading);
2434 }
2435 else {
2436 Py_DECREF(result);
2437 }
2438 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002439#endif
2440}
2441
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002442#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002443static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002444static int nexitfuncs = 0;
2445
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002446int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002447{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002448 if (nexitfuncs >= NEXITFUNCS)
2449 return -1;
2450 exitfuncs[nexitfuncs++] = func;
2451 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002452}
2453
Guido van Rossumcc283f51997-08-05 02:22:03 +00002454static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002455call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002456{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002457 while (nexitfuncs > 0)
2458 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002459
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002460 fflush(stdout);
2461 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002462}
2463
2464void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002465Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002466{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002467 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002468
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002469 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002470}
2471
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002472static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002473initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002474{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002475#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002476 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002477#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002478#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002479 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002480#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002481#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002482 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002483#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002484 PyOS_InitInterrupts(); /* May imply initsignal() */
Victor Stinnerd786ad52013-07-21 13:25:51 +02002485 if (PyErr_Occurred()) {
2486 Py_FatalError("Py_Initialize: can't import signal");
2487 }
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002488}
2489
Guido van Rossum7433b121997-02-14 19:45:36 +00002490
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002491/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2492 *
2493 * All of the code in this function must only use async-signal-safe functions,
2494 * listed at `man 7 signal` or
2495 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2496 */
2497void
2498_Py_RestoreSignals(void)
2499{
2500#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002501 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002502#endif
2503#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002504 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002505#endif
2506#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002507 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002508#endif
2509}
2510
2511
Guido van Rossum7433b121997-02-14 19:45:36 +00002512/*
2513 * The file descriptor fd is considered ``interactive'' if either
2514 * a) isatty(fd) is TRUE, or
2515 * b) the -i flag was given, and the filename associated with
2516 * the descriptor is NULL or "<stdin>" or "???".
2517 */
2518int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002519Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002520{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002521 if (isatty((int)fileno(fp)))
2522 return 1;
2523 if (!Py_InteractiveFlag)
2524 return 0;
2525 return (filename == NULL) ||
2526 (strcmp(filename, "<stdin>") == 0) ||
2527 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002528}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002529
2530
Tim Petersd08e3822003-04-17 15:24:21 +00002531#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002532#if defined(WIN32) && defined(_MSC_VER)
2533
2534/* Stack checking for Microsoft C */
2535
2536#include <malloc.h>
2537#include <excpt.h>
2538
Fred Drakee8de31c2000-08-31 05:38:39 +00002539/*
2540 * Return non-zero when we run out of memory on the stack; zero otherwise.
2541 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002542int
Fred Drake399739f2000-08-31 05:52:44 +00002543PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002544{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002545 __try {
2546 /* alloca throws a stack overflow exception if there's
2547 not enough space left on the stack */
2548 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2549 return 0;
2550 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2551 EXCEPTION_EXECUTE_HANDLER :
2552 EXCEPTION_CONTINUE_SEARCH) {
2553 int errcode = _resetstkoflw();
2554 if (errcode == 0)
2555 {
2556 Py_FatalError("Could not reset the stack!");
2557 }
2558 }
2559 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002560}
2561
2562#endif /* WIN32 && _MSC_VER */
2563
2564/* Alternate implementations can be added here... */
2565
2566#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002567
2568
2569/* Wrappers around sigaction() or signal(). */
2570
2571PyOS_sighandler_t
2572PyOS_getsig(int sig)
2573{
2574#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002575 struct sigaction context;
2576 if (sigaction(sig, NULL, &context) == -1)
2577 return SIG_ERR;
2578 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002579#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002580 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002581/* Special signal handling for the secure CRT in Visual Studio 2005 */
2582#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002583 switch (sig) {
2584 /* Only these signals are valid */
2585 case SIGINT:
2586 case SIGILL:
2587 case SIGFPE:
2588 case SIGSEGV:
2589 case SIGTERM:
2590 case SIGBREAK:
2591 case SIGABRT:
2592 break;
2593 /* Don't call signal() with other values or it will assert */
2594 default:
2595 return SIG_ERR;
2596 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002597#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002598 handler = signal(sig, SIG_IGN);
2599 if (handler != SIG_ERR)
2600 signal(sig, handler);
2601 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002602#endif
2603}
2604
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002605/*
2606 * All of the code in this function must only use async-signal-safe functions,
2607 * listed at `man 7 signal` or
2608 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2609 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002610PyOS_sighandler_t
2611PyOS_setsig(int sig, PyOS_sighandler_t handler)
2612{
2613#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002614 /* Some code in Modules/signalmodule.c depends on sigaction() being
2615 * used here if HAVE_SIGACTION is defined. Fix that if this code
2616 * changes to invalidate that assumption.
2617 */
2618 struct sigaction context, ocontext;
2619 context.sa_handler = handler;
2620 sigemptyset(&context.sa_mask);
2621 context.sa_flags = 0;
2622 if (sigaction(sig, &context, &ocontext) == -1)
2623 return SIG_ERR;
2624 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002625#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002626 PyOS_sighandler_t oldhandler;
2627 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002628#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002629 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002630#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002631 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002632#endif
2633}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002634
2635/* Deprecated C API functions still provided for binary compatiblity */
2636
2637#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002638PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002639PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2640{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002641 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002642}
2643
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002644#undef PyParser_SimpleParseString
2645PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002646PyParser_SimpleParseString(const char *str, int start)
2647{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002648 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002649}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002650
2651#undef PyRun_AnyFile
2652PyAPI_FUNC(int)
2653PyRun_AnyFile(FILE *fp, const char *name)
2654{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002655 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002656}
2657
2658#undef PyRun_AnyFileEx
2659PyAPI_FUNC(int)
2660PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2661{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002662 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002663}
2664
2665#undef PyRun_AnyFileFlags
2666PyAPI_FUNC(int)
2667PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2668{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002669 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002670}
2671
2672#undef PyRun_File
2673PyAPI_FUNC(PyObject *)
2674PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2675{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002676 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002677}
2678
2679#undef PyRun_FileEx
2680PyAPI_FUNC(PyObject *)
2681PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2682{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002683 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002684}
2685
2686#undef PyRun_FileFlags
2687PyAPI_FUNC(PyObject *)
2688PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002689 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002690{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002691 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002692}
2693
2694#undef PyRun_SimpleFile
2695PyAPI_FUNC(int)
2696PyRun_SimpleFile(FILE *f, const char *p)
2697{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002698 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002699}
2700
2701#undef PyRun_SimpleFileEx
2702PyAPI_FUNC(int)
2703PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2704{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002705 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002706}
2707
2708
2709#undef PyRun_String
2710PyAPI_FUNC(PyObject *)
2711PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2712{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002713 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002714}
2715
2716#undef PyRun_SimpleString
2717PyAPI_FUNC(int)
2718PyRun_SimpleString(const char *s)
2719{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002720 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002721}
2722
2723#undef Py_CompileString
2724PyAPI_FUNC(PyObject *)
2725Py_CompileString(const char *str, const char *p, int s)
2726{
Georg Brandl8334fd92010-12-04 10:26:46 +00002727 return Py_CompileStringExFlags(str, p, s, NULL, -1);
2728}
2729
2730#undef Py_CompileStringFlags
2731PyAPI_FUNC(PyObject *)
2732Py_CompileStringFlags(const char *str, const char *p, int s,
2733 PyCompilerFlags *flags)
2734{
2735 return Py_CompileStringExFlags(str, p, s, flags, -1);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002736}
2737
2738#undef PyRun_InteractiveOne
2739PyAPI_FUNC(int)
2740PyRun_InteractiveOne(FILE *f, const char *p)
2741{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002742 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002743}
2744
2745#undef PyRun_InteractiveLoop
2746PyAPI_FUNC(int)
2747PyRun_InteractiveLoop(FILE *f, const char *p)
2748{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002749 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002750}
2751
2752#ifdef __cplusplus
2753}
2754#endif