blob: 465aa7dbfea6983db0b9c56f024cb9a4c145da14 [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
Martin v. Löwis790465f2008-04-05 20:41:37 +0000781static wchar_t *progname = L"python";
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000782
783void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000784Py_SetProgramName(wchar_t *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000785{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000786 if (pn && *pn)
787 progname = pn;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000788}
789
Martin v. Löwis790465f2008-04-05 20:41:37 +0000790wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000791Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000792{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000793 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000794}
795
Martin v. Löwis790465f2008-04-05 20:41:37 +0000796static wchar_t *default_home = NULL;
797static wchar_t env_home[PATH_MAX+1];
Guido van Rossuma61691e1998-02-06 22:27:24 +0000798
799void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000800Py_SetPythonHome(wchar_t *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000801{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000802 default_home = home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000803}
804
Martin v. Löwis790465f2008-04-05 20:41:37 +0000805wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000806Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000807{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000808 wchar_t *home = default_home;
809 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
810 char* chome = Py_GETENV("PYTHONHOME");
811 if (chome) {
812 size_t r = mbstowcs(env_home, chome, PATH_MAX+1);
813 if (r != (size_t)-1 && r <= PATH_MAX)
814 home = env_home;
815 }
Martin v. Löwis790465f2008-04-05 20:41:37 +0000816
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000817 }
818 return home;
Guido van Rossuma61691e1998-02-06 22:27:24 +0000819}
820
Guido van Rossum6135a871995-01-09 17:53:26 +0000821/* Create __main__ module */
822
823static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000824initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000825{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000826 PyObject *m, *d;
827 m = PyImport_AddModule("__main__");
828 if (m == NULL)
829 Py_FatalError("can't create __main__ module");
830 d = PyModule_GetDict(m);
831 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
832 PyObject *bimod = PyImport_ImportModule("builtins");
833 if (bimod == NULL ||
834 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
835 Py_FatalError("can't add __builtins__ to __main__");
836 Py_DECREF(bimod);
837 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000838}
839
Victor Stinner793b5312011-04-27 00:24:21 +0200840static int
841initfsencoding(PyInterpreterState *interp)
Victor Stinnerb744ba12010-05-15 12:27:16 +0000842{
843 PyObject *codec;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000844
Victor Stinnerd64e8a72011-07-04 13:48:30 +0200845 if (Py_FileSystemDefaultEncoding == NULL)
846 {
847 Py_FileSystemDefaultEncoding = get_locale_encoding();
848 if (Py_FileSystemDefaultEncoding == NULL)
Victor Stinnere4743092010-10-19 00:05:51 +0000849 Py_FatalError("Py_Initialize: Unable to get the locale encoding");
Victor Stinnerb744ba12010-05-15 12:27:16 +0000850
Victor Stinnere4743092010-10-19 00:05:51 +0000851 Py_HasFileSystemDefaultEncoding = 0;
Victor Stinner793b5312011-04-27 00:24:21 +0200852 interp->fscodec_initialized = 1;
853 return 0;
Victor Stinner7f84ab52010-06-11 00:36:33 +0000854 }
Victor Stinnerb744ba12010-05-15 12:27:16 +0000855
856 /* the encoding is mbcs, utf-8 or ascii */
857 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
858 if (!codec) {
859 /* Such error can only occurs in critical situations: no more
860 * memory, import a module of the standard library failed,
861 * etc. */
Victor Stinner793b5312011-04-27 00:24:21 +0200862 return -1;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000863 }
Victor Stinner793b5312011-04-27 00:24:21 +0200864 Py_DECREF(codec);
865 interp->fscodec_initialized = 1;
866 return 0;
Victor Stinnerb744ba12010-05-15 12:27:16 +0000867}
868
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000869/* Import the site module (not into __main__ though) */
870
871static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000872initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000873{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000874 PyObject *m;
875 m = PyImport_ImportModule("site");
876 if (m == NULL) {
877 PyErr_Print();
878 Py_Finalize();
879 exit(1);
880 }
881 else {
882 Py_DECREF(m);
883 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000884}
885
Antoine Pitrou05608432009-01-09 18:53:14 +0000886static PyObject*
887create_stdio(PyObject* io,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000888 int fd, int write_mode, char* name,
889 char* encoding, char* errors)
Antoine Pitrou05608432009-01-09 18:53:14 +0000890{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000891 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
892 const char* mode;
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +0000893 const char* newline;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000894 PyObject *line_buffering;
895 int buffering, isatty;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200896 _Py_IDENTIFIER(open);
897 _Py_IDENTIFIER(isatty);
898 _Py_IDENTIFIER(TextIOWrapper);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200899 _Py_IDENTIFIER(name);
900 _Py_IDENTIFIER(mode);
Antoine Pitrou05608432009-01-09 18:53:14 +0000901
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000902 /* stdin is always opened in buffered mode, first because it shouldn't
903 make a difference in common use cases, second because TextIOWrapper
904 depends on the presence of a read1() method which only exists on
905 buffered streams.
906 */
907 if (Py_UnbufferedStdioFlag && write_mode)
908 buffering = 0;
909 else
910 buffering = -1;
911 if (write_mode)
912 mode = "wb";
913 else
914 mode = "rb";
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200915 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
916 fd, mode, buffering,
917 Py_None, Py_None, Py_None, 0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000918 if (buf == NULL)
919 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000920
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000921 if (buffering) {
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200922 _Py_IDENTIFIER(raw);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +0200923 raw = _PyObject_GetAttrId(buf, &PyId_raw);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000924 if (raw == NULL)
925 goto error;
926 }
927 else {
928 raw = buf;
929 Py_INCREF(raw);
930 }
Antoine Pitrou05608432009-01-09 18:53:14 +0000931
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000932 text = PyUnicode_FromString(name);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200933 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000934 goto error;
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200935 res = _PyObject_CallMethodId(raw, &PyId_isatty, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000936 if (res == NULL)
937 goto error;
938 isatty = PyObject_IsTrue(res);
939 Py_DECREF(res);
940 if (isatty == -1)
941 goto error;
942 if (isatty || Py_UnbufferedStdioFlag)
943 line_buffering = Py_True;
944 else
945 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +0000946
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000947 Py_CLEAR(raw);
948 Py_CLEAR(text);
Antoine Pitrou91696412009-01-09 22:12:30 +0000949
Victor Stinnerc0f1a1a2011-02-23 12:07:37 +0000950 newline = "\n";
951#ifdef MS_WINDOWS
952 if (!write_mode) {
953 /* translate \r\n to \n for sys.stdin on Windows */
954 newline = NULL;
955 }
956#endif
957
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200958 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssO",
959 buf, encoding, errors,
960 newline, line_buffering);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000961 Py_CLEAR(buf);
962 if (stream == NULL)
963 goto error;
Antoine Pitrou05608432009-01-09 18:53:14 +0000964
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000965 if (write_mode)
966 mode = "w";
967 else
968 mode = "r";
969 text = PyUnicode_FromString(mode);
Martin v. Löwis1c67dd92011-10-14 15:16:45 +0200970 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000971 goto error;
972 Py_CLEAR(text);
973 return stream;
Antoine Pitrou05608432009-01-09 18:53:14 +0000974
975error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000976 Py_XDECREF(buf);
977 Py_XDECREF(stream);
978 Py_XDECREF(text);
979 Py_XDECREF(raw);
980 return NULL;
Antoine Pitrou05608432009-01-09 18:53:14 +0000981}
982
Antoine Pitrou11942a52011-11-28 19:08:36 +0100983static int
984is_valid_fd(int fd)
985{
986 int dummy_fd;
987 if (fd < 0 || !_PyVerify_fd(fd))
988 return 0;
989 dummy_fd = dup(fd);
990 if (dummy_fd < 0)
991 return 0;
992 close(dummy_fd);
993 return 1;
994}
995
Georg Brandl1a3284e2007-12-02 09:40:06 +0000996/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000997static int
998initstdio(void)
999{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001000 PyObject *iomod = NULL, *wrapper;
1001 PyObject *bimod = NULL;
1002 PyObject *m;
1003 PyObject *std = NULL;
1004 int status = 0, fd;
1005 PyObject * encoding_attr;
1006 char *encoding = NULL, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001007
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001008 /* Hack to avoid a nasty recursion issue when Python is invoked
1009 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1010 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1011 goto error;
1012 }
1013 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001014
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001015 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1016 goto error;
1017 }
1018 Py_DECREF(m);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001019
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001020 if (!(bimod = PyImport_ImportModule("builtins"))) {
1021 goto error;
1022 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001023
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001024 if (!(iomod = PyImport_ImportModule("io"))) {
1025 goto error;
1026 }
1027 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1028 goto error;
1029 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001030
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001031 /* Set builtins.open */
1032 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001033 Py_DECREF(wrapper);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001034 goto error;
1035 }
Antoine Pitrou5a96b522010-11-20 19:50:57 +00001036 Py_DECREF(wrapper);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001037
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001038 encoding = Py_GETENV("PYTHONIOENCODING");
1039 errors = NULL;
1040 if (encoding) {
1041 encoding = strdup(encoding);
1042 errors = strchr(encoding, ':');
1043 if (errors) {
1044 *errors = '\0';
1045 errors++;
1046 }
1047 }
Martin v. Löwis0f599892008-06-02 11:13:03 +00001048
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001049 /* Set sys.stdin */
1050 fd = fileno(stdin);
1051 /* Under some conditions stdin, stdout and stderr may not be connected
1052 * and fileno() may point to an invalid file descriptor. For example
1053 * GUI apps don't have valid standard streams by default.
1054 */
Antoine Pitrou11942a52011-11-28 19:08:36 +01001055 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001056 std = Py_None;
1057 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001058 }
1059 else {
1060 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1061 if (std == NULL)
1062 goto error;
1063 } /* if (fd < 0) */
1064 PySys_SetObject("__stdin__", std);
1065 PySys_SetObject("stdin", std);
1066 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001067
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001068 /* Set sys.stdout */
1069 fd = fileno(stdout);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001070 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001071 std = Py_None;
1072 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001073 }
1074 else {
1075 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1076 if (std == NULL)
1077 goto error;
1078 } /* if (fd < 0) */
1079 PySys_SetObject("__stdout__", std);
1080 PySys_SetObject("stdout", std);
1081 Py_DECREF(std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001082
Guido van Rossum98297ee2007-11-06 21:34:58 +00001083#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001084 /* Set sys.stderr, replaces the preliminary stderr */
1085 fd = fileno(stderr);
Antoine Pitrou11942a52011-11-28 19:08:36 +01001086 if (!is_valid_fd(fd)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001087 std = Py_None;
1088 Py_INCREF(std);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001089 }
1090 else {
1091 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1092 if (std == NULL)
1093 goto error;
1094 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +00001095
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001096 /* Same as hack above, pre-import stderr's codec to avoid recursion
1097 when import.c tries to write to stderr in verbose mode. */
1098 encoding_attr = PyObject_GetAttrString(std, "encoding");
1099 if (encoding_attr != NULL) {
1100 const char * encoding;
1101 encoding = _PyUnicode_AsString(encoding_attr);
1102 if (encoding != NULL) {
Antoine Pitrou2fabfac2012-01-18 15:14:46 +01001103 PyObject *codec_info = _PyCodec_Lookup(encoding);
1104 Py_XDECREF(codec_info);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001105 }
Hirokazu Yamamotodaf83ac2010-10-30 15:08:15 +00001106 Py_DECREF(encoding_attr);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001107 }
1108 PyErr_Clear(); /* Not a fatal error if codec isn't available */
Trent Nelson39e307e2008-03-19 06:45:48 +00001109
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001110 PySys_SetObject("__stderr__", std);
1111 PySys_SetObject("stderr", std);
1112 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +00001113#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001114
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001115 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001116 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001117 status = -1;
1118 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001119
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001120 if (encoding)
1121 free(encoding);
1122 Py_XDECREF(bimod);
1123 Py_XDECREF(iomod);
1124 return status;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001125}
1126
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001127/* Parse input from a file and execute it */
1128
1129int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001130PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001131 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001132{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001133 if (filename == NULL)
1134 filename = "???";
1135 if (Py_FdIsInteractive(fp, filename)) {
1136 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
1137 if (closeit)
1138 fclose(fp);
1139 return err;
1140 }
1141 else
1142 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001143}
1144
1145int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001146PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001147{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001148 PyObject *v;
1149 int ret;
1150 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001151
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001152 if (flags == NULL) {
1153 flags = &local_flags;
1154 local_flags.cf_flags = 0;
1155 }
1156 v = PySys_GetObject("ps1");
1157 if (v == NULL) {
1158 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
1159 Py_XDECREF(v);
1160 }
1161 v = PySys_GetObject("ps2");
1162 if (v == NULL) {
1163 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
1164 Py_XDECREF(v);
1165 }
1166 for (;;) {
1167 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
1168 PRINT_TOTAL_REFS();
1169 if (ret == E_EOF)
1170 return 0;
1171 /*
1172 if (ret == E_NOMEM)
1173 return -1;
1174 */
1175 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001176}
1177
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001178/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001179static int PARSER_FLAGS(PyCompilerFlags *flags)
1180{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001181 int parser_flags = 0;
1182 if (!flags)
1183 return 0;
1184 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1185 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1186 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1187 parser_flags |= PyPARSE_IGNORE_COOKIE;
1188 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1189 parser_flags |= PyPARSE_BARRY_AS_BDFL;
1190 return parser_flags;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001191}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001192
Thomas Wouters89f507f2006-12-13 04:49:30 +00001193#if 0
1194/* Keep an example of flags with future keyword support. */
1195#define PARSER_FLAGS(flags) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001196 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1197 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1198 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1199 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Thomas Wouters89f507f2006-12-13 04:49:30 +00001200#endif
1201
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001202int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001203PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001204{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001205 PyObject *m, *d, *v, *w, *oenc = NULL;
1206 mod_ty mod;
1207 PyArena *arena;
1208 char *ps1 = "", *ps2 = "", *enc = NULL;
1209 int errcode = 0;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001210 _Py_IDENTIFIER(encoding);
Tim Petersfe2127d2001-07-16 05:37:24 +00001211
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001212 if (fp == stdin) {
1213 /* Fetch encoding from sys.stdin */
1214 v = PySys_GetObject("stdin");
1215 if (v == NULL || v == Py_None)
1216 return -1;
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001217 oenc = _PyObject_GetAttrId(v, &PyId_encoding);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001218 if (!oenc)
1219 return -1;
1220 enc = _PyUnicode_AsString(oenc);
Victor Stinner386fe712010-05-19 00:34:15 +00001221 if (enc == NULL)
1222 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001223 }
1224 v = PySys_GetObject("ps1");
1225 if (v != NULL) {
1226 v = PyObject_Str(v);
1227 if (v == NULL)
1228 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001229 else if (PyUnicode_Check(v)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001230 ps1 = _PyUnicode_AsString(v);
Victor Stinner386fe712010-05-19 00:34:15 +00001231 if (ps1 == NULL) {
1232 PyErr_Clear();
1233 ps1 = "";
1234 }
1235 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001236 }
1237 w = PySys_GetObject("ps2");
1238 if (w != NULL) {
1239 w = PyObject_Str(w);
1240 if (w == NULL)
1241 PyErr_Clear();
Victor Stinner386fe712010-05-19 00:34:15 +00001242 else if (PyUnicode_Check(w)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001243 ps2 = _PyUnicode_AsString(w);
Victor Stinner386fe712010-05-19 00:34:15 +00001244 if (ps2 == NULL) {
1245 PyErr_Clear();
1246 ps2 = "";
1247 }
1248 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001249 }
1250 arena = PyArena_New();
1251 if (arena == NULL) {
1252 Py_XDECREF(v);
1253 Py_XDECREF(w);
1254 Py_XDECREF(oenc);
1255 return -1;
1256 }
1257 mod = PyParser_ASTFromFile(fp, filename, enc,
1258 Py_single_input, ps1, ps2,
1259 flags, &errcode, arena);
1260 Py_XDECREF(v);
1261 Py_XDECREF(w);
1262 Py_XDECREF(oenc);
1263 if (mod == NULL) {
1264 PyArena_Free(arena);
1265 if (errcode == E_EOF) {
1266 PyErr_Clear();
1267 return E_EOF;
1268 }
1269 PyErr_Print();
1270 return -1;
1271 }
1272 m = PyImport_AddModule("__main__");
1273 if (m == NULL) {
1274 PyArena_Free(arena);
1275 return -1;
1276 }
1277 d = PyModule_GetDict(m);
1278 v = run_mod(mod, filename, d, d, flags, arena);
1279 PyArena_Free(arena);
1280 flush_io();
1281 if (v == NULL) {
1282 PyErr_Print();
1283 return -1;
1284 }
1285 Py_DECREF(v);
1286 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001287}
1288
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001289/* Check whether a file maybe a pyc file: Look at the extension,
1290 the file type, and, if we may close it, at the first few bytes. */
1291
1292static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001293maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001294{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001295 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1296 return 1;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001297
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001298 /* Only look into the file if we are allowed to close it, since
1299 it then should also be seekable. */
1300 if (closeit) {
1301 /* Read only two bytes of the magic. If the file was opened in
1302 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1303 be read as they are on disk. */
1304 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1305 unsigned char buf[2];
1306 /* Mess: In case of -x, the stream is NOT at its start now,
1307 and ungetc() was used to push back the first newline,
1308 which makes the current stream position formally undefined,
1309 and a x-platform nightmare.
1310 Unfortunately, we have no direct way to know whether -x
1311 was specified. So we use a terrible hack: if the current
1312 stream position is not 0, we assume -x was specified, and
1313 give up. Bug 132850 on SourceForge spells out the
1314 hopelessness of trying anything else (fseek and ftell
1315 don't work predictably x-platform for text-mode files).
1316 */
1317 int ispyc = 0;
1318 if (ftell(fp) == 0) {
1319 if (fread(buf, 1, 2, fp) == 2 &&
1320 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
1321 ispyc = 1;
1322 rewind(fp);
1323 }
1324 return ispyc;
1325 }
1326 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001327}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001328
Guido van Rossum0df002c2000-08-27 19:21:52 +00001329int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001330PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001331 PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001332{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001333 PyObject *m, *d, *v;
1334 const char *ext;
Victor Stinner0fcab4a2011-01-04 12:59:15 +00001335 int set_file_name = 0, ret;
1336 size_t len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001337
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001338 m = PyImport_AddModule("__main__");
1339 if (m == NULL)
1340 return -1;
1341 d = PyModule_GetDict(m);
1342 if (PyDict_GetItemString(d, "__file__") == NULL) {
1343 PyObject *f;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00001344 f = PyUnicode_DecodeFSDefault(filename);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001345 if (f == NULL)
1346 return -1;
1347 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1348 Py_DECREF(f);
1349 return -1;
1350 }
Barry Warsaw916048d2011-09-20 14:45:44 -04001351 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0) {
1352 Py_DECREF(f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001353 return -1;
Barry Warsaw916048d2011-09-20 14:45:44 -04001354 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001355 set_file_name = 1;
1356 Py_DECREF(f);
1357 }
1358 len = strlen(filename);
1359 ext = filename + len - (len > 4 ? 4 : 0);
1360 if (maybe_pyc_file(fp, filename, ext, closeit)) {
1361 /* Try to run a pyc file. First, re-open in binary */
1362 if (closeit)
1363 fclose(fp);
1364 if ((fp = fopen(filename, "rb")) == NULL) {
1365 fprintf(stderr, "python: Can't reopen .pyc file\n");
1366 ret = -1;
1367 goto done;
1368 }
1369 /* Turn on optimization if a .pyo file is given */
1370 if (strcmp(ext, ".pyo") == 0)
1371 Py_OptimizeFlag = 1;
1372 v = run_pyc_file(fp, filename, d, d, flags);
1373 } else {
1374 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
1375 closeit, flags);
1376 }
1377 flush_io();
1378 if (v == NULL) {
1379 PyErr_Print();
1380 ret = -1;
1381 goto done;
1382 }
1383 Py_DECREF(v);
1384 ret = 0;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001385 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001386 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1387 PyErr_Clear();
1388 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001389}
1390
1391int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001392PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001393{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001394 PyObject *m, *d, *v;
1395 m = PyImport_AddModule("__main__");
1396 if (m == NULL)
1397 return -1;
1398 d = PyModule_GetDict(m);
1399 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
1400 if (v == NULL) {
1401 PyErr_Print();
1402 return -1;
1403 }
1404 Py_DECREF(v);
1405 return 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001406}
1407
Barry Warsaw035574d1997-08-29 22:07:17 +00001408static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001409parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001410 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001411{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001412 long hold;
1413 PyObject *v;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001414 _Py_IDENTIFIER(msg);
1415 _Py_IDENTIFIER(filename);
1416 _Py_IDENTIFIER(lineno);
1417 _Py_IDENTIFIER(offset);
1418 _Py_IDENTIFIER(text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001419
Benjamin Peterson80d50422012-04-03 00:30:38 -04001420 *message = NULL;
1421
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001422 /* new style errors. `err' is an instance */
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001423 *message = _PyObject_GetAttrId(err, &PyId_msg);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001424 if (!*message)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001425 goto finally;
Barry Warsaw035574d1997-08-29 22:07:17 +00001426
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001427 v = _PyObject_GetAttrId(err, &PyId_filename);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001428 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001429 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001430 if (v == Py_None) {
1431 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001432 *filename = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001433 }
1434 else {
1435 *filename = _PyUnicode_AsString(v);
1436 Py_DECREF(v);
1437 if (!*filename)
1438 goto finally;
1439 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001440
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001441 v = _PyObject_GetAttrId(err, &PyId_lineno);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001442 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001443 goto finally;
1444 hold = PyLong_AsLong(v);
1445 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001446 if (hold < 0 && PyErr_Occurred())
1447 goto finally;
1448 *lineno = (int)hold;
Barry Warsaw035574d1997-08-29 22:07:17 +00001449
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001450 v = _PyObject_GetAttrId(err, &PyId_offset);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001451 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001452 goto finally;
1453 if (v == Py_None) {
1454 *offset = -1;
1455 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001456 } else {
1457 hold = PyLong_AsLong(v);
1458 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001459 if (hold < 0 && PyErr_Occurred())
1460 goto finally;
1461 *offset = (int)hold;
1462 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001463
Benjamin Peterson0a9a6362012-04-03 00:35:36 -04001464 v = _PyObject_GetAttrId(err, &PyId_text);
Benjamin Peterson80d50422012-04-03 00:30:38 -04001465 if (!v)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001466 goto finally;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001467 if (v == Py_None) {
1468 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001469 *text = NULL;
Benjamin Peterson80d50422012-04-03 00:30:38 -04001470 }
1471 else {
1472 *text = _PyUnicode_AsString(v);
1473 Py_DECREF(v);
1474 if (!*text)
1475 goto finally;
1476 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001477 return 1;
Barry Warsaw035574d1997-08-29 22:07:17 +00001478
1479finally:
Benjamin Peterson80d50422012-04-03 00:30:38 -04001480 Py_XDECREF(*message);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001481 return 0;
Barry Warsaw035574d1997-08-29 22:07:17 +00001482}
1483
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001484void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001485PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001486{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001487 PyErr_PrintEx(1);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001488}
1489
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001490static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001491print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001492{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001493 char *nl;
1494 if (offset >= 0) {
Benjamin Petersona95e9772010-10-29 03:28:14 +00001495 if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n')
1496 offset--;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001497 for (;;) {
1498 nl = strchr(text, '\n');
1499 if (nl == NULL || nl-text >= offset)
1500 break;
1501 offset -= (int)(nl+1-text);
1502 text = nl+1;
1503 }
1504 while (*text == ' ' || *text == '\t') {
1505 text++;
1506 offset--;
1507 }
1508 }
1509 PyFile_WriteString(" ", f);
1510 PyFile_WriteString(text, f);
1511 if (*text == '\0' || text[strlen(text)-1] != '\n')
1512 PyFile_WriteString("\n", f);
1513 if (offset == -1)
1514 return;
1515 PyFile_WriteString(" ", f);
Benjamin Petersona95e9772010-10-29 03:28:14 +00001516 while (--offset > 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001517 PyFile_WriteString(" ", f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001518 PyFile_WriteString("^\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001519}
1520
Guido van Rossum66e8e862001-03-23 17:54:43 +00001521static void
1522handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001523{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001524 PyObject *exception, *value, *tb;
1525 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001526
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001527 if (Py_InspectFlag)
1528 /* Don't exit if -i flag was given. This flag is set to 0
1529 * when entering interactive mode for inspecting. */
1530 return;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001531
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001532 PyErr_Fetch(&exception, &value, &tb);
1533 fflush(stdout);
1534 if (value == NULL || value == Py_None)
1535 goto done;
1536 if (PyExceptionInstance_Check(value)) {
1537 /* The error code should be in the `code' attribute. */
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001538 _Py_IDENTIFIER(code);
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001539 PyObject *code = _PyObject_GetAttrId(value, &PyId_code);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001540 if (code) {
1541 Py_DECREF(value);
1542 value = code;
1543 if (value == Py_None)
1544 goto done;
1545 }
1546 /* If we failed to dig out the 'code' attribute,
1547 just let the else clause below print the error. */
1548 }
1549 if (PyLong_Check(value))
1550 exitcode = (int)PyLong_AsLong(value);
1551 else {
Victor Stinnere9fb3192010-05-17 08:58:51 +00001552 PyObject *sys_stderr = PySys_GetObject("stderr");
Victor Stinner7126dbc2010-05-21 23:45:42 +00001553 if (sys_stderr != NULL && sys_stderr != Py_None) {
1554 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW);
1555 } else {
1556 PyObject_Print(value, stderr, Py_PRINT_RAW);
1557 fflush(stderr);
1558 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001559 PySys_WriteStderr("\n");
1560 exitcode = 1;
1561 }
Tim Peterscf615b52003-04-19 18:47:02 +00001562 done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001563 /* Restore and clear the exception info, in order to properly decref
1564 * the exception, value, and traceback. If we just exit instead,
1565 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1566 * some finalizers from running.
1567 */
1568 PyErr_Restore(exception, value, tb);
1569 PyErr_Clear();
1570 Py_Exit(exitcode);
1571 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001572}
1573
1574void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001575PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001576{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001577 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001578
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001579 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1580 handle_system_exit();
1581 }
1582 PyErr_Fetch(&exception, &v, &tb);
1583 if (exception == NULL)
1584 return;
1585 PyErr_NormalizeException(&exception, &v, &tb);
1586 if (tb == NULL) {
1587 tb = Py_None;
1588 Py_INCREF(tb);
1589 }
1590 PyException_SetTraceback(v, tb);
1591 if (exception == NULL)
1592 return;
1593 /* Now we know v != NULL too */
1594 if (set_sys_last_vars) {
1595 PySys_SetObject("last_type", exception);
1596 PySys_SetObject("last_value", v);
1597 PySys_SetObject("last_traceback", tb);
1598 }
1599 hook = PySys_GetObject("excepthook");
1600 if (hook) {
1601 PyObject *args = PyTuple_Pack(3, exception, v, tb);
1602 PyObject *result = PyEval_CallObject(hook, args);
1603 if (result == NULL) {
1604 PyObject *exception2, *v2, *tb2;
1605 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1606 handle_system_exit();
1607 }
1608 PyErr_Fetch(&exception2, &v2, &tb2);
1609 PyErr_NormalizeException(&exception2, &v2, &tb2);
1610 /* It should not be possible for exception2 or v2
1611 to be NULL. However PyErr_Display() can't
1612 tolerate NULLs, so just be safe. */
1613 if (exception2 == NULL) {
1614 exception2 = Py_None;
1615 Py_INCREF(exception2);
1616 }
1617 if (v2 == NULL) {
1618 v2 = Py_None;
1619 Py_INCREF(v2);
1620 }
1621 fflush(stdout);
1622 PySys_WriteStderr("Error in sys.excepthook:\n");
1623 PyErr_Display(exception2, v2, tb2);
1624 PySys_WriteStderr("\nOriginal exception was:\n");
1625 PyErr_Display(exception, v, tb);
1626 Py_DECREF(exception2);
1627 Py_DECREF(v2);
1628 Py_XDECREF(tb2);
1629 }
1630 Py_XDECREF(result);
1631 Py_XDECREF(args);
1632 } else {
1633 PySys_WriteStderr("sys.excepthook is missing\n");
1634 PyErr_Display(exception, v, tb);
1635 }
1636 Py_XDECREF(exception);
1637 Py_XDECREF(v);
1638 Py_XDECREF(tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001639}
1640
Benjamin Petersone6528212008-07-15 15:32:09 +00001641static void
1642print_exception(PyObject *f, PyObject *value)
1643{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001644 int err = 0;
1645 PyObject *type, *tb;
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001646 _Py_IDENTIFIER(print_file_and_line);
Benjamin Petersone6528212008-07-15 15:32:09 +00001647
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001648 if (!PyExceptionInstance_Check(value)) {
1649 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1650 PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1651 PyFile_WriteString(" found\n", f);
1652 return;
1653 }
Benjamin Peterson26582602008-08-23 20:08:07 +00001654
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001655 Py_INCREF(value);
1656 fflush(stdout);
1657 type = (PyObject *) Py_TYPE(value);
1658 tb = PyException_GetTraceback(value);
1659 if (tb && tb != Py_None)
1660 err = PyTraceBack_Print(tb, f);
1661 if (err == 0 &&
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02001662 _PyObject_HasAttrId(value, &PyId_print_file_and_line))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001663 {
1664 PyObject *message;
1665 const char *filename, *text;
1666 int lineno, offset;
1667 if (!parse_syntax_error(value, &message, &filename,
1668 &lineno, &offset, &text))
1669 PyErr_Clear();
1670 else {
1671 char buf[10];
1672 PyFile_WriteString(" File \"", f);
1673 if (filename == NULL)
1674 PyFile_WriteString("<string>", f);
1675 else
1676 PyFile_WriteString(filename, f);
1677 PyFile_WriteString("\", line ", f);
1678 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
1679 PyFile_WriteString(buf, f);
1680 PyFile_WriteString("\n", f);
1681 if (text != NULL)
1682 print_error_text(f, offset, text);
1683 Py_DECREF(value);
1684 value = message;
1685 /* Can't be bothered to check all those
1686 PyFile_WriteString() calls */
1687 if (PyErr_Occurred())
1688 err = -1;
1689 }
1690 }
1691 if (err) {
1692 /* Don't do anything else */
1693 }
1694 else {
1695 PyObject* moduleName;
1696 char* className;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001697 _Py_IDENTIFIER(__module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001698 assert(PyExceptionClass_Check(type));
1699 className = PyExceptionClass_Name(type);
1700 if (className != NULL) {
1701 char *dot = strrchr(className, '.');
1702 if (dot != NULL)
1703 className = dot+1;
1704 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001705
Martin v. Löwis1ee1b6f2011-10-10 18:11:30 +02001706 moduleName = _PyObject_GetAttrId(type, &PyId___module__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001707 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1708 {
Victor Stinner13b21bd2011-05-26 14:25:13 +02001709 Py_XDECREF(moduleName);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001710 err = PyFile_WriteString("<unknown>", f);
1711 }
1712 else {
1713 char* modstr = _PyUnicode_AsString(moduleName);
1714 if (modstr && strcmp(modstr, "builtins"))
1715 {
1716 err = PyFile_WriteString(modstr, f);
1717 err += PyFile_WriteString(".", f);
1718 }
1719 Py_DECREF(moduleName);
1720 }
1721 if (err == 0) {
1722 if (className == NULL)
1723 err = PyFile_WriteString("<unknown>", f);
1724 else
1725 err = PyFile_WriteString(className, f);
1726 }
1727 }
1728 if (err == 0 && (value != Py_None)) {
1729 PyObject *s = PyObject_Str(value);
1730 /* only print colon if the str() of the
1731 object is not the empty string
1732 */
1733 if (s == NULL)
1734 err = -1;
1735 else if (!PyUnicode_Check(s) ||
Victor Stinnere251d6d2011-11-20 19:20:00 +01001736 PyUnicode_GetLength(s) != 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001737 err = PyFile_WriteString(": ", f);
1738 if (err == 0)
1739 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1740 Py_XDECREF(s);
1741 }
1742 /* try to write a newline in any case */
1743 err += PyFile_WriteString("\n", f);
1744 Py_XDECREF(tb);
1745 Py_DECREF(value);
1746 /* If an error happened here, don't show it.
1747 XXX This is wrong, but too many callers rely on this behavior. */
1748 if (err != 0)
1749 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001750}
1751
1752static const char *cause_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001753 "\nThe above exception was the direct cause "
1754 "of the following exception:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001755
1756static const char *context_message =
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001757 "\nDuring handling of the above exception, "
1758 "another exception occurred:\n\n";
Benjamin Petersone6528212008-07-15 15:32:09 +00001759
1760static void
1761print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
1762{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001763 int err = 0, res;
1764 PyObject *cause, *context;
Benjamin Petersone6528212008-07-15 15:32:09 +00001765
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001766 if (seen != NULL) {
1767 /* Exception chaining */
1768 if (PySet_Add(seen, value) == -1)
1769 PyErr_Clear();
1770 else if (PyExceptionInstance_Check(value)) {
1771 cause = PyException_GetCause(value);
1772 context = PyException_GetContext(value);
Benjamin Petersond5a1c442012-05-14 22:09:31 -07001773 if (cause) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001774 res = PySet_Contains(seen, cause);
1775 if (res == -1)
1776 PyErr_Clear();
1777 if (res == 0) {
1778 print_exception_recursive(
1779 f, cause, seen);
1780 err |= PyFile_WriteString(
1781 cause_message, f);
1782 }
1783 }
Benjamin Petersond5a1c442012-05-14 22:09:31 -07001784 else if (context &&
1785 !((PyBaseExceptionObject *)value)->suppress_context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001786 res = PySet_Contains(seen, context);
1787 if (res == -1)
1788 PyErr_Clear();
1789 if (res == 0) {
1790 print_exception_recursive(
1791 f, context, seen);
1792 err |= PyFile_WriteString(
1793 context_message, f);
1794 }
1795 }
1796 Py_XDECREF(context);
1797 Py_XDECREF(cause);
1798 }
1799 }
1800 print_exception(f, value);
1801 if (err != 0)
1802 PyErr_Clear();
Benjamin Petersone6528212008-07-15 15:32:09 +00001803}
1804
Thomas Wouters477c8d52006-05-27 19:21:47 +00001805void
1806PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001807{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001808 PyObject *seen;
1809 PyObject *f = PySys_GetObject("stderr");
1810 if (f == Py_None) {
1811 /* pass */
1812 }
1813 else if (f == NULL) {
1814 _PyObject_Dump(value);
1815 fprintf(stderr, "lost sys.stderr\n");
1816 }
1817 else {
1818 /* We choose to ignore seen being possibly NULL, and report
1819 at least the main exception (it could be a MemoryError).
1820 */
1821 seen = PySet_New(NULL);
1822 if (seen == NULL)
1823 PyErr_Clear();
1824 print_exception_recursive(f, value, seen);
1825 Py_XDECREF(seen);
1826 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001827}
1828
Guido van Rossum82598051997-03-05 00:20:32 +00001829PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001830PyRun_StringFlags(const char *str, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001831 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001832{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001833 PyObject *ret = NULL;
1834 mod_ty mod;
1835 PyArena *arena = PyArena_New();
1836 if (arena == NULL)
1837 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001838
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001839 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
1840 if (mod != NULL)
1841 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
1842 PyArena_Free(arena);
1843 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001844}
1845
1846PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001847PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001848 PyObject *locals, int closeit, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001849{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001850 PyObject *ret;
1851 mod_ty mod;
1852 PyArena *arena = PyArena_New();
1853 if (arena == NULL)
1854 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001855
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001856 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
1857 flags, NULL, arena);
1858 if (closeit)
1859 fclose(fp);
1860 if (mod == NULL) {
1861 PyArena_Free(arena);
1862 return NULL;
1863 }
1864 ret = run_mod(mod, filename, globals, locals, flags, arena);
1865 PyArena_Free(arena);
1866 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001867}
1868
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001869static void
1870flush_io(void)
1871{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001872 PyObject *f, *r;
1873 PyObject *type, *value, *traceback;
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02001874 _Py_IDENTIFIER(flush);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001875
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001876 /* Save the current exception */
1877 PyErr_Fetch(&type, &value, &traceback);
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001878
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001879 f = PySys_GetObject("stderr");
1880 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001881 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001882 if (r)
1883 Py_DECREF(r);
1884 else
1885 PyErr_Clear();
1886 }
1887 f = PySys_GetObject("stdout");
1888 if (f != NULL) {
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02001889 r = _PyObject_CallMethodId(f, &PyId_flush, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001890 if (r)
1891 Py_DECREF(r);
1892 else
1893 PyErr_Clear();
1894 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001895
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001896 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001897}
1898
Guido van Rossum82598051997-03-05 00:20:32 +00001899static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001900run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001901 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001902{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001903 PyCodeObject *co;
1904 PyObject *v;
1905 co = PyAST_Compile(mod, filename, flags, arena);
1906 if (co == NULL)
1907 return NULL;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001908 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001909 Py_DECREF(co);
1910 return v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001911}
1912
Guido van Rossum82598051997-03-05 00:20:32 +00001913static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001914run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001915 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001916{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001917 PyCodeObject *co;
1918 PyObject *v;
1919 long magic;
1920 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001921
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001922 magic = PyMarshal_ReadLongFromFile(fp);
1923 if (magic != PyImport_GetMagicNumber()) {
1924 PyErr_SetString(PyExc_RuntimeError,
1925 "Bad magic number in .pyc file");
1926 return NULL;
1927 }
Antoine Pitrou5136ac02012-01-13 18:52:16 +01001928 /* Skip mtime and size */
1929 (void) PyMarshal_ReadLongFromFile(fp);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001930 (void) PyMarshal_ReadLongFromFile(fp);
1931 v = PyMarshal_ReadLastObjectFromFile(fp);
1932 fclose(fp);
1933 if (v == NULL || !PyCode_Check(v)) {
1934 Py_XDECREF(v);
1935 PyErr_SetString(PyExc_RuntimeError,
1936 "Bad code object in .pyc file");
1937 return NULL;
1938 }
1939 co = (PyCodeObject *)v;
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001940 v = PyEval_EvalCode((PyObject*)co, globals, locals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001941 if (v && flags)
1942 flags->cf_flags |= (co->co_flags & PyCF_MASK);
1943 Py_DECREF(co);
1944 return v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001945}
1946
Guido van Rossum82598051997-03-05 00:20:32 +00001947PyObject *
Georg Brandl8334fd92010-12-04 10:26:46 +00001948Py_CompileStringExFlags(const char *str, const char *filename, int start,
1949 PyCompilerFlags *flags, int optimize)
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001950{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001951 PyCodeObject *co;
1952 mod_ty mod;
1953 PyArena *arena = PyArena_New();
1954 if (arena == NULL)
1955 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001956
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001957 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
1958 if (mod == NULL) {
1959 PyArena_Free(arena);
1960 return NULL;
1961 }
1962 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
1963 PyObject *result = PyAST_mod2obj(mod);
1964 PyArena_Free(arena);
1965 return result;
1966 }
Georg Brandl8334fd92010-12-04 10:26:46 +00001967 co = PyAST_CompileEx(mod, filename, flags, optimize, arena);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001968 PyArena_Free(arena);
1969 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001970}
1971
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00001972/* For use in Py_LIMITED_API */
1973#undef Py_CompileString
1974PyObject *
1975PyCompileString(const char *str, const char *filename, int start)
1976{
1977 return Py_CompileStringFlags(str, filename, start, NULL);
1978}
1979
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001980struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001981Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001982{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001983 struct symtable *st;
1984 mod_ty mod;
1985 PyCompilerFlags flags;
1986 PyArena *arena = PyArena_New();
1987 if (arena == NULL)
1988 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001989
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001990 flags.cf_flags = 0;
1991 mod = PyParser_ASTFromString(str, filename, start, &flags, arena);
1992 if (mod == NULL) {
1993 PyArena_Free(arena);
1994 return NULL;
1995 }
1996 st = PySymtable_Build(mod, filename, 0);
1997 PyArena_Free(arena);
1998 return st;
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001999}
2000
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002001/* Preferred access to parser is through AST. */
2002mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002003PyParser_ASTFromString(const char *s, const char *filename, int start,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002004 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002005{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002006 mod_ty mod;
2007 PyCompilerFlags localflags;
2008 perrdetail err;
2009 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002010
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002011 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename,
2012 &_PyParser_Grammar, start, &err,
2013 &iflags);
2014 if (flags == NULL) {
2015 localflags.cf_flags = 0;
2016 flags = &localflags;
2017 }
2018 if (n) {
2019 flags->cf_flags |= iflags & PyCF_MASK;
2020 mod = PyAST_FromNode(n, flags, filename, arena);
2021 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002022 }
2023 else {
2024 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002025 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002026 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002027 err_free(&err);
2028 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002029}
2030
2031mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00002032PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002033 int start, char *ps1,
2034 char *ps2, PyCompilerFlags *flags, int *errcode,
2035 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002036{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002037 mod_ty mod;
2038 PyCompilerFlags localflags;
2039 perrdetail err;
2040 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00002041
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002042 node *n = PyParser_ParseFileFlagsEx(fp, filename, enc,
2043 &_PyParser_Grammar,
2044 start, ps1, ps2, &err, &iflags);
2045 if (flags == NULL) {
2046 localflags.cf_flags = 0;
2047 flags = &localflags;
2048 }
2049 if (n) {
2050 flags->cf_flags |= iflags & PyCF_MASK;
2051 mod = PyAST_FromNode(n, flags, filename, arena);
2052 PyNode_Free(n);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002053 }
2054 else {
2055 err_input(&err);
2056 if (errcode)
2057 *errcode = err.error;
Victor Stinner7f2fee32011-04-05 00:39:01 +02002058 mod = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002059 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002060 err_free(&err);
2061 return mod;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002062}
2063
Guido van Rossuma110aa61994-08-29 12:50:44 +00002064/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002065
Guido van Rossuma110aa61994-08-29 12:50:44 +00002066node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002067PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002068{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002069 perrdetail err;
2070 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
2071 &_PyParser_Grammar,
2072 start, NULL, NULL, &err, flags);
2073 if (n == NULL)
2074 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002075 err_free(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002076
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002077 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002078}
2079
Guido van Rossuma110aa61994-08-29 12:50:44 +00002080/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002081
Guido van Rossuma110aa61994-08-29 12:50:44 +00002082node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002083PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00002084{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002085 perrdetail err;
2086 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
2087 start, &err, flags);
2088 if (n == NULL)
2089 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002090 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002091 return n;
Tim Petersfe2127d2001-07-16 05:37:24 +00002092}
2093
2094node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002095PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002096 int start, int flags)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002097{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002098 perrdetail err;
2099 node *n = PyParser_ParseStringFlagsFilename(str, filename,
2100 &_PyParser_Grammar, start, &err, flags);
2101 if (n == NULL)
2102 err_input(&err);
Victor Stinner7f2fee32011-04-05 00:39:01 +02002103 err_free(&err);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002104 return n;
Thomas Heller6b17abf2002-07-09 09:23:27 +00002105}
2106
2107node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00002108PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00002109{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002110 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00002111}
2112
Guido van Rossum66ebd912003-04-17 16:02:26 +00002113/* May want to move a more generalized form of this to parsetok.c or
2114 even parser modules. */
2115
2116void
Victor Stinner7f2fee32011-04-05 00:39:01 +02002117PyParser_ClearError(perrdetail *err)
2118{
2119 err_free(err);
2120}
2121
2122void
Guido van Rossum66ebd912003-04-17 16:02:26 +00002123PyParser_SetError(perrdetail *err)
2124{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002125 err_input(err);
Guido van Rossum66ebd912003-04-17 16:02:26 +00002126}
2127
Victor Stinner7f2fee32011-04-05 00:39:01 +02002128static void
2129err_free(perrdetail *err)
2130{
2131 Py_CLEAR(err->filename);
2132}
2133
Guido van Rossuma110aa61994-08-29 12:50:44 +00002134/* Set the error appropriate to the given input error code (see errcode.h) */
2135
2136static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002137err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00002138{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002139 PyObject *v, *w, *errtype, *errtext;
2140 PyObject *msg_obj = NULL;
2141 char *msg = NULL;
Victor Stinner4c7c8c32010-10-16 13:14:10 +00002142
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002143 errtype = PyExc_SyntaxError;
2144 switch (err->error) {
2145 case E_ERROR:
2146 return;
2147 case E_SYNTAX:
2148 errtype = PyExc_IndentationError;
2149 if (err->expected == INDENT)
2150 msg = "expected an indented block";
2151 else if (err->token == INDENT)
2152 msg = "unexpected indent";
2153 else if (err->token == DEDENT)
2154 msg = "unexpected unindent";
2155 else {
2156 errtype = PyExc_SyntaxError;
2157 msg = "invalid syntax";
2158 }
2159 break;
2160 case E_TOKEN:
2161 msg = "invalid token";
2162 break;
2163 case E_EOFS:
2164 msg = "EOF while scanning triple-quoted string literal";
2165 break;
2166 case E_EOLS:
2167 msg = "EOL while scanning string literal";
2168 break;
2169 case E_INTR:
2170 if (!PyErr_Occurred())
2171 PyErr_SetNone(PyExc_KeyboardInterrupt);
2172 goto cleanup;
2173 case E_NOMEM:
2174 PyErr_NoMemory();
2175 goto cleanup;
2176 case E_EOF:
2177 msg = "unexpected EOF while parsing";
2178 break;
2179 case E_TABSPACE:
2180 errtype = PyExc_TabError;
2181 msg = "inconsistent use of tabs and spaces in indentation";
2182 break;
2183 case E_OVERFLOW:
2184 msg = "expression too long";
2185 break;
2186 case E_DEDENT:
2187 errtype = PyExc_IndentationError;
2188 msg = "unindent does not match any outer indentation level";
2189 break;
2190 case E_TOODEEP:
2191 errtype = PyExc_IndentationError;
2192 msg = "too many levels of indentation";
2193 break;
2194 case E_DECODE: {
2195 PyObject *type, *value, *tb;
2196 PyErr_Fetch(&type, &value, &tb);
2197 msg = "unknown decode error";
2198 if (value != NULL)
2199 msg_obj = PyObject_Str(value);
2200 Py_XDECREF(type);
2201 Py_XDECREF(value);
2202 Py_XDECREF(tb);
2203 break;
2204 }
2205 case E_LINECONT:
2206 msg = "unexpected character after line continuation character";
2207 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00002208
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002209 case E_IDENTIFIER:
2210 msg = "invalid character in identifier";
2211 break;
Meador Ingefa21bf02012-01-19 01:08:41 -06002212 case E_BADSINGLE:
2213 msg = "multiple statements found while compiling a single statement";
2214 break;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002215 default:
2216 fprintf(stderr, "error=%d\n", err->error);
2217 msg = "unknown parsing error";
2218 break;
2219 }
2220 /* err->text may not be UTF-8 in case of decoding errors.
2221 Explicitly convert to an object. */
2222 if (!err->text) {
2223 errtext = Py_None;
2224 Py_INCREF(Py_None);
2225 } else {
2226 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
2227 "replace");
2228 }
Victor Stinner7f2fee32011-04-05 00:39:01 +02002229 v = Py_BuildValue("(OiiN)", err->filename,
2230 err->lineno, err->offset, errtext);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002231 if (v != NULL) {
2232 if (msg_obj)
2233 w = Py_BuildValue("(OO)", msg_obj, v);
2234 else
2235 w = Py_BuildValue("(sO)", msg, v);
2236 } else
2237 w = NULL;
2238 Py_XDECREF(v);
2239 PyErr_SetObject(errtype, w);
2240 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002241cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002242 Py_XDECREF(msg_obj);
2243 if (err->text != NULL) {
2244 PyObject_FREE(err->text);
2245 err->text = NULL;
2246 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002247}
2248
2249/* Print fatal error message and abort */
2250
2251void
Tim Peters7c321a82002-07-09 02:57:01 +00002252Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002253{
Victor Stinner024e37a2011-03-31 01:31:06 +02002254 const int fd = fileno(stderr);
2255 PyThreadState *tstate;
2256
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002257 fprintf(stderr, "Fatal Python error: %s\n", msg);
2258 fflush(stderr); /* it helps in Windows debug build */
2259 if (PyErr_Occurred()) {
Victor Stinner55a5c782010-06-08 21:00:13 +00002260 PyErr_PrintEx(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002261 }
Victor Stinner024e37a2011-03-31 01:31:06 +02002262 else {
2263 tstate = _Py_atomic_load_relaxed(&_PyThreadState_Current);
2264 if (tstate != NULL) {
2265 fputc('\n', stderr);
2266 fflush(stderr);
Victor Stinner7bba62f2011-05-07 12:43:00 +02002267 _Py_DumpTracebackThreads(fd, tstate->interp, tstate);
Victor Stinner024e37a2011-03-31 01:31:06 +02002268 }
Victor Stinnerd727e232011-04-01 12:13:55 +02002269 _PyFaulthandler_Fini();
Victor Stinner024e37a2011-03-31 01:31:06 +02002270 }
2271
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002272#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002273 {
2274 size_t len = strlen(msg);
2275 WCHAR* buffer;
2276 size_t i;
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002277
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002278 /* Convert the message to wchar_t. This uses a simple one-to-one
2279 conversion, assuming that the this error message actually uses ASCII
2280 only. If this ceases to be true, we will have to convert. */
2281 buffer = alloca( (len+1) * (sizeof *buffer));
2282 for( i=0; i<=len; ++i)
2283 buffer[i] = msg[i];
2284 OutputDebugStringW(L"Fatal Python error: ");
2285 OutputDebugStringW(buffer);
2286 OutputDebugStringW(L"\n");
2287 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002288#ifdef _DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002289 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002290#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002291#endif /* MS_WINDOWS */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002292 abort();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002293}
2294
2295/* Clean up and exit */
2296
Guido van Rossuma110aa61994-08-29 12:50:44 +00002297#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002298#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002299#endif
2300
Collin Winter670e6922007-03-21 02:57:17 +00002301static void (*pyexitfunc)(void) = NULL;
2302/* For the atexit module. */
2303void _Py_PyAtExit(void (*func)(void))
2304{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002305 pyexitfunc = func;
Collin Winter670e6922007-03-21 02:57:17 +00002306}
2307
2308static void
2309call_py_exitfuncs(void)
2310{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002311 if (pyexitfunc == NULL)
2312 return;
Collin Winter670e6922007-03-21 02:57:17 +00002313
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002314 (*pyexitfunc)();
2315 PyErr_Clear();
Collin Winter670e6922007-03-21 02:57:17 +00002316}
2317
Antoine Pitrou011bd622009-10-20 21:52:47 +00002318/* Wait until threading._shutdown completes, provided
2319 the threading module was imported in the first place.
2320 The shutdown routine will wait until all non-daemon
2321 "threading" threads have completed. */
2322static void
2323wait_for_thread_shutdown(void)
2324{
2325#ifdef WITH_THREAD
Martin v. Löwisbd928fe2011-10-14 10:20:37 +02002326 _Py_IDENTIFIER(_shutdown);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002327 PyObject *result;
2328 PyThreadState *tstate = PyThreadState_GET();
2329 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2330 "threading");
2331 if (threading == NULL) {
2332 /* threading not imported */
2333 PyErr_Clear();
2334 return;
2335 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +02002336 result = _PyObject_CallMethodId(threading, &PyId__shutdown, "");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002337 if (result == NULL) {
2338 PyErr_WriteUnraisable(threading);
2339 }
2340 else {
2341 Py_DECREF(result);
2342 }
2343 Py_DECREF(threading);
Antoine Pitrou011bd622009-10-20 21:52:47 +00002344#endif
2345}
2346
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002347#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002348static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002349static int nexitfuncs = 0;
2350
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002351int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002352{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002353 if (nexitfuncs >= NEXITFUNCS)
2354 return -1;
2355 exitfuncs[nexitfuncs++] = func;
2356 return 0;
Guido van Rossum1662dd51994-09-07 14:38:28 +00002357}
2358
Guido van Rossumcc283f51997-08-05 02:22:03 +00002359static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002360call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002361{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002362 while (nexitfuncs > 0)
2363 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002364
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002365 fflush(stdout);
2366 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002367}
2368
2369void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002370Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002371{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002372 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002373
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002374 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002375}
2376
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002377static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002378initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002379{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002380#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002381 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002382#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002383#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002384 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002385#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002386#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002387 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002388#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002389 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002390}
2391
Guido van Rossum7433b121997-02-14 19:45:36 +00002392
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002393/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2394 *
2395 * All of the code in this function must only use async-signal-safe functions,
2396 * listed at `man 7 signal` or
2397 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2398 */
2399void
2400_Py_RestoreSignals(void)
2401{
2402#ifdef SIGPIPE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002403 PyOS_setsig(SIGPIPE, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002404#endif
2405#ifdef SIGXFZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002406 PyOS_setsig(SIGXFZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002407#endif
2408#ifdef SIGXFSZ
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002409 PyOS_setsig(SIGXFSZ, SIG_DFL);
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002410#endif
2411}
2412
2413
Guido van Rossum7433b121997-02-14 19:45:36 +00002414/*
2415 * The file descriptor fd is considered ``interactive'' if either
2416 * a) isatty(fd) is TRUE, or
2417 * b) the -i flag was given, and the filename associated with
2418 * the descriptor is NULL or "<stdin>" or "???".
2419 */
2420int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002421Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002422{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002423 if (isatty((int)fileno(fp)))
2424 return 1;
2425 if (!Py_InteractiveFlag)
2426 return 0;
2427 return (filename == NULL) ||
2428 (strcmp(filename, "<stdin>") == 0) ||
2429 (strcmp(filename, "???") == 0);
Guido van Rossum7433b121997-02-14 19:45:36 +00002430}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002431
2432
Tim Petersd08e3822003-04-17 15:24:21 +00002433#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002434#if defined(WIN32) && defined(_MSC_VER)
2435
2436/* Stack checking for Microsoft C */
2437
2438#include <malloc.h>
2439#include <excpt.h>
2440
Fred Drakee8de31c2000-08-31 05:38:39 +00002441/*
2442 * Return non-zero when we run out of memory on the stack; zero otherwise.
2443 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002444int
Fred Drake399739f2000-08-31 05:52:44 +00002445PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002446{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002447 __try {
2448 /* alloca throws a stack overflow exception if there's
2449 not enough space left on the stack */
2450 alloca(PYOS_STACK_MARGIN * sizeof(void*));
2451 return 0;
2452 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2453 EXCEPTION_EXECUTE_HANDLER :
2454 EXCEPTION_CONTINUE_SEARCH) {
2455 int errcode = _resetstkoflw();
2456 if (errcode == 0)
2457 {
2458 Py_FatalError("Could not reset the stack!");
2459 }
2460 }
2461 return 1;
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002462}
2463
2464#endif /* WIN32 && _MSC_VER */
2465
2466/* Alternate implementations can be added here... */
2467
2468#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002469
2470
2471/* Wrappers around sigaction() or signal(). */
2472
2473PyOS_sighandler_t
2474PyOS_getsig(int sig)
2475{
2476#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002477 struct sigaction context;
2478 if (sigaction(sig, NULL, &context) == -1)
2479 return SIG_ERR;
2480 return context.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002481#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002482 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002483/* Special signal handling for the secure CRT in Visual Studio 2005 */
2484#if defined(_MSC_VER) && _MSC_VER >= 1400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002485 switch (sig) {
2486 /* Only these signals are valid */
2487 case SIGINT:
2488 case SIGILL:
2489 case SIGFPE:
2490 case SIGSEGV:
2491 case SIGTERM:
2492 case SIGBREAK:
2493 case SIGABRT:
2494 break;
2495 /* Don't call signal() with other values or it will assert */
2496 default:
2497 return SIG_ERR;
2498 }
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002499#endif /* _MSC_VER && _MSC_VER >= 1400 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002500 handler = signal(sig, SIG_IGN);
2501 if (handler != SIG_ERR)
2502 signal(sig, handler);
2503 return handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002504#endif
2505}
2506
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00002507/*
2508 * All of the code in this function must only use async-signal-safe functions,
2509 * listed at `man 7 signal` or
2510 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2511 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002512PyOS_sighandler_t
2513PyOS_setsig(int sig, PyOS_sighandler_t handler)
2514{
2515#ifdef HAVE_SIGACTION
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002516 /* Some code in Modules/signalmodule.c depends on sigaction() being
2517 * used here if HAVE_SIGACTION is defined. Fix that if this code
2518 * changes to invalidate that assumption.
2519 */
2520 struct sigaction context, ocontext;
2521 context.sa_handler = handler;
2522 sigemptyset(&context.sa_mask);
2523 context.sa_flags = 0;
2524 if (sigaction(sig, &context, &ocontext) == -1)
2525 return SIG_ERR;
2526 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002527#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002528 PyOS_sighandler_t oldhandler;
2529 oldhandler = signal(sig, handler);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002530#ifdef HAVE_SIGINTERRUPT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002531 siginterrupt(sig, 1);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002532#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002533 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002534#endif
2535}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002536
2537/* Deprecated C API functions still provided for binary compatiblity */
2538
2539#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002540PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002541PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2542{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002543 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002544}
2545
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002546#undef PyParser_SimpleParseString
2547PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002548PyParser_SimpleParseString(const char *str, int start)
2549{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002550 return PyParser_SimpleParseStringFlags(str, start, 0);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002551}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002552
2553#undef PyRun_AnyFile
2554PyAPI_FUNC(int)
2555PyRun_AnyFile(FILE *fp, const char *name)
2556{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002557 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002558}
2559
2560#undef PyRun_AnyFileEx
2561PyAPI_FUNC(int)
2562PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2563{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002564 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002565}
2566
2567#undef PyRun_AnyFileFlags
2568PyAPI_FUNC(int)
2569PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2570{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002571 return PyRun_AnyFileExFlags(fp, name, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002572}
2573
2574#undef PyRun_File
2575PyAPI_FUNC(PyObject *)
2576PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2577{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002578 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002579}
2580
2581#undef PyRun_FileEx
2582PyAPI_FUNC(PyObject *)
2583PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2584{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002585 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002586}
2587
2588#undef PyRun_FileFlags
2589PyAPI_FUNC(PyObject *)
2590PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002591 PyCompilerFlags *flags)
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002592{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002593 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002594}
2595
2596#undef PyRun_SimpleFile
2597PyAPI_FUNC(int)
2598PyRun_SimpleFile(FILE *f, const char *p)
2599{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002600 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002601}
2602
2603#undef PyRun_SimpleFileEx
2604PyAPI_FUNC(int)
2605PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2606{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002607 return PyRun_SimpleFileExFlags(f, p, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002608}
2609
2610
2611#undef PyRun_String
2612PyAPI_FUNC(PyObject *)
2613PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2614{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002615 return PyRun_StringFlags(str, s, g, l, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002616}
2617
2618#undef PyRun_SimpleString
2619PyAPI_FUNC(int)
2620PyRun_SimpleString(const char *s)
2621{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002622 return PyRun_SimpleStringFlags(s, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002623}
2624
2625#undef Py_CompileString
2626PyAPI_FUNC(PyObject *)
2627Py_CompileString(const char *str, const char *p, int s)
2628{
Georg Brandl8334fd92010-12-04 10:26:46 +00002629 return Py_CompileStringExFlags(str, p, s, NULL, -1);
2630}
2631
2632#undef Py_CompileStringFlags
2633PyAPI_FUNC(PyObject *)
2634Py_CompileStringFlags(const char *str, const char *p, int s,
2635 PyCompilerFlags *flags)
2636{
2637 return Py_CompileStringExFlags(str, p, s, flags, -1);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002638}
2639
2640#undef PyRun_InteractiveOne
2641PyAPI_FUNC(int)
2642PyRun_InteractiveOne(FILE *f, const char *p)
2643{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002644 return PyRun_InteractiveOneFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002645}
2646
2647#undef PyRun_InteractiveLoop
2648PyAPI_FUNC(int)
2649PyRun_InteractiveLoop(FILE *f, const char *p)
2650{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002651 return PyRun_InteractiveLoopFlags(f, p, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002652}
2653
2654#ifdef __cplusplus
2655}
2656#endif