blob: a9ed588dd3a8c47d8ee710c89e2ee4928e0b518f [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
Neal Norwitz4281cef2006-03-04 19:58:13 +000038#ifndef Py_REF_DEBUG
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000039#define PRINT_TOTAL_REFS()
Neal Norwitz4281cef2006-03-04 19:58:13 +000040#else /* Py_REF_DEBUG */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000041#define PRINT_TOTAL_REFS() fprintf(stderr, \
42 "[%" PY_FORMAT_SIZE_T "d refs]\n", \
43 _Py_GetRefTotal())
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000044#endif
45
46#ifdef __cplusplus
47extern "C" {
Neal Norwitz4281cef2006-03-04 19:58:13 +000048#endif
49
Martin v. Löwis790465f2008-04-05 20:41:37 +000050extern wchar_t *Py_GetPath(void);
Guido van Rossum1984f1e1992-08-04 12:41:02 +000051
Guido van Rossum82598051997-03-05 00:20:32 +000052extern grammar _PyParser_Grammar; /* From graminit.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000053
Guido van Rossumb73cc041993-11-01 16:28:59 +000054/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000055static void initmain(void);
Victor Stinner793b5312011-04-27 00:24:21 +020056static int initfsencoding(PyInterpreterState *interp);
Tim Petersdbd9ba62000-07-09 03:09:57 +000057static void initsite(void);
Guido van Rossumce3a72a2007-10-19 23:16:50 +000058static int initstdio(void);
Amaury Forgeot d'Arc7fedbe52008-04-10 21:03:09 +000059static void flush_io(void);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000060static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000061 PyCompilerFlags *, PyArena *);
Martin v. Löwis95292d62002-12-11 14:04:59 +000062static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000063 PyCompilerFlags *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000064static void err_input(perrdetail *);
Victor Stinner7f2fee32011-04-05 00:39:01 +020065static void err_free(perrdetail *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000066static void initsigs(void);
Collin Winter670e6922007-03-21 02:57:17 +000067static void call_py_exitfuncs(void);
Antoine Pitrou011bd622009-10-20 21:52:47 +000068static void wait_for_thread_shutdown(void);
Tim Petersdbd9ba62000-07-09 03:09:57 +000069static void call_ll_exitfuncs(void);
Victor Stinner3a50e702011-10-18 21:21:00 +020070extern int _PyUnicode_Init(void);
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000071extern void _PyUnicode_Fini(void);
Guido van Rossumddefaf32007-01-14 03:31:43 +000072extern int _PyLong_Init(void);
73extern void PyLong_Fini(void);
Victor Stinner024e37a2011-03-31 01:31:06 +020074extern int _PyFaulthandler_Init(void);
75extern void _PyFaulthandler_Fini(void);
Guido van Rossumc94044c2000-03-10 23:03:54 +000076
Mark Hammond8d98d2c2003-04-19 15:41:53 +000077#ifdef WITH_THREAD
78extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
79extern void _PyGILState_Fini(void);
80#endif /* WITH_THREAD */
81
Guido van Rossum82598051997-03-05 00:20:32 +000082int Py_DebugFlag; /* Needed by parser.c */
83int Py_VerboseFlag; /* Needed by import.c */
Georg Brandl8aa7e992010-12-28 18:30:18 +000084int Py_QuietFlag; /* Needed by sysmodule.c */
Guido van Rossum7433b121997-02-14 19:45:36 +000085int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Georg Brandl0b2489e2011-05-15 08:49:12 +020086int Py_InspectFlag; /* Needed to determine whether to exit at SystemExit */
Guido van Rossumdcc0c131997-08-29 22:32:42 +000087int Py_NoSiteFlag; /* Suppress 'import site' */
Guido van Rossum98297ee2007-11-06 21:34:58 +000088int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */
Christian Heimes790c8232008-01-07 21:14:23 +000089int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.py[co]) */
Barry Warsaw3ce09642000-05-02 19:18:59 +000090int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
Guido van Rossuma61691e1998-02-06 22:27:24 +000091int Py_FrozenFlag; /* Needed by getpath.c */
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +000092int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Christian Heimes8dc226f2008-05-06 23:45:46 +000093int Py_NoUserSiteDirectory = 0; /* for -s and site.py */
Antoine Pitrou05608432009-01-09 18:53:14 +000094int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */
Georg Brandl2daf6ae2012-02-20 19:54:16 +010095int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000096
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +020097PyThreadState *_Py_Finalizing = NULL;
98
Christian Heimes33fe8092008-04-13 13:53:33 +000099/* PyModule_GetWarningsModule is no longer necessary as of 2.6
100since _warnings is builtin. This API should not be used. */
101PyObject *
102PyModule_GetWarningsModule(void)
Mark Hammondedd07732003-07-15 23:03:55 +0000103{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000104 return PyImport_ImportModule("warnings");
Mark Hammondedd07732003-07-15 23:03:55 +0000105}
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000106
Guido van Rossum25ce5661997-08-02 03:10:38 +0000107static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000108
Thomas Wouters7e474022000-07-16 12:04:32 +0000109/* API to access the initialized flag -- useful for esoteric use */
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000110
111int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000112Py_IsInitialized(void)
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000113{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000114 return initialized;
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000115}
116
Guido van Rossum25ce5661997-08-02 03:10:38 +0000117/* Global initializations. Can be undone by Py_Finalize(). Don't
118 call this twice without an intervening Py_Finalize() call. When
119 initializations fail, a fatal error is issued and the function does
120 not return. On return, the first thread and interpreter state have
121 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000122
Guido van Rossum25ce5661997-08-02 03:10:38 +0000123 Locking: you must hold the interpreter lock while calling this.
124 (If the lock has not yet been initialized, that's equivalent to
125 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000126
Guido van Rossum25ce5661997-08-02 03:10:38 +0000127*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000128
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000129static int
130add_flag(int flag, const char *envs)
131{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000132 int env = atoi(envs);
133 if (flag < env)
134 flag = env;
135 if (flag < 1)
136 flag = 1;
137 return flag;
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000138}
139
Christian Heimes5833a2f2008-10-30 21:40:04 +0000140static char*
Victor Stinner94908bb2010-08-18 21:23:25 +0000141get_codec_name(const char *encoding)
Christian Heimes5833a2f2008-10-30 21:40:04 +0000142{
Victor Stinner94908bb2010-08-18 21:23:25 +0000143 char *name_utf8, *name_str;
Victor Stinner386fe712010-05-19 00:34:15 +0000144 PyObject *codec, *name = NULL;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200145 _Py_IDENTIFIER(name);
Christian Heimes5833a2f2008-10-30 21:40:04 +0000146
Victor Stinner94908bb2010-08-18 21:23:25 +0000147 codec = _PyCodec_Lookup(encoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000148 if (!codec)
149 goto error;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000150
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200151 name = _PyObject_GetAttrId(codec, &PyId_name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000152 Py_CLEAR(codec);
153 if (!name)
154 goto error;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000155
Victor Stinner94908bb2010-08-18 21:23:25 +0000156 name_utf8 = _PyUnicode_AsString(name);
Victor Stinner4ca28092011-03-20 23:09:03 +0100157 if (name_utf8 == NULL)
Victor Stinner386fe712010-05-19 00:34:15 +0000158 goto error;
Victor Stinner94908bb2010-08-18 21:23:25 +0000159 name_str = strdup(name_utf8);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000160 Py_DECREF(name);
Victor Stinner94908bb2010-08-18 21:23:25 +0000161 if (name_str == NULL) {
162 PyErr_NoMemory();
163 return NULL;
164 }
165 return name_str;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000166
167error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000168 Py_XDECREF(codec);
Victor Stinner386fe712010-05-19 00:34:15 +0000169 Py_XDECREF(name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000170 return NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000171}
Victor Stinner94908bb2010-08-18 21:23:25 +0000172
Victor Stinner94908bb2010-08-18 21:23:25 +0000173static char*
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200174get_locale_encoding(void)
Victor Stinner94908bb2010-08-18 21:23:25 +0000175{
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200176#ifdef MS_WINDOWS
177 char codepage[100];
178 PyOS_snprintf(codepage, sizeof(codepage), "cp%d", GetACP());
179 return get_codec_name(codepage);
180#elif defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94908bb2010-08-18 21:23:25 +0000181 char* codeset = nl_langinfo(CODESET);
182 if (!codeset || codeset[0] == '\0') {
183 PyErr_SetString(PyExc_ValueError, "CODESET is not set or empty");
184 return NULL;
185 }
186 return get_codec_name(codeset);
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200187#else
188 PyErr_SetNone(PyExc_NotImplementedError);
189 return NULL;
Christian Heimes5833a2f2008-10-30 21:40:04 +0000190#endif
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200191}
Christian Heimes5833a2f2008-10-30 21:40:04 +0000192
Brett Cannonfd074152012-04-14 14:10:13 -0400193static void
194import_init(PyInterpreterState *interp, PyObject *sysmod)
195{
196 PyObject *importlib;
197 PyObject *impmod;
198 PyObject *sys_modules;
199 PyObject *value;
200
201 /* Import _importlib through its frozen version, _frozen_importlib. */
Brett Cannonfd074152012-04-14 14:10:13 -0400202 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
203 Py_FatalError("Py_Initialize: can't import _frozen_importlib");
204 }
205 else if (Py_VerboseFlag) {
206 PySys_FormatStderr("import _frozen_importlib # frozen\n");
207 }
208 importlib = PyImport_AddModule("_frozen_importlib");
209 if (importlib == NULL) {
210 Py_FatalError("Py_Initialize: couldn't get _frozen_importlib from "
211 "sys.modules");
212 }
213 interp->importlib = importlib;
214 Py_INCREF(interp->importlib);
215
216 /* Install _importlib as __import__ */
217 impmod = PyInit_imp();
218 if (impmod == NULL) {
219 Py_FatalError("Py_Initialize: can't import imp");
220 }
221 else if (Py_VerboseFlag) {
222 PySys_FormatStderr("import imp # builtin\n");
223 }
224 sys_modules = PyImport_GetModuleDict();
225 if (Py_VerboseFlag) {
226 PySys_FormatStderr("import sys # builtin\n");
227 }
Brett Cannon6f44d662012-04-15 16:08:47 -0400228 if (PyDict_SetItemString(sys_modules, "_imp", impmod) < 0) {
229 Py_FatalError("Py_Initialize: can't save _imp to sys.modules");
Brett Cannonfd074152012-04-14 14:10:13 -0400230 }
231
Brett Cannone0d88a12012-04-25 20:54:04 -0400232 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
Brett Cannonfd074152012-04-14 14:10:13 -0400233 if (value == NULL) {
234 PyErr_Print();
235 Py_FatalError("Py_Initialize: importlib install failed");
236 }
237 Py_DECREF(value);
Brett Cannonfc9ca272012-04-15 01:35:05 -0400238 Py_DECREF(impmod);
Brett Cannonfd074152012-04-14 14:10:13 -0400239
240 _PyImportZip_Init();
241}
242
243
Guido van Rossuma027efa1997-05-05 20:56:21 +0000244void
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200245_Py_InitializeEx_Private(int install_sigs, int install_importlib)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000246{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000247 PyInterpreterState *interp;
248 PyThreadState *tstate;
249 PyObject *bimod, *sysmod, *pstderr;
250 char *p;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000251 extern void _Py_ReadyTypes(void);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000252
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000253 if (initialized)
254 return;
255 initialized = 1;
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200256 _Py_Finalizing = NULL;
Tim Petersd08e3822003-04-17 15:24:21 +0000257
Andrew M. Kuchlingb2ceb3a2010-02-22 23:26:10 +0000258#if defined(HAVE_LANGINFO_H) && defined(HAVE_SETLOCALE)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000259 /* Set up the LC_CTYPE locale, so we can obtain
260 the locale's charset without having to switch
261 locales. */
262 setlocale(LC_CTYPE, "");
Martin v. Löwisd1cd4d42007-08-11 14:02:14 +0000263#endif
264
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000265 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
266 Py_DebugFlag = add_flag(Py_DebugFlag, p);
267 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
268 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
269 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
270 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
271 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0')
272 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);
Georg Brandl2daf6ae2012-02-20 19:54:16 +0100273 /* The variable is only tested for existence here; _PyRandom_Init will
274 check its value further. */
275 if ((p = Py_GETENV("PYTHONHASHSEED")) && *p != '\0')
276 Py_HashRandomizationFlag = add_flag(Py_HashRandomizationFlag, p);
277
278 _PyRandom_Init();
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000279
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000280 interp = PyInterpreterState_New();
281 if (interp == NULL)
282 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000283
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000284 tstate = PyThreadState_New(interp);
285 if (tstate == NULL)
286 Py_FatalError("Py_Initialize: can't make first thread");
287 (void) PyThreadState_Swap(tstate);
Guido van Rossuma027efa1997-05-05 20:56:21 +0000288
Victor Stinner6961bd62010-08-17 22:26:51 +0000289#ifdef WITH_THREAD
Antoine Pitroub0b384b2010-09-20 20:13:48 +0000290 /* We can't call _PyEval_FiniThreads() in Py_Finalize because
291 destroying the GIL might fail when it is being referenced from
292 another running thread (see issue #9901).
293 Instead we destroy the previously created GIL here, which ensures
294 that we can call Py_Initialize / Py_Finalize multiple times. */
295 _PyEval_FiniThreads();
296
297 /* Auto-thread-state API */
Victor Stinner6961bd62010-08-17 22:26:51 +0000298 _PyGILState_Init(interp, tstate);
299#endif /* WITH_THREAD */
300
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000301 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000302
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000303 if (!_PyFrame_Init())
304 Py_FatalError("Py_Initialize: can't init frames");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000305
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000306 if (!_PyLong_Init())
307 Py_FatalError("Py_Initialize: can't init longs");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000308
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000309 if (!PyByteArray_Init())
310 Py_FatalError("Py_Initialize: can't init bytearray");
Neal Norwitz6968b052007-02-27 19:02:19 +0000311
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000312 _PyFloat_Init();
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000313
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000314 interp->modules = PyDict_New();
315 if (interp->modules == NULL)
316 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000317
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000318 /* Init Unicode implementation; relies on the codec registry */
Victor Stinner3a50e702011-10-18 21:21:00 +0200319 if (_PyUnicode_Init() < 0)
320 Py_FatalError("Py_Initialize: can't initialize unicode");
Guido van Rossumc94044c2000-03-10 23:03:54 +0000321
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000322 bimod = _PyBuiltin_Init();
323 if (bimod == NULL)
324 Py_FatalError("Py_Initialize: can't initialize builtins modules");
Victor Stinner49d3f252010-10-17 01:24:53 +0000325 _PyImport_FixupBuiltin(bimod, "builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000326 interp->builtins = PyModule_GetDict(bimod);
327 if (interp->builtins == NULL)
328 Py_FatalError("Py_Initialize: can't initialize builtins dict");
329 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000330
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000331 /* initialize builtin exceptions */
Brett Cannonfd074152012-04-14 14:10:13 -0400332 _PyExc_Init(bimod);
Christian Heimes9a68f8c2007-11-14 00:16:07 +0000333
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000334 sysmod = _PySys_Init();
335 if (sysmod == NULL)
336 Py_FatalError("Py_Initialize: can't initialize sys");
337 interp->sysdict = PyModule_GetDict(sysmod);
338 if (interp->sysdict == NULL)
339 Py_FatalError("Py_Initialize: can't initialize sys dict");
340 Py_INCREF(interp->sysdict);
Victor Stinner49d3f252010-10-17 01:24:53 +0000341 _PyImport_FixupBuiltin(sysmod, "sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000342 PySys_SetPath(Py_GetPath());
343 PyDict_SetItemString(interp->sysdict, "modules",
344 interp->modules);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000345
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000346 /* Set up a preliminary stderr printer until we have enough
347 infrastructure for the io module in place. */
348 pstderr = PyFile_NewStdPrinter(fileno(stderr));
349 if (pstderr == NULL)
350 Py_FatalError("Py_Initialize: can't set preliminary stderr");
351 PySys_SetObject("stderr", pstderr);
352 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000353 Py_DECREF(pstderr);
Guido van Rossum826d8972007-10-30 18:34:07 +0000354
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000355 _PyImport_Init();
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000356
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000357 _PyImportHooks_Init();
Just van Rossum52e14d62002-12-30 22:08:05 +0000358
Victor Stinner024e37a2011-03-31 01:31:06 +0200359 /* initialize the faulthandler module */
360 if (_PyFaulthandler_Init())
361 Py_FatalError("Py_Initialize: can't initialize faulthandler");
362
Victor Stinner7d79b8b2010-05-19 20:40:50 +0000363 /* Initialize _warnings. */
364 _PyWarnings_Init();
365
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200366 if (!install_importlib)
367 return;
368
Brett Cannonfd074152012-04-14 14:10:13 -0400369 import_init(interp, sysmod);
370
Alexander Belopolsky6fc4ade2010-08-05 17:34:27 +0000371 _PyTime_Init();
372
Victor Stinner793b5312011-04-27 00:24:21 +0200373 if (initfsencoding(interp) < 0)
374 Py_FatalError("Py_Initialize: unable to load the file system codec");
Martin v. Löwis011e8422009-05-05 04:43:17 +0000375
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000376 if (install_sigs)
377 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000378
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000379 initmain(); /* Module __main__ */
380 if (initstdio() < 0)
381 Py_FatalError(
382 "Py_Initialize: can't initialize sys standard streams");
383
Antoine Pitroucf9f9802010-11-10 13:55:25 +0000384 /* Initialize warnings. */
385 if (PySys_HasWarnOptions()) {
386 PyObject *warnings_module = PyImport_ImportModule("warnings");
387 if (warnings_module == NULL) {
388 fprintf(stderr, "'import warnings' failed; traceback:\n");
389 PyErr_Print();
390 }
391 Py_XDECREF(warnings_module);
392 }
393
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000394 if (!Py_NoSiteFlag)
395 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000396}
397
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000398void
Antoine Pitroue67f48c2012-06-19 22:29:35 +0200399Py_InitializeEx(int install_sigs)
400{
401 _Py_InitializeEx_Private(install_sigs, 1);
402}
403
404void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000405Py_Initialize(void)
406{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000407 Py_InitializeEx(1);
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000408}
409
410
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000411#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000412extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000413#endif
414
Guido van Rossume8432ac2007-07-09 15:04:50 +0000415/* Flush stdout and stderr */
416
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100417static int
418file_is_closed(PyObject *fobj)
419{
420 int r;
421 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
422 if (tmp == NULL) {
423 PyErr_Clear();
424 return 0;
425 }
426 r = PyObject_IsTrue(tmp);
427 Py_DECREF(tmp);
428 if (r < 0)
429 PyErr_Clear();
430 return r > 0;
431}
432
Neal Norwitz2bad9702007-08-27 06:19:22 +0000433static void
Guido van Rossum1bd21222007-07-10 20:14:13 +0000434flush_std_files(void)
Guido van Rossume8432ac2007-07-09 15:04:50 +0000435{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000436 PyObject *fout = PySys_GetObject("stdout");
437 PyObject *ferr = PySys_GetObject("stderr");
438 PyObject *tmp;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200439 _Py_IDENTIFIER(flush);
Guido van Rossume8432ac2007-07-09 15:04:50 +0000440
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100441 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200442 tmp = _PyObject_CallMethodId(fout, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000443 if (tmp == NULL)
Antoine Pitroubddc9fe2010-08-08 20:46:42 +0000444 PyErr_WriteUnraisable(fout);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000445 else
446 Py_DECREF(tmp);
447 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000448
Antoine Pitroud7c8fbf2011-11-26 21:59:36 +0100449 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200450 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000451 if (tmp == NULL)
452 PyErr_Clear();
453 else
454 Py_DECREF(tmp);
455 }
Guido van Rossume8432ac2007-07-09 15:04:50 +0000456}
457
Guido van Rossum25ce5661997-08-02 03:10:38 +0000458/* Undo the effect of Py_Initialize().
459
460 Beware: if multiple interpreter and/or thread states exist, these
461 are not wiped out; only the current thread and interpreter state
462 are deleted. But since everything else is deleted, those other
463 interpreter and thread states should no longer be used.
464
465 (XXX We should do better, e.g. wipe out all interpreters and
466 threads.)
467
468 Locking: as above.
469
470*/
471
472void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000473Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000474{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000475 PyInterpreterState *interp;
476 PyThreadState *tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000477
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000478 if (!initialized)
479 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000480
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000481 wait_for_thread_shutdown();
Antoine Pitrou011bd622009-10-20 21:52:47 +0000482
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000483 /* The interpreter is still entirely intact at this point, and the
484 * exit funcs may be relying on that. In particular, if some thread
485 * or exit func is still waiting to do an import, the import machinery
486 * expects Py_IsInitialized() to return true. So don't say the
487 * interpreter is uninitialized until after the exit funcs have run.
488 * Note that Threading.py uses an exit func to do a join on all the
489 * threads created thru it, so this also protects pending imports in
490 * the threads created via Threading.
491 */
492 call_py_exitfuncs();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000493
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000494 /* Get current thread state and interpreter pointer */
495 tstate = PyThreadState_GET();
496 interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000497
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200498 /* Remaining threads (e.g. daemon threads) will automatically exit
499 after taking the GIL (in PyEval_RestoreThread()). */
500 _Py_Finalizing = tstate;
501 initialized = 0;
502
503 /* Flush stdout+stderr */
504 flush_std_files();
505
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000506 /* Disable signal handling */
507 PyOS_FiniInterrupts();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000508
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000509 /* Clear type lookup cache */
510 PyType_ClearCache();
Christian Heimes26855632008-01-27 23:50:43 +0000511
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000512 /* Collect garbage. This may call finalizers; it's nice to call these
513 * before all modules are destroyed.
514 * XXX If a __del__ or weakref callback is triggered here, and tries to
515 * XXX import a module, bad things can happen, because Python no
516 * XXX longer believes it's initialized.
517 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
518 * XXX is easy to provoke that way. I've also seen, e.g.,
519 * XXX Exception exceptions.ImportError: 'No module named sha'
520 * XXX in <function callback at 0x008F5718> ignored
521 * XXX but I'm unclear on exactly how that one happens. In any case,
522 * XXX I haven't seen a real-life report of either of these.
523 */
524 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000525#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000526 /* With COUNT_ALLOCS, it helps to run GC multiple times:
527 each collection might release some types from the type
528 list, so they become garbage. */
529 while (PyGC_Collect() > 0)
530 /* nothing */;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000531#endif
Antoine Pitrou696e0352010-08-08 22:18:46 +0000532 /* We run this while most interpreter state is still alive, so that
533 debug information can be printed out */
534 _PyGC_Fini();
Guido van Rossume13ddc92003-04-17 17:29:22 +0000535
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 /* Destroy all modules */
537 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000538
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000539 /* Flush stdout+stderr (again, in case more was printed) */
540 flush_std_files();
Guido van Rossume8432ac2007-07-09 15:04:50 +0000541
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000542 /* Collect final garbage. This disposes of cycles created by
Florent Xiclunaaa6c1d22011-12-12 18:54:29 +0100543 * class definitions, for example.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000544 * XXX This is disabled because it caused too many problems. If
545 * XXX a __del__ or weakref callback triggers here, Python code has
546 * XXX a hard time running, because even the sys module has been
547 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
548 * XXX One symptom is a sequence of information-free messages
549 * XXX coming from threads (if a __del__ or callback is invoked,
550 * XXX other threads can execute too, and any exception they encounter
551 * XXX triggers a comedy of errors as subsystem after subsystem
552 * XXX fails to find what it *expects* to find in sys to help report
553 * XXX the exception and consequent unexpected failures). I've also
554 * XXX seen segfaults then, after adding print statements to the
555 * XXX Python code getting called.
556 */
Tim Peters1d7323e2003-12-01 21:35:27 +0000557#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000558 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000559#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000560
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000561 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
562 _PyImport_Fini();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000563
Victor Stinner024e37a2011-03-31 01:31:06 +0200564 /* unload faulthandler module */
565 _PyFaulthandler_Fini();
566
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000567 /* Debugging stuff */
Guido van Rossum1707aad1997-12-08 23:43:45 +0000568#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000569 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000570#endif
571
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000572 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000573
Tim Peters9cf25ce2003-04-17 15:21:01 +0000574#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000575 /* Display all objects still alive -- this can invoke arbitrary
576 * __repr__ overrides, so requires a mostly-intact interpreter.
577 * Alas, a lot of stuff may still be alive now that will be cleaned
578 * up later.
579 */
580 if (Py_GETENV("PYTHONDUMPREFS"))
581 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000582#endif /* Py_TRACE_REFS */
583
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000584 /* Clear interpreter state */
585 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000586
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000587 /* Now we decref the exception classes. After this point nothing
588 can raise an exception. That's okay, because each Fini() method
589 below has been checked to make sure no exceptions are ever
590 raised.
591 */
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000592
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000593 _PyExc_Fini();
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000594
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000595 /* Cleanup auto-thread-state */
Christian Heimes7d2ff882007-11-30 14:35:04 +0000596#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000597 _PyGILState_Fini();
Christian Heimes7d2ff882007-11-30 14:35:04 +0000598#endif /* WITH_THREAD */
599
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000600 /* Delete current thread */
601 PyThreadState_Swap(NULL);
602 PyInterpreterState_Delete(interp);
Barry Warsawf242aa02000-05-25 23:09:49 +0000603
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000604 /* Sundry finalizers */
605 PyMethod_Fini();
606 PyFrame_Fini();
607 PyCFunction_Fini();
608 PyTuple_Fini();
609 PyList_Fini();
610 PySet_Fini();
611 PyBytes_Fini();
612 PyByteArray_Fini();
613 PyLong_Fini();
614 PyFloat_Fini();
615 PyDict_Fini();
Antoine Pitrouf34a0cd2011-11-18 20:14:34 +0100616 PySlice_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000617
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000618 /* Cleanup Unicode implementation */
619 _PyUnicode_Fini();
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000620
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000621 /* reset file system default encoding */
Victor Stinnerb744ba12010-05-15 12:27:16 +0000622 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000623 free((char*)Py_FileSystemDefaultEncoding);
624 Py_FileSystemDefaultEncoding = NULL;
625 }
Christian Heimesc8967002007-11-30 10:18:26 +0000626
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000627 /* XXX Still allocated:
628 - various static ad-hoc pointers to interned strings
629 - int and float free list blocks
630 - whatever various modules and libraries allocate
631 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000632
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000633 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000634
Tim Peters269b2a62003-04-17 19:52:29 +0000635#ifdef Py_TRACE_REFS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000636 /* Display addresses (& refcnts) of all objects still alive.
637 * An address can be used to find the repr of the object, printed
638 * above by _Py_PrintReferences.
639 */
640 if (Py_GETENV("PYTHONDUMPREFS"))
641 _Py_PrintReferenceAddresses(stderr);
Tim Peters269b2a62003-04-17 19:52:29 +0000642#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000643#ifdef PYMALLOC_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000644 if (Py_GETENV("PYTHONMALLOCSTATS"))
David Malcolm49526f42012-06-22 14:55:41 -0400645 _PyObject_DebugMallocStats(stderr);
Tim Peters0e871182002-04-13 08:29:14 +0000646#endif
647
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000648 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000649}
650
651/* Create and initialize a new interpreter and thread, and return the
652 new thread. This requires that Py_Initialize() has been called
653 first.
654
655 Unsuccessful initialization yields a NULL pointer. Note that *no*
656 exception information is available even in this case -- the
657 exception information is held in the thread, and there is no
658 thread.
659
660 Locking: as above.
661
662*/
663
664PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000665Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000666{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000667 PyInterpreterState *interp;
668 PyThreadState *tstate, *save_tstate;
669 PyObject *bimod, *sysmod;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000670
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000671 if (!initialized)
672 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000673
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000674 interp = PyInterpreterState_New();
675 if (interp == NULL)
676 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000677
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000678 tstate = PyThreadState_New(interp);
679 if (tstate == NULL) {
680 PyInterpreterState_Delete(interp);
681 return NULL;
682 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000683
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000684 save_tstate = PyThreadState_Swap(tstate);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000685
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000686 /* XXX The following is lax in error checking */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000687
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000688 interp->modules = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000689
Victor Stinner49d3f252010-10-17 01:24:53 +0000690 bimod = _PyImport_FindBuiltin("builtins");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000691 if (bimod != NULL) {
692 interp->builtins = PyModule_GetDict(bimod);
693 if (interp->builtins == NULL)
694 goto handle_error;
695 Py_INCREF(interp->builtins);
696 }
Christian Heimes6a27efa2008-10-30 21:48:26 +0000697
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000698 /* initialize builtin exceptions */
Brett Cannonfd074152012-04-14 14:10:13 -0400699 _PyExc_Init(bimod);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000700
Victor Stinner49d3f252010-10-17 01:24:53 +0000701 sysmod = _PyImport_FindBuiltin("sys");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000702 if (bimod != NULL && sysmod != NULL) {
703 PyObject *pstderr;
Brett Cannonfd074152012-04-14 14:10:13 -0400704
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000705 interp->sysdict = PyModule_GetDict(sysmod);
706 if (interp->sysdict == NULL)
707 goto handle_error;
708 Py_INCREF(interp->sysdict);
709 PySys_SetPath(Py_GetPath());
710 PyDict_SetItemString(interp->sysdict, "modules",
711 interp->modules);
712 /* Set up a preliminary stderr printer until we have enough
713 infrastructure for the io module in place. */
714 pstderr = PyFile_NewStdPrinter(fileno(stderr));
715 if (pstderr == NULL)
716 Py_FatalError("Py_Initialize: can't set preliminary stderr");
717 PySys_SetObject("stderr", pstderr);
718 PySys_SetObject("__stderr__", pstderr);
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +0000719 Py_DECREF(pstderr);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000720
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000721 _PyImportHooks_Init();
Victor Stinner793b5312011-04-27 00:24:21 +0200722
Brett Cannonfd074152012-04-14 14:10:13 -0400723 import_init(interp, sysmod);
724
Victor Stinner793b5312011-04-27 00:24:21 +0200725 if (initfsencoding(interp) < 0)
726 goto handle_error;
727
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000728 if (initstdio() < 0)
729 Py_FatalError(
730 "Py_Initialize: can't initialize sys standard streams");
731 initmain();
732 if (!Py_NoSiteFlag)
733 initsite();
734 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000735
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000736 if (!PyErr_Occurred())
737 return tstate;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000738
Thomas Wouters89f507f2006-12-13 04:49:30 +0000739handle_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000740 /* Oops, it didn't work. Undo it all. */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000741
Victor Stinnerc40a3502011-04-27 00:20:27 +0200742 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000743 PyThreadState_Clear(tstate);
744 PyThreadState_Swap(save_tstate);
745 PyThreadState_Delete(tstate);
746 PyInterpreterState_Delete(interp);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000747
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000748 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000749}
750
751/* Delete an interpreter and its last thread. This requires that the
752 given thread state is current, that the thread has no remaining
753 frames, and that it is its interpreter's only remaining thread.
754 It is a fatal error to violate these constraints.
755
756 (Py_Finalize() doesn't have these constraints -- it zaps
757 everything, regardless.)
758
759 Locking: as above.
760
761*/
762
763void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000764Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000765{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000766 PyInterpreterState *interp = tstate->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000767
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000768 if (tstate != PyThreadState_GET())
769 Py_FatalError("Py_EndInterpreter: thread is not current");
770 if (tstate->frame != NULL)
771 Py_FatalError("Py_EndInterpreter: thread still has a frame");
772 if (tstate != interp->tstate_head || tstate->next != NULL)
773 Py_FatalError("Py_EndInterpreter: not the last thread");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000774
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000775 PyImport_Cleanup();
776 PyInterpreterState_Clear(interp);
777 PyThreadState_Swap(NULL);
778 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000779}
780
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200781#ifdef MS_WINDOWS
Martin v. Löwis790465f2008-04-05 20:41:37 +0000782static wchar_t *progname = L"python";
Antoine Pitrou01cca5e2012-07-05 20:56:30 +0200783#else
784static wchar_t *progname = L"python3";
785#endif
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000786
787void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000788Py_SetProgramName(wchar_t *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000789{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000790 if (pn && *pn)
791 progname = pn;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000792}
793
Martin v. Löwis790465f2008-04-05 20:41:37 +0000794wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000795Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000796{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000797 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000798}
799
Martin v. Löwis790465f2008-04-05 20:41:37 +0000800static wchar_t *default_home = NULL;
801static wchar_t env_home[PATH_MAX+1];
Guido van Rossuma61691e1998-02-06 22:27:24 +0000802
803void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000804Py_SetPythonHome(wchar_t *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000805{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000806 default_home = home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000807}
808
Martin v. Löwis790465f2008-04-05 20:41:37 +0000809wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000810Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000811{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000812 wchar_t *home = default_home;
813 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
814 char* chome = Py_GETENV("PYTHONHOME");
815 if (chome) {
816 size_t r = mbstowcs(env_home, chome, PATH_MAX+1);
817 if (r != (size_t)-1 && r <= PATH_MAX)
818 home = env_home;
819 }
Martin v. Löwis790465f2008-04-05 20:41:37 +0000820
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000821 }
822 return home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000823}
824
Guido van Rossum6135a871995-01-09 17:53:26 +0000825/* Create __main__ module */
826
827static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000828initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000829{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000830 PyObject *m, *d;
831 m = PyImport_AddModule("__main__");
832 if (m == NULL)
833 Py_FatalError("can't create __main__ module");
834 d = PyModule_GetDict(m);
835 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
836 PyObject *bimod = PyImport_ImportModule("builtins");
837 if (bimod == NULL ||
838 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
839 Py_FatalError("can't add __builtins__ to __main__");
840 Py_DECREF(bimod);
841 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000842}
843
Victor Stinner793b5312011-04-27 00:24:21 +0200844static int
845initfsencoding(PyInterpreterState *interp)
Victor Stinnerb744ba12010-05-15 12:27:16 +0000846{
847 PyObject *codec;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000848
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200849 if (Py_FileSystemDefaultEncoding == NULL)
850 {
851 Py_FileSystemDefaultEncoding = get_locale_encoding();
852 if (Py_FileSystemDefaultEncoding == NULL)
Victor Stinnere4743092010-10-19 00:05:51 +0000853 Py_FatalError("Py_Initialize: Unable to get the locale encoding");
Victor Stinnerb744ba12010-05-15 12:27:16 +0000854
Victor Stinnere4743092010-10-19 00:05:51 +0000855 Py_HasFileSystemDefaultEncoding = 0;
Victor Stinner793b5312011-04-27 00:24:21 +0200856 interp->fscodec_initialized = 1;
857 return 0;
Victor Stinner7f84ab52010-06-11 00:36:33 +0000858 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000859
860 /* the encoding is mbcs, utf-8 or ascii */
861 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
862 if (!codec) {
863 /* Such error can only occurs in critical situations: no more
864 * memory, import a module of the standard library failed,
865 * etc. */
Victor Stinner793b5312011-04-27 00:24:21 +0200866 return -1;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000867 }
Victor Stinner793b5312011-04-27 00:24:21 +0200868 Py_DECREF(codec);
869 interp->fscodec_initialized = 1;
870 return 0;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000871}
872
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000873/* Import the site module (not into __main__ though) */
874
875static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000876initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000877{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000878 PyObject *m;
879 m = PyImport_ImportModule("site");
880 if (m == NULL) {
881 PyErr_Print();
882 Py_Finalize();
883 exit(1);
884 }
885 else {
886 Py_DECREF(m);
887 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000888}
889
Antoine Pitrou05608432009-01-09 18:53:14 +0000890static PyObject*
891create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000892 int fd, int write_mode, char* name,
893 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +0000894{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000895 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
896 const char* mode;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +0000897 const char* newline;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000898 PyObject *line_buffering;
899 int buffering, isatty;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200900 _Py_IDENTIFIER(open);
901 _Py_IDENTIFIER(isatty);
902 _Py_IDENTIFIER(TextIOWrapper);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200903 _Py_IDENTIFIER(name);
904 _Py_IDENTIFIER(mode);
Antoine Pitrou05608432009-01-09 18:53:14 +0000905
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000906 /* stdin is always opened in buffered mode, first because it shouldn't
907 make a difference in common use cases, second because TextIOWrapper
908 depends on the presence of a read1() method which only exists on
909 buffered streams.
910 */
911 if (Py_UnbufferedStdioFlag && write_mode)
912 buffering = 0;
913 else
914 buffering = -1;
915 if (write_mode)
916 mode = "wb";
917 else
918 mode = "rb";
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200919 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
920 fd, mode, buffering,
921 Py_None, Py_None, Py_None, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000922 if (buf == NULL)
923 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000924
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000925 if (buffering) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200926 _Py_IDENTIFIER(raw);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200927 raw = _PyObject_GetAttrId(buf, &PyId_raw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000928 if (raw == NULL)
929 goto error;
930 }
931 else {
932 raw = buf;
933 Py_INCREF(raw);
934 }
Antoine Pitrou05608432009-01-09 18:53:14 +0000935
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000936 text = PyUnicode_FromString(name);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200937 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000938 goto error;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200939 res = _PyObject_CallMethodId(raw, &PyId_isatty, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000940 if (res == NULL)
941 goto error;
942 isatty = PyObject_IsTrue(res);
943 Py_DECREF(res);
944 if (isatty == -1)
945 goto error;
946 if (isatty || Py_UnbufferedStdioFlag)
947 line_buffering = Py_True;
948 else
949 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +0000950
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000951 Py_CLEAR(raw);
952 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +0000953
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +0000954 newline = "\n";
955#ifdef MS_WINDOWS
956 if (!write_mode) {
957 /* translate \r\n to \n for sys.stdin on Windows */
958 newline = NULL;
959 }
960#endif
961
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200962 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssO",
963 buf, encoding, errors,
964 newline, line_buffering);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000965 Py_CLEAR(buf);
966 if (stream == NULL)
967 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000968
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000969 if (write_mode)
970 mode = "w";
971 else
972 mode = "r";
973 text = PyUnicode_FromString(mode);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200974 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000975 goto error;
976 Py_CLEAR(text);
977 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +0000978
979error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000980 Py_XDECREF(buf);
981 Py_XDECREF(stream);
982 Py_XDECREF(text);
983 Py_XDECREF(raw);
984 return NULL;
Antoine Pitrou05608432009-01-09 18:53:14 +0000985}
986
Antoine Pitrou11942a52011-11-28 19:08:36 +0100987static int
988is_valid_fd(int fd)
989{
990 int dummy_fd;
991 if (fd < 0 || !_PyVerify_fd(fd))
992 return 0;
993 dummy_fd = dup(fd);
994 if (dummy_fd < 0)
995 return 0;
996 close(dummy_fd);
997 return 1;
998}
999
Georg Brandl1a3284e2007-12-02 09:40:06 +00001000/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001001static int
1002initstdio(void)
1003{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001004 PyObject *iomod = NULL, *wrapper;
1005 PyObject *bimod = NULL;
1006 PyObject *m;
1007 PyObject *std = NULL;
1008 int status = 0, fd;
1009 PyObject * encoding_attr;
1010 char *encoding = NULL, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001011
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001012 /* Hack to avoid a nasty recursion issue when Python is invoked
1013 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1014 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1015 goto error;
1016 }
1017 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001018
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001019 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1020 goto error;
1021 }
1022 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001023
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001024 if (!(bimod = PyImport_ImportModule("builtins"))) {
1025 goto error;
1026 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001027
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001028 if (!(iomod = PyImport_ImportModule("io"))) {
1029 goto error;
1030 }
1031 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1032 goto error;
1033 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001034
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001035 /* Set builtins.open */
1036 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001037 Py_DECREF(wrapper);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001038 goto error;
1039 }
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001040 Py_DECREF(wrapper);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001041
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001042 encoding = Py_GETENV("PYTHONIOENCODING");
1043 errors = NULL;
1044 if (encoding) {
1045 encoding = strdup(encoding);
1046 errors = strchr(encoding, ':');
1047 if (errors) {
1048 *errors = '\0';
1049 errors++;
1050 }
1051 }
Martin v. Löwis0f599892008-06-02 11:13:03 +00001052
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001053 /* Set sys.stdin */
1054 fd = fileno(stdin);
1055 /* Under some conditions stdin, stdout and stderr may not be connected
1056 * and fileno() may point to an invalid file descriptor. For example
1057 * GUI apps don't have valid standard streams by default.
1058 */
Antoine Pitrou11942a52011-11-28 19:08:36 +01001059 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001060 std = Py_None;
1061 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001062 }
1063 else {
1064 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1065 if (std == NULL)
1066 goto error;
1067 } /* if (fd < 0) */
1068 PySys_SetObject("__stdin__", std);
1069 PySys_SetObject("stdin", std);
1070 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001071
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001072 /* Set sys.stdout */
1073 fd = fileno(stdout);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001074 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001075 std = Py_None;
1076 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001077 }
1078 else {
1079 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1080 if (std == NULL)
1081 goto error;
1082 } /* if (fd < 0) */
1083 PySys_SetObject("__stdout__", std);
1084 PySys_SetObject("stdout", std);
1085 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001086
Guido van Rossum98297ee2007-11-06 21:34:58 +00001087#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001088 /* Set sys.stderr, replaces the preliminary stderr */
1089 fd = fileno(stderr);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001090 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001091 std = Py_None;
1092 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001093 }
1094 else {
1095 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1096 if (std == NULL)
1097 goto error;
1098 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +00001099
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001100 /* Same as hack above, pre-import stderr's codec to avoid recursion
1101 when import.c tries to write to stderr in verbose mode. */
1102 encoding_attr = PyObject_GetAttrString(std, "encoding");
1103 if (encoding_attr != NULL) {
1104 const char * encoding;
1105 encoding = _PyUnicode_AsString(encoding_attr);
1106 if (encoding != NULL) {
Antoine Pitrou2fabfac2012-01-18 15:14:46 +01001107 PyObject *codec_info = _PyCodec_Lookup(encoding);
1108 Py_XDECREF(codec_info);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001109 }
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +00001110 Py_DECREF(encoding_attr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001111 }
1112 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +00001113
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001114 PySys_SetObject("__stderr__", std);
1115 PySys_SetObject("stderr", std);
1116 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001117#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001118
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001119 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001120 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001121 status = -1;
1122 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001123
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001124 if (encoding)
1125 free(encoding);
1126 Py_XDECREF(bimod);
1127 Py_XDECREF(iomod);
1128 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001129}
1130
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001131/* Parse input from a file and execute it */
1132
1133int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001134PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001135 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001136{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001137 if (filename == NULL)
1138 filename = "???";
1139 if (Py_FdIsInteractive(fp, filename)) {
1140 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1141 if (closeit)
1142 fclose(fp);
1143 return err;
1144 }
1145 else
1146 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001147}
1148
1149int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001150PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001151{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001152 PyObject *v;
1153 int ret;
1154 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001155
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001156 if (flags == NULL) {
1157 flags = &local_flags;
1158 local_flags.cf_flags = 0;
1159 }
1160 v = PySys_GetObject("ps1");
1161 if (v == NULL) {
1162 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
1163 Py_XDECREF(v);
1164 }
1165 v = PySys_GetObject("ps2");
1166 if (v == NULL) {
1167 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
1168 Py_XDECREF(v);
1169 }
1170 for (;;) {
1171 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
1172 PRINT_TOTAL_REFS();
1173 if (ret == E_EOF)
1174 return 0;
1175 /*
1176 if (ret == E_NOMEM)
1177 return -1;
1178 */
1179 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001180}
1181
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001182/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001183static int PARSER_FLAGS(PyCompilerFlags *flags)
1184{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001185 int parser_flags = 0;
1186 if (!flags)
1187 return 0;
1188 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1189 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1190 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1191 parser_flags |= PyPARSE_IGNORE_COOKIE;
1192 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1193 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1194 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001195}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001196
Thomas Wouters89f507f2006-12-13 04:49:30 +00001197#if 0
1198/* Keep an example of flags with future keyword support. */
1199#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001200 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1201 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1202 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1203 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001204#endif
1205
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001206int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001207PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001208{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001209 PyObject *m, *d, *v, *w, *oenc = NULL;
1210 mod_ty mod;
1211 PyArena *arena;
1212 char *ps1 = "", *ps2 = "", *enc = NULL;
1213 int errcode = 0;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001214 _Py_IDENTIFIER(encoding);
Tim Petersfe2127d2001-07-16 05:37:24 +00001215
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001216 if (fp == stdin) {
1217 /* Fetch encoding from sys.stdin */
1218 v = PySys_GetObject("stdin");
1219 if (v == NULL || v == Py_None)
1220 return -1;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001221 oenc = _PyObject_GetAttrId(v, &PyId_encoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001222 if (!oenc)
1223 return -1;
1224 enc = _PyUnicode_AsString(oenc);
Victor Stinner386fe712010-05-19 00:34:15 +00001225 if (enc == NULL)
1226 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001227 }
1228 v = PySys_GetObject("ps1");
1229 if (v != NULL) {
1230 v = PyObject_Str(v);
1231 if (v == NULL)
1232 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001233 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001234 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001235 if (ps1 == NULL) {
1236 PyErr_Clear();
1237 ps1 = "";
1238 }
1239 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001240 }
1241 w = PySys_GetObject("ps2");
1242 if (w != NULL) {
1243 w = PyObject_Str(w);
1244 if (w == NULL)
1245 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001246 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001247 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001248 if (ps2 == NULL) {
1249 PyErr_Clear();
1250 ps2 = "";
1251 }
1252 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001253 }
1254 arena = PyArena_New();
1255 if (arena == NULL) {
1256 Py_XDECREF(v);
1257 Py_XDECREF(w);
1258 Py_XDECREF(oenc);
1259 return -1;
1260 }
1261 mod = PyParser_ASTFromFile(fp, filename, enc,
1262 Py_single_input, ps1, ps2,
1263 flags, &errcode, arena);
1264 Py_XDECREF(v);
1265 Py_XDECREF(w);
1266 Py_XDECREF(oenc);
1267 if (mod == NULL) {
1268 PyArena_Free(arena);
1269 if (errcode == E_EOF) {
1270 PyErr_Clear();
1271 return E_EOF;
1272 }
1273 PyErr_Print();
1274 return -1;
1275 }
1276 m = PyImport_AddModule("__main__");
1277 if (m == NULL) {
1278 PyArena_Free(arena);
1279 return -1;
1280 }
1281 d = PyModule_GetDict(m);
1282 v = run_mod(mod, filename, d, d, flags, arena);
1283 PyArena_Free(arena);
1284 flush_io();
1285 if (v == NULL) {
1286 PyErr_Print();
1287 return -1;
1288 }
1289 Py_DECREF(v);
1290 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001291}
1292
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001293/* Check whether a file maybe a pyc file: Look at the extension,
1294 the file type, and, if we may close it, at the first few bytes. */
1295
1296static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001297maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001298{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001299 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1300 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001301
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001302 /* Only look into the file if we are allowed to close it, since
1303 it then should also be seekable. */
1304 if (closeit) {
1305 /* Read only two bytes of the magic. If the file was opened in
1306 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1307 be read as they are on disk. */
1308 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1309 unsigned char buf[2];
1310 /* Mess: In case of -x, the stream is NOT at its start now,
1311 and ungetc() was used to push back the first newline,
1312 which makes the current stream position formally undefined,
1313 and a x-platform nightmare.
1314 Unfortunately, we have no direct way to know whether -x
1315 was specified. So we use a terrible hack: if the current
1316 stream position is not 0, we assume -x was specified, and
1317 give up. Bug 132850 on SourceForge spells out the
1318 hopelessness of trying anything else (fseek and ftell
1319 don't work predictably x-platform for text-mode files).
1320 */
1321 int ispyc = 0;
1322 if (ftell(fp) == 0) {
1323 if (fread(buf, 1, 2, fp) == 2 &&
1324 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1325 ispyc = 1;
1326 rewind(fp);
1327 }
1328 return ispyc;
1329 }
1330 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001331}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001332
Guido van Rossum0df002c2000-08-27 19:21:52 +00001333int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001334PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001335 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001336{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001337 PyObject *m, *d, *v;
1338 const char *ext;
Victor Stinner0fcab4a2011-01-04 12:59:15 +00001339 int set_file_name = 0, ret;
1340 size_t len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001341
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001342 m = PyImport_AddModule("__main__");
1343 if (m == NULL)
1344 return -1;
1345 d = PyModule_GetDict(m);
1346 if (PyDict_GetItemString(d, "__file__") == NULL) {
1347 PyObject *f;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001348 f = PyUnicode_DecodeFSDefault(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001349 if (f == NULL)
1350 return -1;
1351 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1352 Py_DECREF(f);
1353 return -1;
1354 }
Barry Warsaw916048d2011-09-20 14:45:44 -04001355 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0) {
1356 Py_DECREF(f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001357 return -1;
Barry Warsaw916048d2011-09-20 14:45:44 -04001358 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001359 set_file_name = 1;
1360 Py_DECREF(f);
1361 }
1362 len = strlen(filename);
1363 ext = filename + len - (len > 4 ? 4 : 0);
1364 if (maybe_pyc_file(fp, filename, ext, closeit)) {
1365 /* Try to run a pyc file. First, re-open in binary */
1366 if (closeit)
1367 fclose(fp);
1368 if ((fp = fopen(filename, "rb")) == NULL) {
1369 fprintf(stderr, "python: Can't reopen .pyc file\n");
1370 ret = -1;
1371 goto done;
1372 }
1373 /* Turn on optimization if a .pyo file is given */
1374 if (strcmp(ext, ".pyo") == 0)
1375 Py_OptimizeFlag = 1;
1376 v = run_pyc_file(fp, filename, d, d, flags);
1377 } else {
1378 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1379 closeit, flags);
1380 }
1381 flush_io();
1382 if (v == NULL) {
1383 PyErr_Print();
1384 ret = -1;
1385 goto done;
1386 }
1387 Py_DECREF(v);
1388 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001389 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001390 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1391 PyErr_Clear();
1392 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001393}
1394
1395int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001396PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001397{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001398 PyObject *m, *d, *v;
1399 m = PyImport_AddModule("__main__");
1400 if (m == NULL)
1401 return -1;
1402 d = PyModule_GetDict(m);
1403 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1404 if (v == NULL) {
1405 PyErr_Print();
1406 return -1;
1407 }
1408 Py_DECREF(v);
1409 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001410}
1411
Barry Warsaw035574d1997-08-29 22:07:17 +00001412static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001413parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001414 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001415{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001416 long hold;
1417 PyObject *v;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001418 _Py_IDENTIFIER(msg);
1419 _Py_IDENTIFIER(filename);
1420 _Py_IDENTIFIER(lineno);
1421 _Py_IDENTIFIER(offset);
1422 _Py_IDENTIFIER(text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001423
Benjamin Peterson80d50422012-04-03 00:30:38 -04001424 *message = NULL;
1425
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001426 /* new style errors. `err' is an instance */
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001427 *message = _PyObject_GetAttrId(err, &PyId_msg);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001428 if (!*message)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001429 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001430
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001431 v = _PyObject_GetAttrId(err, &PyId_filename);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001432 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001433 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001434 if (v == Py_None) {
1435 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001436 *filename = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001437 }
1438 else {
1439 *filename = _PyUnicode_AsString(v);
1440 Py_DECREF(v);
1441 if (!*filename)
1442 goto finally;
1443 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001444
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001445 v = _PyObject_GetAttrId(err, &PyId_lineno);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001446 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001447 goto finally;
1448 hold = PyLong_AsLong(v);
1449 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001450 if (hold < 0 && PyErr_Occurred())
1451 goto finally;
1452 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001453
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001454 v = _PyObject_GetAttrId(err, &PyId_offset);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001455 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001456 goto finally;
1457 if (v == Py_None) {
1458 *offset = -1;
1459 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001460 } else {
1461 hold = PyLong_AsLong(v);
1462 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001463 if (hold < 0 && PyErr_Occurred())
1464 goto finally;
1465 *offset = (int)hold;
1466 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001467
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001468 v = _PyObject_GetAttrId(err, &PyId_text);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001469 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001470 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001471 if (v == Py_None) {
1472 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001473 *text = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001474 }
1475 else {
1476 *text = _PyUnicode_AsString(v);
1477 Py_DECREF(v);
1478 if (!*text)
1479 goto finally;
1480 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001481 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001482
1483finally:
Benjamin Peterson80d50422012-04-03 00:30:38 -04001484 Py_XDECREF(*message);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001485 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001486}
1487
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001488void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001489PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001490{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001491 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001492}
1493
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001494static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001495print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001496{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001497 char *nl;
1498 if (offset >= 0) {
Benjamin Petersona95e9772010-10-29 03:28:14 +00001499 if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n')
1500 offset--;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001501 for (;;) {
1502 nl = strchr(text, '\n');
1503 if (nl == NULL || nl-text >= offset)
1504 break;
1505 offset -= (int)(nl+1-text);
1506 text = nl+1;
1507 }
1508 while (*text == ' ' || *text == '\t') {
1509 text++;
1510 offset--;
1511 }
1512 }
1513 PyFile_WriteString(" ", f);
1514 PyFile_WriteString(text, f);
1515 if (*text == '\0' || text[strlen(text)-1] != '\n')
1516 PyFile_WriteString("\n", f);
1517 if (offset == -1)
1518 return;
1519 PyFile_WriteString(" ", f);
Benjamin Petersona95e9772010-10-29 03:28:14 +00001520 while (--offset > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001521 PyFile_WriteString(" ", f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001522 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001523}
1524
Guido van Rossum66e8e862001-03-23 17:54:43 +00001525static void
1526handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001527{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001528 PyObject *exception, *value, *tb;
1529 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001530
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001531 if (Py_InspectFlag)
1532 /* Don't exit if -i flag was given. This flag is set to 0
1533 * when entering interactive mode for inspecting. */
1534 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001535
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001536 PyErr_Fetch(&exception, &value, &tb);
1537 fflush(stdout);
1538 if (value == NULL || value == Py_None)
1539 goto done;
1540 if (PyExceptionInstance_Check(value)) {
1541 /* The error code should be in the `code' attribute. */
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001542 _Py_IDENTIFIER(code);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001543 PyObject *code = _PyObject_GetAttrId(value, &PyId_code);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001544 if (code) {
1545 Py_DECREF(value);
1546 value = code;
1547 if (value == Py_None)
1548 goto done;
1549 }
1550 /* If we failed to dig out the 'code' attribute,
1551 just let the else clause below print the error. */
1552 }
1553 if (PyLong_Check(value))
1554 exitcode = (int)PyLong_AsLong(value);
1555 else {
Victor Stinnere9fb3192010-05-17 08:58:51 +00001556 PyObject *sys_stderr = PySys_GetObject("stderr");
Victor Stinner7126dbc2010-05-21 23:45:42 +00001557 if (sys_stderr != NULL && sys_stderr != Py_None) {
1558 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1559 } else {
1560 PyObject_Print(value, stderr, Py_PRINT_RAW);
1561 fflush(stderr);
1562 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001563 PySys_WriteStderr("\n");
1564 exitcode = 1;
1565 }
Tim Peterscf615b52003-04-19 18:47:02 +00001566 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001567 /* Restore and clear the exception info, in order to properly decref
1568 * the exception, value, and traceback. If we just exit instead,
1569 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1570 * some finalizers from running.
1571 */
1572 PyErr_Restore(exception, value, tb);
1573 PyErr_Clear();
1574 Py_Exit(exitcode);
1575 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001576}
1577
1578void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001579PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001580{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001581 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001582
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001583 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1584 handle_system_exit();
1585 }
1586 PyErr_Fetch(&exception, &v, &tb);
1587 if (exception == NULL)
1588 return;
1589 PyErr_NormalizeException(&exception, &v, &tb);
1590 if (tb == NULL) {
1591 tb = Py_None;
1592 Py_INCREF(tb);
1593 }
1594 PyException_SetTraceback(v, tb);
1595 if (exception == NULL)
1596 return;
1597 /* Now we know v != NULL too */
1598 if (set_sys_last_vars) {
1599 PySys_SetObject("last_type", exception);
1600 PySys_SetObject("last_value", v);
1601 PySys_SetObject("last_traceback", tb);
1602 }
1603 hook = PySys_GetObject("excepthook");
1604 if (hook) {
1605 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1606 PyObject *result = PyEval_CallObject(hook, args);
1607 if (result == NULL) {
1608 PyObject *exception2, *v2, *tb2;
1609 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1610 handle_system_exit();
1611 }
1612 PyErr_Fetch(&exception2, &v2, &tb2);
1613 PyErr_NormalizeException(&exception2, &v2, &tb2);
1614 /* It should not be possible for exception2 or v2
1615 to be NULL. However PyErr_Display() can't
1616 tolerate NULLs, so just be safe. */
1617 if (exception2 == NULL) {
1618 exception2 = Py_None;
1619 Py_INCREF(exception2);
1620 }
1621 if (v2 == NULL) {
1622 v2 = Py_None;
1623 Py_INCREF(v2);
1624 }
1625 fflush(stdout);
1626 PySys_WriteStderr("Error in sys.excepthook:\n");
1627 PyErr_Display(exception2, v2, tb2);
1628 PySys_WriteStderr("\nOriginal exception was:\n");
1629 PyErr_Display(exception, v, tb);
1630 Py_DECREF(exception2);
1631 Py_DECREF(v2);
1632 Py_XDECREF(tb2);
1633 }
1634 Py_XDECREF(result);
1635 Py_XDECREF(args);
1636 } else {
1637 PySys_WriteStderr("sys.excepthook is missing\n");
1638 PyErr_Display(exception, v, tb);
1639 }
1640 Py_XDECREF(exception);
1641 Py_XDECREF(v);
1642 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001643}
1644
Benjamin Petersone6528212008-07-15 15:32:09 +00001645static void
1646print_exception(PyObject *f, PyObject *value)
1647{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001648 int err = 0;
1649 PyObject *type, *tb;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001650 _Py_IDENTIFIER(print_file_and_line);
Benjamin Petersone6528212008-07-15 15:32:09 +00001651
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001652 if (!PyExceptionInstance_Check(value)) {
1653 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1654 PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1655 PyFile_WriteString(" found\n", f);
1656 return;
1657 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001658
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001659 Py_INCREF(value);
1660 fflush(stdout);
1661 type = (PyObject *) Py_TYPE(value);
1662 tb = PyException_GetTraceback(value);
1663 if (tb && tb != Py_None)
1664 err = PyTraceBack_Print(tb, f);
1665 if (err == 0 &&
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001666 _PyObject_HasAttrId(value, &PyId_print_file_and_line))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001667 {
1668 PyObject *message;
1669 const char *filename, *text;
1670 int lineno, offset;
1671 if (!parse_syntax_error(value, &message, &filename,
1672 &lineno, &offset, &text))
1673 PyErr_Clear();
1674 else {
1675 char buf[10];
1676 PyFile_WriteString(" File \"", f);
1677 if (filename == NULL)
1678 PyFile_WriteString("<string>", f);
1679 else
1680 PyFile_WriteString(filename, f);
1681 PyFile_WriteString("\", line ", f);
1682 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
1683 PyFile_WriteString(buf, f);
1684 PyFile_WriteString("\n", f);
1685 if (text != NULL)
1686 print_error_text(f, offset, text);
1687 Py_DECREF(value);
1688 value = message;
1689 /* Can't be bothered to check all those
1690 PyFile_WriteString() calls */
1691 if (PyErr_Occurred())
1692 err = -1;
1693 }
1694 }
1695 if (err) {
1696 /* Don't do anything else */
1697 }
1698 else {
1699 PyObject* moduleName;
1700 char* className;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001701 _Py_IDENTIFIER(__module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001702 assert(PyExceptionClass_Check(type));
1703 className = PyExceptionClass_Name(type);
1704 if (className != NULL) {
1705 char *dot = strrchr(className, '.');
1706 if (dot != NULL)
1707 className = dot+1;
1708 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001709
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001710 moduleName = _PyObject_GetAttrId(type, &PyId___module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001711 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1712 {
Victor Stinner13b21bd2011-05-26 14:25:13 +02001713 Py_XDECREF(moduleName);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001714 err = PyFile_WriteString("<unknown>", f);
1715 }
1716 else {
1717 char* modstr = _PyUnicode_AsString(moduleName);
1718 if (modstr && strcmp(modstr, "builtins"))
1719 {
1720 err = PyFile_WriteString(modstr, f);
1721 err += PyFile_WriteString(".", f);
1722 }
1723 Py_DECREF(moduleName);
1724 }
1725 if (err == 0) {
1726 if (className == NULL)
1727 err = PyFile_WriteString("<unknown>", f);
1728 else
1729 err = PyFile_WriteString(className, f);
1730 }
1731 }
1732 if (err == 0 && (value != Py_None)) {
1733 PyObject *s = PyObject_Str(value);
1734 /* only print colon if the str() of the
1735 object is not the empty string
1736 */
1737 if (s == NULL)
1738 err = -1;
1739 else if (!PyUnicode_Check(s) ||
Victor Stinnere251d6d2011-11-20 19:20:00 +01001740 PyUnicode_GetLength(s) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001741 err = PyFile_WriteString(": ", f);
1742 if (err == 0)
1743 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1744 Py_XDECREF(s);
1745 }
1746 /* try to write a newline in any case */
1747 err += PyFile_WriteString("\n", f);
1748 Py_XDECREF(tb);
1749 Py_DECREF(value);
1750 /* If an error happened here, don't show it.
1751 XXX This is wrong, but too many callers rely on this behavior. */
1752 if (err != 0)
1753 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001754}
1755
1756static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001757 "\nThe above exception was the direct cause "
1758 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001759
1760static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001761 "\nDuring handling of the above exception, "
1762 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001763
1764static void
1765print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
1766{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001767 int err = 0, res;
1768 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00001769
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001770 if (seen != NULL) {
1771 /* Exception chaining */
1772 if (PySet_Add(seen, value) == -1)
1773 PyErr_Clear();
1774 else if (PyExceptionInstance_Check(value)) {
1775 cause = PyException_GetCause(value);
1776 context = PyException_GetContext(value);
Benjamin Petersond5a1c442012-05-14 22:09:31 -07001777 if (cause) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001778 res = PySet_Contains(seen, cause);
1779 if (res == -1)
1780 PyErr_Clear();
1781 if (res == 0) {
1782 print_exception_recursive(
1783 f, cause, seen);
1784 err |= PyFile_WriteString(
1785 cause_message, f);
1786 }
1787 }
Benjamin Petersond5a1c442012-05-14 22:09:31 -07001788 else if (context &&
1789 !((PyBaseExceptionObject *)value)->suppress_context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001790 res = PySet_Contains(seen, context);
1791 if (res == -1)
1792 PyErr_Clear();
1793 if (res == 0) {
1794 print_exception_recursive(
1795 f, context, seen);
1796 err |= PyFile_WriteString(
1797 context_message, f);
1798 }
1799 }
1800 Py_XDECREF(context);
1801 Py_XDECREF(cause);
1802 }
1803 }
1804 print_exception(f, value);
1805 if (err != 0)
1806 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001807}
1808
Thomas Wouters477c8d52006-05-27 19:21:47 +00001809void
1810PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001811{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001812 PyObject *seen;
1813 PyObject *f = PySys_GetObject("stderr");
1814 if (f == Py_None) {
1815 /* pass */
1816 }
1817 else if (f == NULL) {
1818 _PyObject_Dump(value);
1819 fprintf(stderr, "lost sys.stderr\n");
1820 }
1821 else {
1822 /* We choose to ignore seen being possibly NULL, and report
1823 at least the main exception (it could be a MemoryError).
1824 */
1825 seen = PySet_New(NULL);
1826 if (seen == NULL)
1827 PyErr_Clear();
1828 print_exception_recursive(f, value, seen);
1829 Py_XDECREF(seen);
1830 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001831}
1832
Guido van Rossum82598051997-03-05 00:20:32 +00001833PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001834PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001835 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001836{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001837 PyObject *ret = NULL;
1838 mod_ty mod;
1839 PyArena *arena = PyArena_New();
1840 if (arena == NULL)
1841 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001842
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001843 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
1844 if (mod != NULL)
1845 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
1846 PyArena_Free(arena);
1847 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001848}
1849
1850PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001851PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001852 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001853{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001854 PyObject *ret;
1855 mod_ty mod;
1856 PyArena *arena = PyArena_New();
1857 if (arena == NULL)
1858 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001859
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001860 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
1861 flags, NULL, arena);
1862 if (closeit)
1863 fclose(fp);
1864 if (mod == NULL) {
1865 PyArena_Free(arena);
1866 return NULL;
1867 }
1868 ret = run_mod(mod, filename, globals, locals, flags, arena);
1869 PyArena_Free(arena);
1870 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001871}
1872
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001873static void
1874flush_io(void)
1875{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001876 PyObject *f, *r;
1877 PyObject *type, *value, *traceback;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001878 _Py_IDENTIFIER(flush);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001879
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001880 /* Save the current exception */
1881 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001882
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001883 f = PySys_GetObject("stderr");
1884 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001885 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001886 if (r)
1887 Py_DECREF(r);
1888 else
1889 PyErr_Clear();
1890 }
1891 f = PySys_GetObject("stdout");
1892 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001893 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001894 if (r)
1895 Py_DECREF(r);
1896 else
1897 PyErr_Clear();
1898 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001899
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001900 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001901}
1902
Guido van Rossum82598051997-03-05 00:20:32 +00001903static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001904run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001905 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001906{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001907 PyCodeObject *co;
1908 PyObject *v;
1909 co = PyAST_Compile(mod, filename, flags, arena);
1910 if (co == NULL)
1911 return NULL;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001912 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001913 Py_DECREF(co);
1914 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001915}
1916
Guido van Rossum82598051997-03-05 00:20:32 +00001917static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001918run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001919 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001920{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001921 PyCodeObject *co;
1922 PyObject *v;
1923 long magic;
1924 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001925
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001926 magic = PyMarshal_ReadLongFromFile(fp);
1927 if (magic != PyImport_GetMagicNumber()) {
1928 PyErr_SetString(PyExc_RuntimeError,
1929 "Bad magic number in .pyc file");
1930 return NULL;
1931 }
Antoine Pitrou5136ac02012-01-13 18:52:16 +01001932 /* Skip mtime and size */
1933 (void) PyMarshal_ReadLongFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001934 (void) PyMarshal_ReadLongFromFile(fp);
1935 v = PyMarshal_ReadLastObjectFromFile(fp);
1936 fclose(fp);
1937 if (v == NULL || !PyCode_Check(v)) {
1938 Py_XDECREF(v);
1939 PyErr_SetString(PyExc_RuntimeError,
1940 "Bad code object in .pyc file");
1941 return NULL;
1942 }
1943 co = (PyCodeObject *)v;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001944 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001945 if (v && flags)
1946 flags->cf_flags |= (co->co_flags & PyCF_MASK);
1947 Py_DECREF(co);
1948 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001949}
1950
Guido van Rossum82598051997-03-05 00:20:32 +00001951PyObject *
Georg Brandl8334fd92010-12-04 10:26:46 +00001952Py_CompileStringExFlags(const char *str, const char *filename, int start,
1953 PyCompilerFlags *flags, int optimize)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001954{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001955 PyCodeObject *co;
1956 mod_ty mod;
1957 PyArena *arena = PyArena_New();
1958 if (arena == NULL)
1959 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001960
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001961 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
1962 if (mod == NULL) {
1963 PyArena_Free(arena);
1964 return NULL;
1965 }
1966 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
1967 PyObject *result = PyAST_mod2obj(mod);
1968 PyArena_Free(arena);
1969 return result;
1970 }
Georg Brandl8334fd92010-12-04 10:26:46 +00001971 co = PyAST_CompileEx(mod, filename, flags, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001972 PyArena_Free(arena);
1973 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001974}
1975
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001976/* For use in Py_LIMITED_API */
1977#undef Py_CompileString
1978PyObject *
1979PyCompileString(const char *str, const char *filename, int start)
1980{
1981 return Py_CompileStringFlags(str, filename, start, NULL);
1982}
1983
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001984struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001985Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001986{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001987 struct symtable *st;
1988 mod_ty mod;
1989 PyCompilerFlags flags;
1990 PyArena *arena = PyArena_New();
1991 if (arena == NULL)
1992 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001993
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001994 flags.cf_flags = 0;
1995 mod = PyParser_ASTFromString(str, filename, start, &flags, arena);
1996 if (mod == NULL) {
1997 PyArena_Free(arena);
1998 return NULL;
1999 }
2000 st = PySymtable_Build(mod, filename, 0);
2001 PyArena_Free(arena);
2002 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00002003}
2004
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002005/* Preferred access to parser is through AST. */
2006mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002007PyParser_ASTFromString(const char *s, const char *filename, int start,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002008 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002009{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002010 mod_ty mod;
2011 PyCompilerFlags localflags;
2012 perrdetail err;
2013 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002014
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002015 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename,
2016 &_PyParser_Grammar, start, &err,
2017 &iflags);
2018 if (flags == NULL) {
2019 localflags.cf_flags = 0;
2020 flags = &localflags;
2021 }
2022 if (n) {
2023 flags->cf_flags |= iflags & PyCF_MASK;
2024 mod = PyAST_FromNode(n, flags, filename, arena);
2025 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002026 }
2027 else {
2028 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002029 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002030 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002031 err_free(&err);
2032 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002033}
2034
2035mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00002036PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002037 int start, char *ps1,
2038 char *ps2, PyCompilerFlags *flags, int *errcode,
2039 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002040{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002041 mod_ty mod;
2042 PyCompilerFlags localflags;
2043 perrdetail err;
2044 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002045
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002046 node *n = PyParser_ParseFileFlagsEx(fp, filename, enc,
2047 &_PyParser_Grammar,
2048 start, ps1, ps2, &err, &iflags);
2049 if (flags == NULL) {
2050 localflags.cf_flags = 0;
2051 flags = &localflags;
2052 }
2053 if (n) {
2054 flags->cf_flags |= iflags & PyCF_MASK;
2055 mod = PyAST_FromNode(n, flags, filename, arena);
2056 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002057 }
2058 else {
2059 err_input(&err);
2060 if (errcode)
2061 *errcode = err.error;
Victor Stinner7f2fee32011-04-05 00:39:01 +02002062 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002063 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002064 err_free(&err);
2065 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002066}
2067
Guido van Rossuma110aa61994-08-29 12:50:44 +00002068/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002069
Guido van Rossuma110aa61994-08-29 12:50:44 +00002070node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002071PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002072{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002073 perrdetail err;
2074 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
2075 &_PyParser_Grammar,
2076 start, NULL, NULL, &err, flags);
2077 if (n == NULL)
2078 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002079 err_free(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002080
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002081 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002082}
2083
Guido van Rossuma110aa61994-08-29 12:50:44 +00002084/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002085
Guido van Rossuma110aa61994-08-29 12:50:44 +00002086node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002087PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00002088{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002089 perrdetail err;
2090 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
2091 start, &err, flags);
2092 if (n == NULL)
2093 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002094 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002095 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00002096}
2097
2098node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002099PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002100 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002101{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002102 perrdetail err;
2103 node *n = PyParser_ParseStringFlagsFilename(str, filename,
2104 &_PyParser_Grammar, start, &err, flags);
2105 if (n == NULL)
2106 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002107 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002108 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00002109}
2110
2111node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002112PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002113{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002114 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00002115}
2116
Guido van Rossum66ebd912003-04-17 16:02:26 +00002117/* May want to move a more generalized form of this to parsetok.c or
2118 even parser modules. */
2119
2120void
Victor Stinner7f2fee32011-04-05 00:39:01 +02002121PyParser_ClearError(perrdetail *err)
2122{
2123 err_free(err);
2124}
2125
2126void
Guido van Rossum66ebd912003-04-17 16:02:26 +00002127PyParser_SetError(perrdetail *err)
2128{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002129 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00002130}
2131
Victor Stinner7f2fee32011-04-05 00:39:01 +02002132static void
2133err_free(perrdetail *err)
2134{
2135 Py_CLEAR(err->filename);
2136}
2137
Guido van Rossuma110aa61994-08-29 12:50:44 +00002138/* Set the error appropriate to the given input error code (see errcode.h) */
2139
2140static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002141err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00002142{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002143 PyObject *v, *w, *errtype, *errtext;
2144 PyObject *msg_obj = NULL;
2145 char *msg = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002146
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002147 errtype = PyExc_SyntaxError;
2148 switch (err->error) {
2149 case E_ERROR:
2150 return;
2151 case E_SYNTAX:
2152 errtype = PyExc_IndentationError;
2153 if (err->expected == INDENT)
2154 msg = "expected an indented block";
2155 else if (err->token == INDENT)
2156 msg = "unexpected indent";
2157 else if (err->token == DEDENT)
2158 msg = "unexpected unindent";
2159 else {
2160 errtype = PyExc_SyntaxError;
2161 msg = "invalid syntax";
2162 }
2163 break;
2164 case E_TOKEN:
2165 msg = "invalid token";
2166 break;
2167 case E_EOFS:
2168 msg = "EOF while scanning triple-quoted string literal";
2169 break;
2170 case E_EOLS:
2171 msg = "EOL while scanning string literal";
2172 break;
2173 case E_INTR:
2174 if (!PyErr_Occurred())
2175 PyErr_SetNone(PyExc_KeyboardInterrupt);
2176 goto cleanup;
2177 case E_NOMEM:
2178 PyErr_NoMemory();
2179 goto cleanup;
2180 case E_EOF:
2181 msg = "unexpected EOF while parsing";
2182 break;
2183 case E_TABSPACE:
2184 errtype = PyExc_TabError;
2185 msg = "inconsistent use of tabs and spaces in indentation";
2186 break;
2187 case E_OVERFLOW:
2188 msg = "expression too long";
2189 break;
2190 case E_DEDENT:
2191 errtype = PyExc_IndentationError;
2192 msg = "unindent does not match any outer indentation level";
2193 break;
2194 case E_TOODEEP:
2195 errtype = PyExc_IndentationError;
2196 msg = "too many levels of indentation";
2197 break;
2198 case E_DECODE: {
2199 PyObject *type, *value, *tb;
2200 PyErr_Fetch(&type, &value, &tb);
2201 msg = "unknown decode error";
2202 if (value != NULL)
2203 msg_obj = PyObject_Str(value);
2204 Py_XDECREF(type);
2205 Py_XDECREF(value);
2206 Py_XDECREF(tb);
2207 break;
2208 }
2209 case E_LINECONT:
2210 msg = "unexpected character after line continuation character";
2211 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002212
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002213 case E_IDENTIFIER:
2214 msg = "invalid character in identifier";
2215 break;
Meador Ingefa21bf02012-01-19 01:08:41 -06002216 case E_BADSINGLE:
2217 msg = "multiple statements found while compiling a single statement";
2218 break;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002219 default:
2220 fprintf(stderr, "error=%d\n", err->error);
2221 msg = "unknown parsing error";
2222 break;
2223 }
2224 /* err->text may not be UTF-8 in case of decoding errors.
2225 Explicitly convert to an object. */
2226 if (!err->text) {
2227 errtext = Py_None;
2228 Py_INCREF(Py_None);
2229 } else {
2230 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
2231 "replace");
2232 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002233 v = Py_BuildValue("(OiiN)", err->filename,
2234 err->lineno, err->offset, errtext);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002235 if (v != NULL) {
2236 if (msg_obj)
2237 w = Py_BuildValue("(OO)", msg_obj, v);
2238 else
2239 w = Py_BuildValue("(sO)", msg, v);
2240 } else
2241 w = NULL;
2242 Py_XDECREF(v);
2243 PyErr_SetObject(errtype, w);
2244 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002245cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002246 Py_XDECREF(msg_obj);
2247 if (err->text != NULL) {
2248 PyObject_FREE(err->text);
2249 err->text = NULL;
2250 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002251}
2252
2253/* Print fatal error message and abort */
2254
2255void
Tim Peters7c321a82002-07-09 02:57:01 +00002256Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002257{
Victor Stinner024e37a2011-03-31 01:31:06 +02002258 const int fd = fileno(stderr);
2259 PyThreadState *tstate;
2260
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002261 fprintf(stderr, "Fatal Python error: %s\n", msg);
2262 fflush(stderr); /* it helps in Windows debug build */
2263 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002264 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002265 }
Victor Stinner024e37a2011-03-31 01:31:06 +02002266 else {
2267 tstate = _Py_atomic_load_relaxed(&_PyThreadState_Current);
2268 if (tstate != NULL) {
2269 fputc('\n', stderr);
2270 fflush(stderr);
Victor Stinner7bba62f2011-05-07 12:43:00 +02002271 _Py_DumpTracebackThreads(fd, tstate->interp, tstate);
Victor Stinner024e37a2011-03-31 01:31:06 +02002272 }
Victor Stinnerd727e232011-04-01 12:13:55 +02002273 _PyFaulthandler_Fini();
Victor Stinner024e37a2011-03-31 01:31:06 +02002274 }
2275
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002276#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002277 {
2278 size_t len = strlen(msg);
2279 WCHAR* buffer;
2280 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002281
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002282 /* Convert the message to wchar_t. This uses a simple one-to-one
2283 conversion, assuming that the this error message actually uses ASCII
2284 only. If this ceases to be true, we will have to convert. */
2285 buffer = alloca( (len+1) * (sizeof *buffer));
2286 for( i=0; i<=len; ++i)
2287 buffer[i] = msg[i];
2288 OutputDebugStringW(L"Fatal Python error: ");
2289 OutputDebugStringW(buffer);
2290 OutputDebugStringW(L"\n");
2291 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002292#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002293 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002294#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002295#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002296 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002297}
2298
2299/* Clean up and exit */
2300
Guido van Rossuma110aa61994-08-29 12:50:44 +00002301#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002302#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002303#endif
2304
Collin Winter670e6922007-03-21 02:57:17 +00002305static void (*pyexitfunc)(void) = NULL;
2306/* For the atexit module. */
2307void _Py_PyAtExit(void (*func)(void))
2308{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002309 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002310}
2311
2312static void
2313call_py_exitfuncs(void)
2314{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002315 if (pyexitfunc == NULL)
2316 return;
Collin Winter670e6922007-03-21 02:57:17 +00002317
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002318 (*pyexitfunc)();
2319 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002320}
2321
Antoine Pitrou011bd622009-10-20 21:52:47 +00002322/* Wait until threading._shutdown completes, provided
2323 the threading module was imported in the first place.
2324 The shutdown routine will wait until all non-daemon
2325 "threading" threads have completed. */
2326static void
2327wait_for_thread_shutdown(void)
2328{
2329#ifdef WITH_THREAD
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002330 _Py_IDENTIFIER(_shutdown);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002331 PyObject *result;
2332 PyThreadState *tstate = PyThreadState_GET();
2333 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2334 "threading");
2335 if (threading == NULL) {
2336 /* threading not imported */
2337 PyErr_Clear();
2338 return;
2339 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002340 result = _PyObject_CallMethodId(threading, &PyId__shutdown, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002341 if (result == NULL) {
2342 PyErr_WriteUnraisable(threading);
2343 }
2344 else {
2345 Py_DECREF(result);
2346 }
2347 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002348#endif
2349}
2350
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002351#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002352static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002353static int nexitfuncs = 0;
2354
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002355int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002356{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002357 if (nexitfuncs >= NEXITFUNCS)
2358 return -1;
2359 exitfuncs[nexitfuncs++] = func;
2360 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002361}
2362
Guido van Rossumcc283f51997-08-05 02:22:03 +00002363static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002364call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002365{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002366 while (nexitfuncs > 0)
2367 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002368
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002369 fflush(stdout);
2370 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002371}
2372
2373void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002374Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002375{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002376 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002377
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002378 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002379}
2380
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002381static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002382initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002383{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002384#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002385 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002386#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002387#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002388 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002389#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002390#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002391 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002392#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002393 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002394}
2395
Guido van Rossum7433b121997-02-14 19:45:36 +00002396
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002397/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2398 *
2399 * All of the code in this function must only use async-signal-safe functions,
2400 * listed at `man 7 signal` or
2401 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2402 */
2403void
2404_Py_RestoreSignals(void)
2405{
2406#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002407 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002408#endif
2409#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002410 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002411#endif
2412#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002413 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002414#endif
2415}
2416
2417
Guido van Rossum7433b121997-02-14 19:45:36 +00002418/*
2419 * The file descriptor fd is considered ``interactive'' if either
2420 * a) isatty(fd) is TRUE, or
2421 * b) the -i flag was given, and the filename associated with
2422 * the descriptor is NULL or "<stdin>" or "???".
2423 */
2424int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002425Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002426{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002427 if (isatty((int)fileno(fp)))
2428 return 1;
2429 if (!Py_InteractiveFlag)
2430 return 0;
2431 return (filename == NULL) ||
2432 (strcmp(filename, "<stdin>") == 0) ||
2433 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002434}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002435
2436
Tim Petersd08e3822003-04-17 15:24:21 +00002437#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002438#if defined(WIN32) && defined(_MSC_VER)
2439
2440/* Stack checking for Microsoft C */
2441
2442#include <malloc.h>
2443#include <excpt.h>
2444
Fred Drakee8de31c2000-08-31 05:38:39 +00002445/*
2446 * Return non-zero when we run out of memory on the stack; zero otherwise.
2447 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002448int
Fred Drake399739f2000-08-31 05:52:44 +00002449PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002450{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002451 __try {
2452 /* alloca throws a stack overflow exception if there's
2453 not enough space left on the stack */
2454 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2455 return 0;
2456 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2457 EXCEPTION_EXECUTE_HANDLER :
2458 EXCEPTION_CONTINUE_SEARCH) {
2459 int errcode = _resetstkoflw();
2460 if (errcode == 0)
2461 {
2462 Py_FatalError("Could not reset the stack!");
2463 }
2464 }
2465 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002466}
2467
2468#endif /* WIN32 && _MSC_VER */
2469
2470/* Alternate implementations can be added here... */
2471
2472#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002473
2474
2475/* Wrappers around sigaction() or signal(). */
2476
2477PyOS_sighandler_t
2478PyOS_getsig(int sig)
2479{
2480#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002481 struct sigaction context;
2482 if (sigaction(sig, NULL, &context) == -1)
2483 return SIG_ERR;
2484 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002485#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002486 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002487/* Special signal handling for the secure CRT in Visual Studio 2005 */
2488#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002489 switch (sig) {
2490 /* Only these signals are valid */
2491 case SIGINT:
2492 case SIGILL:
2493 case SIGFPE:
2494 case SIGSEGV:
2495 case SIGTERM:
2496 case SIGBREAK:
2497 case SIGABRT:
2498 break;
2499 /* Don't call signal() with other values or it will assert */
2500 default:
2501 return SIG_ERR;
2502 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002503#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002504 handler = signal(sig, SIG_IGN);
2505 if (handler != SIG_ERR)
2506 signal(sig, handler);
2507 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002508#endif
2509}
2510
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002511/*
2512 * All of the code in this function must only use async-signal-safe functions,
2513 * listed at `man 7 signal` or
2514 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2515 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002516PyOS_sighandler_t
2517PyOS_setsig(int sig, PyOS_sighandler_t handler)
2518{
2519#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002520 /* Some code in Modules/signalmodule.c depends on sigaction() being
2521 * used here if HAVE_SIGACTION is defined. Fix that if this code
2522 * changes to invalidate that assumption.
2523 */
2524 struct sigaction context, ocontext;
2525 context.sa_handler = handler;
2526 sigemptyset(&context.sa_mask);
2527 context.sa_flags = 0;
2528 if (sigaction(sig, &context, &ocontext) == -1)
2529 return SIG_ERR;
2530 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002531#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002532 PyOS_sighandler_t oldhandler;
2533 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002534#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002535 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002536#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002537 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002538#endif
2539}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002540
2541/* Deprecated C API functions still provided for binary compatiblity */
2542
2543#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002544PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002545PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2546{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002547 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002548}
2549
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002550#undef PyParser_SimpleParseString
2551PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002552PyParser_SimpleParseString(const char *str, int start)
2553{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002554 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002555}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002556
2557#undef PyRun_AnyFile
2558PyAPI_FUNC(int)
2559PyRun_AnyFile(FILE *fp, const char *name)
2560{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002561 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002562}
2563
2564#undef PyRun_AnyFileEx
2565PyAPI_FUNC(int)
2566PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2567{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002568 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002569}
2570
2571#undef PyRun_AnyFileFlags
2572PyAPI_FUNC(int)
2573PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2574{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002575 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002576}
2577
2578#undef PyRun_File
2579PyAPI_FUNC(PyObject *)
2580PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2581{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002582 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002583}
2584
2585#undef PyRun_FileEx
2586PyAPI_FUNC(PyObject *)
2587PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2588{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002589 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002590}
2591
2592#undef PyRun_FileFlags
2593PyAPI_FUNC(PyObject *)
2594PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002595 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002596{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002597 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002598}
2599
2600#undef PyRun_SimpleFile
2601PyAPI_FUNC(int)
2602PyRun_SimpleFile(FILE *f, const char *p)
2603{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002604 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002605}
2606
2607#undef PyRun_SimpleFileEx
2608PyAPI_FUNC(int)
2609PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2610{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002611 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002612}
2613
2614
2615#undef PyRun_String
2616PyAPI_FUNC(PyObject *)
2617PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2618{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002619 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002620}
2621
2622#undef PyRun_SimpleString
2623PyAPI_FUNC(int)
2624PyRun_SimpleString(const char *s)
2625{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002626 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002627}
2628
2629#undef Py_CompileString
2630PyAPI_FUNC(PyObject *)
2631Py_CompileString(const char *str, const char *p, int s)
2632{
Georg Brandl8334fd92010-12-04 10:26:46 +00002633 return Py_CompileStringExFlags(str, p, s, NULL, -1);
2634}
2635
2636#undef Py_CompileStringFlags
2637PyAPI_FUNC(PyObject *)
2638Py_CompileStringFlags(const char *str, const char *p, int s,
2639 PyCompilerFlags *flags)
2640{
2641 return Py_CompileStringExFlags(str, p, s, flags, -1);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002642}
2643
2644#undef PyRun_InteractiveOne
2645PyAPI_FUNC(int)
2646PyRun_InteractiveOne(FILE *f, const char *p)
2647{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002648 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002649}
2650
2651#undef PyRun_InteractiveLoop
2652PyAPI_FUNC(int)
2653PyRun_InteractiveLoop(FILE *f, const char *p)
2654{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002655 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002656}
2657
2658#ifdef __cplusplus
2659}
2660#endif