blob: 55b9d50e50edee9e4859b8ac33d501e2efc77e41 [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"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000014#include "compile.h"
Jeremy Hylton4b38da62001-02-02 18:19:15 +000015#include "symtable.h"
Neal Norwitzadb69fc2005-12-17 20:54:49 +000016#include "pyarena.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000017#include "ast.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000018#include "eval.h"
Guido van Rossumfdef2711994-09-14 13:31:04 +000019#include "marshal.h"
Martin v. Löwis790465f2008-04-05 20:41:37 +000020#include "osdefs.h"
Antoine Pitroucefb3162009-10-20 22:08:36 +000021#include "abstract.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000022
Thomas Wouters0e3f5912006-08-11 14:57:12 +000023#ifdef HAVE_SIGNAL_H
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000024#include <signal.h>
Thomas Wouters0e3f5912006-08-11 14:57:12 +000025#endif
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000026
Benjamin Peterson80a50ac2009-01-02 21:24:04 +000027#ifdef MS_WINDOWS
Martin v. Löwis5c88d812009-01-02 20:47:48 +000028#include "malloc.h" /* for alloca */
Benjamin Peterson80a50ac2009-01-02 21:24:04 +000029#endif
Martin v. Löwis5c88d812009-01-02 20:47:48 +000030
Martin v. Löwis73d538b2003-03-05 15:13:47 +000031#ifdef HAVE_LANGINFO_H
32#include <locale.h>
33#include <langinfo.h>
34#endif
35
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000036#ifdef MS_WINDOWS
Guido van Rossuma44823b1995-03-14 15:01:17 +000037#undef BYTE
38#include "windows.h"
Martin v. Löwis790465f2008-04-05 20:41:37 +000039#define PATH_MAX MAXPATHLEN
Guido van Rossuma44823b1995-03-14 15:01:17 +000040#endif
41
Neal Norwitz4281cef2006-03-04 19:58:13 +000042#ifndef Py_REF_DEBUG
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000043#define PRINT_TOTAL_REFS()
Neal Norwitz4281cef2006-03-04 19:58:13 +000044#else /* Py_REF_DEBUG */
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000045#define PRINT_TOTAL_REFS() fprintf(stderr, \
46 "[%" PY_FORMAT_SIZE_T "d refs]\n", \
47 _Py_GetRefTotal())
48#endif
49
50#ifdef __cplusplus
51extern "C" {
Neal Norwitz4281cef2006-03-04 19:58:13 +000052#endif
53
Martin v. Löwis790465f2008-04-05 20:41:37 +000054extern wchar_t *Py_GetPath(void);
Guido van Rossum1984f1e1992-08-04 12:41:02 +000055
Guido van Rossum82598051997-03-05 00:20:32 +000056extern grammar _PyParser_Grammar; /* From graminit.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000057
Guido van Rossumb73cc041993-11-01 16:28:59 +000058/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000059static void initmain(void);
60static void initsite(void);
Guido van Rossumce3a72a2007-10-19 23:16:50 +000061static int initstdio(void);
Amaury Forgeot d'Arc7fedbe52008-04-10 21:03:09 +000062static void flush_io(void);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000063static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
Neal Norwitzadb69fc2005-12-17 20:54:49 +000064 PyCompilerFlags *, PyArena *);
Martin v. Löwis95292d62002-12-11 14:04:59 +000065static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
Jeremy Hyltonbc320242001-03-22 02:47:58 +000066 PyCompilerFlags *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000067static void err_input(perrdetail *);
68static void initsigs(void);
Collin Winter670e6922007-03-21 02:57:17 +000069static void call_py_exitfuncs(void);
Antoine Pitroucefb3162009-10-20 22:08:36 +000070static void wait_for_thread_shutdown(void);
Tim Petersdbd9ba62000-07-09 03:09:57 +000071static void call_ll_exitfuncs(void);
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000072extern void _PyUnicode_Init(void);
73extern void _PyUnicode_Fini(void);
Guido van Rossumddefaf32007-01-14 03:31:43 +000074extern int _PyLong_Init(void);
75extern void PyLong_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 */
Guido van Rossum7433b121997-02-14 19:45:36 +000084int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Guido van Rossumd8faa362007-04-27 19:54:29 +000085int Py_InspectFlag; /* Needed to determine whether to exit at SystemError */
Guido van Rossumdcc0c131997-08-29 22:32:42 +000086int Py_NoSiteFlag; /* Suppress 'import site' */
Guido van Rossum98297ee2007-11-06 21:34:58 +000087int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */
Christian Heimes790c8232008-01-07 21:14:23 +000088int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.py[co]) */
Barry Warsaw3ce09642000-05-02 19:18:59 +000089int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
Guido van Rossuma61691e1998-02-06 22:27:24 +000090int Py_FrozenFlag; /* Needed by getpath.c */
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +000091int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Christian Heimes8dc226f2008-05-06 23:45:46 +000092int Py_NoUserSiteDirectory = 0; /* for -s and site.py */
Antoine Pitrou05608432009-01-09 18:53:14 +000093int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000094
Christian Heimes33fe8092008-04-13 13:53:33 +000095/* PyModule_GetWarningsModule is no longer necessary as of 2.6
96since _warnings is builtin. This API should not be used. */
97PyObject *
98PyModule_GetWarningsModule(void)
Mark Hammondedd07732003-07-15 23:03:55 +000099{
Christian Heimes33fe8092008-04-13 13:53:33 +0000100 return PyImport_ImportModule("warnings");
Mark Hammondedd07732003-07-15 23:03:55 +0000101}
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000102
Guido van Rossum25ce5661997-08-02 03:10:38 +0000103static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000104
Thomas Wouters7e474022000-07-16 12:04:32 +0000105/* API to access the initialized flag -- useful for esoteric use */
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000106
107int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000108Py_IsInitialized(void)
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000109{
110 return initialized;
111}
112
Guido van Rossum25ce5661997-08-02 03:10:38 +0000113/* Global initializations. Can be undone by Py_Finalize(). Don't
114 call this twice without an intervening Py_Finalize() call. When
115 initializations fail, a fatal error is issued and the function does
116 not return. On return, the first thread and interpreter state have
117 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000118
Guido van Rossum25ce5661997-08-02 03:10:38 +0000119 Locking: you must hold the interpreter lock while calling this.
120 (If the lock has not yet been initialized, that's equivalent to
121 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000122
Guido van Rossum25ce5661997-08-02 03:10:38 +0000123*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000124
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000125static int
126add_flag(int flag, const char *envs)
127{
128 int env = atoi(envs);
129 if (flag < env)
130 flag = env;
131 if (flag < 1)
132 flag = 1;
133 return flag;
134}
135
Christian Heimes5833a2f2008-10-30 21:40:04 +0000136#if defined(HAVE_LANGINFO_H) && defined(CODESET)
137static char*
138get_codeset(void)
139{
140 char* codeset;
141 PyObject *codec, *name;
142
143 codeset = nl_langinfo(CODESET);
144 if (!codeset || codeset[0] == '\0')
145 return NULL;
146
147 codec = _PyCodec_Lookup(codeset);
148 if (!codec)
149 goto error;
150
151 name = PyObject_GetAttrString(codec, "name");
152 Py_CLEAR(codec);
153 if (!name)
154 goto error;
155
156 codeset = strdup(_PyUnicode_AsString(name));
157 Py_DECREF(name);
158 return codeset;
159
160error:
161 Py_XDECREF(codec);
162 PyErr_Clear();
163 return NULL;
164}
165#endif
166
Guido van Rossuma027efa1997-05-05 20:56:21 +0000167void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000168Py_InitializeEx(int install_sigs)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000169{
Guido van Rossuma027efa1997-05-05 20:56:21 +0000170 PyInterpreterState *interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000171 PyThreadState *tstate;
Guido van Rossum826d8972007-10-30 18:34:07 +0000172 PyObject *bimod, *sysmod, *pstderr;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000173 char *p;
Guido van Rossum8d30cc02007-05-03 17:49:24 +0000174#if defined(HAVE_LANGINFO_H) && defined(CODESET)
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000175 char *codeset;
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000176#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +0000177 extern void _Py_ReadyTypes(void);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000178
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000179 if (initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000180 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000181 initialized = 1;
Tim Petersd08e3822003-04-17 15:24:21 +0000182
Martin v. Löwisd1cd4d42007-08-11 14:02:14 +0000183#ifdef HAVE_SETLOCALE
184 /* Set up the LC_CTYPE locale, so we can obtain
185 the locale's charset without having to switch
186 locales. */
187 setlocale(LC_CTYPE, "");
188#endif
189
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000190 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000191 Py_DebugFlag = add_flag(Py_DebugFlag, p);
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000192 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000193 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000194 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000195 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
Christian Heimes790c8232008-01-07 21:14:23 +0000196 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0')
197 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000198
Guido van Rossuma027efa1997-05-05 20:56:21 +0000199 interp = PyInterpreterState_New();
200 if (interp == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000201 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000202
Guido van Rossuma027efa1997-05-05 20:56:21 +0000203 tstate = PyThreadState_New(interp);
204 if (tstate == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000205 Py_FatalError("Py_Initialize: can't make first thread");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000206 (void) PyThreadState_Swap(tstate);
207
Guido van Rossum70d893a2001-08-16 08:21:42 +0000208 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000209
Neal Norwitzb2501f42002-12-31 03:42:13 +0000210 if (!_PyFrame_Init())
Neal Norwitzc91ed402002-12-30 22:29:22 +0000211 Py_FatalError("Py_Initialize: can't init frames");
212
Guido van Rossumddefaf32007-01-14 03:31:43 +0000213 if (!_PyLong_Init())
214 Py_FatalError("Py_Initialize: can't init longs");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000215
Christian Heimes9c4756e2008-05-26 13:22:05 +0000216 if (!PyByteArray_Init())
Benjamin Petersoncc3b8d62009-05-10 23:43:14 +0000217 Py_FatalError("Py_Initialize: can't init bytearray");
Neal Norwitz6968b052007-02-27 19:02:19 +0000218
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000219 _PyFloat_Init();
220
Guido van Rossum25ce5661997-08-02 03:10:38 +0000221 interp->modules = PyDict_New();
222 if (interp->modules == NULL)
223 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossumd8faa362007-04-27 19:54:29 +0000224 interp->modules_reloading = PyDict_New();
225 if (interp->modules_reloading == NULL)
226 Py_FatalError("Py_Initialize: can't make modules_reloading dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000227
Guido van Rossumc94044c2000-03-10 23:03:54 +0000228 /* Init Unicode implementation; relies on the codec registry */
229 _PyUnicode_Init();
230
Barry Warsawf242aa02000-05-25 23:09:49 +0000231 bimod = _PyBuiltin_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000232 if (bimod == NULL)
Georg Brandl1a3284e2007-12-02 09:40:06 +0000233 Py_FatalError("Py_Initialize: can't initialize builtins modules");
Martin v. Löwis1a214512008-06-11 05:26:20 +0000234 _PyImport_FixupExtension(bimod, "builtins", "builtins");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000235 interp->builtins = PyModule_GetDict(bimod);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000236 if (interp->builtins == NULL)
237 Py_FatalError("Py_Initialize: can't initialize builtins dict");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000238 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000239
Christian Heimes9a68f8c2007-11-14 00:16:07 +0000240 /* initialize builtin exceptions */
241 _PyExc_Init();
242
Guido van Rossum25ce5661997-08-02 03:10:38 +0000243 sysmod = _PySys_Init();
244 if (sysmod == NULL)
245 Py_FatalError("Py_Initialize: can't initialize sys");
246 interp->sysdict = PyModule_GetDict(sysmod);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000247 if (interp->sysdict == NULL)
248 Py_FatalError("Py_Initialize: can't initialize sys dict");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000249 Py_INCREF(interp->sysdict);
Martin v. Löwis1a214512008-06-11 05:26:20 +0000250 _PyImport_FixupExtension(sysmod, "sys", "sys");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000251 PySys_SetPath(Py_GetPath());
Guido van Rossum25ce5661997-08-02 03:10:38 +0000252 PyDict_SetItemString(interp->sysdict, "modules",
253 interp->modules);
254
Guido van Rossum826d8972007-10-30 18:34:07 +0000255 /* Set up a preliminary stderr printer until we have enough
256 infrastructure for the io module in place. */
257 pstderr = PyFile_NewStdPrinter(fileno(stderr));
258 if (pstderr == NULL)
259 Py_FatalError("Py_Initialize: can't set preliminary stderr");
260 PySys_SetObject("stderr", pstderr);
Guido van Rossum98297ee2007-11-06 21:34:58 +0000261 PySys_SetObject("__stderr__", pstderr);
Guido van Rossum826d8972007-10-30 18:34:07 +0000262
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000263 _PyImport_Init();
264
Just van Rossum52e14d62002-12-30 22:08:05 +0000265 _PyImportHooks_Init();
266
Martin v. Löwis011e8422009-05-05 04:43:17 +0000267#if defined(HAVE_LANGINFO_H) && defined(CODESET)
268 /* On Unix, set the file system encoding according to the
269 user's preference, if the CODESET names a well-known
270 Python codec, and Py_FileSystemDefaultEncoding isn't
271 initialized by other means. Also set the encoding of
272 stdin and stdout if these are terminals. */
273
274 codeset = get_codeset();
275 if (codeset) {
276 if (!Py_FileSystemDefaultEncoding)
277 Py_FileSystemDefaultEncoding = codeset;
278 else
279 free(codeset);
280 }
281#endif
282
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000283 if (install_sigs)
284 initsigs(); /* Signal handling stuff, including initintr() */
Christian Heimes33fe8092008-04-13 13:53:33 +0000285
Georg Brandl86b2fb92008-07-16 03:43:04 +0000286 /* Initialize warnings. */
287 _PyWarnings_Init();
288 if (PySys_HasWarnOptions()) {
289 PyObject *warnings_module = PyImport_ImportModule("warnings");
290 if (!warnings_module)
291 PyErr_Clear();
292 Py_XDECREF(warnings_module);
293 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000294
295 initmain(); /* Module __main__ */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000296 if (initstdio() < 0)
297 Py_FatalError(
298 "Py_Initialize: can't initialize sys standard streams");
Just van Rossum5bfba3a2003-02-25 20:25:12 +0000299
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000300 /* auto-thread-state API, if available */
301#ifdef WITH_THREAD
302 _PyGILState_Init(interp, tstate);
303#endif /* WITH_THREAD */
Victor Stinnerffbc2f62010-03-21 21:48:45 +0000304
305 if (!Py_NoSiteFlag)
306 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000307}
308
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000309void
310Py_Initialize(void)
311{
312 Py_InitializeEx(1);
313}
314
315
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000316#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000317extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000318#endif
319
Guido van Rossume8432ac2007-07-09 15:04:50 +0000320/* Flush stdout and stderr */
321
Neal Norwitz2bad9702007-08-27 06:19:22 +0000322static void
Guido van Rossum1bd21222007-07-10 20:14:13 +0000323flush_std_files(void)
Guido van Rossume8432ac2007-07-09 15:04:50 +0000324{
325 PyObject *fout = PySys_GetObject("stdout");
326 PyObject *ferr = PySys_GetObject("stderr");
327 PyObject *tmp;
328
Christian Heimes2be03732007-11-15 02:26:46 +0000329 if (fout != NULL && fout != Py_None) {
Guido van Rossume8432ac2007-07-09 15:04:50 +0000330 tmp = PyObject_CallMethod(fout, "flush", "");
331 if (tmp == NULL)
332 PyErr_Clear();
333 else
334 Py_DECREF(tmp);
335 }
336
Christian Heimes2be03732007-11-15 02:26:46 +0000337 if (ferr != NULL || ferr != Py_None) {
Guido van Rossume8432ac2007-07-09 15:04:50 +0000338 tmp = PyObject_CallMethod(ferr, "flush", "");
339 if (tmp == NULL)
340 PyErr_Clear();
341 else
342 Py_DECREF(tmp);
343 }
344}
345
Guido van Rossum25ce5661997-08-02 03:10:38 +0000346/* Undo the effect of Py_Initialize().
347
348 Beware: if multiple interpreter and/or thread states exist, these
349 are not wiped out; only the current thread and interpreter state
350 are deleted. But since everything else is deleted, those other
351 interpreter and thread states should no longer be used.
352
353 (XXX We should do better, e.g. wipe out all interpreters and
354 threads.)
355
356 Locking: as above.
357
358*/
359
360void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000361Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000362{
363 PyInterpreterState *interp;
364 PyThreadState *tstate;
365
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000366 if (!initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000367 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000368
Antoine Pitroucefb3162009-10-20 22:08:36 +0000369 wait_for_thread_shutdown();
370
Tim Peters384fd102001-01-21 03:40:37 +0000371 /* The interpreter is still entirely intact at this point, and the
372 * exit funcs may be relying on that. In particular, if some thread
373 * or exit func is still waiting to do an import, the import machinery
374 * expects Py_IsInitialized() to return true. So don't say the
375 * interpreter is uninitialized until after the exit funcs have run.
376 * Note that Threading.py uses an exit func to do a join on all the
377 * threads created thru it, so this also protects pending imports in
378 * the threads created via Threading.
379 */
Collin Winter670e6922007-03-21 02:57:17 +0000380 call_py_exitfuncs();
Tim Peters384fd102001-01-21 03:40:37 +0000381 initialized = 0;
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000382
Guido van Rossume8432ac2007-07-09 15:04:50 +0000383 /* Flush stdout+stderr */
384 flush_std_files();
385
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000386 /* Get current thread state and interpreter pointer */
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000387 tstate = PyThreadState_GET();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000388 interp = tstate->interp;
389
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000390 /* Disable signal handling */
391 PyOS_FiniInterrupts();
392
Christian Heimes26855632008-01-27 23:50:43 +0000393 /* Clear type lookup cache */
394 PyType_ClearCache();
395
Guido van Rossume13ddc92003-04-17 17:29:22 +0000396 /* Collect garbage. This may call finalizers; it's nice to call these
Tim Peters1d7323e2003-12-01 21:35:27 +0000397 * before all modules are destroyed.
398 * XXX If a __del__ or weakref callback is triggered here, and tries to
399 * XXX import a module, bad things can happen, because Python no
400 * XXX longer believes it's initialized.
401 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
402 * XXX is easy to provoke that way. I've also seen, e.g.,
403 * XXX Exception exceptions.ImportError: 'No module named sha'
404 * XXX in <function callback at 0x008F5718> ignored
405 * XXX but I'm unclear on exactly how that one happens. In any case,
406 * XXX I haven't seen a real-life report of either of these.
Neal Norwitz9589ee22006-03-04 19:01:22 +0000407 */
Guido van Rossume13ddc92003-04-17 17:29:22 +0000408 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000409#ifdef COUNT_ALLOCS
410 /* With COUNT_ALLOCS, it helps to run GC multiple times:
411 each collection might release some types from the type
412 list, so they become garbage. */
413 while (PyGC_Collect() > 0)
414 /* nothing */;
415#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000416
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000417 /* Destroy all modules */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000418 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000419
Guido van Rossume8432ac2007-07-09 15:04:50 +0000420 /* Flush stdout+stderr (again, in case more was printed) */
421 flush_std_files();
422
Guido van Rossume13ddc92003-04-17 17:29:22 +0000423 /* Collect final garbage. This disposes of cycles created by
Tim Peters1d7323e2003-12-01 21:35:27 +0000424 * new-style class definitions, for example.
425 * XXX This is disabled because it caused too many problems. If
426 * XXX a __del__ or weakref callback triggers here, Python code has
427 * XXX a hard time running, because even the sys module has been
428 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
429 * XXX One symptom is a sequence of information-free messages
430 * XXX coming from threads (if a __del__ or callback is invoked,
431 * XXX other threads can execute too, and any exception they encounter
432 * XXX triggers a comedy of errors as subsystem after subsystem
433 * XXX fails to find what it *expects* to find in sys to help report
434 * XXX the exception and consequent unexpected failures). I've also
435 * XXX seen segfaults then, after adding print statements to the
436 * XXX Python code getting called.
437 */
438#if 0
Guido van Rossume13ddc92003-04-17 17:29:22 +0000439 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000440#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000441
Guido van Rossum1707aad1997-12-08 23:43:45 +0000442 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
443 _PyImport_Fini();
444
445 /* Debugging stuff */
446#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000447 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000448#endif
449
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000450 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000451
Tim Peters9cf25ce2003-04-17 15:21:01 +0000452#ifdef Py_TRACE_REFS
453 /* Display all objects still alive -- this can invoke arbitrary
454 * __repr__ overrides, so requires a mostly-intact interpreter.
455 * Alas, a lot of stuff may still be alive now that will be cleaned
456 * up later.
457 */
Tim Peters269b2a62003-04-17 19:52:29 +0000458 if (Py_GETENV("PYTHONDUMPREFS"))
Tim Peters9cf25ce2003-04-17 15:21:01 +0000459 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000460#endif /* Py_TRACE_REFS */
461
Guido van Rossumd922fa42003-04-15 14:10:09 +0000462 /* Clear interpreter state */
Barry Warsawf242aa02000-05-25 23:09:49 +0000463 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000464
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000465 /* Now we decref the exception classes. After this point nothing
466 can raise an exception. That's okay, because each Fini() method
467 below has been checked to make sure no exceptions are ever
468 raised.
469 */
470
471 _PyExc_Fini();
472
Christian Heimes7d2ff882007-11-30 14:35:04 +0000473 /* Cleanup auto-thread-state */
474#ifdef WITH_THREAD
475 _PyGILState_Fini();
476#endif /* WITH_THREAD */
477
Guido van Rossumd922fa42003-04-15 14:10:09 +0000478 /* Delete current thread */
Barry Warsawf242aa02000-05-25 23:09:49 +0000479 PyThreadState_Swap(NULL);
480 PyInterpreterState_Delete(interp);
481
Guido van Rossumd922fa42003-04-15 14:10:09 +0000482 /* Sundry finalizers */
Guido van Rossumcc283f51997-08-05 02:22:03 +0000483 PyMethod_Fini();
484 PyFrame_Fini();
485 PyCFunction_Fini();
486 PyTuple_Fini();
Raymond Hettingerfb09f0e2004-10-07 03:58:07 +0000487 PyList_Fini();
Raymond Hettingerd7946662005-08-01 21:39:29 +0000488 PySet_Fini();
Christian Heimes72b710a2008-05-26 13:28:38 +0000489 PyBytes_Fini();
Christian Heimes9c4756e2008-05-26 13:22:05 +0000490 PyByteArray_Fini();
Guido van Rossumddefaf32007-01-14 03:31:43 +0000491 PyLong_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000492 PyFloat_Fini();
Christian Heimes77c02eb2008-02-09 02:18:51 +0000493 PyDict_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000494
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000495 /* Cleanup Unicode implementation */
496 _PyUnicode_Fini();
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000497
Christian Heimesc8967002007-11-30 10:18:26 +0000498 /* reset file system default encoding */
499 if (!Py_HasFileSystemDefaultEncoding) {
500 free((char*)Py_FileSystemDefaultEncoding);
Trent Nelson39e307e2008-03-19 06:45:48 +0000501 Py_FileSystemDefaultEncoding = NULL;
Christian Heimesc8967002007-11-30 10:18:26 +0000502 }
503
Guido van Rossumcc283f51997-08-05 02:22:03 +0000504 /* XXX Still allocated:
505 - various static ad-hoc pointers to interned strings
506 - int and float free list blocks
507 - whatever various modules and libraries allocate
508 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000509
510 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000511
Tim Peters269b2a62003-04-17 19:52:29 +0000512#ifdef Py_TRACE_REFS
513 /* Display addresses (& refcnts) of all objects still alive.
514 * An address can be used to find the repr of the object, printed
515 * above by _Py_PrintReferences.
516 */
517 if (Py_GETENV("PYTHONDUMPREFS"))
518 _Py_PrintReferenceAddresses(stderr);
519#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000520#ifdef PYMALLOC_DEBUG
521 if (Py_GETENV("PYTHONMALLOCSTATS"))
522 _PyObject_DebugMallocStats();
523#endif
524
Guido van Rossumcc283f51997-08-05 02:22:03 +0000525 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000526}
527
528/* Create and initialize a new interpreter and thread, and return the
529 new thread. This requires that Py_Initialize() has been called
530 first.
531
532 Unsuccessful initialization yields a NULL pointer. Note that *no*
533 exception information is available even in this case -- the
534 exception information is held in the thread, and there is no
535 thread.
536
537 Locking: as above.
538
539*/
540
541PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000542Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000543{
544 PyInterpreterState *interp;
545 PyThreadState *tstate, *save_tstate;
546 PyObject *bimod, *sysmod;
547
548 if (!initialized)
549 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
550
551 interp = PyInterpreterState_New();
552 if (interp == NULL)
553 return NULL;
554
555 tstate = PyThreadState_New(interp);
556 if (tstate == NULL) {
557 PyInterpreterState_Delete(interp);
558 return NULL;
559 }
560
561 save_tstate = PyThreadState_Swap(tstate);
562
563 /* XXX The following is lax in error checking */
564
565 interp->modules = PyDict_New();
Guido van Rossumd8faa362007-04-27 19:54:29 +0000566 interp->modules_reloading = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000567
Georg Brandl1a3284e2007-12-02 09:40:06 +0000568 bimod = _PyImport_FindExtension("builtins", "builtins");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000569 if (bimod != NULL) {
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000570 interp->builtins = PyModule_GetDict(bimod);
Thomas Wouters89f507f2006-12-13 04:49:30 +0000571 if (interp->builtins == NULL)
572 goto handle_error;
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000573 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000574 }
Christian Heimes6a27efa2008-10-30 21:48:26 +0000575
576 /* initialize builtin exceptions */
577 _PyExc_Init();
578
Guido van Rossum25ce5661997-08-02 03:10:38 +0000579 sysmod = _PyImport_FindExtension("sys", "sys");
580 if (bimod != NULL && sysmod != NULL) {
Christian Heimes6a27efa2008-10-30 21:48:26 +0000581 PyObject *pstderr;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000582 interp->sysdict = PyModule_GetDict(sysmod);
Thomas Wouters89f507f2006-12-13 04:49:30 +0000583 if (interp->sysdict == NULL)
584 goto handle_error;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000585 Py_INCREF(interp->sysdict);
586 PySys_SetPath(Py_GetPath());
587 PyDict_SetItemString(interp->sysdict, "modules",
588 interp->modules);
Christian Heimes6a27efa2008-10-30 21:48:26 +0000589 /* Set up a preliminary stderr printer until we have enough
590 infrastructure for the io module in place. */
591 pstderr = PyFile_NewStdPrinter(fileno(stderr));
592 if (pstderr == NULL)
593 Py_FatalError("Py_Initialize: can't set preliminary stderr");
594 PySys_SetObject("stderr", pstderr);
595 PySys_SetObject("__stderr__", pstderr);
596
Martin v. Löwisd7ceb222003-01-22 09:00:38 +0000597 _PyImportHooks_Init();
Christian Heimes6a27efa2008-10-30 21:48:26 +0000598 if (initstdio() < 0)
599 Py_FatalError(
600 "Py_Initialize: can't initialize sys standard streams");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000601 initmain();
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000602 if (!Py_NoSiteFlag)
603 initsite();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000604 }
605
606 if (!PyErr_Occurred())
607 return tstate;
608
Thomas Wouters89f507f2006-12-13 04:49:30 +0000609handle_error:
Guido van Rossum25ce5661997-08-02 03:10:38 +0000610 /* Oops, it didn't work. Undo it all. */
611
612 PyErr_Print();
613 PyThreadState_Clear(tstate);
614 PyThreadState_Swap(save_tstate);
615 PyThreadState_Delete(tstate);
616 PyInterpreterState_Delete(interp);
617
618 return NULL;
619}
620
621/* Delete an interpreter and its last thread. This requires that the
622 given thread state is current, that the thread has no remaining
623 frames, and that it is its interpreter's only remaining thread.
624 It is a fatal error to violate these constraints.
625
626 (Py_Finalize() doesn't have these constraints -- it zaps
627 everything, regardless.)
628
629 Locking: as above.
630
631*/
632
633void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000634Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000635{
636 PyInterpreterState *interp = tstate->interp;
637
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000638 if (tstate != PyThreadState_GET())
Guido van Rossum25ce5661997-08-02 03:10:38 +0000639 Py_FatalError("Py_EndInterpreter: thread is not current");
640 if (tstate->frame != NULL)
641 Py_FatalError("Py_EndInterpreter: thread still has a frame");
642 if (tstate != interp->tstate_head || tstate->next != NULL)
643 Py_FatalError("Py_EndInterpreter: not the last thread");
644
645 PyImport_Cleanup();
646 PyInterpreterState_Clear(interp);
647 PyThreadState_Swap(NULL);
648 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000649}
650
Martin v. Löwis790465f2008-04-05 20:41:37 +0000651static wchar_t *progname = L"python";
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000652
653void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000654Py_SetProgramName(wchar_t *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000655{
656 if (pn && *pn)
657 progname = pn;
658}
659
Martin v. Löwis790465f2008-04-05 20:41:37 +0000660wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000661Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000662{
663 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000664}
665
Martin v. Löwis790465f2008-04-05 20:41:37 +0000666static wchar_t *default_home = NULL;
667static wchar_t env_home[PATH_MAX+1];
Guido van Rossuma61691e1998-02-06 22:27:24 +0000668
669void
Martin v. Löwis790465f2008-04-05 20:41:37 +0000670Py_SetPythonHome(wchar_t *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000671{
672 default_home = home;
673}
674
Martin v. Löwis790465f2008-04-05 20:41:37 +0000675wchar_t *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000676Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000677{
Martin v. Löwis790465f2008-04-05 20:41:37 +0000678 wchar_t *home = default_home;
679 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
680 char* chome = Py_GETENV("PYTHONHOME");
681 if (chome) {
682 size_t r = mbstowcs(env_home, chome, PATH_MAX+1);
683 if (r != (size_t)-1 && r <= PATH_MAX)
684 home = env_home;
685 }
686
687 }
Guido van Rossuma61691e1998-02-06 22:27:24 +0000688 return home;
689}
690
Guido van Rossum6135a871995-01-09 17:53:26 +0000691/* Create __main__ module */
692
693static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000694initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000695{
Guido van Rossum82598051997-03-05 00:20:32 +0000696 PyObject *m, *d;
697 m = PyImport_AddModule("__main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000698 if (m == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000699 Py_FatalError("can't create __main__ module");
700 d = PyModule_GetDict(m);
701 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
Georg Brandl1a3284e2007-12-02 09:40:06 +0000702 PyObject *bimod = PyImport_ImportModule("builtins");
Guido van Rossum858cb731997-11-19 16:15:37 +0000703 if (bimod == NULL ||
704 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
Guido van Rossum82598051997-03-05 00:20:32 +0000705 Py_FatalError("can't add __builtins__ to __main__");
Barry Warsaw3d05b1a1999-01-29 21:30:22 +0000706 Py_DECREF(bimod);
Guido van Rossum6135a871995-01-09 17:53:26 +0000707 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000708}
709
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000710/* Import the site module (not into __main__ though) */
711
712static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000713initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000714{
Victor Stinner1d6af702010-03-21 21:57:42 +0000715 PyObject *m, *f;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000716 m = PyImport_ImportModule("site");
717 if (m == NULL) {
Victor Stinner1d6af702010-03-21 21:57:42 +0000718 f = PySys_GetObject("stderr");
719 if (f == NULL || f == Py_None)
720 return;
721 if (Py_VerboseFlag) {
722 PyFile_WriteString(
723 "'import site' failed; traceback:\n", f);
724 PyErr_Print();
725 }
726 else {
727 PyFile_WriteString(
728 "'import site' failed; use -v for traceback\n", f);
729 PyErr_Clear();
730 }
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000731 }
732 else {
733 Py_DECREF(m);
734 }
735}
736
Antoine Pitrou05608432009-01-09 18:53:14 +0000737static PyObject*
738create_stdio(PyObject* io,
739 int fd, int write_mode, char* name,
740 char* encoding, char* errors)
741{
Antoine Pitrou91696412009-01-09 22:12:30 +0000742 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
Antoine Pitrou05608432009-01-09 18:53:14 +0000743 const char* mode;
Antoine Pitrou91696412009-01-09 22:12:30 +0000744 PyObject *line_buffering;
745 int buffering, isatty;
Antoine Pitrou05608432009-01-09 18:53:14 +0000746
Antoine Pitrou27fe9fc2009-01-26 21:48:00 +0000747 /* stdin is always opened in buffered mode, first because it shouldn't
748 make a difference in common use cases, second because TextIOWrapper
749 depends on the presence of a read1() method which only exists on
750 buffered streams.
751 */
752 if (Py_UnbufferedStdioFlag && write_mode)
Antoine Pitrou05608432009-01-09 18:53:14 +0000753 buffering = 0;
754 else
755 buffering = -1;
756 if (write_mode)
757 mode = "wb";
758 else
759 mode = "rb";
760 buf = PyObject_CallMethod(io, "open", "isiOOOi",
761 fd, mode, buffering,
762 Py_None, Py_None, Py_None, 0);
763 if (buf == NULL)
764 goto error;
765
Antoine Pitrou27fe9fc2009-01-26 21:48:00 +0000766 if (buffering) {
Antoine Pitrou05608432009-01-09 18:53:14 +0000767 raw = PyObject_GetAttrString(buf, "raw");
768 if (raw == NULL)
769 goto error;
770 }
771 else {
772 raw = buf;
773 Py_INCREF(raw);
774 }
775
776 text = PyUnicode_FromString(name);
Benjamin Peterson4fa88fa2009-03-04 00:14:51 +0000777 if (text == NULL || PyObject_SetAttrString(raw, "name", text) < 0)
Antoine Pitrou05608432009-01-09 18:53:14 +0000778 goto error;
Antoine Pitrou91696412009-01-09 22:12:30 +0000779 res = PyObject_CallMethod(raw, "isatty", "");
780 if (res == NULL)
781 goto error;
782 isatty = PyObject_IsTrue(res);
783 Py_DECREF(res);
784 if (isatty == -1)
785 goto error;
786 if (isatty || Py_UnbufferedStdioFlag)
Antoine Pitrou05608432009-01-09 18:53:14 +0000787 line_buffering = Py_True;
788 else
789 line_buffering = Py_False;
Antoine Pitrou91696412009-01-09 22:12:30 +0000790
791 Py_CLEAR(raw);
792 Py_CLEAR(text);
793
Antoine Pitrou05608432009-01-09 18:53:14 +0000794 stream = PyObject_CallMethod(io, "TextIOWrapper", "OsssO",
795 buf, encoding, errors,
796 "\n", line_buffering);
797 Py_CLEAR(buf);
798 if (stream == NULL)
799 goto error;
800
801 if (write_mode)
802 mode = "w";
803 else
804 mode = "r";
805 text = PyUnicode_FromString(mode);
806 if (!text || PyObject_SetAttrString(stream, "mode", text) < 0)
807 goto error;
808 Py_CLEAR(text);
809 return stream;
810
811error:
812 Py_XDECREF(buf);
813 Py_XDECREF(stream);
814 Py_XDECREF(text);
815 Py_XDECREF(raw);
816 return NULL;
817}
818
Georg Brandl1a3284e2007-12-02 09:40:06 +0000819/* Initialize sys.stdin, stdout, stderr and builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000820static int
821initstdio(void)
822{
823 PyObject *iomod = NULL, *wrapper;
824 PyObject *bimod = NULL;
825 PyObject *m;
826 PyObject *std = NULL;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000827 int status = 0, fd;
Trent Nelson39e307e2008-03-19 06:45:48 +0000828 PyObject * encoding_attr;
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +0000829 char *encoding = NULL, *errors;
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000830
831 /* Hack to avoid a nasty recursion issue when Python is invoked
832 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
833 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
834 goto error;
835 }
836 Py_DECREF(m);
837
838 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
839 goto error;
840 }
841 Py_DECREF(m);
842
Georg Brandl1a3284e2007-12-02 09:40:06 +0000843 if (!(bimod = PyImport_ImportModule("builtins"))) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000844 goto error;
845 }
846
847 if (!(iomod = PyImport_ImportModule("io"))) {
848 goto error;
849 }
850 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
851 goto error;
852 }
853
Georg Brandl1a3284e2007-12-02 09:40:06 +0000854 /* Set builtins.open */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000855 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
856 goto error;
857 }
858
Martin v. Löwis0f599892008-06-02 11:13:03 +0000859 encoding = Py_GETENV("PYTHONIOENCODING");
Martin v. Löwis7cd068b2008-06-02 12:33:47 +0000860 errors = NULL;
Martin v. Löwis0f599892008-06-02 11:13:03 +0000861 if (encoding) {
862 encoding = strdup(encoding);
863 errors = strchr(encoding, ':');
864 if (errors) {
865 *errors = '\0';
866 errors++;
867 }
868 }
869
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000870 /* Set sys.stdin */
Christian Heimes58cb1b82007-11-13 02:19:40 +0000871 fd = fileno(stdin);
872 /* Under some conditions stdin, stdout and stderr may not be connected
873 * and fileno() may point to an invalid file descriptor. For example
874 * GUI apps don't have valid standard streams by default.
875 */
876 if (fd < 0) {
877#ifdef MS_WINDOWS
878 std = Py_None;
879 Py_INCREF(std);
880#else
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000881 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000882#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000883 }
Christian Heimes58cb1b82007-11-13 02:19:40 +0000884 else {
Antoine Pitrou05608432009-01-09 18:53:14 +0000885 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
886 if (std == NULL)
Christian Heimes58cb1b82007-11-13 02:19:40 +0000887 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000888 } /* if (fd < 0) */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000889 PySys_SetObject("__stdin__", std);
890 PySys_SetObject("stdin", std);
891 Py_DECREF(std);
892
893 /* Set sys.stdout */
Christian Heimes58cb1b82007-11-13 02:19:40 +0000894 fd = fileno(stdout);
895 if (fd < 0) {
896#ifdef MS_WINDOWS
897 std = Py_None;
898 Py_INCREF(std);
899#else
900 goto error;
901#endif
902 }
903 else {
Antoine Pitrou05608432009-01-09 18:53:14 +0000904 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
905 if (std == NULL)
Christian Heimes58cb1b82007-11-13 02:19:40 +0000906 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000907 } /* if (fd < 0) */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000908 PySys_SetObject("__stdout__", std);
909 PySys_SetObject("stdout", std);
910 Py_DECREF(std);
911
Guido van Rossum98297ee2007-11-06 21:34:58 +0000912#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Guido van Rossum2dced8b2007-10-30 17:27:30 +0000913 /* Set sys.stderr, replaces the preliminary stderr */
Christian Heimes58cb1b82007-11-13 02:19:40 +0000914 fd = fileno(stderr);
915 if (fd < 0) {
916#ifdef MS_WINDOWS
917 std = Py_None;
918 Py_INCREF(std);
919#else
920 goto error;
921#endif
922 }
923 else {
Antoine Pitrou05608432009-01-09 18:53:14 +0000924 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
925 if (std == NULL)
Christian Heimes58cb1b82007-11-13 02:19:40 +0000926 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000927 } /* if (fd < 0) */
Trent Nelson39e307e2008-03-19 06:45:48 +0000928
929 /* Same as hack above, pre-import stderr's codec to avoid recursion
930 when import.c tries to write to stderr in verbose mode. */
931 encoding_attr = PyObject_GetAttrString(std, "encoding");
932 if (encoding_attr != NULL) {
933 const char * encoding;
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +0000934 encoding = _PyUnicode_AsString(encoding_attr);
Trent Nelson39e307e2008-03-19 06:45:48 +0000935 if (encoding != NULL) {
936 _PyCodec_Lookup(encoding);
937 }
938 }
939 PyErr_Clear(); /* Not a fatal error if codec isn't available */
940
Christian Heimesdb233082007-11-13 02:34:21 +0000941 PySys_SetObject("__stderr__", std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000942 PySys_SetObject("stderr", std);
943 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +0000944#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000945
Christian Heimes58cb1b82007-11-13 02:19:40 +0000946 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000947 error:
Christian Heimesdb233082007-11-13 02:34:21 +0000948 status = -1;
949 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000950
Martin v. Löwis7cd068b2008-06-02 12:33:47 +0000951 if (encoding)
952 free(encoding);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000953 Py_XDECREF(bimod);
954 Py_XDECREF(iomod);
955 return status;
956}
957
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000958/* Parse input from a file and execute it */
959
960int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +0000961PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000962 PyCompilerFlags *flags)
963{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000964 if (filename == NULL)
965 filename = "???";
Guido van Rossum0df002c2000-08-27 19:21:52 +0000966 if (Py_FdIsInteractive(fp, filename)) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000967 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
Guido van Rossum0df002c2000-08-27 19:21:52 +0000968 if (closeit)
969 fclose(fp);
970 return err;
971 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000972 else
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000973 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000974}
975
976int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000977PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000978{
Guido van Rossum82598051997-03-05 00:20:32 +0000979 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000980 int ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000981 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000982
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000983 if (flags == NULL) {
984 flags = &local_flags;
Tim Peters5ba58662001-07-16 02:29:45 +0000985 local_flags.cf_flags = 0;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000986 }
Guido van Rossum82598051997-03-05 00:20:32 +0000987 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000988 if (v == NULL) {
Neal Norwitza369c5a2007-08-25 07:41:59 +0000989 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
Guido van Rossum82598051997-03-05 00:20:32 +0000990 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000991 }
Guido van Rossum82598051997-03-05 00:20:32 +0000992 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000993 if (v == NULL) {
Neal Norwitza369c5a2007-08-25 07:41:59 +0000994 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
Guido van Rossum82598051997-03-05 00:20:32 +0000995 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000996 }
997 for (;;) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000998 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000999 PRINT_TOTAL_REFS();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001000 if (ret == E_EOF)
1001 return 0;
1002 /*
1003 if (ret == E_NOMEM)
1004 return -1;
1005 */
1006 }
1007}
1008
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001009/* compute parser flags based on compiler flags */
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001010static int PARSER_FLAGS(PyCompilerFlags *flags)
1011{
1012 int parser_flags = 0;
1013 if (!flags)
1014 return 0;
1015 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT)
1016 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
1017 if (flags->cf_flags & PyCF_IGNORE_COOKIE)
1018 parser_flags |= PyPARSE_IGNORE_COOKIE;
Brett Cannone3944a52009-04-01 05:08:41 +00001019 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL)
1020 parser_flags |= PyPARSE_BARRY_AS_BDFL;
Benjamin Petersonf5b52242009-03-02 23:31:26 +00001021 return parser_flags;
1022}
Neil Schemenauerc24ea082002-03-22 23:53:36 +00001023
Thomas Wouters89f507f2006-12-13 04:49:30 +00001024#if 0
1025/* Keep an example of flags with future keyword support. */
1026#define PARSER_FLAGS(flags) \
1027 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
1028 PyPARSE_DONT_IMPLY_DEDENT : 0) \
1029 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
1030 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
1031#endif
1032
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001033int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001034PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +00001035{
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001036 PyObject *m, *d, *v, *w, *oenc = NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001037 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001038 PyArena *arena;
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001039 char *ps1 = "", *ps2 = "", *enc = NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001040 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +00001041
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001042 if (fp == stdin) {
1043 /* Fetch encoding from sys.stdin */
1044 v = PySys_GetObject("stdin");
Christian Heimes2be03732007-11-15 02:26:46 +00001045 if (v == NULL || v == Py_None)
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001046 return -1;
1047 oenc = PyObject_GetAttrString(v, "encoding");
1048 if (!oenc)
1049 return -1;
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00001050 enc = _PyUnicode_AsString(oenc);
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001051 }
Guido van Rossum82598051997-03-05 00:20:32 +00001052 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +00001053 if (v != NULL) {
Thomas Heller519a0422007-11-15 20:48:54 +00001054 v = PyObject_Str(v);
Guido van Rossumddc3fb51997-11-25 20:58:13 +00001055 if (v == NULL)
1056 PyErr_Clear();
Guido van Rossumc5724de2007-10-10 21:38:59 +00001057 else if (PyUnicode_Check(v))
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00001058 ps1 = _PyUnicode_AsString(v);
Guido van Rossumddc3fb51997-11-25 20:58:13 +00001059 }
Guido van Rossum82598051997-03-05 00:20:32 +00001060 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +00001061 if (w != NULL) {
Thomas Heller519a0422007-11-15 20:48:54 +00001062 w = PyObject_Str(w);
Guido van Rossumddc3fb51997-11-25 20:58:13 +00001063 if (w == NULL)
1064 PyErr_Clear();
Guido van Rossumc5724de2007-10-10 21:38:59 +00001065 else if (PyUnicode_Check(w))
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00001066 ps2 = _PyUnicode_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001067 }
Neal Norwitz9589ee22006-03-04 19:01:22 +00001068 arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001069 if (arena == NULL) {
1070 Py_XDECREF(v);
1071 Py_XDECREF(w);
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001072 Py_XDECREF(oenc);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001073 return -1;
1074 }
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001075 mod = PyParser_ASTFromFile(fp, filename, enc,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001076 Py_single_input, ps1, ps2,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001077 flags, &errcode, arena);
Guido van Rossum82598051997-03-05 00:20:32 +00001078 Py_XDECREF(v);
1079 Py_XDECREF(w);
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001080 Py_XDECREF(oenc);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001081 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001082 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001083 if (errcode == E_EOF) {
1084 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001085 return E_EOF;
1086 }
Guido van Rossum82598051997-03-05 00:20:32 +00001087 PyErr_Print();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001088 return -1;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001089 }
Guido van Rossum82598051997-03-05 00:20:32 +00001090 m = PyImport_AddModule("__main__");
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001091 if (m == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001092 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001093 return -1;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001094 }
Guido van Rossum82598051997-03-05 00:20:32 +00001095 d = PyModule_GetDict(m);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001096 v = run_mod(mod, filename, d, d, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001097 PyArena_Free(arena);
Amaury Forgeot d'Arc7fedbe52008-04-10 21:03:09 +00001098 flush_io();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001099 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +00001100 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001101 return -1;
1102 }
Guido van Rossum82598051997-03-05 00:20:32 +00001103 Py_DECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001104 return 0;
1105}
1106
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001107/* Check whether a file maybe a pyc file: Look at the extension,
1108 the file type, and, if we may close it, at the first few bytes. */
1109
1110static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001111maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001112{
1113 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
1114 return 1;
1115
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001116 /* Only look into the file if we are allowed to close it, since
1117 it then should also be seekable. */
1118 if (closeit) {
1119 /* Read only two bytes of the magic. If the file was opened in
1120 text mode, the bytes 3 and 4 of the magic (\r\n) might not
1121 be read as they are on disk. */
1122 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
1123 unsigned char buf[2];
Tim Peters3e876562001-02-11 04:35:39 +00001124 /* Mess: In case of -x, the stream is NOT at its start now,
1125 and ungetc() was used to push back the first newline,
Tim Peters6f5a4ef2001-02-17 22:02:34 +00001126 which makes the current stream position formally undefined,
1127 and a x-platform nightmare.
1128 Unfortunately, we have no direct way to know whether -x
1129 was specified. So we use a terrible hack: if the current
1130 stream position is not 0, we assume -x was specified, and
1131 give up. Bug 132850 on SourceForge spells out the
1132 hopelessness of trying anything else (fseek and ftell
1133 don't work predictably x-platform for text-mode files).
Tim Peters3e876562001-02-11 04:35:39 +00001134 */
Tim Peters3e876562001-02-11 04:35:39 +00001135 int ispyc = 0;
Tim Peters6f5a4ef2001-02-17 22:02:34 +00001136 if (ftell(fp) == 0) {
1137 if (fread(buf, 1, 2, fp) == 2 &&
Tim Petersd08e3822003-04-17 15:24:21 +00001138 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
Tim Peters6f5a4ef2001-02-17 22:02:34 +00001139 ispyc = 1;
1140 rewind(fp);
1141 }
Tim Peters3e876562001-02-11 04:35:39 +00001142 return ispyc;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001143 }
1144 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001145}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001146
Guido van Rossum0df002c2000-08-27 19:21:52 +00001147int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001148PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001149 PyCompilerFlags *flags)
1150{
Guido van Rossum82598051997-03-05 00:20:32 +00001151 PyObject *m, *d, *v;
Martin v. Löwis95292d62002-12-11 14:04:59 +00001152 const char *ext;
Matthias Klose042f1332009-04-04 14:32:42 +00001153 int set_file_name = 0, ret, len;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001154
Guido van Rossum82598051997-03-05 00:20:32 +00001155 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001156 if (m == NULL)
1157 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +00001158 d = PyModule_GetDict(m);
Fred Drake8ed02042002-10-17 21:24:58 +00001159 if (PyDict_GetItemString(d, "__file__") == NULL) {
Guido van Rossum00bc0e02007-10-15 02:52:41 +00001160 PyObject *f;
1161 f = PyUnicode_DecodeFSDefault(filename);
Fred Drake8ed02042002-10-17 21:24:58 +00001162 if (f == NULL)
1163 return -1;
1164 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1165 Py_DECREF(f);
1166 return -1;
1167 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00001168 set_file_name = 1;
Fred Drake8ed02042002-10-17 21:24:58 +00001169 Py_DECREF(f);
1170 }
Matthias Klose042f1332009-04-04 14:32:42 +00001171 len = strlen(filename);
1172 ext = filename + len - (len > 4 ? 4 : 0);
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001173 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Guido van Rossumfdef2711994-09-14 13:31:04 +00001174 /* Try to run a pyc file. First, re-open in binary */
Guido van Rossum0df002c2000-08-27 19:21:52 +00001175 if (closeit)
1176 fclose(fp);
Fred Drake8ed02042002-10-17 21:24:58 +00001177 if ((fp = fopen(filename, "rb")) == NULL) {
Guido van Rossumfdef2711994-09-14 13:31:04 +00001178 fprintf(stderr, "python: Can't reopen .pyc file\n");
Guido van Rossumd8faa362007-04-27 19:54:29 +00001179 ret = -1;
1180 goto done;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001181 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +00001182 /* Turn on optimization if a .pyo file is given */
1183 if (strcmp(ext, ".pyo") == 0)
1184 Py_OptimizeFlag = 1;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001185 v = run_pyc_file(fp, filename, d, d, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001186 } else {
Tim Petersd08e3822003-04-17 15:24:21 +00001187 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001188 closeit, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001189 }
Amaury Forgeot d'Arc7fedbe52008-04-10 21:03:09 +00001190 flush_io();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001191 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +00001192 PyErr_Print();
Guido van Rossumd8faa362007-04-27 19:54:29 +00001193 ret = -1;
1194 goto done;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001195 }
Guido van Rossum82598051997-03-05 00:20:32 +00001196 Py_DECREF(v);
Guido van Rossumd8faa362007-04-27 19:54:29 +00001197 ret = 0;
1198 done:
1199 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1200 PyErr_Clear();
1201 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001202}
1203
1204int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001205PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001206{
Guido van Rossum82598051997-03-05 00:20:32 +00001207 PyObject *m, *d, *v;
1208 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001209 if (m == NULL)
1210 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +00001211 d = PyModule_GetDict(m);
Guido van Rossum393661d2001-08-31 17:40:15 +00001212 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001213 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +00001214 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001215 return -1;
1216 }
Guido van Rossum82598051997-03-05 00:20:32 +00001217 Py_DECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001218 return 0;
1219}
1220
Barry Warsaw035574d1997-08-29 22:07:17 +00001221static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001222parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
1223 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001224{
1225 long hold;
1226 PyObject *v;
1227
1228 /* old style errors */
1229 if (PyTuple_Check(err))
Neal Norwitz78293352002-04-01 01:41:20 +00001230 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
Neal Norwitz9589ee22006-03-04 19:01:22 +00001231 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001232
1233 /* new style errors. `err' is an instance */
1234
1235 if (! (v = PyObject_GetAttrString(err, "msg")))
1236 goto finally;
1237 *message = v;
1238
1239 if (!(v = PyObject_GetAttrString(err, "filename")))
1240 goto finally;
1241 if (v == Py_None)
1242 *filename = NULL;
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00001243 else if (! (*filename = _PyUnicode_AsString(v)))
Barry Warsaw035574d1997-08-29 22:07:17 +00001244 goto finally;
1245
1246 Py_DECREF(v);
1247 if (!(v = PyObject_GetAttrString(err, "lineno")))
1248 goto finally;
Christian Heimes217cfd12007-12-02 14:31:20 +00001249 hold = PyLong_AsLong(v);
Barry Warsaw035574d1997-08-29 22:07:17 +00001250 Py_DECREF(v);
1251 v = NULL;
1252 if (hold < 0 && PyErr_Occurred())
1253 goto finally;
1254 *lineno = (int)hold;
1255
1256 if (!(v = PyObject_GetAttrString(err, "offset")))
1257 goto finally;
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001258 if (v == Py_None) {
1259 *offset = -1;
1260 Py_DECREF(v);
1261 v = NULL;
1262 } else {
Christian Heimes217cfd12007-12-02 14:31:20 +00001263 hold = PyLong_AsLong(v);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001264 Py_DECREF(v);
1265 v = NULL;
1266 if (hold < 0 && PyErr_Occurred())
1267 goto finally;
1268 *offset = (int)hold;
1269 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001270
1271 if (!(v = PyObject_GetAttrString(err, "text")))
1272 goto finally;
1273 if (v == Py_None)
1274 *text = NULL;
Guido van Rossumc5724de2007-10-10 21:38:59 +00001275 else if (!PyUnicode_Check(v) ||
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00001276 !(*text = _PyUnicode_AsString(v)))
Barry Warsaw035574d1997-08-29 22:07:17 +00001277 goto finally;
1278 Py_DECREF(v);
1279 return 1;
1280
1281finally:
1282 Py_XDECREF(v);
1283 return 0;
1284}
1285
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001286void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001287PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001288{
Guido van Rossuma61691e1998-02-06 22:27:24 +00001289 PyErr_PrintEx(1);
1290}
1291
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001292static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001293print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001294{
1295 char *nl;
1296 if (offset >= 0) {
1297 if (offset > 0 && offset == (int)strlen(text))
1298 offset--;
1299 for (;;) {
1300 nl = strchr(text, '\n');
1301 if (nl == NULL || nl-text >= offset)
1302 break;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001303 offset -= (int)(nl+1-text);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001304 text = nl+1;
1305 }
1306 while (*text == ' ' || *text == '\t') {
1307 text++;
1308 offset--;
1309 }
1310 }
1311 PyFile_WriteString(" ", f);
1312 PyFile_WriteString(text, f);
1313 if (*text == '\0' || text[strlen(text)-1] != '\n')
1314 PyFile_WriteString("\n", f);
1315 if (offset == -1)
1316 return;
1317 PyFile_WriteString(" ", f);
1318 offset--;
1319 while (offset > 0) {
1320 PyFile_WriteString(" ", f);
1321 offset--;
1322 }
1323 PyFile_WriteString("^\n", f);
1324}
1325
Guido van Rossum66e8e862001-03-23 17:54:43 +00001326static void
1327handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001328{
Neal Norwitz9589ee22006-03-04 19:01:22 +00001329 PyObject *exception, *value, *tb;
1330 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001331
Guido van Rossumd8faa362007-04-27 19:54:29 +00001332 if (Py_InspectFlag)
1333 /* Don't exit if -i flag was given. This flag is set to 0
1334 * when entering interactive mode for inspecting. */
1335 return;
1336
Guido van Rossum66e8e862001-03-23 17:54:43 +00001337 PyErr_Fetch(&exception, &value, &tb);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001338 fflush(stdout);
1339 if (value == NULL || value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001340 goto done;
Brett Cannonbf364092006-03-01 04:25:17 +00001341 if (PyExceptionInstance_Check(value)) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001342 /* The error code should be in the `code' attribute. */
1343 PyObject *code = PyObject_GetAttrString(value, "code");
1344 if (code) {
1345 Py_DECREF(value);
1346 value = code;
1347 if (value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001348 goto done;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001349 }
1350 /* If we failed to dig out the 'code' attribute,
1351 just let the else clause below print the error. */
1352 }
Christian Heimes217cfd12007-12-02 14:31:20 +00001353 if (PyLong_Check(value))
1354 exitcode = (int)PyLong_AsLong(value);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001355 else {
1356 PyObject_Print(value, stderr, Py_PRINT_RAW);
1357 PySys_WriteStderr("\n");
Tim Peterscf615b52003-04-19 18:47:02 +00001358 exitcode = 1;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001359 }
Tim Peterscf615b52003-04-19 18:47:02 +00001360 done:
Neal Norwitz9589ee22006-03-04 19:01:22 +00001361 /* Restore and clear the exception info, in order to properly decref
1362 * the exception, value, and traceback. If we just exit instead,
1363 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1364 * some finalizers from running.
1365 */
Tim Peterscf615b52003-04-19 18:47:02 +00001366 PyErr_Restore(exception, value, tb);
1367 PyErr_Clear();
1368 Py_Exit(exitcode);
1369 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001370}
1371
1372void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001373PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001374{
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001375 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001376
1377 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1378 handle_system_exit();
1379 }
Guido van Rossum82598051997-03-05 00:20:32 +00001380 PyErr_Fetch(&exception, &v, &tb);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001381 if (exception == NULL)
1382 return;
Barry Warsaw035574d1997-08-29 22:07:17 +00001383 PyErr_NormalizeException(&exception, &v, &tb);
Antoine Pitroue2dffc02008-08-26 22:02:58 +00001384 if (tb == NULL) {
1385 tb = Py_None;
1386 Py_INCREF(tb);
1387 }
Benjamin Petersone6528212008-07-15 15:32:09 +00001388 PyException_SetTraceback(v, tb);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001389 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +00001390 return;
Georg Brandl86b2fb92008-07-16 03:43:04 +00001391 /* Now we know v != NULL too */
Guido van Rossuma61691e1998-02-06 22:27:24 +00001392 if (set_sys_last_vars) {
1393 PySys_SetObject("last_type", exception);
1394 PySys_SetObject("last_value", v);
Benjamin Petersone6528212008-07-15 15:32:09 +00001395 PySys_SetObject("last_traceback", tb);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001396 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001397 hook = PySys_GetObject("excepthook");
1398 if (hook) {
Benjamin Petersone6528212008-07-15 15:32:09 +00001399 PyObject *args = PyTuple_Pack(3, exception, v, tb);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001400 PyObject *result = PyEval_CallObject(hook, args);
1401 if (result == NULL) {
1402 PyObject *exception2, *v2, *tb2;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001403 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1404 handle_system_exit();
1405 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001406 PyErr_Fetch(&exception2, &v2, &tb2);
1407 PyErr_NormalizeException(&exception2, &v2, &tb2);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001408 /* It should not be possible for exception2 or v2
1409 to be NULL. However PyErr_Display() can't
1410 tolerate NULLs, so just be safe. */
1411 if (exception2 == NULL) {
1412 exception2 = Py_None;
1413 Py_INCREF(exception2);
1414 }
1415 if (v2 == NULL) {
1416 v2 = Py_None;
1417 Py_INCREF(v2);
1418 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001419 fflush(stdout);
1420 PySys_WriteStderr("Error in sys.excepthook:\n");
1421 PyErr_Display(exception2, v2, tb2);
1422 PySys_WriteStderr("\nOriginal exception was:\n");
1423 PyErr_Display(exception, v, tb);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001424 Py_DECREF(exception2);
1425 Py_DECREF(v2);
Jeremy Hylton07028582001-12-07 15:35:35 +00001426 Py_XDECREF(tb2);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001427 }
1428 Py_XDECREF(result);
1429 Py_XDECREF(args);
1430 } else {
1431 PySys_WriteStderr("sys.excepthook is missing\n");
1432 PyErr_Display(exception, v, tb);
1433 }
1434 Py_XDECREF(exception);
1435 Py_XDECREF(v);
1436 Py_XDECREF(tb);
1437}
1438
Benjamin Petersone6528212008-07-15 15:32:09 +00001439static void
1440print_exception(PyObject *f, PyObject *value)
1441{
1442 int err = 0;
1443 PyObject *type, *tb;
1444
Benjamin Peterson26582602008-08-23 20:08:07 +00001445 if (!PyExceptionInstance_Check(value)) {
1446 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f);
1447 PyFile_WriteString(Py_TYPE(value)->tp_name, f);
1448 PyFile_WriteString(" found\n", f);
1449 return;
1450 }
1451
Benjamin Petersone6528212008-07-15 15:32:09 +00001452 Py_INCREF(value);
1453 fflush(stdout);
1454 type = (PyObject *) Py_TYPE(value);
1455 tb = PyException_GetTraceback(value);
1456 if (tb && tb != Py_None)
1457 err = PyTraceBack_Print(tb, f);
1458 if (err == 0 &&
1459 PyObject_HasAttrString(value, "print_file_and_line"))
1460 {
1461 PyObject *message;
1462 const char *filename, *text;
1463 int lineno, offset;
1464 if (!parse_syntax_error(value, &message, &filename,
1465 &lineno, &offset, &text))
1466 PyErr_Clear();
1467 else {
1468 char buf[10];
1469 PyFile_WriteString(" File \"", f);
1470 if (filename == NULL)
1471 PyFile_WriteString("<string>", f);
1472 else
1473 PyFile_WriteString(filename, f);
1474 PyFile_WriteString("\", line ", f);
1475 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
1476 PyFile_WriteString(buf, f);
1477 PyFile_WriteString("\n", f);
1478 if (text != NULL)
1479 print_error_text(f, offset, text);
1480 Py_DECREF(value);
1481 value = message;
1482 /* Can't be bothered to check all those
1483 PyFile_WriteString() calls */
1484 if (PyErr_Occurred())
1485 err = -1;
1486 }
1487 }
1488 if (err) {
1489 /* Don't do anything else */
1490 }
1491 else {
Benjamin Petersone6528212008-07-15 15:32:09 +00001492 PyObject* moduleName;
Thomas Hellerd88ddfa2008-07-15 17:14:51 +00001493 char* className;
1494 assert(PyExceptionClass_Check(type));
1495 className = PyExceptionClass_Name(type);
Benjamin Petersone6528212008-07-15 15:32:09 +00001496 if (className != NULL) {
1497 char *dot = strrchr(className, '.');
1498 if (dot != NULL)
1499 className = dot+1;
1500 }
1501
1502 moduleName = PyObject_GetAttrString(type, "__module__");
1503 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1504 {
1505 Py_DECREF(moduleName);
1506 err = PyFile_WriteString("<unknown>", f);
1507 }
1508 else {
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00001509 char* modstr = _PyUnicode_AsString(moduleName);
Benjamin Petersone6528212008-07-15 15:32:09 +00001510 if (modstr && strcmp(modstr, "builtins"))
1511 {
1512 err = PyFile_WriteString(modstr, f);
1513 err += PyFile_WriteString(".", f);
1514 }
1515 Py_DECREF(moduleName);
1516 }
1517 if (err == 0) {
1518 if (className == NULL)
1519 err = PyFile_WriteString("<unknown>", f);
1520 else
1521 err = PyFile_WriteString(className, f);
1522 }
1523 }
1524 if (err == 0 && (value != Py_None)) {
1525 PyObject *s = PyObject_Str(value);
1526 /* only print colon if the str() of the
1527 object is not the empty string
1528 */
1529 if (s == NULL)
1530 err = -1;
1531 else if (!PyUnicode_Check(s) ||
1532 PyUnicode_GetSize(s) != 0)
1533 err = PyFile_WriteString(": ", f);
1534 if (err == 0)
1535 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1536 Py_XDECREF(s);
1537 }
1538 /* try to write a newline in any case */
1539 err += PyFile_WriteString("\n", f);
1540 Py_XDECREF(tb);
1541 Py_DECREF(value);
1542 /* If an error happened here, don't show it.
1543 XXX This is wrong, but too many callers rely on this behavior. */
1544 if (err != 0)
1545 PyErr_Clear();
1546}
1547
1548static const char *cause_message =
1549 "\nThe above exception was the direct cause "
1550 "of the following exception:\n\n";
1551
1552static const char *context_message =
1553 "\nDuring handling of the above exception, "
1554 "another exception occurred:\n\n";
1555
1556static void
1557print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
1558{
1559 int err = 0, res;
1560 PyObject *cause, *context;
1561
1562 if (seen != NULL) {
1563 /* Exception chaining */
1564 if (PySet_Add(seen, value) == -1)
1565 PyErr_Clear();
1566 else if (PyExceptionInstance_Check(value)) {
1567 cause = PyException_GetCause(value);
1568 context = PyException_GetContext(value);
1569 if (cause) {
1570 res = PySet_Contains(seen, cause);
1571 if (res == -1)
1572 PyErr_Clear();
1573 if (res == 0) {
1574 print_exception_recursive(
1575 f, cause, seen);
1576 err |= PyFile_WriteString(
1577 cause_message, f);
1578 }
1579 }
Antoine Pitroubcc63a82009-11-28 16:16:09 +00001580 else if (context) {
Benjamin Petersone6528212008-07-15 15:32:09 +00001581 res = PySet_Contains(seen, context);
1582 if (res == -1)
1583 PyErr_Clear();
1584 if (res == 0) {
1585 print_exception_recursive(
1586 f, context, seen);
1587 err |= PyFile_WriteString(
1588 context_message, f);
1589 }
1590 }
1591 Py_XDECREF(context);
1592 Py_XDECREF(cause);
1593 }
1594 }
1595 print_exception(f, value);
1596 if (err != 0)
1597 PyErr_Clear();
1598}
1599
Thomas Wouters477c8d52006-05-27 19:21:47 +00001600void
1601PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001602{
Benjamin Petersone6528212008-07-15 15:32:09 +00001603 PyObject *seen;
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001604 PyObject *f = PySys_GetObject("stderr");
Christian Heimes2be03732007-11-15 02:26:46 +00001605 if (f == Py_None) {
1606 /* pass */
1607 }
1608 else if (f == NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00001609 _PyObject_Dump(value);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001610 fprintf(stderr, "lost sys.stderr\n");
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001611 }
Guido van Rossum3165fe61992-09-25 21:59:05 +00001612 else {
Benjamin Petersone6528212008-07-15 15:32:09 +00001613 /* We choose to ignore seen being possibly NULL, and report
1614 at least the main exception (it could be a MemoryError).
1615 */
1616 seen = PySet_New(NULL);
1617 if (seen == NULL)
1618 PyErr_Clear();
1619 print_exception_recursive(f, value, seen);
1620 Py_XDECREF(seen);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001621 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001622}
1623
Guido van Rossum82598051997-03-05 00:20:32 +00001624PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001625PyRun_StringFlags(const char *str, int start, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001626 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001627{
Neal Norwitze92fba02006-03-04 18:52:26 +00001628 PyObject *ret = NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001629 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001630 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001631 if (arena == NULL)
1632 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001633
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001634 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
Neal Norwitze92fba02006-03-04 18:52:26 +00001635 if (mod != NULL)
1636 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001637 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001638 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001639}
1640
1641PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001642PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001643 PyObject *locals, int closeit, PyCompilerFlags *flags)
1644{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001645 PyObject *ret;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001646 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001647 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001648 if (arena == NULL)
1649 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001650
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001651 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001652 flags, NULL, arena);
Guido van Rossumd8faa362007-04-27 19:54:29 +00001653 if (closeit)
1654 fclose(fp);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001655 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001656 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001657 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001658 }
Neal Norwitze92fba02006-03-04 18:52:26 +00001659 ret = run_mod(mod, filename, globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001660 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001661 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001662}
1663
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001664static void
1665flush_io(void)
1666{
1667 PyObject *f, *r;
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001668 PyObject *type, *value, *traceback;
1669
1670 /* Save the current exception */
1671 PyErr_Fetch(&type, &value, &traceback);
1672
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001673 f = PySys_GetObject("stderr");
1674 if (f != NULL) {
1675 r = PyObject_CallMethod(f, "flush", "");
1676 if (r)
1677 Py_DECREF(r);
1678 else
1679 PyErr_Clear();
1680 }
1681 f = PySys_GetObject("stdout");
1682 if (f != NULL) {
1683 r = PyObject_CallMethod(f, "flush", "");
1684 if (r)
1685 Py_DECREF(r);
1686 else
1687 PyErr_Clear();
1688 }
Amaury Forgeot d'Arc9ed77352008-04-04 23:25:27 +00001689
1690 PyErr_Restore(type, value, traceback);
Guido van Rossum6c193fa2007-12-05 05:14:58 +00001691}
1692
Guido van Rossum82598051997-03-05 00:20:32 +00001693static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001694run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001695 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001696{
Guido van Rossum82598051997-03-05 00:20:32 +00001697 PyCodeObject *co;
1698 PyObject *v;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001699 co = PyAST_Compile(mod, filename, flags, arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001700 if (co == NULL)
1701 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +00001702 v = PyEval_EvalCode(co, globals, locals);
1703 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001704 return v;
1705}
1706
Guido van Rossum82598051997-03-05 00:20:32 +00001707static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001708run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001709 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001710{
Guido van Rossum82598051997-03-05 00:20:32 +00001711 PyCodeObject *co;
1712 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001713 long magic;
Fred Drakee8de31c2000-08-31 05:38:39 +00001714 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001715
Guido van Rossum82598051997-03-05 00:20:32 +00001716 magic = PyMarshal_ReadLongFromFile(fp);
1717 if (magic != PyImport_GetMagicNumber()) {
1718 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001719 "Bad magic number in .pyc file");
1720 return NULL;
1721 }
Guido van Rossum82598051997-03-05 00:20:32 +00001722 (void) PyMarshal_ReadLongFromFile(fp);
Tim Petersd9b9ac82001-01-28 00:27:39 +00001723 v = PyMarshal_ReadLastObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001724 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +00001725 if (v == NULL || !PyCode_Check(v)) {
1726 Py_XDECREF(v);
1727 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001728 "Bad code object in .pyc file");
1729 return NULL;
1730 }
Guido van Rossum82598051997-03-05 00:20:32 +00001731 co = (PyCodeObject *)v;
1732 v = PyEval_EvalCode(co, globals, locals);
Jeremy Hyltonb857ba22001-08-10 21:41:33 +00001733 if (v && flags)
1734 flags->cf_flags |= (co->co_flags & PyCF_MASK);
Guido van Rossum82598051997-03-05 00:20:32 +00001735 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001736 return v;
1737}
1738
Guido van Rossum82598051997-03-05 00:20:32 +00001739PyObject *
Tim Petersd08e3822003-04-17 15:24:21 +00001740Py_CompileStringFlags(const char *str, const char *filename, int start,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001741 PyCompilerFlags *flags)
1742{
Guido van Rossum82598051997-03-05 00:20:32 +00001743 PyCodeObject *co;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001744 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001745 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001746 if (arena == NULL)
1747 return NULL;
1748
1749 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001750 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001751 PyArena_Free(arena);
Guido van Rossum5b722181993-03-30 17:46:03 +00001752 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001753 }
Martin v. Löwis2b366e42006-02-26 22:12:35 +00001754 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001755 PyObject *result = PyAST_mod2obj(mod);
1756 PyArena_Free(arena);
1757 return result;
1758 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001759 co = PyAST_Compile(mod, filename, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001760 PyArena_Free(arena);
Guido van Rossum82598051997-03-05 00:20:32 +00001761 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001762}
1763
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001764struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001765Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001766{
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001767 struct symtable *st;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001768 mod_ty mod;
Christian Heimes4d6ec852008-03-26 22:34:47 +00001769 PyCompilerFlags flags;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001770 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001771 if (arena == NULL)
1772 return NULL;
1773
Christian Heimesb1b3efc2008-03-26 23:24:27 +00001774 flags.cf_flags = 0;
Christian Heimes4d6ec852008-03-26 22:34:47 +00001775 mod = PyParser_ASTFromString(str, filename, start, &flags, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001776 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001777 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001778 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001779 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001780 st = PySymtable_Build(mod, filename, 0);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001781 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001782 return st;
1783}
1784
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001785/* Preferred access to parser is through AST. */
1786mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001787PyParser_ASTFromString(const char *s, const char *filename, int start,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001788 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001789{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001790 mod_ty mod;
Benjamin Petersonf216c942008-10-31 02:28:05 +00001791 PyCompilerFlags localflags;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001792 perrdetail err;
Christian Heimes3a932122008-03-26 23:25:24 +00001793 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00001794
1795 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001796 &_PyParser_Grammar, start, &err,
Christian Heimes4d6ec852008-03-26 22:34:47 +00001797 &iflags);
Benjamin Petersonf216c942008-10-31 02:28:05 +00001798 if (flags == NULL) {
1799 localflags.cf_flags = 0;
1800 flags = &localflags;
1801 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001802 if (n) {
Benjamin Petersonf216c942008-10-31 02:28:05 +00001803 flags->cf_flags |= iflags & PyCF_MASK;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001804 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001805 PyNode_Free(n);
1806 return mod;
1807 }
1808 else {
1809 err_input(&err);
1810 return NULL;
1811 }
1812}
1813
1814mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001815PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
1816 int start, char *ps1,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001817 char *ps2, PyCompilerFlags *flags, int *errcode,
Neal Norwitz9589ee22006-03-04 19:01:22 +00001818 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001819{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001820 mod_ty mod;
Benjamin Petersonf216c942008-10-31 02:28:05 +00001821 PyCompilerFlags localflags;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001822 perrdetail err;
Christian Heimes3a932122008-03-26 23:25:24 +00001823 int iflags = PARSER_FLAGS(flags);
Christian Heimes4d6ec852008-03-26 22:34:47 +00001824
Christian Heimes4d6ec852008-03-26 22:34:47 +00001825 node *n = PyParser_ParseFileFlagsEx(fp, filename, enc,
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001826 &_PyParser_Grammar,
Christian Heimes4d6ec852008-03-26 22:34:47 +00001827 start, ps1, ps2, &err, &iflags);
Benjamin Petersonf216c942008-10-31 02:28:05 +00001828 if (flags == NULL) {
1829 localflags.cf_flags = 0;
1830 flags = &localflags;
1831 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001832 if (n) {
Benjamin Petersonf216c942008-10-31 02:28:05 +00001833 flags->cf_flags |= iflags & PyCF_MASK;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001834 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001835 PyNode_Free(n);
1836 return mod;
1837 }
1838 else {
1839 err_input(&err);
1840 if (errcode)
1841 *errcode = err.error;
1842 return NULL;
1843 }
1844}
1845
Guido van Rossuma110aa61994-08-29 12:50:44 +00001846/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001847
Guido van Rossuma110aa61994-08-29 12:50:44 +00001848node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001849PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001850{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001851 perrdetail err;
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001852 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
1853 &_PyParser_Grammar,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001854 start, NULL, NULL, &err, flags);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001855 if (n == NULL)
1856 err_input(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001857
Guido van Rossuma110aa61994-08-29 12:50:44 +00001858 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001859}
1860
Guido van Rossuma110aa61994-08-29 12:50:44 +00001861/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001862
Guido van Rossuma110aa61994-08-29 12:50:44 +00001863node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001864PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001865{
Tim Petersfe2127d2001-07-16 05:37:24 +00001866 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001867 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1868 start, &err, flags);
Tim Petersfe2127d2001-07-16 05:37:24 +00001869 if (n == NULL)
1870 err_input(&err);
1871 return n;
1872}
1873
1874node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001875PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Thomas Heller6b17abf2002-07-09 09:23:27 +00001876 int start, int flags)
1877{
Thomas Heller6b17abf2002-07-09 09:23:27 +00001878 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001879 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1880 &_PyParser_Grammar, start, &err, flags);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001881 if (n == NULL)
1882 err_input(&err);
1883 return n;
1884}
1885
1886node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001887PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001888{
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001889 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001890}
1891
Guido van Rossum66ebd912003-04-17 16:02:26 +00001892/* May want to move a more generalized form of this to parsetok.c or
1893 even parser modules. */
1894
1895void
1896PyParser_SetError(perrdetail *err)
1897{
1898 err_input(err);
1899}
1900
Guido van Rossuma110aa61994-08-29 12:50:44 +00001901/* Set the error appropriate to the given input error code (see errcode.h) */
1902
1903static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001904err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00001905{
Martin v. Löwis5deb2102007-08-31 11:17:42 +00001906 PyObject *v, *w, *errtype, *errtext;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001907 PyObject* u = NULL;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001908 char *msg = NULL;
Fred Drake85f36392000-07-11 17:53:00 +00001909 errtype = PyExc_SyntaxError;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001910 switch (err->error) {
Victor Stinnerffbc2f62010-03-21 21:48:45 +00001911 case E_ERROR:
1912 return;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001913 case E_SYNTAX:
Fred Drake85f36392000-07-11 17:53:00 +00001914 errtype = PyExc_IndentationError;
1915 if (err->expected == INDENT)
1916 msg = "expected an indented block";
1917 else if (err->token == INDENT)
1918 msg = "unexpected indent";
1919 else if (err->token == DEDENT)
1920 msg = "unexpected unindent";
1921 else {
1922 errtype = PyExc_SyntaxError;
1923 msg = "invalid syntax";
1924 }
Guido van Rossuma110aa61994-08-29 12:50:44 +00001925 break;
1926 case E_TOKEN:
1927 msg = "invalid token";
Guido van Rossuma110aa61994-08-29 12:50:44 +00001928 break;
Skip Montanaro118ec702002-08-15 01:20:16 +00001929 case E_EOFS:
Alexandre Vassalotti8ae3e052008-05-16 00:41:41 +00001930 msg = "EOF while scanning triple-quoted string literal";
Skip Montanaro118ec702002-08-15 01:20:16 +00001931 break;
1932 case E_EOLS:
Alexandre Vassalotti8ae3e052008-05-16 00:41:41 +00001933 msg = "EOL while scanning string literal";
Skip Montanaro118ec702002-08-15 01:20:16 +00001934 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001935 case E_INTR:
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001936 if (!PyErr_Occurred())
1937 PyErr_SetNone(PyExc_KeyboardInterrupt);
Georg Brandl3dbca812008-07-23 16:10:53 +00001938 goto cleanup;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001939 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +00001940 PyErr_NoMemory();
Georg Brandl3dbca812008-07-23 16:10:53 +00001941 goto cleanup;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001942 case E_EOF:
1943 msg = "unexpected EOF while parsing";
1944 break;
Fred Drake85f36392000-07-11 17:53:00 +00001945 case E_TABSPACE:
1946 errtype = PyExc_TabError;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001947 msg = "inconsistent use of tabs and spaces in indentation";
1948 break;
Jeremy Hylton94988062000-06-20 19:10:44 +00001949 case E_OVERFLOW:
1950 msg = "expression too long";
1951 break;
Fred Drake85f36392000-07-11 17:53:00 +00001952 case E_DEDENT:
1953 errtype = PyExc_IndentationError;
1954 msg = "unindent does not match any outer indentation level";
1955 break;
1956 case E_TOODEEP:
1957 errtype = PyExc_IndentationError;
1958 msg = "too many levels of indentation";
1959 break;
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001960 case E_DECODE: {
1961 PyObject *type, *value, *tb;
1962 PyErr_Fetch(&type, &value, &tb);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001963 if (value != NULL) {
Thomas Heller519a0422007-11-15 20:48:54 +00001964 u = PyObject_Str(value);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001965 if (u != NULL) {
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00001966 msg = _PyUnicode_AsString(u);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001967 }
1968 }
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001969 if (msg == NULL)
1970 msg = "unknown decode error";
Neal Norwitzdb83eb32005-12-18 05:29:30 +00001971 Py_XDECREF(type);
1972 Py_XDECREF(value);
Neal Norwitz40d37812005-10-02 01:48:49 +00001973 Py_XDECREF(tb);
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001974 break;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001975 }
Martin v. Löwis4bf108d2005-03-03 11:45:45 +00001976 case E_LINECONT:
1977 msg = "unexpected character after line continuation character";
1978 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00001979
1980 case E_IDENTIFIER:
1981 msg = "invalid character in identifier";
1982 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001983 default:
1984 fprintf(stderr, "error=%d\n", err->error);
1985 msg = "unknown parsing error";
1986 break;
1987 }
Martin v. Löwis5deb2102007-08-31 11:17:42 +00001988 /* err->text may not be UTF-8 in case of decoding errors.
1989 Explicitly convert to an object. */
1990 if (!err->text) {
1991 errtext = Py_None;
1992 Py_INCREF(Py_None);
1993 } else {
1994 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
1995 "replace");
1996 }
1997 v = Py_BuildValue("(ziiN)", err->filename,
1998 err->lineno, err->offset, errtext);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001999 w = NULL;
2000 if (v != NULL)
2001 w = Py_BuildValue("(sO)", msg, v);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00002002 Py_XDECREF(u);
Guido van Rossum41318302001-03-23 04:01:07 +00002003 Py_XDECREF(v);
Fred Drake85f36392000-07-11 17:53:00 +00002004 PyErr_SetObject(errtype, w);
Guido van Rossum82598051997-03-05 00:20:32 +00002005 Py_XDECREF(w);
Georg Brandl3dbca812008-07-23 16:10:53 +00002006cleanup:
2007 if (err->text != NULL) {
2008 PyObject_FREE(err->text);
2009 err->text = NULL;
2010 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002011}
2012
2013/* Print fatal error message and abort */
2014
2015void
Tim Peters7c321a82002-07-09 02:57:01 +00002016Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002017{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00002018 fprintf(stderr, "Fatal Python error: %s\n", msg);
Jesse Nollera9314042009-03-31 22:36:44 +00002019 fflush(stderr); /* it helps in Windows debug build */
Guido van Rossumce3a72a2007-10-19 23:16:50 +00002020 if (PyErr_Occurred()) {
2021 PyErr_Print();
2022 }
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002023#ifdef MS_WINDOWS
Martin v. Löwis5c88d812009-01-02 20:47:48 +00002024 {
2025 size_t len = strlen(msg);
2026 WCHAR* buffer;
2027 size_t i;
2028
2029 /* Convert the message to wchar_t. This uses a simple one-to-one
2030 conversion, assuming that the this error message actually uses ASCII
2031 only. If this ceases to be true, we will have to convert. */
2032 buffer = alloca( (len+1) * (sizeof *buffer));
2033 for( i=0; i<=len; ++i)
2034 buffer[i] = msg[i];
2035 OutputDebugStringW(L"Fatal Python error: ");
2036 OutputDebugStringW(buffer);
2037 OutputDebugStringW(L"\n");
2038 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00002039#ifdef _DEBUG
2040 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00002041#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00002042#endif /* MS_WINDOWS */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002043 abort();
2044}
2045
2046/* Clean up and exit */
2047
Guido van Rossuma110aa61994-08-29 12:50:44 +00002048#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00002049#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00002050#endif
2051
Collin Winter670e6922007-03-21 02:57:17 +00002052static void (*pyexitfunc)(void) = NULL;
2053/* For the atexit module. */
2054void _Py_PyAtExit(void (*func)(void))
2055{
2056 pyexitfunc = func;
2057}
2058
2059static void
2060call_py_exitfuncs(void)
2061{
Guido van Rossum98297ee2007-11-06 21:34:58 +00002062 if (pyexitfunc == NULL)
Collin Winter670e6922007-03-21 02:57:17 +00002063 return;
2064
2065 (*pyexitfunc)();
2066 PyErr_Clear();
2067}
2068
Antoine Pitroucefb3162009-10-20 22:08:36 +00002069/* Wait until threading._shutdown completes, provided
2070 the threading module was imported in the first place.
2071 The shutdown routine will wait until all non-daemon
2072 "threading" threads have completed. */
2073static void
2074wait_for_thread_shutdown(void)
2075{
2076#ifdef WITH_THREAD
2077 PyObject *result;
2078 PyThreadState *tstate = PyThreadState_GET();
2079 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
2080 "threading");
2081 if (threading == NULL) {
2082 /* threading not imported */
2083 PyErr_Clear();
2084 return;
2085 }
2086 result = PyObject_CallMethod(threading, "_shutdown", "");
2087 if (result == NULL) {
2088 PyErr_WriteUnraisable(threading);
2089 }
2090 else {
2091 Py_DECREF(result);
2092 }
2093 Py_DECREF(threading);
2094#endif
2095}
2096
Guido van Rossum2dcfc961998-10-01 16:01:57 +00002097#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002098static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00002099static int nexitfuncs = 0;
2100
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002101int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00002102{
2103 if (nexitfuncs >= NEXITFUNCS)
2104 return -1;
2105 exitfuncs[nexitfuncs++] = func;
2106 return 0;
2107}
2108
Guido van Rossumcc283f51997-08-05 02:22:03 +00002109static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002110call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00002111{
Guido van Rossum1662dd51994-09-07 14:38:28 +00002112 while (nexitfuncs > 0)
2113 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00002114
2115 fflush(stdout);
2116 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002117}
2118
2119void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002120Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002121{
Guido van Rossumcc283f51997-08-05 02:22:03 +00002122 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002123
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002124 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00002125}
2126
Guido van Rossumf1dc5661993-07-05 10:31:29 +00002127static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002128initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002129{
Guido van Rossuma110aa61994-08-29 12:50:44 +00002130#ifdef SIGPIPE
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002131 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002132#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00002133#ifdef SIGXFZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002134 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00002135#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002136#ifdef SIGXFSZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002137 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00002138#endif
Guido van Rossum82598051997-03-05 00:20:32 +00002139 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00002140}
2141
Guido van Rossum7433b121997-02-14 19:45:36 +00002142
2143/*
2144 * The file descriptor fd is considered ``interactive'' if either
2145 * a) isatty(fd) is TRUE, or
2146 * b) the -i flag was given, and the filename associated with
2147 * the descriptor is NULL or "<stdin>" or "???".
2148 */
2149int
Martin v. Löwis95292d62002-12-11 14:04:59 +00002150Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00002151{
2152 if (isatty((int)fileno(fp)))
2153 return 1;
2154 if (!Py_InteractiveFlag)
2155 return 0;
2156 return (filename == NULL) ||
2157 (strcmp(filename, "<stdin>") == 0) ||
2158 (strcmp(filename, "???") == 0);
2159}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002160
2161
Tim Petersd08e3822003-04-17 15:24:21 +00002162#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002163#if defined(WIN32) && defined(_MSC_VER)
2164
2165/* Stack checking for Microsoft C */
2166
2167#include <malloc.h>
2168#include <excpt.h>
2169
Fred Drakee8de31c2000-08-31 05:38:39 +00002170/*
2171 * Return non-zero when we run out of memory on the stack; zero otherwise.
2172 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002173int
Fred Drake399739f2000-08-31 05:52:44 +00002174PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002175{
2176 __try {
Tim Peters92e4dd82002-10-05 01:47:34 +00002177 /* alloca throws a stack overflow exception if there's
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002178 not enough space left on the stack */
Tim Peters92e4dd82002-10-05 01:47:34 +00002179 alloca(PYOS_STACK_MARGIN * sizeof(void*));
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002180 return 0;
Christian Heimes7131fd92008-02-19 14:21:46 +00002181 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
Trent Nelson39e307e2008-03-19 06:45:48 +00002182 EXCEPTION_EXECUTE_HANDLER :
2183 EXCEPTION_CONTINUE_SEARCH) {
Christian Heimes7131fd92008-02-19 14:21:46 +00002184 int errcode = _resetstkoflw();
Amaury Forgeot d'Arcb0c29162008-11-22 22:18:04 +00002185 if (errcode == 0)
Christian Heimes7131fd92008-02-19 14:21:46 +00002186 {
2187 Py_FatalError("Could not reset the stack!");
2188 }
Fredrik Lundh2f15b252000-08-27 19:15:31 +00002189 }
2190 return 1;
2191}
2192
2193#endif /* WIN32 && _MSC_VER */
2194
2195/* Alternate implementations can be added here... */
2196
2197#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00002198
2199
2200/* Wrappers around sigaction() or signal(). */
2201
2202PyOS_sighandler_t
2203PyOS_getsig(int sig)
2204{
2205#ifdef HAVE_SIGACTION
2206 struct sigaction context;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002207 if (sigaction(sig, NULL, &context) == -1)
2208 return SIG_ERR;
Guido van Rossum6f256182000-09-16 16:32:19 +00002209 return context.sa_handler;
2210#else
2211 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00002212/* Special signal handling for the secure CRT in Visual Studio 2005 */
2213#if defined(_MSC_VER) && _MSC_VER >= 1400
2214 switch (sig) {
2215 /* Only these signals are valid */
2216 case SIGINT:
2217 case SIGILL:
2218 case SIGFPE:
2219 case SIGSEGV:
2220 case SIGTERM:
2221 case SIGBREAK:
2222 case SIGABRT:
2223 break;
2224 /* Don't call signal() with other values or it will assert */
2225 default:
2226 return SIG_ERR;
2227 }
2228#endif /* _MSC_VER && _MSC_VER >= 1400 */
Guido van Rossum6f256182000-09-16 16:32:19 +00002229 handler = signal(sig, SIG_IGN);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002230 if (handler != SIG_ERR)
2231 signal(sig, handler);
Guido van Rossum6f256182000-09-16 16:32:19 +00002232 return handler;
2233#endif
2234}
2235
2236PyOS_sighandler_t
2237PyOS_setsig(int sig, PyOS_sighandler_t handler)
2238{
2239#ifdef HAVE_SIGACTION
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002240 struct sigaction context, ocontext;
Guido van Rossum6f256182000-09-16 16:32:19 +00002241 context.sa_handler = handler;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002242 sigemptyset(&context.sa_mask);
2243 context.sa_flags = 0;
2244 if (sigaction(sig, &context, &ocontext) == -1)
2245 return SIG_ERR;
2246 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002247#else
Anthony Baxter9ceaa722004-10-13 14:48:50 +00002248 PyOS_sighandler_t oldhandler;
2249 oldhandler = signal(sig, handler);
2250#ifdef HAVE_SIGINTERRUPT
2251 siginterrupt(sig, 1);
2252#endif
2253 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00002254#endif
2255}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002256
2257/* Deprecated C API functions still provided for binary compatiblity */
2258
2259#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002260PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002261PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
2262{
2263 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
2264}
2265
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002266#undef PyParser_SimpleParseString
2267PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002268PyParser_SimpleParseString(const char *str, int start)
2269{
2270 return PyParser_SimpleParseStringFlags(str, start, 0);
2271}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002272
2273#undef PyRun_AnyFile
2274PyAPI_FUNC(int)
2275PyRun_AnyFile(FILE *fp, const char *name)
2276{
2277 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
2278}
2279
2280#undef PyRun_AnyFileEx
2281PyAPI_FUNC(int)
2282PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
2283{
2284 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
2285}
2286
2287#undef PyRun_AnyFileFlags
2288PyAPI_FUNC(int)
2289PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
2290{
2291 return PyRun_AnyFileExFlags(fp, name, 0, flags);
2292}
2293
2294#undef PyRun_File
2295PyAPI_FUNC(PyObject *)
2296PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
2297{
Georg Brandl86b2fb92008-07-16 03:43:04 +00002298 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002299}
2300
2301#undef PyRun_FileEx
2302PyAPI_FUNC(PyObject *)
2303PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
2304{
Georg Brandl86b2fb92008-07-16 03:43:04 +00002305 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002306}
2307
2308#undef PyRun_FileFlags
2309PyAPI_FUNC(PyObject *)
2310PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
2311 PyCompilerFlags *flags)
2312{
Georg Brandl86b2fb92008-07-16 03:43:04 +00002313 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002314}
2315
2316#undef PyRun_SimpleFile
2317PyAPI_FUNC(int)
2318PyRun_SimpleFile(FILE *f, const char *p)
2319{
2320 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
2321}
2322
2323#undef PyRun_SimpleFileEx
2324PyAPI_FUNC(int)
2325PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2326{
2327 return PyRun_SimpleFileExFlags(f, p, c, NULL);
2328}
2329
2330
2331#undef PyRun_String
2332PyAPI_FUNC(PyObject *)
2333PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2334{
2335 return PyRun_StringFlags(str, s, g, l, NULL);
2336}
2337
2338#undef PyRun_SimpleString
2339PyAPI_FUNC(int)
2340PyRun_SimpleString(const char *s)
2341{
2342 return PyRun_SimpleStringFlags(s, NULL);
2343}
2344
2345#undef Py_CompileString
2346PyAPI_FUNC(PyObject *)
2347Py_CompileString(const char *str, const char *p, int s)
2348{
2349 return Py_CompileStringFlags(str, p, s, NULL);
2350}
2351
2352#undef PyRun_InteractiveOne
2353PyAPI_FUNC(int)
2354PyRun_InteractiveOne(FILE *f, const char *p)
2355{
2356 return PyRun_InteractiveOneFlags(f, p, NULL);
2357}
2358
2359#undef PyRun_InteractiveLoop
2360PyAPI_FUNC(int)
2361PyRun_InteractiveLoop(FILE *f, const char *p)
2362{
2363 return PyRun_InteractiveLoopFlags(f, p, NULL);
2364}
2365
2366#ifdef __cplusplus
2367}
2368#endif