blob: b0bc54964719fa256ab467e161958d6d76b5d99b [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 */
Christian Heimesad73a9c2013-08-10 16:36:18 +0200115int Py_IsolatedFlag = 0; /* for -I, isolate from user's env */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000116
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200117PyThreadState *_Py_Finalizing = NULL;
118
Christian Heimes33fe8092008-04-13 13:53:33 +0000119/* PyModule_GetWarningsModule is no longer necessary as of 2.6
120since _warnings is builtin. This API should not be used. */
121PyObject *
122PyModule_GetWarningsModule(void)
Mark Hammondedd07732003-07-15 23:03:55 +0000123{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000124 return PyImport_ImportModule("warnings");
Mark Hammondedd07732003-07-15 23:03:55 +0000125}
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000126
Guido van Rossum25ce5661997-08-02 03:10:38 +0000127static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000128
Thomas Wouters7e474022000-07-16 12:04:32 +0000129/* API to access the initialized flag -- useful for esoteric use */
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000130
131int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000132Py_IsInitialized(void)
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000133{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000134 return initialized;
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000135}
136
Guido van Rossum25ce5661997-08-02 03:10:38 +0000137/* Global initializations. Can be undone by Py_Finalize(). Don't
138 call this twice without an intervening Py_Finalize() call. When
139 initializations fail, a fatal error is issued and the function does
140 not return. On return, the first thread and interpreter state have
141 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000142
Guido van Rossum25ce5661997-08-02 03:10:38 +0000143 Locking: you must hold the interpreter lock while calling this.
144 (If the lock has not yet been initialized, that's equivalent to
145 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000146
Guido van Rossum25ce5661997-08-02 03:10:38 +0000147*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000148
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000149static int
150add_flag(int flag, const char *envs)
151{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000152 int env = atoi(envs);
153 if (flag < env)
154 flag = env;
155 if (flag < 1)
156 flag = 1;
157 return flag;
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000158}
159
Christian Heimes5833a2f2008-10-30 21:40:04 +0000160static char*
Victor Stinner94908bb2010-08-18 21:23:25 +0000161get_codec_name(const char *encoding)
Christian Heimes5833a2f2008-10-30 21:40:04 +0000162{
Victor Stinner94908bb2010-08-18 21:23:25 +0000163 char *name_utf8, *name_str;
Victor Stinner386fe712010-05-19 00:34:15 +0000164 PyObject *codec, *name = NULL;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200165 _Py_IDENTIFIER(name);
Christian Heimes5833a2f2008-10-30 21:40:04 +0000166
Victor Stinner94908bb2010-08-18 21:23:25 +0000167 codec = _PyCodec_Lookup(encoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000168 if (!codec)
169 goto error;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000170
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200171 name = _PyObject_GetAttrId(codec, &PyId_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000172 Py_CLEAR(codec);
173 if (!name)
174 goto error;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000175
Victor Stinner94908bb2010-08-18 21:23:25 +0000176 name_utf8 = _PyUnicode_AsString(name);
Victor Stinner4ca28092011-03-20 23:09:03 +0100177 if (name_utf8 == NULL)
Victor Stinner386fe712010-05-19 00:34:15 +0000178 goto error;
Victor Stinner49fc8ec2013-07-07 23:30:24 +0200179 name_str = _PyMem_RawStrdup(name_utf8);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000180 Py_DECREF(name);
Victor Stinner94908bb2010-08-18 21:23:25 +0000181 if (name_str == NULL) {
182 PyErr_NoMemory();
183 return NULL;
184 }
185 return name_str;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000186
187error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000188 Py_XDECREF(codec);
Victor Stinner386fe712010-05-19 00:34:15 +0000189 Py_XDECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000190 return NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000191}
Victor Stinner94908bb2010-08-18 21:23:25 +0000192
Victor Stinner94908bb2010-08-18 21:23:25 +0000193static char*
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200194get_locale_encoding(void)
Victor Stinner94908bb2010-08-18 21:23:25 +0000195{
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200196#ifdef MS_WINDOWS
197 char codepage[100];
198 PyOS_snprintf(codepage, sizeof(codepage), "cp%d", GetACP());
199 return get_codec_name(codepage);
200#elif defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94908bb2010-08-18 21:23:25 +0000201 char* codeset = nl_langinfo(CODESET);
202 if (!codeset || codeset[0] == '\0') {
203 PyErr_SetString(PyExc_ValueError, "CODESET is not set or empty");
204 return NULL;
205 }
206 return get_codec_name(codeset);
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200207#else
208 PyErr_SetNone(PyExc_NotImplementedError);
209 return NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000210#endif
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200211}
Christian Heimes5833a2f2008-10-30 21:40:04 +0000212
Brett Cannonfd074152012-04-14 14:10:13 -0400213static void
214import_init(PyInterpreterState *interp, PyObject *sysmod)
215{
216 PyObject *importlib;
217 PyObject *impmod;
218 PyObject *sys_modules;
219 PyObject *value;
220
221 /* Import _importlib through its frozen version, _frozen_importlib. */
Brett Cannonfd074152012-04-14 14:10:13 -0400222 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
223 Py_FatalError("Py_Initialize: can't import _frozen_importlib");
224 }
225 else if (Py_VerboseFlag) {
226 PySys_FormatStderr("import _frozen_importlib # frozen\n");
227 }
228 importlib = PyImport_AddModule("_frozen_importlib");
229 if (importlib == NULL) {
230 Py_FatalError("Py_Initialize: couldn't get _frozen_importlib from "
231 "sys.modules");
232 }
233 interp->importlib = importlib;
234 Py_INCREF(interp->importlib);
235
236 /* Install _importlib as __import__ */
237 impmod = PyInit_imp();
238 if (impmod == NULL) {
239 Py_FatalError("Py_Initialize: can't import imp");
240 }
241 else if (Py_VerboseFlag) {
242 PySys_FormatStderr("import imp # builtin\n");
243 }
244 sys_modules = PyImport_GetModuleDict();
245 if (Py_VerboseFlag) {
246 PySys_FormatStderr("import sys # builtin\n");
247 }
Brett Cannon6f44d662012-04-15 16:08:47 -0400248 if (PyDict_SetItemString(sys_modules, "_imp", impmod) < 0) {
249 Py_FatalError("Py_Initialize: can't save _imp to sys.modules");
Brett Cannonfd074152012-04-14 14:10:13 -0400250 }
251
Brett Cannone0d88a12012-04-25 20:54:04 -0400252 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
Brett Cannonfd074152012-04-14 14:10:13 -0400253 if (value == NULL) {
254 PyErr_Print();
255 Py_FatalError("Py_Initialize: importlib install failed");
256 }
257 Py_DECREF(value);
Brett Cannonfc9ca272012-04-15 01:35:05 -0400258 Py_DECREF(impmod);
Brett Cannonfd074152012-04-14 14:10:13 -0400259
260 _PyImportZip_Init();
261}
262
263
Guido van Rossuma027efa1997-05-05 20:56:21 +0000264void
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200265_Py_InitializeEx_Private(int install_sigs, int install_importlib)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000266{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000267 PyInterpreterState *interp;
268 PyThreadState *tstate;
269 PyObject *bimod, *sysmod, *pstderr;
270 char *p;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000271 extern void _Py_ReadyTypes(void);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000272
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000273 if (initialized)
274 return;
275 initialized = 1;
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200276 _Py_Finalizing = NULL;
Tim Petersd08e3822003-04-17 15:24:21 +0000277
Andrew M. Kuchlingb2ceb3a2010-02-22 23:26:10 +0000278#if defined(HAVE_LANGINFO_H) && defined(HAVE_SETLOCALE)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000279 /* Set up the LC_CTYPE locale, so we can obtain
280 the locale's charset without having to switch
281 locales. */
282 setlocale(LC_CTYPE, "");
Martin v. Löwisd1cd4d42007-08-11 14:02:14 +0000283#endif
284
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000285 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
286 Py_DebugFlag = add_flag(Py_DebugFlag, p);
287 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
288 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
289 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
290 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
291 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0')
292 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);
Georg Brandl2daf6ae2012-02-20 19:54:16 +0100293 /* The variable is only tested for existence here; _PyRandom_Init will
294 check its value further. */
295 if ((p = Py_GETENV("PYTHONHASHSEED")) && *p != '\0')
296 Py_HashRandomizationFlag = add_flag(Py_HashRandomizationFlag, p);
297
298 _PyRandom_Init();
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000299
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000300 interp = PyInterpreterState_New();
301 if (interp == NULL)
302 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000303
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000304 tstate = PyThreadState_New(interp);
305 if (tstate == NULL)
306 Py_FatalError("Py_Initialize: can't make first thread");
307 (void) PyThreadState_Swap(tstate);
Guido van Rossuma027efa1997-05-05 20:56:21 +0000308
Victor Stinner6961bd62010-08-17 22:26:51 +0000309#ifdef WITH_THREAD
Antoine Pitroub0b384b2010-09-20 20:13:48 +0000310 /* We can't call _PyEval_FiniThreads() in Py_Finalize because
311 destroying the GIL might fail when it is being referenced from
312 another running thread (see issue #9901).
313 Instead we destroy the previously created GIL here, which ensures
314 that we can call Py_Initialize / Py_Finalize multiple times. */
315 _PyEval_FiniThreads();
316
317 /* Auto-thread-state API */
Victor Stinner6961bd62010-08-17 22:26:51 +0000318 _PyGILState_Init(interp, tstate);
319#endif /* WITH_THREAD */
320
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000321 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000322
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000323 if (!_PyFrame_Init())
324 Py_FatalError("Py_Initialize: can't init frames");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000325
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000326 if (!_PyLong_Init())
327 Py_FatalError("Py_Initialize: can't init longs");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000328
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000329 if (!PyByteArray_Init())
330 Py_FatalError("Py_Initialize: can't init bytearray");
Neal Norwitz6968b052007-02-27 19:02:19 +0000331
Victor Stinner1c8f0592013-07-22 22:24:54 +0200332 if (!_PyFloat_Init())
333 Py_FatalError("Py_Initialize: can't init float");
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000334
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000335 interp->modules = PyDict_New();
336 if (interp->modules == NULL)
337 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000338
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000339 /* Init Unicode implementation; relies on the codec registry */
Victor Stinner3a50e702011-10-18 21:21:00 +0200340 if (_PyUnicode_Init() < 0)
341 Py_FatalError("Py_Initialize: can't initialize unicode");
Victor Stinner26f91992013-07-17 01:22:45 +0200342 if (_PyStructSequence_Init() < 0)
343 Py_FatalError("Py_Initialize: can't initialize structseq");
Guido van Rossumc94044c2000-03-10 23:03:54 +0000344
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000345 bimod = _PyBuiltin_Init();
346 if (bimod == NULL)
347 Py_FatalError("Py_Initialize: can't initialize builtins modules");
Victor Stinner49d3f252010-10-17 01:24:53 +0000348 _PyImport_FixupBuiltin(bimod, "builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000349 interp->builtins = PyModule_GetDict(bimod);
350 if (interp->builtins == NULL)
351 Py_FatalError("Py_Initialize: can't initialize builtins dict");
352 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000353
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000354 /* initialize builtin exceptions */
Brett Cannonfd074152012-04-14 14:10:13 -0400355 _PyExc_Init(bimod);
Christian Heimes9a68f8c2007-11-14 00:16:07 +0000356
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000357 sysmod = _PySys_Init();
358 if (sysmod == NULL)
359 Py_FatalError("Py_Initialize: can't initialize sys");
360 interp->sysdict = PyModule_GetDict(sysmod);
361 if (interp->sysdict == NULL)
362 Py_FatalError("Py_Initialize: can't initialize sys dict");
363 Py_INCREF(interp->sysdict);
Victor Stinner49d3f252010-10-17 01:24:53 +0000364 _PyImport_FixupBuiltin(sysmod, "sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000365 PySys_SetPath(Py_GetPath());
366 PyDict_SetItemString(interp->sysdict, "modules",
367 interp->modules);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000368
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000369 /* Set up a preliminary stderr printer until we have enough
370 infrastructure for the io module in place. */
371 pstderr = PyFile_NewStdPrinter(fileno(stderr));
372 if (pstderr == NULL)
373 Py_FatalError("Py_Initialize: can't set preliminary stderr");
374 PySys_SetObject("stderr", pstderr);
375 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000376 Py_DECREF(pstderr);
Guido van Rossum826d8972007-10-30 18:34:07 +0000377
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000378 _PyImport_Init();
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000379
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000380 _PyImportHooks_Init();
Just van Rossum52e14d62002-12-30 22:08:05 +0000381
Victor Stinner7d79b8b2010-05-19 20:40:50 +0000382 /* Initialize _warnings. */
383 _PyWarnings_Init();
384
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200385 if (!install_importlib)
386 return;
387
Brett Cannonfd074152012-04-14 14:10:13 -0400388 import_init(interp, sysmod);
389
Victor Stinnerd5698cb2012-07-31 02:55:49 +0200390 /* initialize the faulthandler module */
391 if (_PyFaulthandler_Init())
392 Py_FatalError("Py_Initialize: can't initialize faulthandler");
393
Alexander Belopolsky6fc4ade2010-08-05 17:34:27 +0000394 _PyTime_Init();
395
Victor Stinner793b5312011-04-27 00:24:21 +0200396 if (initfsencoding(interp) < 0)
397 Py_FatalError("Py_Initialize: unable to load the file system codec");
Martin v. Löwis011e8422009-05-05 04:43:17 +0000398
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000399 if (install_sigs)
400 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000401
Nick Coghlan85e729e2012-07-15 18:09:52 +1000402 initmain(interp); /* Module __main__ */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000403 if (initstdio() < 0)
404 Py_FatalError(
405 "Py_Initialize: can't initialize sys standard streams");
406
Antoine Pitroucf9f9802010-11-10 13:55:25 +0000407 /* Initialize warnings. */
408 if (PySys_HasWarnOptions()) {
409 PyObject *warnings_module = PyImport_ImportModule("warnings");
410 if (warnings_module == NULL) {
411 fprintf(stderr, "'import warnings' failed; traceback:\n");
412 PyErr_Print();
413 }
414 Py_XDECREF(warnings_module);
415 }
416
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000417 if (!Py_NoSiteFlag)
418 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000419}
420
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000421void
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200422Py_InitializeEx(int install_sigs)
423{
424 _Py_InitializeEx_Private(install_sigs, 1);
425}
426
427void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000428Py_Initialize(void)
429{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000430 Py_InitializeEx(1);
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000431}
432
433
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000434#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000435extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000436#endif
437
Guido van Rossume8432ac2007-07-09 15:04:50 +0000438/* Flush stdout and stderr */
439
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100440static int
441file_is_closed(PyObject *fobj)
442{
443 int r;
444 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
445 if (tmp == NULL) {
446 PyErr_Clear();
447 return 0;
448 }
449 r = PyObject_IsTrue(tmp);
450 Py_DECREF(tmp);
451 if (r < 0)
452 PyErr_Clear();
453 return r > 0;
454}
455
Neal Norwitz2bad9702007-08-27 06:19:22 +0000456static void
Guido van Rossum1bd21222007-07-10 20:14:13 +0000457flush_std_files(void)
Guido van Rossume8432ac2007-07-09 15:04:50 +0000458{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000459 PyObject *fout = PySys_GetObject("stdout");
460 PyObject *ferr = PySys_GetObject("stderr");
461 PyObject *tmp;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200462 _Py_IDENTIFIER(flush);
Guido van Rossume8432ac2007-07-09 15:04:50 +0000463
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100464 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200465 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000466 if (tmp == NULL)
Antoine Pitroubddc9fe2010-08-08 20:46:42 +0000467 PyErr_WriteUnraisable(fout);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000468 else
469 Py_DECREF(tmp);
470 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000471
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100472 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200473 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000474 if (tmp == NULL)
475 PyErr_Clear();
476 else
477 Py_DECREF(tmp);
478 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000479}
480
Guido van Rossum25ce5661997-08-02 03:10:38 +0000481/* Undo the effect of Py_Initialize().
482
483 Beware: if multiple interpreter and/or thread states exist, these
484 are not wiped out; only the current thread and interpreter state
485 are deleted. But since everything else is deleted, those other
486 interpreter and thread states should no longer be used.
487
488 (XXX We should do better, e.g. wipe out all interpreters and
489 threads.)
490
491 Locking: as above.
492
493*/
494
495void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000496Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000497{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000498 PyInterpreterState *interp;
499 PyThreadState *tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000500
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000501 if (!initialized)
502 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000503
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000504 wait_for_thread_shutdown();
Antoine Pitrou011bd622009-10-20 21:52:47 +0000505
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000506 /* The interpreter is still entirely intact at this point, and the
507 * exit funcs may be relying on that. In particular, if some thread
508 * or exit func is still waiting to do an import, the import machinery
509 * expects Py_IsInitialized() to return true. So don't say the
510 * interpreter is uninitialized until after the exit funcs have run.
511 * Note that Threading.py uses an exit func to do a join on all the
512 * threads created thru it, so this also protects pending imports in
513 * the threads created via Threading.
514 */
515 call_py_exitfuncs();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000516
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000517 /* Get current thread state and interpreter pointer */
518 tstate = PyThreadState_GET();
519 interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000520
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200521 /* Remaining threads (e.g. daemon threads) will automatically exit
522 after taking the GIL (in PyEval_RestoreThread()). */
523 _Py_Finalizing = tstate;
524 initialized = 0;
525
526 /* Flush stdout+stderr */
527 flush_std_files();
528
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000529 /* Disable signal handling */
530 PyOS_FiniInterrupts();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000531
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000532 /* Collect garbage. This may call finalizers; it's nice to call these
533 * before all modules are destroyed.
534 * XXX If a __del__ or weakref callback is triggered here, and tries to
535 * XXX import a module, bad things can happen, because Python no
536 * XXX longer believes it's initialized.
537 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
538 * XXX is easy to provoke that way. I've also seen, e.g.,
539 * XXX Exception exceptions.ImportError: 'No module named sha'
540 * XXX in <function callback at 0x008F5718> ignored
541 * XXX but I'm unclear on exactly how that one happens. In any case,
542 * XXX I haven't seen a real-life report of either of these.
543 */
544 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000545#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000546 /* With COUNT_ALLOCS, it helps to run GC multiple times:
547 each collection might release some types from the type
548 list, so they become garbage. */
549 while (PyGC_Collect() > 0)
550 /* nothing */;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000551#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000552 /* Destroy all modules */
553 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000554
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000555 /* Flush stdout+stderr (again, in case more was printed) */
556 flush_std_files();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000557
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000558 /* Collect final garbage. This disposes of cycles created by
Florent Xiclunaaa6c1d22011-12-12 18:54:29 +0100559 * class definitions, for example.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000560 * XXX This is disabled because it caused too many problems. If
561 * XXX a __del__ or weakref callback triggers here, Python code has
562 * XXX a hard time running, because even the sys module has been
563 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
564 * XXX One symptom is a sequence of information-free messages
565 * XXX coming from threads (if a __del__ or callback is invoked,
566 * XXX other threads can execute too, and any exception they encounter
567 * XXX triggers a comedy of errors as subsystem after subsystem
568 * XXX fails to find what it *expects* to find in sys to help report
569 * XXX the exception and consequent unexpected failures). I've also
570 * XXX seen segfaults then, after adding print statements to the
571 * XXX Python code getting called.
572 */
Tim Peters1d7323e2003-12-01 21:35:27 +0000573#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000574 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000575#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000576
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000577 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
578 _PyImport_Fini();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000579
Antoine Pitroufd417cc2013-05-05 08:12:42 +0200580 /* Cleanup typeobject.c's internal caches. */
581 _PyType_Fini();
582
Victor Stinner024e37a2011-03-31 01:31:06 +0200583 /* unload faulthandler module */
584 _PyFaulthandler_Fini();
585
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000586 /* Debugging stuff */
Guido van Rossum1707aad1997-12-08 23:43:45 +0000587#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000588 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000589#endif
590
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000591 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000592
Tim Peters9cf25ce2003-04-17 15:21:01 +0000593#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000594 /* Display all objects still alive -- this can invoke arbitrary
595 * __repr__ overrides, so requires a mostly-intact interpreter.
596 * Alas, a lot of stuff may still be alive now that will be cleaned
597 * up later.
598 */
599 if (Py_GETENV("PYTHONDUMPREFS"))
600 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000601#endif /* Py_TRACE_REFS */
602
Antoine Pitroufd417cc2013-05-05 08:12:42 +0200603 /* Clear interpreter state and all thread states. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000604 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000605
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000606 /* Now we decref the exception classes. After this point nothing
607 can raise an exception. That's okay, because each Fini() method
608 below has been checked to make sure no exceptions are ever
609 raised.
610 */
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000611
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000612 _PyExc_Fini();
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000613
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000614 /* Sundry finalizers */
615 PyMethod_Fini();
616 PyFrame_Fini();
617 PyCFunction_Fini();
618 PyTuple_Fini();
619 PyList_Fini();
620 PySet_Fini();
621 PyBytes_Fini();
622 PyByteArray_Fini();
623 PyLong_Fini();
624 PyFloat_Fini();
625 PyDict_Fini();
Antoine Pitrouf34a0cd2011-11-18 20:14:34 +0100626 PySlice_Fini();
Antoine Pitrou5f454a02013-05-06 21:15:57 +0200627 _PyGC_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000628
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000629 /* Cleanup Unicode implementation */
630 _PyUnicode_Fini();
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000631
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000632 /* reset file system default encoding */
Victor Stinnerb744ba12010-05-15 12:27:16 +0000633 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +0200634 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000635 Py_FileSystemDefaultEncoding = NULL;
636 }
Christian Heimesc8967002007-11-30 10:18:26 +0000637
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000638 /* XXX Still allocated:
639 - various static ad-hoc pointers to interned strings
640 - int and float free list blocks
641 - whatever various modules and libraries allocate
642 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000643
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000644 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000645
Victor Stinner51fa4582013-07-07 15:50:49 +0200646 /* Cleanup auto-thread-state */
647#ifdef WITH_THREAD
648 _PyGILState_Fini();
649#endif /* WITH_THREAD */
650
651 /* Delete current thread. After this, many C API calls become crashy. */
652 PyThreadState_Swap(NULL);
653 PyInterpreterState_Delete(interp);
654
Tim Peters269b2a62003-04-17 19:52:29 +0000655#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000656 /* Display addresses (& refcnts) of all objects still alive.
657 * An address can be used to find the repr of the object, printed
658 * above by _Py_PrintReferences.
659 */
660 if (Py_GETENV("PYTHONDUMPREFS"))
661 _Py_PrintReferenceAddresses(stderr);
Tim Peters269b2a62003-04-17 19:52:29 +0000662#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000663#ifdef PYMALLOC_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000664 if (Py_GETENV("PYTHONMALLOCSTATS"))
David Malcolm49526f42012-06-22 14:55:41 -0400665 _PyObject_DebugMallocStats(stderr);
Tim Peters0e871182002-04-13 08:29:14 +0000666#endif
667
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000668 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000669}
670
671/* Create and initialize a new interpreter and thread, and return the
672 new thread. This requires that Py_Initialize() has been called
673 first.
674
675 Unsuccessful initialization yields a NULL pointer. Note that *no*
676 exception information is available even in this case -- the
677 exception information is held in the thread, and there is no
678 thread.
679
680 Locking: as above.
681
682*/
683
684PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000685Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000686{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000687 PyInterpreterState *interp;
688 PyThreadState *tstate, *save_tstate;
689 PyObject *bimod, *sysmod;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000690
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000691 if (!initialized)
692 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000693
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000694 interp = PyInterpreterState_New();
695 if (interp == NULL)
696 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000697
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000698 tstate = PyThreadState_New(interp);
699 if (tstate == NULL) {
700 PyInterpreterState_Delete(interp);
701 return NULL;
702 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000703
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000704 save_tstate = PyThreadState_Swap(tstate);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000705
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000706 /* XXX The following is lax in error checking */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000707
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000708 interp->modules = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000709
Victor Stinner49d3f252010-10-17 01:24:53 +0000710 bimod = _PyImport_FindBuiltin("builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000711 if (bimod != NULL) {
712 interp->builtins = PyModule_GetDict(bimod);
713 if (interp->builtins == NULL)
714 goto handle_error;
715 Py_INCREF(interp->builtins);
716 }
Christian Heimes6a27efa2008-10-30 21:48:26 +0000717
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000718 /* initialize builtin exceptions */
Brett Cannonfd074152012-04-14 14:10:13 -0400719 _PyExc_Init(bimod);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000720
Victor Stinner49d3f252010-10-17 01:24:53 +0000721 sysmod = _PyImport_FindBuiltin("sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000722 if (bimod != NULL && sysmod != NULL) {
723 PyObject *pstderr;
Brett Cannonfd074152012-04-14 14:10:13 -0400724
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000725 interp->sysdict = PyModule_GetDict(sysmod);
726 if (interp->sysdict == NULL)
727 goto handle_error;
728 Py_INCREF(interp->sysdict);
729 PySys_SetPath(Py_GetPath());
730 PyDict_SetItemString(interp->sysdict, "modules",
731 interp->modules);
732 /* Set up a preliminary stderr printer until we have enough
733 infrastructure for the io module in place. */
734 pstderr = PyFile_NewStdPrinter(fileno(stderr));
735 if (pstderr == NULL)
736 Py_FatalError("Py_Initialize: can't set preliminary stderr");
737 PySys_SetObject("stderr", pstderr);
738 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000739 Py_DECREF(pstderr);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000740
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000741 _PyImportHooks_Init();
Victor Stinner793b5312011-04-27 00:24:21 +0200742
Brett Cannonfd074152012-04-14 14:10:13 -0400743 import_init(interp, sysmod);
744
Victor Stinner793b5312011-04-27 00:24:21 +0200745 if (initfsencoding(interp) < 0)
746 goto handle_error;
747
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000748 if (initstdio() < 0)
749 Py_FatalError(
750 "Py_Initialize: can't initialize sys standard streams");
Nick Coghlan85e729e2012-07-15 18:09:52 +1000751 initmain(interp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000752 if (!Py_NoSiteFlag)
753 initsite();
754 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000755
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000756 if (!PyErr_Occurred())
757 return tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000758
Thomas Wouters89f507f2006-12-13 04:49:30 +0000759handle_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000760 /* Oops, it didn't work. Undo it all. */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000761
Victor Stinnerc40a3502011-04-27 00:20:27 +0200762 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000763 PyThreadState_Clear(tstate);
764 PyThreadState_Swap(save_tstate);
765 PyThreadState_Delete(tstate);
766 PyInterpreterState_Delete(interp);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000767
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000768 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000769}
770
771/* Delete an interpreter and its last thread. This requires that the
772 given thread state is current, that the thread has no remaining
773 frames, and that it is its interpreter's only remaining thread.
774 It is a fatal error to violate these constraints.
775
776 (Py_Finalize() doesn't have these constraints -- it zaps
777 everything, regardless.)
778
779 Locking: as above.
780
781*/
782
783void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000784Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000785{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000786 PyInterpreterState *interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000787
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000788 if (tstate != PyThreadState_GET())
789 Py_FatalError("Py_EndInterpreter: thread is not current");
790 if (tstate->frame != NULL)
791 Py_FatalError("Py_EndInterpreter: thread still has a frame");
792 if (tstate != interp->tstate_head || tstate->next != NULL)
793 Py_FatalError("Py_EndInterpreter: not the last thread");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000794
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000795 PyImport_Cleanup();
796 PyInterpreterState_Clear(interp);
797 PyThreadState_Swap(NULL);
798 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000799}
800
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200801#ifdef MS_WINDOWS
Martin v. Löwis790465f2008-04-05 20:41:37 +0000802static wchar_t *progname = L"python";
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200803#else
804static wchar_t *progname = L"python3";
805#endif
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000806
807void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000808Py_SetProgramName(wchar_t *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000809{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000810 if (pn && *pn)
811 progname = pn;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000812}
813
Martin v. Löwis790465f2008-04-05 20:41:37 +0000814wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000815Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000816{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000817 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000818}
819
Martin v. Löwis790465f2008-04-05 20:41:37 +0000820static wchar_t *default_home = NULL;
821static wchar_t env_home[PATH_MAX+1];
Guido van Rossuma61691e1998-02-06 22:27:24 +0000822
823void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000824Py_SetPythonHome(wchar_t *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000825{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000826 default_home = home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000827}
828
Martin v. Löwis790465f2008-04-05 20:41:37 +0000829wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000830Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000831{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000832 wchar_t *home = default_home;
833 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
834 char* chome = Py_GETENV("PYTHONHOME");
835 if (chome) {
836 size_t r = mbstowcs(env_home, chome, PATH_MAX+1);
837 if (r != (size_t)-1 && r <= PATH_MAX)
838 home = env_home;
839 }
Martin v. Löwis790465f2008-04-05 20:41:37 +0000840
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000841 }
842 return home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000843}
844
Guido van Rossum6135a871995-01-09 17:53:26 +0000845/* Create __main__ module */
846
847static void
Nick Coghlan85e729e2012-07-15 18:09:52 +1000848initmain(PyInterpreterState *interp)
Guido van Rossum6135a871995-01-09 17:53:26 +0000849{
Brett Cannon13853a62013-05-04 17:37:09 -0400850 PyObject *m, *d, *loader;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000851 m = PyImport_AddModule("__main__");
852 if (m == NULL)
853 Py_FatalError("can't create __main__ module");
854 d = PyModule_GetDict(m);
855 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
856 PyObject *bimod = PyImport_ImportModule("builtins");
Nick Coghlan85e729e2012-07-15 18:09:52 +1000857 if (bimod == NULL) {
858 Py_FatalError("Failed to retrieve builtins module");
859 }
860 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
861 Py_FatalError("Failed to initialize __main__.__builtins__");
862 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000863 Py_DECREF(bimod);
864 }
Nick Coghlan85e729e2012-07-15 18:09:52 +1000865 /* Main is a little special - imp.is_builtin("__main__") will return
866 * False, but BuiltinImporter is still the most appropriate initial
867 * setting for its __loader__ attribute. A more suitable value will
868 * be set if __main__ gets further initialized later in the startup
869 * process.
870 */
Brett Cannon13853a62013-05-04 17:37:09 -0400871 loader = PyDict_GetItemString(d, "__loader__");
Brett Cannon4c14b5d2013-05-04 13:56:58 -0400872 if (loader == NULL || loader == Py_None) {
Nick Coghlan85e729e2012-07-15 18:09:52 +1000873 PyObject *loader = PyObject_GetAttrString(interp->importlib,
874 "BuiltinImporter");
875 if (loader == NULL) {
876 Py_FatalError("Failed to retrieve BuiltinImporter");
877 }
878 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
879 Py_FatalError("Failed to initialize __main__.__loader__");
880 }
881 Py_DECREF(loader);
882 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000883}
884
Victor Stinner793b5312011-04-27 00:24:21 +0200885static int
886initfsencoding(PyInterpreterState *interp)
Victor Stinnerb744ba12010-05-15 12:27:16 +0000887{
888 PyObject *codec;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000889
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200890 if (Py_FileSystemDefaultEncoding == NULL)
891 {
892 Py_FileSystemDefaultEncoding = get_locale_encoding();
893 if (Py_FileSystemDefaultEncoding == NULL)
Victor Stinnere4743092010-10-19 00:05:51 +0000894 Py_FatalError("Py_Initialize: Unable to get the locale encoding");
Victor Stinnerb744ba12010-05-15 12:27:16 +0000895
Victor Stinnere4743092010-10-19 00:05:51 +0000896 Py_HasFileSystemDefaultEncoding = 0;
Victor Stinner793b5312011-04-27 00:24:21 +0200897 interp->fscodec_initialized = 1;
898 return 0;
Victor Stinner7f84ab52010-06-11 00:36:33 +0000899 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000900
901 /* the encoding is mbcs, utf-8 or ascii */
902 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
903 if (!codec) {
904 /* Such error can only occurs in critical situations: no more
905 * memory, import a module of the standard library failed,
906 * etc. */
Victor Stinner793b5312011-04-27 00:24:21 +0200907 return -1;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000908 }
Victor Stinner793b5312011-04-27 00:24:21 +0200909 Py_DECREF(codec);
910 interp->fscodec_initialized = 1;
911 return 0;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000912}
913
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000914/* Import the site module (not into __main__ though) */
915
916static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000917initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000918{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000919 PyObject *m;
920 m = PyImport_ImportModule("site");
921 if (m == NULL) {
Victor Stinner62ce62a2013-07-22 22:53:28 +0200922 fprintf(stderr, "Failed to import the site module\n");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000923 PyErr_Print();
924 Py_Finalize();
925 exit(1);
926 }
927 else {
928 Py_DECREF(m);
929 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000930}
931
Antoine Pitrou05608432009-01-09 18:53:14 +0000932static PyObject*
933create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000934 int fd, int write_mode, char* name,
935 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +0000936{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000937 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
938 const char* mode;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +0000939 const char* newline;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000940 PyObject *line_buffering;
941 int buffering, isatty;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200942 _Py_IDENTIFIER(open);
943 _Py_IDENTIFIER(isatty);
944 _Py_IDENTIFIER(TextIOWrapper);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200945 _Py_IDENTIFIER(name);
946 _Py_IDENTIFIER(mode);
Antoine Pitrou05608432009-01-09 18:53:14 +0000947
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000948 /* stdin is always opened in buffered mode, first because it shouldn't
949 make a difference in common use cases, second because TextIOWrapper
950 depends on the presence of a read1() method which only exists on
951 buffered streams.
952 */
953 if (Py_UnbufferedStdioFlag && write_mode)
954 buffering = 0;
955 else
956 buffering = -1;
957 if (write_mode)
958 mode = "wb";
959 else
960 mode = "rb";
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200961 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
962 fd, mode, buffering,
963 Py_None, Py_None, Py_None, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000964 if (buf == NULL)
965 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000966
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000967 if (buffering) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200968 _Py_IDENTIFIER(raw);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200969 raw = _PyObject_GetAttrId(buf, &PyId_raw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000970 if (raw == NULL)
971 goto error;
972 }
973 else {
974 raw = buf;
975 Py_INCREF(raw);
976 }
Antoine Pitrou05608432009-01-09 18:53:14 +0000977
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000978 text = PyUnicode_FromString(name);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200979 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000980 goto error;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200981 res = _PyObject_CallMethodId(raw, &PyId_isatty, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000982 if (res == NULL)
983 goto error;
984 isatty = PyObject_IsTrue(res);
985 Py_DECREF(res);
986 if (isatty == -1)
987 goto error;
988 if (isatty || Py_UnbufferedStdioFlag)
989 line_buffering = Py_True;
990 else
991 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +0000992
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000993 Py_CLEAR(raw);
994 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +0000995
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +0000996#ifdef MS_WINDOWS
Victor Stinner7b3f0fa2012-08-04 01:28:00 +0200997 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
998 newlines to "\n".
999 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1000 newline = NULL;
1001#else
1002 /* sys.stdin: split lines at "\n".
1003 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1004 newline = "\n";
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +00001005#endif
1006
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001007 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssO",
1008 buf, encoding, errors,
1009 newline, line_buffering);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001010 Py_CLEAR(buf);
1011 if (stream == NULL)
1012 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +00001013
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001014 if (write_mode)
1015 mode = "w";
1016 else
1017 mode = "r";
1018 text = PyUnicode_FromString(mode);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001019 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001020 goto error;
1021 Py_CLEAR(text);
1022 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +00001023
1024error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001025 Py_XDECREF(buf);
1026 Py_XDECREF(stream);
1027 Py_XDECREF(text);
1028 Py_XDECREF(raw);
1029 return NULL;
Antoine Pitrou05608432009-01-09 18:53:14 +00001030}
1031
Antoine Pitrou11942a52011-11-28 19:08:36 +01001032static int
1033is_valid_fd(int fd)
1034{
1035 int dummy_fd;
1036 if (fd < 0 || !_PyVerify_fd(fd))
1037 return 0;
1038 dummy_fd = dup(fd);
1039 if (dummy_fd < 0)
1040 return 0;
1041 close(dummy_fd);
1042 return 1;
1043}
1044
Georg Brandl1a3284e2007-12-02 09:40:06 +00001045/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001046static int
1047initstdio(void)
1048{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001049 PyObject *iomod = NULL, *wrapper;
1050 PyObject *bimod = NULL;
1051 PyObject *m;
1052 PyObject *std = NULL;
1053 int status = 0, fd;
1054 PyObject * encoding_attr;
1055 char *encoding = NULL, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001056
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001057 /* Hack to avoid a nasty recursion issue when Python is invoked
1058 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1059 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1060 goto error;
1061 }
1062 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001063
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001064 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1065 goto error;
1066 }
1067 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001068
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001069 if (!(bimod = PyImport_ImportModule("builtins"))) {
1070 goto error;
1071 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001072
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001073 if (!(iomod = PyImport_ImportModule("io"))) {
1074 goto error;
1075 }
1076 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1077 goto error;
1078 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001079
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001080 /* Set builtins.open */
1081 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001082 Py_DECREF(wrapper);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001083 goto error;
1084 }
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001085 Py_DECREF(wrapper);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001086
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001087 encoding = Py_GETENV("PYTHONIOENCODING");
1088 errors = NULL;
1089 if (encoding) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001090 encoding = _PyMem_Strdup(encoding);
1091 if (encoding == NULL) {
1092 PyErr_NoMemory();
1093 goto error;
1094 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001095 errors = strchr(encoding, ':');
1096 if (errors) {
1097 *errors = '\0';
1098 errors++;
1099 }
1100 }
Martin v. Löwis0f599892008-06-02 11:13:03 +00001101
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001102 /* Set sys.stdin */
1103 fd = fileno(stdin);
1104 /* Under some conditions stdin, stdout and stderr may not be connected
1105 * and fileno() may point to an invalid file descriptor. For example
1106 * GUI apps don't have valid standard streams by default.
1107 */
Antoine Pitrou11942a52011-11-28 19:08:36 +01001108 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001109 std = Py_None;
1110 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001111 }
1112 else {
1113 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1114 if (std == NULL)
1115 goto error;
1116 } /* if (fd < 0) */
1117 PySys_SetObject("__stdin__", std);
1118 PySys_SetObject("stdin", std);
1119 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001120
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001121 /* Set sys.stdout */
1122 fd = fileno(stdout);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001123 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001124 std = Py_None;
1125 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001126 }
1127 else {
1128 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1129 if (std == NULL)
1130 goto error;
1131 } /* if (fd < 0) */
1132 PySys_SetObject("__stdout__", std);
1133 PySys_SetObject("stdout", std);
1134 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001135
Guido van Rossum98297ee2007-11-06 21:34:58 +00001136#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001137 /* Set sys.stderr, replaces the preliminary stderr */
1138 fd = fileno(stderr);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001139 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001140 std = Py_None;
1141 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 }
1143 else {
1144 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1145 if (std == NULL)
1146 goto error;
1147 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +00001148
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001149 /* Same as hack above, pre-import stderr's codec to avoid recursion
1150 when import.c tries to write to stderr in verbose mode. */
1151 encoding_attr = PyObject_GetAttrString(std, "encoding");
1152 if (encoding_attr != NULL) {
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001153 const char * std_encoding;
1154 std_encoding = _PyUnicode_AsString(encoding_attr);
1155 if (std_encoding != NULL) {
1156 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
Antoine Pitrou2fabfac2012-01-18 15:14:46 +01001157 Py_XDECREF(codec_info);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001158 }
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +00001159 Py_DECREF(encoding_attr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001160 }
1161 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +00001162
Victor Stinnerba308832013-07-22 23:55:19 +02001163 if (PySys_SetObject("__stderr__", std) < 0) {
1164 Py_DECREF(std);
1165 goto error;
1166 }
1167 if (PySys_SetObject("stderr", std) < 0) {
1168 Py_DECREF(std);
1169 goto error;
1170 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001171 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001172#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001173
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001174 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001175 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001176 status = -1;
1177 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001178
Victor Stinner49fc8ec2013-07-07 23:30:24 +02001179 PyMem_Free(encoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001180 Py_XDECREF(bimod);
1181 Py_XDECREF(iomod);
1182 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001183}
1184
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001185/* Parse input from a file and execute it */
1186
1187int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001188PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001189 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001190{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001191 if (filename == NULL)
1192 filename = "???";
1193 if (Py_FdIsInteractive(fp, filename)) {
1194 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1195 if (closeit)
1196 fclose(fp);
1197 return err;
1198 }
1199 else
1200 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001201}
1202
1203int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001204PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001205{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001206 PyObject *v;
1207 int ret;
1208 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001209
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001210 if (flags == NULL) {
1211 flags = &local_flags;
1212 local_flags.cf_flags = 0;
1213 }
1214 v = PySys_GetObject("ps1");
1215 if (v == NULL) {
1216 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
1217 Py_XDECREF(v);
1218 }
1219 v = PySys_GetObject("ps2");
1220 if (v == NULL) {
1221 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
1222 Py_XDECREF(v);
1223 }
1224 for (;;) {
1225 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
1226 PRINT_TOTAL_REFS();
1227 if (ret == E_EOF)
1228 return 0;
1229 /*
1230 if (ret == E_NOMEM)
1231 return -1;
1232 */
1233 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001234}
1235
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001236/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001237static int PARSER_FLAGS(PyCompilerFlags *flags)
1238{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001239 int parser_flags = 0;
1240 if (!flags)
1241 return 0;
1242 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1243 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1244 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1245 parser_flags |= PyPARSE_IGNORE_COOKIE;
1246 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1247 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1248 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001249}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001250
Thomas Wouters89f507f2006-12-13 04:49:30 +00001251#if 0
1252/* Keep an example of flags with future keyword support. */
1253#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001254 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1255 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1256 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1257 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001258#endif
1259
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001260int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001261PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001262{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001263 PyObject *m, *d, *v, *w, *oenc = NULL;
1264 mod_ty mod;
1265 PyArena *arena;
1266 char *ps1 = "", *ps2 = "", *enc = NULL;
1267 int errcode = 0;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001268 _Py_IDENTIFIER(encoding);
Tim Petersfe2127d2001-07-16 05:37:24 +00001269
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001270 if (fp == stdin) {
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001271 /* Fetch encoding from sys.stdin if possible. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001272 v = PySys_GetObject("stdin");
Benjamin Petersonfe1b22a2013-04-29 10:23:08 -04001273 if (v && v != Py_None) {
1274 oenc = _PyObject_GetAttrId(v, &PyId_encoding);
1275 if (oenc)
1276 enc = _PyUnicode_AsString(oenc);
1277 if (!enc)
1278 PyErr_Clear();
1279 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001280 }
1281 v = PySys_GetObject("ps1");
1282 if (v != NULL) {
1283 v = PyObject_Str(v);
1284 if (v == NULL)
1285 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001286 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001287 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001288 if (ps1 == NULL) {
1289 PyErr_Clear();
1290 ps1 = "";
1291 }
1292 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001293 }
1294 w = PySys_GetObject("ps2");
1295 if (w != NULL) {
1296 w = PyObject_Str(w);
1297 if (w == NULL)
1298 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001299 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001300 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001301 if (ps2 == NULL) {
1302 PyErr_Clear();
1303 ps2 = "";
1304 }
1305 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001306 }
1307 arena = PyArena_New();
1308 if (arena == NULL) {
1309 Py_XDECREF(v);
1310 Py_XDECREF(w);
1311 Py_XDECREF(oenc);
1312 return -1;
1313 }
1314 mod = PyParser_ASTFromFile(fp, filename, enc,
1315 Py_single_input, ps1, ps2,
1316 flags, &errcode, arena);
1317 Py_XDECREF(v);
1318 Py_XDECREF(w);
1319 Py_XDECREF(oenc);
1320 if (mod == NULL) {
1321 PyArena_Free(arena);
1322 if (errcode == E_EOF) {
1323 PyErr_Clear();
1324 return E_EOF;
1325 }
1326 PyErr_Print();
1327 return -1;
1328 }
1329 m = PyImport_AddModule("__main__");
1330 if (m == NULL) {
1331 PyArena_Free(arena);
1332 return -1;
1333 }
1334 d = PyModule_GetDict(m);
1335 v = run_mod(mod, filename, d, d, flags, arena);
1336 PyArena_Free(arena);
1337 flush_io();
1338 if (v == NULL) {
1339 PyErr_Print();
1340 return -1;
1341 }
1342 Py_DECREF(v);
1343 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001344}
1345
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001346/* Check whether a file maybe a pyc file: Look at the extension,
1347 the file type, and, if we may close it, at the first few bytes. */
1348
1349static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001350maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001351{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001352 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1353 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001354
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001355 /* Only look into the file if we are allowed to close it, since
1356 it then should also be seekable. */
1357 if (closeit) {
1358 /* Read only two bytes of the magic. If the file was opened in
1359 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1360 be read as they are on disk. */
1361 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1362 unsigned char buf[2];
1363 /* Mess: In case of -x, the stream is NOT at its start now,
1364 and ungetc() was used to push back the first newline,
1365 which makes the current stream position formally undefined,
1366 and a x-platform nightmare.
1367 Unfortunately, we have no direct way to know whether -x
1368 was specified. So we use a terrible hack: if the current
1369 stream position is not 0, we assume -x was specified, and
1370 give up. Bug 132850 on SourceForge spells out the
1371 hopelessness of trying anything else (fseek and ftell
1372 don't work predictably x-platform for text-mode files).
1373 */
1374 int ispyc = 0;
1375 if (ftell(fp) == 0) {
1376 if (fread(buf, 1, 2, fp) == 2 &&
1377 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1378 ispyc = 1;
1379 rewind(fp);
1380 }
1381 return ispyc;
1382 }
1383 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001384}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001385
Antoine Pitrou32d483c2013-07-30 21:01:23 +02001386static int
1387set_main_loader(PyObject *d, const char *filename, const char *loader_name)
Nick Coghlan85e729e2012-07-15 18:09:52 +10001388{
1389 PyInterpreterState *interp;
1390 PyThreadState *tstate;
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001391 PyObject *filename_obj, *loader_type, *loader;
Nick Coghlanb7a58942012-07-15 23:21:08 +10001392 int result = 0;
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001393
1394 filename_obj = PyUnicode_DecodeFSDefault(filename);
1395 if (filename_obj == NULL)
1396 return -1;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001397 /* Get current thread state and interpreter pointer */
1398 tstate = PyThreadState_GET();
1399 interp = tstate->interp;
Nick Coghlan3f94cbf2012-07-15 19:10:39 +10001400 loader_type = PyObject_GetAttrString(interp->importlib, loader_name);
1401 if (loader_type == NULL) {
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001402 Py_DECREF(filename_obj);
Nick Coghlan3f94cbf2012-07-15 19:10:39 +10001403 return -1;
1404 }
Andrew Svetlov90c0eb22012-11-01 14:51:14 +02001405 loader = PyObject_CallFunction(loader_type, "sN", "__main__", filename_obj);
Nick Coghlanb7a58942012-07-15 23:21:08 +10001406 Py_DECREF(loader_type);
1407 if (loader == NULL) {
Nick Coghlan85e729e2012-07-15 18:09:52 +10001408 return -1;
1409 }
Nick Coghlanb7a58942012-07-15 23:21:08 +10001410 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
1411 result = -1;
1412 }
Nick Coghlan85e729e2012-07-15 18:09:52 +10001413 Py_DECREF(loader);
Nick Coghlanb7a58942012-07-15 23:21:08 +10001414 return result;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001415}
1416
1417int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001418PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001419 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001420{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001421 PyObject *m, *d, *v;
1422 const char *ext;
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001423 int set_file_name = 0, ret = -1;
Victor Stinner0fcab4a2011-01-04 12:59:15 +00001424 size_t len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001425
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001426 m = PyImport_AddModule("__main__");
1427 if (m == NULL)
1428 return -1;
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001429 Py_INCREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001430 d = PyModule_GetDict(m);
1431 if (PyDict_GetItemString(d, "__file__") == NULL) {
1432 PyObject *f;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001433 f = PyUnicode_DecodeFSDefault(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001434 if (f == NULL)
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001435 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001436 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1437 Py_DECREF(f);
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001438 goto done;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001439 }
Barry Warsaw916048d2011-09-20 14:45:44 -04001440 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0) {
1441 Py_DECREF(f);
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001442 goto done;
Barry Warsaw916048d2011-09-20 14:45:44 -04001443 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001444 set_file_name = 1;
1445 Py_DECREF(f);
1446 }
1447 len = strlen(filename);
1448 ext = filename + len - (len > 4 ? 4 : 0);
1449 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Christian Heimes04ac4c12012-09-11 15:47:28 +02001450 FILE *pyc_fp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001451 /* Try to run a pyc file. First, re-open in binary */
1452 if (closeit)
1453 fclose(fp);
Christian Heimes04ac4c12012-09-11 15:47:28 +02001454 if ((pyc_fp = fopen(filename, "rb")) == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001455 fprintf(stderr, "python: Can't reopen .pyc file\n");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001456 goto done;
1457 }
1458 /* Turn on optimization if a .pyo file is given */
1459 if (strcmp(ext, ".pyo") == 0)
1460 Py_OptimizeFlag = 1;
Nick Coghlan85e729e2012-07-15 18:09:52 +10001461
1462 if (set_main_loader(d, filename, "SourcelessFileLoader") < 0) {
1463 fprintf(stderr, "python: failed to set __main__.__loader__\n");
1464 ret = -1;
Christian Heimes04ac4c12012-09-11 15:47:28 +02001465 fclose(pyc_fp);
Nick Coghlan85e729e2012-07-15 18:09:52 +10001466 goto done;
1467 }
Christian Heimes04ac4c12012-09-11 15:47:28 +02001468 v = run_pyc_file(pyc_fp, filename, d, d, flags);
1469 fclose(pyc_fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001470 } else {
Nick Coghlan85e729e2012-07-15 18:09:52 +10001471 /* When running from stdin, leave __main__.__loader__ alone */
1472 if (strcmp(filename, "<stdin>") != 0 &&
1473 set_main_loader(d, filename, "SourceFileLoader") < 0) {
1474 fprintf(stderr, "python: failed to set __main__.__loader__\n");
1475 ret = -1;
1476 goto done;
1477 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001478 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1479 closeit, flags);
1480 }
1481 flush_io();
1482 if (v == NULL) {
1483 PyErr_Print();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001484 goto done;
1485 }
1486 Py_DECREF(v);
1487 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001488 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001489 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1490 PyErr_Clear();
Hynek Schlawack5c6b3e22012-11-07 09:02:24 +01001491 Py_DECREF(m);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001492 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001493}
1494
1495int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001496PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001497{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001498 PyObject *m, *d, *v;
1499 m = PyImport_AddModule("__main__");
1500 if (m == NULL)
1501 return -1;
1502 d = PyModule_GetDict(m);
1503 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1504 if (v == NULL) {
1505 PyErr_Print();
1506 return -1;
1507 }
1508 Py_DECREF(v);
1509 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001510}
1511
Barry Warsaw035574d1997-08-29 22:07:17 +00001512static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001513parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001514 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001515{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001516 long hold;
1517 PyObject *v;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001518 _Py_IDENTIFIER(msg);
1519 _Py_IDENTIFIER(filename);
1520 _Py_IDENTIFIER(lineno);
1521 _Py_IDENTIFIER(offset);
1522 _Py_IDENTIFIER(text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001523
Benjamin Peterson80d50422012-04-03 00:30:38 -04001524 *message = NULL;
1525
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001526 /* new style errors. `err' is an instance */
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001527 *message = _PyObject_GetAttrId(err, &PyId_msg);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001528 if (!*message)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001529 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001530
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001531 v = _PyObject_GetAttrId(err, &PyId_filename);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001532 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001533 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001534 if (v == Py_None) {
1535 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001536 *filename = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001537 }
1538 else {
1539 *filename = _PyUnicode_AsString(v);
1540 Py_DECREF(v);
1541 if (!*filename)
1542 goto finally;
1543 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001544
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001545 v = _PyObject_GetAttrId(err, &PyId_lineno);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001546 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001547 goto finally;
1548 hold = PyLong_AsLong(v);
1549 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001550 if (hold < 0 && PyErr_Occurred())
1551 goto finally;
1552 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001553
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001554 v = _PyObject_GetAttrId(err, &PyId_offset);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001555 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001556 goto finally;
1557 if (v == Py_None) {
1558 *offset = -1;
1559 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001560 } else {
1561 hold = PyLong_AsLong(v);
1562 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001563 if (hold < 0 && PyErr_Occurred())
1564 goto finally;
1565 *offset = (int)hold;
1566 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001567
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001568 v = _PyObject_GetAttrId(err, &PyId_text);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001569 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001570 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001571 if (v == Py_None) {
1572 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001573 *text = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001574 }
1575 else {
1576 *text = _PyUnicode_AsString(v);
1577 Py_DECREF(v);
1578 if (!*text)
1579 goto finally;
1580 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001581 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001582
1583finally:
Benjamin Peterson80d50422012-04-03 00:30:38 -04001584 Py_XDECREF(*message);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001585 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001586}
1587
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001588void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001589PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001590{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001591 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001592}
1593
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001594static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001595print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001596{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001597 char *nl;
1598 if (offset >= 0) {
Benjamin Petersona95e9772010-10-29 03:28:14 +00001599 if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n')
1600 offset--;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001601 for (;;) {
1602 nl = strchr(text, '\n');
1603 if (nl == NULL || nl-text >= offset)
1604 break;
1605 offset -= (int)(nl+1-text);
1606 text = nl+1;
1607 }
1608 while (*text == ' ' || *text == '\t') {
1609 text++;
1610 offset--;
1611 }
1612 }
1613 PyFile_WriteString(" ", f);
1614 PyFile_WriteString(text, f);
1615 if (*text == '\0' || text[strlen(text)-1] != '\n')
1616 PyFile_WriteString("\n", f);
1617 if (offset == -1)
1618 return;
1619 PyFile_WriteString(" ", f);
Benjamin Petersona95e9772010-10-29 03:28:14 +00001620 while (--offset > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001621 PyFile_WriteString(" ", f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001622 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001623}
1624
Guido van Rossum66e8e862001-03-23 17:54:43 +00001625static void
1626handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001627{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001628 PyObject *exception, *value, *tb;
1629 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001630
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001631 if (Py_InspectFlag)
1632 /* Don't exit if -i flag was given. This flag is set to 0
1633 * when entering interactive mode for inspecting. */
1634 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001635
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001636 PyErr_Fetch(&exception, &value, &tb);
1637 fflush(stdout);
1638 if (value == NULL || value == Py_None)
1639 goto done;
1640 if (PyExceptionInstance_Check(value)) {
1641 /* The error code should be in the `code' attribute. */
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001642 _Py_IDENTIFIER(code);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001643 PyObject *code = _PyObject_GetAttrId(value, &PyId_code);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001644 if (code) {
1645 Py_DECREF(value);
1646 value = code;
1647 if (value == Py_None)
1648 goto done;
1649 }
1650 /* If we failed to dig out the 'code' attribute,
1651 just let the else clause below print the error. */
1652 }
1653 if (PyLong_Check(value))
1654 exitcode = (int)PyLong_AsLong(value);
1655 else {
Victor Stinnere9fb3192010-05-17 08:58:51 +00001656 PyObject *sys_stderr = PySys_GetObject("stderr");
Victor Stinner7126dbc2010-05-21 23:45:42 +00001657 if (sys_stderr != NULL && sys_stderr != Py_None) {
1658 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1659 } else {
1660 PyObject_Print(value, stderr, Py_PRINT_RAW);
1661 fflush(stderr);
1662 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001663 PySys_WriteStderr("\n");
1664 exitcode = 1;
1665 }
Tim Peterscf615b52003-04-19 18:47:02 +00001666 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001667 /* Restore and clear the exception info, in order to properly decref
1668 * the exception, value, and traceback. If we just exit instead,
1669 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1670 * some finalizers from running.
1671 */
1672 PyErr_Restore(exception, value, tb);
1673 PyErr_Clear();
1674 Py_Exit(exitcode);
1675 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001676}
1677
1678void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001679PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001680{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001681 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001682
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001683 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1684 handle_system_exit();
1685 }
1686 PyErr_Fetch(&exception, &v, &tb);
1687 if (exception == NULL)
1688 return;
1689 PyErr_NormalizeException(&exception, &v, &tb);
1690 if (tb == NULL) {
1691 tb = Py_None;
1692 Py_INCREF(tb);
1693 }
1694 PyException_SetTraceback(v, tb);
1695 if (exception == NULL)
1696 return;
1697 /* Now we know v != NULL too */
1698 if (set_sys_last_vars) {
1699 PySys_SetObject("last_type", exception);
1700 PySys_SetObject("last_value", v);
1701 PySys_SetObject("last_traceback", tb);
1702 }
1703 hook = PySys_GetObject("excepthook");
1704 if (hook) {
1705 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1706 PyObject *result = PyEval_CallObject(hook, args);
1707 if (result == NULL) {
1708 PyObject *exception2, *v2, *tb2;
1709 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1710 handle_system_exit();
1711 }
1712 PyErr_Fetch(&exception2, &v2, &tb2);
1713 PyErr_NormalizeException(&exception2, &v2, &tb2);
1714 /* It should not be possible for exception2 or v2
1715 to be NULL. However PyErr_Display() can't
1716 tolerate NULLs, so just be safe. */
1717 if (exception2 == NULL) {
1718 exception2 = Py_None;
1719 Py_INCREF(exception2);
1720 }
1721 if (v2 == NULL) {
1722 v2 = Py_None;
1723 Py_INCREF(v2);
1724 }
1725 fflush(stdout);
1726 PySys_WriteStderr("Error in sys.excepthook:\n");
1727 PyErr_Display(exception2, v2, tb2);
1728 PySys_WriteStderr("\nOriginal exception was:\n");
1729 PyErr_Display(exception, v, tb);
1730 Py_DECREF(exception2);
1731 Py_DECREF(v2);
1732 Py_XDECREF(tb2);
1733 }
1734 Py_XDECREF(result);
1735 Py_XDECREF(args);
1736 } else {
1737 PySys_WriteStderr("sys.excepthook is missing\n");
1738 PyErr_Display(exception, v, tb);
1739 }
1740 Py_XDECREF(exception);
1741 Py_XDECREF(v);
1742 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001743}
1744
Benjamin Petersone6528212008-07-15 15:32:09 +00001745static void
1746print_exception(PyObject *f, PyObject *value)
1747{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001748 int err = 0;
1749 PyObject *type, *tb;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001750 _Py_IDENTIFIER(print_file_and_line);
Benjamin Petersone6528212008-07-15 15:32:09 +00001751
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001752 if (!PyExceptionInstance_Check(value)) {
1753 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1754 PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1755 PyFile_WriteString(" found\n", f);
1756 return;
1757 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001758
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001759 Py_INCREF(value);
1760 fflush(stdout);
1761 type = (PyObject *) Py_TYPE(value);
1762 tb = PyException_GetTraceback(value);
1763 if (tb && tb != Py_None)
1764 err = PyTraceBack_Print(tb, f);
1765 if (err == 0 &&
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001766 _PyObject_HasAttrId(value, &PyId_print_file_and_line))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001767 {
1768 PyObject *message;
1769 const char *filename, *text;
1770 int lineno, offset;
1771 if (!parse_syntax_error(value, &message, &filename,
1772 &lineno, &offset, &text))
1773 PyErr_Clear();
1774 else {
1775 char buf[10];
1776 PyFile_WriteString(" File \"", f);
1777 if (filename == NULL)
1778 PyFile_WriteString("<string>", f);
1779 else
1780 PyFile_WriteString(filename, f);
1781 PyFile_WriteString("\", line ", f);
1782 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
1783 PyFile_WriteString(buf, f);
1784 PyFile_WriteString("\n", f);
1785 if (text != NULL)
1786 print_error_text(f, offset, text);
1787 Py_DECREF(value);
1788 value = message;
1789 /* Can't be bothered to check all those
1790 PyFile_WriteString() calls */
1791 if (PyErr_Occurred())
1792 err = -1;
1793 }
1794 }
1795 if (err) {
1796 /* Don't do anything else */
1797 }
1798 else {
1799 PyObject* moduleName;
1800 char* className;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001801 _Py_IDENTIFIER(__module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001802 assert(PyExceptionClass_Check(type));
1803 className = PyExceptionClass_Name(type);
1804 if (className != NULL) {
1805 char *dot = strrchr(className, '.');
1806 if (dot != NULL)
1807 className = dot+1;
1808 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001809
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001810 moduleName = _PyObject_GetAttrId(type, &PyId___module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001811 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1812 {
Victor Stinner13b21bd2011-05-26 14:25:13 +02001813 Py_XDECREF(moduleName);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001814 err = PyFile_WriteString("<unknown>", f);
1815 }
1816 else {
1817 char* modstr = _PyUnicode_AsString(moduleName);
1818 if (modstr && strcmp(modstr, "builtins"))
1819 {
1820 err = PyFile_WriteString(modstr, f);
1821 err += PyFile_WriteString(".", f);
1822 }
1823 Py_DECREF(moduleName);
1824 }
1825 if (err == 0) {
1826 if (className == NULL)
1827 err = PyFile_WriteString("<unknown>", f);
1828 else
1829 err = PyFile_WriteString(className, f);
1830 }
1831 }
1832 if (err == 0 && (value != Py_None)) {
1833 PyObject *s = PyObject_Str(value);
1834 /* only print colon if the str() of the
1835 object is not the empty string
1836 */
1837 if (s == NULL)
1838 err = -1;
1839 else if (!PyUnicode_Check(s) ||
Victor Stinnere251d6d2011-11-20 19:20:00 +01001840 PyUnicode_GetLength(s) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001841 err = PyFile_WriteString(": ", f);
1842 if (err == 0)
1843 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1844 Py_XDECREF(s);
1845 }
1846 /* try to write a newline in any case */
1847 err += PyFile_WriteString("\n", f);
1848 Py_XDECREF(tb);
1849 Py_DECREF(value);
1850 /* If an error happened here, don't show it.
1851 XXX This is wrong, but too many callers rely on this behavior. */
1852 if (err != 0)
1853 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001854}
1855
1856static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001857 "\nThe above exception was the direct cause "
1858 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001859
1860static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001861 "\nDuring handling of the above exception, "
1862 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001863
1864static void
1865print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
1866{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001867 int err = 0, res;
1868 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00001869
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001870 if (seen != NULL) {
1871 /* Exception chaining */
1872 if (PySet_Add(seen, value) == -1)
1873 PyErr_Clear();
1874 else if (PyExceptionInstance_Check(value)) {
1875 cause = PyException_GetCause(value);
1876 context = PyException_GetContext(value);
Benjamin Petersond5a1c442012-05-14 22:09:31 -07001877 if (cause) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001878 res = PySet_Contains(seen, cause);
1879 if (res == -1)
1880 PyErr_Clear();
1881 if (res == 0) {
1882 print_exception_recursive(
1883 f, cause, seen);
1884 err |= PyFile_WriteString(
1885 cause_message, f);
1886 }
1887 }
Benjamin Petersond5a1c442012-05-14 22:09:31 -07001888 else if (context &&
1889 !((PyBaseExceptionObject *)value)->suppress_context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001890 res = PySet_Contains(seen, context);
1891 if (res == -1)
1892 PyErr_Clear();
1893 if (res == 0) {
1894 print_exception_recursive(
1895 f, context, seen);
1896 err |= PyFile_WriteString(
1897 context_message, f);
1898 }
1899 }
1900 Py_XDECREF(context);
1901 Py_XDECREF(cause);
1902 }
1903 }
1904 print_exception(f, value);
1905 if (err != 0)
1906 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001907}
1908
Thomas Wouters477c8d52006-05-27 19:21:47 +00001909void
1910PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001911{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001912 PyObject *seen;
1913 PyObject *f = PySys_GetObject("stderr");
1914 if (f == Py_None) {
1915 /* pass */
1916 }
1917 else if (f == NULL) {
1918 _PyObject_Dump(value);
1919 fprintf(stderr, "lost sys.stderr\n");
1920 }
1921 else {
1922 /* We choose to ignore seen being possibly NULL, and report
1923 at least the main exception (it could be a MemoryError).
1924 */
1925 seen = PySet_New(NULL);
1926 if (seen == NULL)
1927 PyErr_Clear();
1928 print_exception_recursive(f, value, seen);
1929 Py_XDECREF(seen);
1930 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001931}
1932
Guido van Rossum82598051997-03-05 00:20:32 +00001933PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001934PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001935 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001936{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001937 PyObject *ret = NULL;
1938 mod_ty mod;
1939 PyArena *arena = PyArena_New();
1940 if (arena == NULL)
1941 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001942
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001943 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
1944 if (mod != NULL)
1945 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
1946 PyArena_Free(arena);
1947 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001948}
1949
1950PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001951PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001952 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001953{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001954 PyObject *ret;
1955 mod_ty mod;
1956 PyArena *arena = PyArena_New();
1957 if (arena == NULL)
1958 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001959
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001960 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
1961 flags, NULL, arena);
1962 if (closeit)
1963 fclose(fp);
1964 if (mod == NULL) {
1965 PyArena_Free(arena);
1966 return NULL;
1967 }
1968 ret = run_mod(mod, filename, globals, locals, flags, arena);
1969 PyArena_Free(arena);
1970 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001971}
1972
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001973static void
1974flush_io(void)
1975{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001976 PyObject *f, *r;
1977 PyObject *type, *value, *traceback;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001978 _Py_IDENTIFIER(flush);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001979
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001980 /* Save the current exception */
1981 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001982
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001983 f = PySys_GetObject("stderr");
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 }
1991 f = PySys_GetObject("stdout");
1992 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001993 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001994 if (r)
1995 Py_DECREF(r);
1996 else
1997 PyErr_Clear();
1998 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001999
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002000 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00002001}
2002
Guido van Rossum82598051997-03-05 00:20:32 +00002003static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002004run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002005 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002006{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002007 PyCodeObject *co;
2008 PyObject *v;
2009 co = PyAST_Compile(mod, filename, flags, arena);
2010 if (co == NULL)
2011 return NULL;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002012 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002013 Py_DECREF(co);
2014 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002015}
2016
Guido van Rossum82598051997-03-05 00:20:32 +00002017static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002018run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002019 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00002020{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002021 PyCodeObject *co;
2022 PyObject *v;
2023 long magic;
2024 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00002025
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002026 magic = PyMarshal_ReadLongFromFile(fp);
2027 if (magic != PyImport_GetMagicNumber()) {
2028 PyErr_SetString(PyExc_RuntimeError,
2029 "Bad magic number in .pyc file");
2030 return NULL;
2031 }
Antoine Pitrou5136ac02012-01-13 18:52:16 +01002032 /* Skip mtime and size */
2033 (void) PyMarshal_ReadLongFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002034 (void) PyMarshal_ReadLongFromFile(fp);
2035 v = PyMarshal_ReadLastObjectFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002036 if (v == NULL || !PyCode_Check(v)) {
2037 Py_XDECREF(v);
2038 PyErr_SetString(PyExc_RuntimeError,
2039 "Bad code object in .pyc file");
2040 return NULL;
2041 }
2042 co = (PyCodeObject *)v;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002043 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002044 if (v && flags)
2045 flags->cf_flags |= (co->co_flags & PyCF_MASK);
2046 Py_DECREF(co);
2047 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00002048}
2049
Guido van Rossum82598051997-03-05 00:20:32 +00002050PyObject *
Georg Brandl8334fd92010-12-04 10:26:46 +00002051Py_CompileStringExFlags(const char *str, const char *filename, int start,
2052 PyCompilerFlags *flags, int optimize)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00002053{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002054 PyCodeObject *co;
2055 mod_ty mod;
2056 PyArena *arena = PyArena_New();
2057 if (arena == NULL)
2058 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002059
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002060 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
2061 if (mod == NULL) {
2062 PyArena_Free(arena);
2063 return NULL;
2064 }
2065 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
2066 PyObject *result = PyAST_mod2obj(mod);
2067 PyArena_Free(arena);
2068 return result;
2069 }
Georg Brandl8334fd92010-12-04 10:26:46 +00002070 co = PyAST_CompileEx(mod, filename, flags, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002071 PyArena_Free(arena);
2072 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00002073}
2074
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00002075/* For use in Py_LIMITED_API */
2076#undef Py_CompileString
2077PyObject *
2078PyCompileString(const char *str, const char *filename, int start)
2079{
2080 return Py_CompileStringFlags(str, filename, start, NULL);
2081}
2082
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002083struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002084Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002085{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002086 struct symtable *st;
2087 mod_ty mod;
2088 PyCompilerFlags flags;
2089 PyArena *arena = PyArena_New();
2090 if (arena == NULL)
2091 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002092
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002093 flags.cf_flags = 0;
2094 mod = PyParser_ASTFromString(str, filename, start, &flags, arena);
2095 if (mod == NULL) {
2096 PyArena_Free(arena);
2097 return NULL;
2098 }
2099 st = PySymtable_Build(mod, filename, 0);
2100 PyArena_Free(arena);
2101 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002102}
2103
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002104/* Preferred access to parser is through AST. */
2105mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002106PyParser_ASTFromString(const char *s, const char *filename, int start,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002107 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002108{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002109 mod_ty mod;
2110 PyCompilerFlags localflags;
2111 perrdetail err;
2112 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002113
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002114 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename,
2115 &_PyParser_Grammar, start, &err,
2116 &iflags);
2117 if (flags == NULL) {
2118 localflags.cf_flags = 0;
2119 flags = &localflags;
2120 }
2121 if (n) {
2122 flags->cf_flags |= iflags & PyCF_MASK;
2123 mod = PyAST_FromNode(n, flags, filename, arena);
2124 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002125 }
2126 else {
2127 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002128 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002129 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002130 err_free(&err);
2131 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002132}
2133
2134mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00002135PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002136 int start, char *ps1,
2137 char *ps2, PyCompilerFlags *flags, int *errcode,
2138 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002139{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002140 mod_ty mod;
2141 PyCompilerFlags localflags;
2142 perrdetail err;
2143 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002144
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002145 node *n = PyParser_ParseFileFlagsEx(fp, filename, enc,
2146 &_PyParser_Grammar,
2147 start, ps1, ps2, &err, &iflags);
2148 if (flags == NULL) {
2149 localflags.cf_flags = 0;
2150 flags = &localflags;
2151 }
2152 if (n) {
2153 flags->cf_flags |= iflags & PyCF_MASK;
2154 mod = PyAST_FromNode(n, flags, filename, arena);
2155 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002156 }
2157 else {
2158 err_input(&err);
2159 if (errcode)
2160 *errcode = err.error;
Victor Stinner7f2fee32011-04-05 00:39:01 +02002161 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002162 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002163 err_free(&err);
2164 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002165}
2166
Guido van Rossuma110aa61994-08-29 12:50:44 +00002167/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002168
Guido van Rossuma110aa61994-08-29 12:50:44 +00002169node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002170PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002171{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002172 perrdetail err;
2173 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
2174 &_PyParser_Grammar,
2175 start, NULL, NULL, &err, flags);
2176 if (n == NULL)
2177 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002178 err_free(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002179
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002180 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002181}
2182
Guido van Rossuma110aa61994-08-29 12:50:44 +00002183/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002184
Guido van Rossuma110aa61994-08-29 12:50:44 +00002185node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002186PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00002187{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002188 perrdetail err;
2189 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
2190 start, &err, flags);
2191 if (n == NULL)
2192 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002193 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002194 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00002195}
2196
2197node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002198PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002199 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002200{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002201 perrdetail err;
2202 node *n = PyParser_ParseStringFlagsFilename(str, filename,
2203 &_PyParser_Grammar, start, &err, flags);
2204 if (n == NULL)
2205 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002206 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002207 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00002208}
2209
2210node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002211PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002212{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002213 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00002214}
2215
Guido van Rossum66ebd912003-04-17 16:02:26 +00002216/* May want to move a more generalized form of this to parsetok.c or
2217 even parser modules. */
2218
2219void
Victor Stinner7f2fee32011-04-05 00:39:01 +02002220PyParser_ClearError(perrdetail *err)
2221{
2222 err_free(err);
2223}
2224
2225void
Guido van Rossum66ebd912003-04-17 16:02:26 +00002226PyParser_SetError(perrdetail *err)
2227{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002228 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00002229}
2230
Victor Stinner7f2fee32011-04-05 00:39:01 +02002231static void
2232err_free(perrdetail *err)
2233{
2234 Py_CLEAR(err->filename);
2235}
2236
Guido van Rossuma110aa61994-08-29 12:50:44 +00002237/* Set the error appropriate to the given input error code (see errcode.h) */
2238
2239static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002240err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00002241{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002242 PyObject *v, *w, *errtype, *errtext;
2243 PyObject *msg_obj = NULL;
2244 char *msg = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002245
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002246 errtype = PyExc_SyntaxError;
2247 switch (err->error) {
2248 case E_ERROR:
2249 return;
2250 case E_SYNTAX:
2251 errtype = PyExc_IndentationError;
2252 if (err->expected == INDENT)
2253 msg = "expected an indented block";
2254 else if (err->token == INDENT)
2255 msg = "unexpected indent";
2256 else if (err->token == DEDENT)
2257 msg = "unexpected unindent";
2258 else {
2259 errtype = PyExc_SyntaxError;
2260 msg = "invalid syntax";
2261 }
2262 break;
2263 case E_TOKEN:
2264 msg = "invalid token";
2265 break;
2266 case E_EOFS:
2267 msg = "EOF while scanning triple-quoted string literal";
2268 break;
2269 case E_EOLS:
2270 msg = "EOL while scanning string literal";
2271 break;
2272 case E_INTR:
2273 if (!PyErr_Occurred())
2274 PyErr_SetNone(PyExc_KeyboardInterrupt);
2275 goto cleanup;
2276 case E_NOMEM:
2277 PyErr_NoMemory();
2278 goto cleanup;
2279 case E_EOF:
2280 msg = "unexpected EOF while parsing";
2281 break;
2282 case E_TABSPACE:
2283 errtype = PyExc_TabError;
2284 msg = "inconsistent use of tabs and spaces in indentation";
2285 break;
2286 case E_OVERFLOW:
2287 msg = "expression too long";
2288 break;
2289 case E_DEDENT:
2290 errtype = PyExc_IndentationError;
2291 msg = "unindent does not match any outer indentation level";
2292 break;
2293 case E_TOODEEP:
2294 errtype = PyExc_IndentationError;
2295 msg = "too many levels of indentation";
2296 break;
2297 case E_DECODE: {
2298 PyObject *type, *value, *tb;
2299 PyErr_Fetch(&type, &value, &tb);
2300 msg = "unknown decode error";
2301 if (value != NULL)
2302 msg_obj = PyObject_Str(value);
2303 Py_XDECREF(type);
2304 Py_XDECREF(value);
2305 Py_XDECREF(tb);
2306 break;
2307 }
2308 case E_LINECONT:
2309 msg = "unexpected character after line continuation character";
2310 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002311
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002312 case E_IDENTIFIER:
2313 msg = "invalid character in identifier";
2314 break;
Meador Ingefa21bf02012-01-19 01:08:41 -06002315 case E_BADSINGLE:
2316 msg = "multiple statements found while compiling a single statement";
2317 break;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002318 default:
2319 fprintf(stderr, "error=%d\n", err->error);
2320 msg = "unknown parsing error";
2321 break;
2322 }
2323 /* err->text may not be UTF-8 in case of decoding errors.
2324 Explicitly convert to an object. */
2325 if (!err->text) {
2326 errtext = Py_None;
2327 Py_INCREF(Py_None);
2328 } else {
2329 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
2330 "replace");
2331 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002332 v = Py_BuildValue("(OiiN)", err->filename,
2333 err->lineno, err->offset, errtext);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002334 if (v != NULL) {
2335 if (msg_obj)
2336 w = Py_BuildValue("(OO)", msg_obj, v);
2337 else
2338 w = Py_BuildValue("(sO)", msg, v);
2339 } else
2340 w = NULL;
2341 Py_XDECREF(v);
2342 PyErr_SetObject(errtype, w);
2343 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002344cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002345 Py_XDECREF(msg_obj);
2346 if (err->text != NULL) {
2347 PyObject_FREE(err->text);
2348 err->text = NULL;
2349 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002350}
2351
2352/* Print fatal error message and abort */
2353
2354void
Tim Peters7c321a82002-07-09 02:57:01 +00002355Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002356{
Victor Stinner024e37a2011-03-31 01:31:06 +02002357 const int fd = fileno(stderr);
2358 PyThreadState *tstate;
2359
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002360 fprintf(stderr, "Fatal Python error: %s\n", msg);
2361 fflush(stderr); /* it helps in Windows debug build */
2362 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002363 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002364 }
Victor Stinner024e37a2011-03-31 01:31:06 +02002365 else {
2366 tstate = _Py_atomic_load_relaxed(&_PyThreadState_Current);
2367 if (tstate != NULL) {
2368 fputc('\n', stderr);
2369 fflush(stderr);
Victor Stinner7bba62f2011-05-07 12:43:00 +02002370 _Py_DumpTracebackThreads(fd, tstate->interp, tstate);
Victor Stinner024e37a2011-03-31 01:31:06 +02002371 }
Victor Stinnerd727e232011-04-01 12:13:55 +02002372 _PyFaulthandler_Fini();
Victor Stinner024e37a2011-03-31 01:31:06 +02002373 }
2374
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002375#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002376 {
2377 size_t len = strlen(msg);
2378 WCHAR* buffer;
2379 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002380
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002381 /* Convert the message to wchar_t. This uses a simple one-to-one
2382 conversion, assuming that the this error message actually uses ASCII
2383 only. If this ceases to be true, we will have to convert. */
2384 buffer = alloca( (len+1) * (sizeof *buffer));
2385 for( i=0; i<=len; ++i)
2386 buffer[i] = msg[i];
2387 OutputDebugStringW(L"Fatal Python error: ");
2388 OutputDebugStringW(buffer);
2389 OutputDebugStringW(L"\n");
2390 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002391#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002392 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002393#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002394#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002395 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002396}
2397
2398/* Clean up and exit */
2399
Guido van Rossuma110aa61994-08-29 12:50:44 +00002400#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002401#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002402#endif
2403
Collin Winter670e6922007-03-21 02:57:17 +00002404static void (*pyexitfunc)(void) = NULL;
2405/* For the atexit module. */
2406void _Py_PyAtExit(void (*func)(void))
2407{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002408 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002409}
2410
2411static void
2412call_py_exitfuncs(void)
2413{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002414 if (pyexitfunc == NULL)
2415 return;
Collin Winter670e6922007-03-21 02:57:17 +00002416
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002417 (*pyexitfunc)();
2418 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002419}
2420
Antoine Pitrou011bd622009-10-20 21:52:47 +00002421/* Wait until threading._shutdown completes, provided
2422 the threading module was imported in the first place.
2423 The shutdown routine will wait until all non-daemon
2424 "threading" threads have completed. */
2425static void
2426wait_for_thread_shutdown(void)
2427{
2428#ifdef WITH_THREAD
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002429 _Py_IDENTIFIER(_shutdown);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002430 PyObject *result;
2431 PyThreadState *tstate = PyThreadState_GET();
2432 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2433 "threading");
2434 if (threading == NULL) {
2435 /* threading not imported */
2436 PyErr_Clear();
2437 return;
2438 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002439 result = _PyObject_CallMethodId(threading, &PyId__shutdown, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002440 if (result == NULL) {
2441 PyErr_WriteUnraisable(threading);
2442 }
2443 else {
2444 Py_DECREF(result);
2445 }
2446 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002447#endif
2448}
2449
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002450#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002451static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002452static int nexitfuncs = 0;
2453
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002454int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002455{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002456 if (nexitfuncs >= NEXITFUNCS)
2457 return -1;
2458 exitfuncs[nexitfuncs++] = func;
2459 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002460}
2461
Guido van Rossumcc283f51997-08-05 02:22:03 +00002462static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002463call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002464{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002465 while (nexitfuncs > 0)
2466 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002467
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002468 fflush(stdout);
2469 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002470}
2471
2472void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002473Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002474{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002475 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002476
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002477 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002478}
2479
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002480static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002481initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002482{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002483#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002484 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002485#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002486#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002487 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002488#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002489#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002490 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002491#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002492 PyOS_InitInterrupts(); /* May imply initsignal() */
Victor Stinnerd786ad52013-07-21 13:25:51 +02002493 if (PyErr_Occurred()) {
2494 Py_FatalError("Py_Initialize: can't import signal");
2495 }
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002496}
2497
Guido van Rossum7433b121997-02-14 19:45:36 +00002498
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002499/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2500 *
2501 * All of the code in this function must only use async-signal-safe functions,
2502 * listed at `man 7 signal` or
2503 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2504 */
2505void
2506_Py_RestoreSignals(void)
2507{
2508#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002509 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002510#endif
2511#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002512 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002513#endif
2514#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002515 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002516#endif
2517}
2518
2519
Guido van Rossum7433b121997-02-14 19:45:36 +00002520/*
2521 * The file descriptor fd is considered ``interactive'' if either
2522 * a) isatty(fd) is TRUE, or
2523 * b) the -i flag was given, and the filename associated with
2524 * the descriptor is NULL or "<stdin>" or "???".
2525 */
2526int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002527Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002528{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002529 if (isatty((int)fileno(fp)))
2530 return 1;
2531 if (!Py_InteractiveFlag)
2532 return 0;
2533 return (filename == NULL) ||
2534 (strcmp(filename, "<stdin>") == 0) ||
2535 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002536}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002537
2538
Tim Petersd08e3822003-04-17 15:24:21 +00002539#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002540#if defined(WIN32) && defined(_MSC_VER)
2541
2542/* Stack checking for Microsoft C */
2543
2544#include <malloc.h>
2545#include <excpt.h>
2546
Fred Drakee8de31c2000-08-31 05:38:39 +00002547/*
2548 * Return non-zero when we run out of memory on the stack; zero otherwise.
2549 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002550int
Fred Drake399739f2000-08-31 05:52:44 +00002551PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002552{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002553 __try {
2554 /* alloca throws a stack overflow exception if there's
2555 not enough space left on the stack */
2556 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2557 return 0;
2558 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2559 EXCEPTION_EXECUTE_HANDLER :
2560 EXCEPTION_CONTINUE_SEARCH) {
2561 int errcode = _resetstkoflw();
2562 if (errcode == 0)
2563 {
2564 Py_FatalError("Could not reset the stack!");
2565 }
2566 }
2567 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002568}
2569
2570#endif /* WIN32 && _MSC_VER */
2571
2572/* Alternate implementations can be added here... */
2573
2574#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002575
2576
2577/* Wrappers around sigaction() or signal(). */
2578
2579PyOS_sighandler_t
2580PyOS_getsig(int sig)
2581{
2582#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002583 struct sigaction context;
2584 if (sigaction(sig, NULL, &context) == -1)
2585 return SIG_ERR;
2586 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002587#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002588 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002589/* Special signal handling for the secure CRT in Visual Studio 2005 */
2590#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002591 switch (sig) {
2592 /* Only these signals are valid */
2593 case SIGINT:
2594 case SIGILL:
2595 case SIGFPE:
2596 case SIGSEGV:
2597 case SIGTERM:
2598 case SIGBREAK:
2599 case SIGABRT:
2600 break;
2601 /* Don't call signal() with other values or it will assert */
2602 default:
2603 return SIG_ERR;
2604 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002605#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002606 handler = signal(sig, SIG_IGN);
2607 if (handler != SIG_ERR)
2608 signal(sig, handler);
2609 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002610#endif
2611}
2612
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002613/*
2614 * All of the code in this function must only use async-signal-safe functions,
2615 * listed at `man 7 signal` or
2616 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2617 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002618PyOS_sighandler_t
2619PyOS_setsig(int sig, PyOS_sighandler_t handler)
2620{
2621#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002622 /* Some code in Modules/signalmodule.c depends on sigaction() being
2623 * used here if HAVE_SIGACTION is defined. Fix that if this code
2624 * changes to invalidate that assumption.
2625 */
2626 struct sigaction context, ocontext;
2627 context.sa_handler = handler;
2628 sigemptyset(&context.sa_mask);
2629 context.sa_flags = 0;
2630 if (sigaction(sig, &context, &ocontext) == -1)
2631 return SIG_ERR;
2632 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002633#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002634 PyOS_sighandler_t oldhandler;
2635 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002636#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002637 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002638#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002639 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002640#endif
2641}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002642
2643/* Deprecated C API functions still provided for binary compatiblity */
2644
2645#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002646PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002647PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2648{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002649 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002650}
2651
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002652#undef PyParser_SimpleParseString
2653PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002654PyParser_SimpleParseString(const char *str, int start)
2655{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002656 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002657}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002658
2659#undef PyRun_AnyFile
2660PyAPI_FUNC(int)
2661PyRun_AnyFile(FILE *fp, const char *name)
2662{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002663 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002664}
2665
2666#undef PyRun_AnyFileEx
2667PyAPI_FUNC(int)
2668PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2669{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002670 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002671}
2672
2673#undef PyRun_AnyFileFlags
2674PyAPI_FUNC(int)
2675PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2676{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002677 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002678}
2679
2680#undef PyRun_File
2681PyAPI_FUNC(PyObject *)
2682PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2683{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002684 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002685}
2686
2687#undef PyRun_FileEx
2688PyAPI_FUNC(PyObject *)
2689PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2690{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002691 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002692}
2693
2694#undef PyRun_FileFlags
2695PyAPI_FUNC(PyObject *)
2696PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002697 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002698{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002699 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002700}
2701
2702#undef PyRun_SimpleFile
2703PyAPI_FUNC(int)
2704PyRun_SimpleFile(FILE *f, const char *p)
2705{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002706 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002707}
2708
2709#undef PyRun_SimpleFileEx
2710PyAPI_FUNC(int)
2711PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2712{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002713 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002714}
2715
2716
2717#undef PyRun_String
2718PyAPI_FUNC(PyObject *)
2719PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2720{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002721 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002722}
2723
2724#undef PyRun_SimpleString
2725PyAPI_FUNC(int)
2726PyRun_SimpleString(const char *s)
2727{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002728 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002729}
2730
2731#undef Py_CompileString
2732PyAPI_FUNC(PyObject *)
2733Py_CompileString(const char *str, const char *p, int s)
2734{
Georg Brandl8334fd92010-12-04 10:26:46 +00002735 return Py_CompileStringExFlags(str, p, s, NULL, -1);
2736}
2737
2738#undef Py_CompileStringFlags
2739PyAPI_FUNC(PyObject *)
2740Py_CompileStringFlags(const char *str, const char *p, int s,
2741 PyCompilerFlags *flags)
2742{
2743 return Py_CompileStringExFlags(str, p, s, flags, -1);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002744}
2745
2746#undef PyRun_InteractiveOne
2747PyAPI_FUNC(int)
2748PyRun_InteractiveOne(FILE *f, const char *p)
2749{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002750 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002751}
2752
2753#undef PyRun_InteractiveLoop
2754PyAPI_FUNC(int)
2755PyRun_InteractiveLoop(FILE *f, const char *p)
2756{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002757 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002758}
2759
2760#ifdef __cplusplus
2761}
2762#endif