blob: 0b3935ab697382ee31be36fe0b73959a35b44831 [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"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000020
Thomas Wouters0e3f5912006-08-11 14:57:12 +000021#ifdef HAVE_SIGNAL_H
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000022#include <signal.h>
Thomas Wouters0e3f5912006-08-11 14:57:12 +000023#endif
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000024
Martin v. Löwis73d538b2003-03-05 15:13:47 +000025#ifdef HAVE_LANGINFO_H
26#include <locale.h>
27#include <langinfo.h>
28#endif
29
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000030#ifdef MS_WINDOWS
Guido van Rossuma44823b1995-03-14 15:01:17 +000031#undef BYTE
32#include "windows.h"
33#endif
34
Neal Norwitz4281cef2006-03-04 19:58:13 +000035#ifndef Py_REF_DEBUG
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000036#define PRINT_TOTAL_REFS()
Neal Norwitz4281cef2006-03-04 19:58:13 +000037#else /* Py_REF_DEBUG */
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000038#define PRINT_TOTAL_REFS() fprintf(stderr, \
39 "[%" PY_FORMAT_SIZE_T "d refs]\n", \
40 _Py_GetRefTotal())
41#endif
42
43#ifdef __cplusplus
44extern "C" {
Neal Norwitz4281cef2006-03-04 19:58:13 +000045#endif
46
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000047extern char *Py_GetPath(void);
Guido van Rossum1984f1e1992-08-04 12:41:02 +000048
Guido van Rossum82598051997-03-05 00:20:32 +000049extern grammar _PyParser_Grammar; /* From graminit.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000050
Guido van Rossumb73cc041993-11-01 16:28:59 +000051/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000052static void initmain(void);
53static void initsite(void);
Guido van Rossumce3a72a2007-10-19 23:16:50 +000054static int initstdio(void);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000055static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
Neal Norwitzadb69fc2005-12-17 20:54:49 +000056 PyCompilerFlags *, PyArena *);
Martin v. Löwis95292d62002-12-11 14:04:59 +000057static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
Jeremy Hyltonbc320242001-03-22 02:47:58 +000058 PyCompilerFlags *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000059static void err_input(perrdetail *);
60static void initsigs(void);
Collin Winter670e6922007-03-21 02:57:17 +000061static void call_py_exitfuncs(void);
Tim Petersdbd9ba62000-07-09 03:09:57 +000062static void call_ll_exitfuncs(void);
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000063extern void _PyUnicode_Init(void);
64extern void _PyUnicode_Fini(void);
Guido van Rossumddefaf32007-01-14 03:31:43 +000065extern int _PyLong_Init(void);
66extern void PyLong_Fini(void);
Guido van Rossumc94044c2000-03-10 23:03:54 +000067
Mark Hammond8d98d2c2003-04-19 15:41:53 +000068#ifdef WITH_THREAD
69extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
70extern void _PyGILState_Fini(void);
71#endif /* WITH_THREAD */
72
Guido van Rossum82598051997-03-05 00:20:32 +000073int Py_DebugFlag; /* Needed by parser.c */
74int Py_VerboseFlag; /* Needed by import.c */
Guido van Rossum7433b121997-02-14 19:45:36 +000075int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Guido van Rossumd8faa362007-04-27 19:54:29 +000076int Py_InspectFlag; /* Needed to determine whether to exit at SystemError */
Guido van Rossumdcc0c131997-08-29 22:32:42 +000077int Py_NoSiteFlag; /* Suppress 'import site' */
Guido van Rossum98297ee2007-11-06 21:34:58 +000078int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */
Barry Warsaw3ce09642000-05-02 19:18:59 +000079int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
Guido van Rossuma61691e1998-02-06 22:27:24 +000080int Py_FrozenFlag; /* Needed by getpath.c */
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +000081int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000082
Mark Hammonda43fd0c2003-02-19 00:33:33 +000083/* Reference to 'warnings' module, to avoid importing it
Mark Hammondedd07732003-07-15 23:03:55 +000084 on the fly when the import lock may be held. See 683658/771097
Mark Hammonda43fd0c2003-02-19 00:33:33 +000085*/
Mark Hammondedd07732003-07-15 23:03:55 +000086static PyObject *warnings_module = NULL;
87
88/* Returns a borrowed reference to the 'warnings' module, or NULL.
89 If the module is returned, it is guaranteed to have been obtained
90 without acquiring the import lock
91*/
Martin v. Löwisa2c17c52003-08-09 09:47:11 +000092PyObject *PyModule_GetWarningsModule(void)
Mark Hammondedd07732003-07-15 23:03:55 +000093{
94 PyObject *typ, *val, *tb;
95 PyObject *all_modules;
96 /* If we managed to get the module at init time, just use it */
97 if (warnings_module)
98 return warnings_module;
99 /* If it wasn't available at init time, it may be available
100 now in sys.modules (common scenario is frozen apps: import
101 at init time fails, but the frozen init code sets up sys.path
102 correctly, then does an implicit import of warnings for us
103 */
104 /* Save and restore any exceptions */
105 PyErr_Fetch(&typ, &val, &tb);
106
Mark Hammond5f4e8ca2003-07-16 01:54:38 +0000107 all_modules = PySys_GetObject("modules");
Mark Hammondedd07732003-07-15 23:03:55 +0000108 if (all_modules) {
109 warnings_module = PyDict_GetItemString(all_modules, "warnings");
110 /* We keep a ref in the global */
111 Py_XINCREF(warnings_module);
112 }
113 PyErr_Restore(typ, val, tb);
114 return warnings_module;
115}
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000116
Guido van Rossum25ce5661997-08-02 03:10:38 +0000117static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000118
Thomas Wouters7e474022000-07-16 12:04:32 +0000119/* API to access the initialized flag -- useful for esoteric use */
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000120
121int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000122Py_IsInitialized(void)
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000123{
124 return initialized;
125}
126
Guido van Rossum25ce5661997-08-02 03:10:38 +0000127/* Global initializations. Can be undone by Py_Finalize(). Don't
128 call this twice without an intervening Py_Finalize() call. When
129 initializations fail, a fatal error is issued and the function does
130 not return. On return, the first thread and interpreter state have
131 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000132
Guido van Rossum25ce5661997-08-02 03:10:38 +0000133 Locking: you must hold the interpreter lock while calling this.
134 (If the lock has not yet been initialized, that's equivalent to
135 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000136
Guido van Rossum25ce5661997-08-02 03:10:38 +0000137*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000138
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000139static int
140add_flag(int flag, const char *envs)
141{
142 int env = atoi(envs);
143 if (flag < env)
144 flag = env;
145 if (flag < 1)
146 flag = 1;
147 return flag;
148}
149
Guido van Rossuma027efa1997-05-05 20:56:21 +0000150void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000151Py_InitializeEx(int install_sigs)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000152{
Guido van Rossuma027efa1997-05-05 20:56:21 +0000153 PyInterpreterState *interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000154 PyThreadState *tstate;
Guido van Rossum826d8972007-10-30 18:34:07 +0000155 PyObject *bimod, *sysmod, *pstderr;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000156 char *p;
Guido van Rossum8d30cc02007-05-03 17:49:24 +0000157#if defined(HAVE_LANGINFO_H) && defined(CODESET)
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000158 char *codeset;
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000159#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +0000160 extern void _Py_ReadyTypes(void);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000161
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000162 if (initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000163 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000164 initialized = 1;
Tim Petersd08e3822003-04-17 15:24:21 +0000165
Martin v. Löwisd1cd4d42007-08-11 14:02:14 +0000166#ifdef HAVE_SETLOCALE
167 /* Set up the LC_CTYPE locale, so we can obtain
168 the locale's charset without having to switch
169 locales. */
170 setlocale(LC_CTYPE, "");
171#endif
172
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000173 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000174 Py_DebugFlag = add_flag(Py_DebugFlag, p);
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000175 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000176 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000177 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000178 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000179
Guido van Rossuma027efa1997-05-05 20:56:21 +0000180 interp = PyInterpreterState_New();
181 if (interp == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000182 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000183
Guido van Rossuma027efa1997-05-05 20:56:21 +0000184 tstate = PyThreadState_New(interp);
185 if (tstate == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000186 Py_FatalError("Py_Initialize: can't make first thread");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000187 (void) PyThreadState_Swap(tstate);
188
Guido van Rossum70d893a2001-08-16 08:21:42 +0000189 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000190
Neal Norwitzb2501f42002-12-31 03:42:13 +0000191 if (!_PyFrame_Init())
Neal Norwitzc91ed402002-12-30 22:29:22 +0000192 Py_FatalError("Py_Initialize: can't init frames");
193
Guido van Rossumddefaf32007-01-14 03:31:43 +0000194 if (!_PyLong_Init())
195 Py_FatalError("Py_Initialize: can't init longs");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000196
Neal Norwitz6968b052007-02-27 19:02:19 +0000197 if (!PyBytes_Init())
198 Py_FatalError("Py_Initialize: can't init bytes");
199
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000200 _PyFloat_Init();
201
Guido van Rossum25ce5661997-08-02 03:10:38 +0000202 interp->modules = PyDict_New();
203 if (interp->modules == NULL)
204 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossumd8faa362007-04-27 19:54:29 +0000205 interp->modules_reloading = PyDict_New();
206 if (interp->modules_reloading == NULL)
207 Py_FatalError("Py_Initialize: can't make modules_reloading dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000208
Guido van Rossumc94044c2000-03-10 23:03:54 +0000209 /* Init Unicode implementation; relies on the codec registry */
210 _PyUnicode_Init();
211
Barry Warsawf242aa02000-05-25 23:09:49 +0000212 bimod = _PyBuiltin_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000213 if (bimod == NULL)
214 Py_FatalError("Py_Initialize: can't initialize __builtin__");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000215 interp->builtins = PyModule_GetDict(bimod);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000216 if (interp->builtins == NULL)
217 Py_FatalError("Py_Initialize: can't initialize builtins dict");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000218 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000219
220 sysmod = _PySys_Init();
221 if (sysmod == NULL)
222 Py_FatalError("Py_Initialize: can't initialize sys");
223 interp->sysdict = PyModule_GetDict(sysmod);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000224 if (interp->sysdict == NULL)
225 Py_FatalError("Py_Initialize: can't initialize sys dict");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000226 Py_INCREF(interp->sysdict);
227 _PyImport_FixupExtension("sys", "sys");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000228 PySys_SetPath(Py_GetPath());
Guido van Rossum25ce5661997-08-02 03:10:38 +0000229 PyDict_SetItemString(interp->sysdict, "modules",
230 interp->modules);
231
Guido van Rossum826d8972007-10-30 18:34:07 +0000232 /* Set up a preliminary stderr printer until we have enough
233 infrastructure for the io module in place. */
234 pstderr = PyFile_NewStdPrinter(fileno(stderr));
235 if (pstderr == NULL)
236 Py_FatalError("Py_Initialize: can't set preliminary stderr");
237 PySys_SetObject("stderr", pstderr);
Guido van Rossum98297ee2007-11-06 21:34:58 +0000238 PySys_SetObject("__stderr__", pstderr);
Guido van Rossum826d8972007-10-30 18:34:07 +0000239
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000240 _PyImport_Init();
241
Barry Warsawf242aa02000-05-25 23:09:49 +0000242 /* initialize builtin exceptions */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000243 _PyExc_Init();
Barry Warsawf242aa02000-05-25 23:09:49 +0000244
Barry Warsaw035574d1997-08-29 22:07:17 +0000245 /* phase 2 of builtins */
Barry Warsaw963b8711997-09-18 16:42:02 +0000246 _PyImport_FixupExtension("__builtin__", "__builtin__");
Barry Warsaw035574d1997-08-29 22:07:17 +0000247
Just van Rossum52e14d62002-12-30 22:08:05 +0000248 _PyImportHooks_Init();
249
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000250 if (install_sigs)
251 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000252
253 initmain(); /* Module __main__ */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000254 if (initstdio() < 0)
255 Py_FatalError(
256 "Py_Initialize: can't initialize sys standard streams");
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000257 if (!Py_NoSiteFlag)
258 initsite(); /* Module site */
Just van Rossum5bfba3a2003-02-25 20:25:12 +0000259
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000260 /* auto-thread-state API, if available */
261#ifdef WITH_THREAD
262 _PyGILState_Init(interp, tstate);
263#endif /* WITH_THREAD */
264
Mark Hammondedd07732003-07-15 23:03:55 +0000265 warnings_module = PyImport_ImportModule("warnings");
Guido van Rossum98297ee2007-11-06 21:34:58 +0000266 if (!warnings_module) {
Mark Hammondedd07732003-07-15 23:03:55 +0000267 PyErr_Clear();
Guido van Rossum98297ee2007-11-06 21:34:58 +0000268 }
269 else {
270 PyObject *o;
271 char *action[8];
272
273 if (Py_BytesWarningFlag > 1)
274 *action = "error";
275 else if (Py_BytesWarningFlag)
276 *action = "default";
277 else
278 *action = "ignore";
279
280 o = PyObject_CallMethod(warnings_module,
281 "simplefilter", "sO",
282 *action, PyExc_BytesWarning);
283 if (o == NULL)
284 Py_FatalError("Py_Initialize: can't initialize"
285 "warning filter for BytesWarning.");
286 Py_DECREF(o);
287 }
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000288
Guido van Rossum8d30cc02007-05-03 17:49:24 +0000289#if defined(HAVE_LANGINFO_H) && defined(CODESET)
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000290 /* On Unix, set the file system encoding according to the
291 user's preference, if the CODESET names a well-known
292 Python codec, and Py_FileSystemDefaultEncoding isn't
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000293 initialized by other means. Also set the encoding of
294 stdin and stdout if these are terminals. */
295
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000296 codeset = nl_langinfo(CODESET);
297 if (codeset && *codeset) {
298 PyObject *enc = PyCodec_Encoder(codeset);
299 if (enc) {
300 codeset = strdup(codeset);
301 Py_DECREF(enc);
302 } else {
303 codeset = NULL;
304 PyErr_Clear();
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000305 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000306 } else
307 codeset = NULL;
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000308
309 if (codeset) {
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000310 if (!Py_FileSystemDefaultEncoding)
311 Py_FileSystemDefaultEncoding = codeset;
312 else
313 free(codeset);
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000314 }
315#endif
Guido van Rossum25ce5661997-08-02 03:10:38 +0000316}
317
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000318void
319Py_Initialize(void)
320{
321 Py_InitializeEx(1);
322}
323
324
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000325#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000326extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000327#endif
328
Guido van Rossume8432ac2007-07-09 15:04:50 +0000329/* Flush stdout and stderr */
330
Neal Norwitz2bad9702007-08-27 06:19:22 +0000331static void
Guido van Rossum1bd21222007-07-10 20:14:13 +0000332flush_std_files(void)
Guido van Rossume8432ac2007-07-09 15:04:50 +0000333{
334 PyObject *fout = PySys_GetObject("stdout");
335 PyObject *ferr = PySys_GetObject("stderr");
336 PyObject *tmp;
337
338 if (fout != NULL) {
339 tmp = PyObject_CallMethod(fout, "flush", "");
340 if (tmp == NULL)
341 PyErr_Clear();
342 else
343 Py_DECREF(tmp);
344 }
345
346 if (ferr != NULL) {
347 tmp = PyObject_CallMethod(ferr, "flush", "");
348 if (tmp == NULL)
349 PyErr_Clear();
350 else
351 Py_DECREF(tmp);
352 }
353}
354
Guido van Rossum25ce5661997-08-02 03:10:38 +0000355/* Undo the effect of Py_Initialize().
356
357 Beware: if multiple interpreter and/or thread states exist, these
358 are not wiped out; only the current thread and interpreter state
359 are deleted. But since everything else is deleted, those other
360 interpreter and thread states should no longer be used.
361
362 (XXX We should do better, e.g. wipe out all interpreters and
363 threads.)
364
365 Locking: as above.
366
367*/
368
369void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000370Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000371{
372 PyInterpreterState *interp;
373 PyThreadState *tstate;
374
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000375 if (!initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000376 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000377
Tim Peters384fd102001-01-21 03:40:37 +0000378 /* The interpreter is still entirely intact at this point, and the
379 * exit funcs may be relying on that. In particular, if some thread
380 * or exit func is still waiting to do an import, the import machinery
381 * expects Py_IsInitialized() to return true. So don't say the
382 * interpreter is uninitialized until after the exit funcs have run.
383 * Note that Threading.py uses an exit func to do a join on all the
384 * threads created thru it, so this also protects pending imports in
385 * the threads created via Threading.
386 */
Collin Winter670e6922007-03-21 02:57:17 +0000387 call_py_exitfuncs();
Tim Peters384fd102001-01-21 03:40:37 +0000388 initialized = 0;
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000389
Guido van Rossume8432ac2007-07-09 15:04:50 +0000390 /* Flush stdout+stderr */
391 flush_std_files();
392
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000393 /* Get current thread state and interpreter pointer */
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000394 tstate = PyThreadState_GET();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000395 interp = tstate->interp;
396
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000397 /* Disable signal handling */
398 PyOS_FiniInterrupts();
399
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000400 /* drop module references we saved */
Mark Hammondedd07732003-07-15 23:03:55 +0000401 Py_XDECREF(warnings_module);
402 warnings_module = NULL;
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000403
Guido van Rossume13ddc92003-04-17 17:29:22 +0000404 /* Collect garbage. This may call finalizers; it's nice to call these
Tim Peters1d7323e2003-12-01 21:35:27 +0000405 * before all modules are destroyed.
406 * XXX If a __del__ or weakref callback is triggered here, and tries to
407 * XXX import a module, bad things can happen, because Python no
408 * XXX longer believes it's initialized.
409 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
410 * XXX is easy to provoke that way. I've also seen, e.g.,
411 * XXX Exception exceptions.ImportError: 'No module named sha'
412 * XXX in <function callback at 0x008F5718> ignored
413 * XXX but I'm unclear on exactly how that one happens. In any case,
414 * XXX I haven't seen a real-life report of either of these.
Neal Norwitz9589ee22006-03-04 19:01:22 +0000415 */
Guido van Rossume13ddc92003-04-17 17:29:22 +0000416 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000417#ifdef COUNT_ALLOCS
418 /* With COUNT_ALLOCS, it helps to run GC multiple times:
419 each collection might release some types from the type
420 list, so they become garbage. */
421 while (PyGC_Collect() > 0)
422 /* nothing */;
423#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000424
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000425 /* Destroy all modules */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000426 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000427
Guido van Rossume8432ac2007-07-09 15:04:50 +0000428 /* Flush stdout+stderr (again, in case more was printed) */
429 flush_std_files();
430
Guido van Rossume13ddc92003-04-17 17:29:22 +0000431 /* Collect final garbage. This disposes of cycles created by
Tim Peters1d7323e2003-12-01 21:35:27 +0000432 * new-style class definitions, for example.
433 * XXX This is disabled because it caused too many problems. If
434 * XXX a __del__ or weakref callback triggers here, Python code has
435 * XXX a hard time running, because even the sys module has been
436 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
437 * XXX One symptom is a sequence of information-free messages
438 * XXX coming from threads (if a __del__ or callback is invoked,
439 * XXX other threads can execute too, and any exception they encounter
440 * XXX triggers a comedy of errors as subsystem after subsystem
441 * XXX fails to find what it *expects* to find in sys to help report
442 * XXX the exception and consequent unexpected failures). I've also
443 * XXX seen segfaults then, after adding print statements to the
444 * XXX Python code getting called.
445 */
446#if 0
Guido van Rossume13ddc92003-04-17 17:29:22 +0000447 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000448#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000449
Guido van Rossum1707aad1997-12-08 23:43:45 +0000450 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
451 _PyImport_Fini();
452
453 /* Debugging stuff */
454#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000455 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000456#endif
457
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000458 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000459
Tim Peters9cf25ce2003-04-17 15:21:01 +0000460#ifdef Py_TRACE_REFS
461 /* Display all objects still alive -- this can invoke arbitrary
462 * __repr__ overrides, so requires a mostly-intact interpreter.
463 * Alas, a lot of stuff may still be alive now that will be cleaned
464 * up later.
465 */
Tim Peters269b2a62003-04-17 19:52:29 +0000466 if (Py_GETENV("PYTHONDUMPREFS"))
Tim Peters9cf25ce2003-04-17 15:21:01 +0000467 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000468#endif /* Py_TRACE_REFS */
469
Mark Hammond6cb90292003-04-22 11:18:00 +0000470 /* Cleanup auto-thread-state */
471#ifdef WITH_THREAD
472 _PyGILState_Fini();
473#endif /* WITH_THREAD */
474
Guido van Rossumd922fa42003-04-15 14:10:09 +0000475 /* Clear interpreter state */
Barry Warsawf242aa02000-05-25 23:09:49 +0000476 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000477
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000478 /* Now we decref the exception classes. After this point nothing
479 can raise an exception. That's okay, because each Fini() method
480 below has been checked to make sure no exceptions are ever
481 raised.
482 */
483
484 _PyExc_Fini();
485
Guido van Rossumd922fa42003-04-15 14:10:09 +0000486 /* Delete current thread */
Barry Warsawf242aa02000-05-25 23:09:49 +0000487 PyThreadState_Swap(NULL);
488 PyInterpreterState_Delete(interp);
489
Guido van Rossumd922fa42003-04-15 14:10:09 +0000490 /* Sundry finalizers */
Guido van Rossumcc283f51997-08-05 02:22:03 +0000491 PyMethod_Fini();
492 PyFrame_Fini();
493 PyCFunction_Fini();
494 PyTuple_Fini();
Raymond Hettingerfb09f0e2004-10-07 03:58:07 +0000495 PyList_Fini();
Raymond Hettingerd7946662005-08-01 21:39:29 +0000496 PySet_Fini();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000497 PyString_Fini();
Neal Norwitz6968b052007-02-27 19:02:19 +0000498 PyBytes_Fini();
Guido van Rossumddefaf32007-01-14 03:31:43 +0000499 PyLong_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000500 PyFloat_Fini();
501
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000502 /* Cleanup Unicode implementation */
503 _PyUnicode_Fini();
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000504
Guido van Rossumcc283f51997-08-05 02:22:03 +0000505 /* XXX Still allocated:
506 - various static ad-hoc pointers to interned strings
507 - int and float free list blocks
508 - whatever various modules and libraries allocate
509 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000510
511 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000512
Tim Peters269b2a62003-04-17 19:52:29 +0000513#ifdef Py_TRACE_REFS
514 /* Display addresses (& refcnts) of all objects still alive.
515 * An address can be used to find the repr of the object, printed
516 * above by _Py_PrintReferences.
517 */
518 if (Py_GETENV("PYTHONDUMPREFS"))
519 _Py_PrintReferenceAddresses(stderr);
520#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000521#ifdef PYMALLOC_DEBUG
522 if (Py_GETENV("PYTHONMALLOCSTATS"))
523 _PyObject_DebugMallocStats();
524#endif
525
Guido van Rossumcc283f51997-08-05 02:22:03 +0000526 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000527}
528
529/* Create and initialize a new interpreter and thread, and return the
530 new thread. This requires that Py_Initialize() has been called
531 first.
532
533 Unsuccessful initialization yields a NULL pointer. Note that *no*
534 exception information is available even in this case -- the
535 exception information is held in the thread, and there is no
536 thread.
537
538 Locking: as above.
539
540*/
541
542PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000543Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000544{
545 PyInterpreterState *interp;
546 PyThreadState *tstate, *save_tstate;
547 PyObject *bimod, *sysmod;
548
549 if (!initialized)
550 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
551
552 interp = PyInterpreterState_New();
553 if (interp == NULL)
554 return NULL;
555
556 tstate = PyThreadState_New(interp);
557 if (tstate == NULL) {
558 PyInterpreterState_Delete(interp);
559 return NULL;
560 }
561
562 save_tstate = PyThreadState_Swap(tstate);
563
564 /* XXX The following is lax in error checking */
565
566 interp->modules = PyDict_New();
Guido van Rossumd8faa362007-04-27 19:54:29 +0000567 interp->modules_reloading = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000568
569 bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
570 if (bimod != NULL) {
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000571 interp->builtins = PyModule_GetDict(bimod);
Thomas Wouters89f507f2006-12-13 04:49:30 +0000572 if (interp->builtins == NULL)
573 goto handle_error;
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000574 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000575 }
576 sysmod = _PyImport_FindExtension("sys", "sys");
577 if (bimod != NULL && sysmod != NULL) {
578 interp->sysdict = PyModule_GetDict(sysmod);
Thomas Wouters89f507f2006-12-13 04:49:30 +0000579 if (interp->sysdict == NULL)
580 goto handle_error;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000581 Py_INCREF(interp->sysdict);
582 PySys_SetPath(Py_GetPath());
583 PyDict_SetItemString(interp->sysdict, "modules",
584 interp->modules);
Martin v. Löwisd7ceb222003-01-22 09:00:38 +0000585 _PyImportHooks_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000586 initmain();
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000587 if (!Py_NoSiteFlag)
588 initsite();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000589 }
590
591 if (!PyErr_Occurred())
592 return tstate;
593
Thomas Wouters89f507f2006-12-13 04:49:30 +0000594handle_error:
Guido van Rossum25ce5661997-08-02 03:10:38 +0000595 /* Oops, it didn't work. Undo it all. */
596
597 PyErr_Print();
598 PyThreadState_Clear(tstate);
599 PyThreadState_Swap(save_tstate);
600 PyThreadState_Delete(tstate);
601 PyInterpreterState_Delete(interp);
602
603 return NULL;
604}
605
606/* Delete an interpreter and its last thread. This requires that the
607 given thread state is current, that the thread has no remaining
608 frames, and that it is its interpreter's only remaining thread.
609 It is a fatal error to violate these constraints.
610
611 (Py_Finalize() doesn't have these constraints -- it zaps
612 everything, regardless.)
613
614 Locking: as above.
615
616*/
617
618void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000619Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000620{
621 PyInterpreterState *interp = tstate->interp;
622
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000623 if (tstate != PyThreadState_GET())
Guido van Rossum25ce5661997-08-02 03:10:38 +0000624 Py_FatalError("Py_EndInterpreter: thread is not current");
625 if (tstate->frame != NULL)
626 Py_FatalError("Py_EndInterpreter: thread still has a frame");
627 if (tstate != interp->tstate_head || tstate->next != NULL)
628 Py_FatalError("Py_EndInterpreter: not the last thread");
629
630 PyImport_Cleanup();
631 PyInterpreterState_Clear(interp);
632 PyThreadState_Swap(NULL);
633 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000634}
635
636static char *progname = "python";
637
638void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000639Py_SetProgramName(char *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000640{
641 if (pn && *pn)
642 progname = pn;
643}
644
645char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000646Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000647{
648 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000649}
650
Guido van Rossuma61691e1998-02-06 22:27:24 +0000651static char *default_home = NULL;
652
653void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000654Py_SetPythonHome(char *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000655{
656 default_home = home;
657}
658
659char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000660Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000661{
662 char *home = default_home;
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000663 if (home == NULL && !Py_IgnoreEnvironmentFlag)
664 home = Py_GETENV("PYTHONHOME");
Guido van Rossuma61691e1998-02-06 22:27:24 +0000665 return home;
666}
667
Guido van Rossum6135a871995-01-09 17:53:26 +0000668/* Create __main__ module */
669
670static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000671initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000672{
Guido van Rossum82598051997-03-05 00:20:32 +0000673 PyObject *m, *d;
674 m = PyImport_AddModule("__main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000675 if (m == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000676 Py_FatalError("can't create __main__ module");
677 d = PyModule_GetDict(m);
678 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
Guido van Rossum858cb731997-11-19 16:15:37 +0000679 PyObject *bimod = PyImport_ImportModule("__builtin__");
680 if (bimod == NULL ||
681 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
Guido van Rossum82598051997-03-05 00:20:32 +0000682 Py_FatalError("can't add __builtins__ to __main__");
Barry Warsaw3d05b1a1999-01-29 21:30:22 +0000683 Py_DECREF(bimod);
Guido van Rossum6135a871995-01-09 17:53:26 +0000684 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000685}
686
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000687/* Import the site module (not into __main__ though) */
688
689static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000690initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000691{
692 PyObject *m, *f;
693 m = PyImport_ImportModule("site");
694 if (m == NULL) {
695 f = PySys_GetObject("stderr");
696 if (Py_VerboseFlag) {
697 PyFile_WriteString(
698 "'import site' failed; traceback:\n", f);
699 PyErr_Print();
700 }
701 else {
702 PyFile_WriteString(
703 "'import site' failed; use -v for traceback\n", f);
704 PyErr_Clear();
705 }
706 }
707 else {
708 Py_DECREF(m);
709 }
710}
711
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000712/* Initialize sys.stdin, stdout, stderr and __builtin__.open */
713static int
714initstdio(void)
715{
716 PyObject *iomod = NULL, *wrapper;
717 PyObject *bimod = NULL;
718 PyObject *m;
719 PyObject *std = NULL;
720 int status = 0;
721
722 /* Hack to avoid a nasty recursion issue when Python is invoked
723 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
724 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
725 goto error;
726 }
727 Py_DECREF(m);
728
729 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
730 goto error;
731 }
732 Py_DECREF(m);
733
734 if (!(bimod = PyImport_ImportModule("__builtin__"))) {
735 goto error;
736 }
737
738 if (!(iomod = PyImport_ImportModule("io"))) {
739 goto error;
740 }
741 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
742 goto error;
743 }
744
745 /* Set __builtin__.open */
746 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
747 goto error;
748 }
749
750 /* Set sys.stdin */
Guido van Rossum40d20bc2007-10-22 00:09:51 +0000751 if (!(std = PyFile_FromFd(fileno(stdin), "<stdin>", "r", -1,
Guido van Rossum2dced8b2007-10-30 17:27:30 +0000752 NULL, "\n", 0))) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000753 goto error;
754 }
755 PySys_SetObject("__stdin__", std);
756 PySys_SetObject("stdin", std);
757 Py_DECREF(std);
758
759 /* Set sys.stdout */
Guido van Rossum40d20bc2007-10-22 00:09:51 +0000760 if (!(std = PyFile_FromFd(fileno(stdout), "<stdout>", "w", -1,
Guido van Rossum2dced8b2007-10-30 17:27:30 +0000761 NULL, "\n", 0))) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000762 goto error;
763 }
764 PySys_SetObject("__stdout__", std);
765 PySys_SetObject("stdout", std);
766 Py_DECREF(std);
767
Guido van Rossum98297ee2007-11-06 21:34:58 +0000768#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Guido van Rossum2dced8b2007-10-30 17:27:30 +0000769 /* Set sys.stderr, replaces the preliminary stderr */
Guido van Rossum40d20bc2007-10-22 00:09:51 +0000770 if (!(std = PyFile_FromFd(fileno(stderr), "<stderr>", "w", -1,
Guido van Rossum2dced8b2007-10-30 17:27:30 +0000771 NULL, "\n", 0))) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000772 goto error;
773 }
774 PySys_SetObject("__stderr__", std);
775 PySys_SetObject("stderr", std);
776 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +0000777#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000778
779 if (0) {
780 error:
781 status = -1;
782 }
783
784 Py_XDECREF(bimod);
785 Py_XDECREF(iomod);
786 return status;
787}
788
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000789/* Parse input from a file and execute it */
790
791int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +0000792PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000793 PyCompilerFlags *flags)
794{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000795 if (filename == NULL)
796 filename = "???";
Guido van Rossum0df002c2000-08-27 19:21:52 +0000797 if (Py_FdIsInteractive(fp, filename)) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000798 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
Guido van Rossum0df002c2000-08-27 19:21:52 +0000799 if (closeit)
800 fclose(fp);
801 return err;
802 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000803 else
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000804 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000805}
806
807int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000808PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000809{
Guido van Rossum82598051997-03-05 00:20:32 +0000810 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000811 int ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000812 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000813
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000814 if (flags == NULL) {
815 flags = &local_flags;
Tim Peters5ba58662001-07-16 02:29:45 +0000816 local_flags.cf_flags = 0;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000817 }
Guido van Rossum82598051997-03-05 00:20:32 +0000818 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000819 if (v == NULL) {
Neal Norwitza369c5a2007-08-25 07:41:59 +0000820 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
Guido van Rossum82598051997-03-05 00:20:32 +0000821 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000822 }
Guido van Rossum82598051997-03-05 00:20:32 +0000823 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000824 if (v == NULL) {
Neal Norwitza369c5a2007-08-25 07:41:59 +0000825 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
Guido van Rossum82598051997-03-05 00:20:32 +0000826 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000827 }
828 for (;;) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000829 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000830 PRINT_TOTAL_REFS();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000831 if (ret == E_EOF)
832 return 0;
833 /*
834 if (ret == E_NOMEM)
835 return -1;
836 */
837 }
838}
839
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000840/* compute parser flags based on compiler flags */
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000841#define PARSER_FLAGS(flags) \
Thomas Wouters34aa7ba2006-02-28 19:02:24 +0000842 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
Guido van Rossum45aecf42006-03-15 04:58:47 +0000843 PyPARSE_DONT_IMPLY_DEDENT : 0)) : 0)
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000844
Thomas Wouters89f507f2006-12-13 04:49:30 +0000845#if 0
846/* Keep an example of flags with future keyword support. */
847#define PARSER_FLAGS(flags) \
848 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
849 PyPARSE_DONT_IMPLY_DEDENT : 0) \
850 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
851 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
852#endif
853
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000854int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000855PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000856{
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000857 PyObject *m, *d, *v, *w, *oenc = NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000858 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +0000859 PyArena *arena;
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000860 char *ps1 = "", *ps2 = "", *enc = NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000861 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +0000862
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000863 if (fp == stdin) {
864 /* Fetch encoding from sys.stdin */
865 v = PySys_GetObject("stdin");
866 if (!v)
867 return -1;
868 oenc = PyObject_GetAttrString(v, "encoding");
869 if (!oenc)
870 return -1;
871 enc = PyUnicode_AsString(oenc);
872 }
Guido van Rossum82598051997-03-05 00:20:32 +0000873 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000874 if (v != NULL) {
Guido van Rossumc5724de2007-10-10 21:38:59 +0000875 v = PyObject_Unicode(v);
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000876 if (v == NULL)
877 PyErr_Clear();
Guido van Rossumc5724de2007-10-10 21:38:59 +0000878 else if (PyUnicode_Check(v))
879 ps1 = PyUnicode_AsString(v);
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000880 }
Guido van Rossum82598051997-03-05 00:20:32 +0000881 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000882 if (w != NULL) {
Guido van Rossumc5724de2007-10-10 21:38:59 +0000883 w = PyObject_Unicode(w);
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000884 if (w == NULL)
885 PyErr_Clear();
Guido van Rossumc5724de2007-10-10 21:38:59 +0000886 else if (PyUnicode_Check(w))
887 ps2 = PyUnicode_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000888 }
Neal Norwitz9589ee22006-03-04 19:01:22 +0000889 arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000890 if (arena == NULL) {
891 Py_XDECREF(v);
892 Py_XDECREF(w);
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000893 Py_XDECREF(oenc);
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000894 return -1;
895 }
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000896 mod = PyParser_ASTFromFile(fp, filename, enc,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000897 Py_single_input, ps1, ps2,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000898 flags, &errcode, arena);
Guido van Rossum82598051997-03-05 00:20:32 +0000899 Py_XDECREF(v);
900 Py_XDECREF(w);
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000901 Py_XDECREF(oenc);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000902 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000903 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000904 if (errcode == E_EOF) {
905 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000906 return E_EOF;
907 }
Guido van Rossum82598051997-03-05 00:20:32 +0000908 PyErr_Print();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000909 return -1;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000910 }
Guido van Rossum82598051997-03-05 00:20:32 +0000911 m = PyImport_AddModule("__main__");
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000912 if (m == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000913 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000914 return -1;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000915 }
Guido van Rossum82598051997-03-05 00:20:32 +0000916 d = PyModule_GetDict(m);
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000917 v = run_mod(mod, filename, d, d, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +0000918 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000919 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000920 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000921 return -1;
922 }
Guido van Rossum82598051997-03-05 00:20:32 +0000923 Py_DECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000924 return 0;
925}
926
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000927/* Check whether a file maybe a pyc file: Look at the extension,
928 the file type, and, if we may close it, at the first few bytes. */
929
930static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000931maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000932{
933 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
934 return 1;
935
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000936 /* Only look into the file if we are allowed to close it, since
937 it then should also be seekable. */
938 if (closeit) {
939 /* Read only two bytes of the magic. If the file was opened in
940 text mode, the bytes 3 and 4 of the magic (\r\n) might not
941 be read as they are on disk. */
942 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
943 unsigned char buf[2];
Tim Peters3e876562001-02-11 04:35:39 +0000944 /* Mess: In case of -x, the stream is NOT at its start now,
945 and ungetc() was used to push back the first newline,
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000946 which makes the current stream position formally undefined,
947 and a x-platform nightmare.
948 Unfortunately, we have no direct way to know whether -x
949 was specified. So we use a terrible hack: if the current
950 stream position is not 0, we assume -x was specified, and
951 give up. Bug 132850 on SourceForge spells out the
952 hopelessness of trying anything else (fseek and ftell
953 don't work predictably x-platform for text-mode files).
Tim Peters3e876562001-02-11 04:35:39 +0000954 */
Tim Peters3e876562001-02-11 04:35:39 +0000955 int ispyc = 0;
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000956 if (ftell(fp) == 0) {
957 if (fread(buf, 1, 2, fp) == 2 &&
Tim Petersd08e3822003-04-17 15:24:21 +0000958 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000959 ispyc = 1;
960 rewind(fp);
961 }
Tim Peters3e876562001-02-11 04:35:39 +0000962 return ispyc;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000963 }
964 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +0000965}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000966
Guido van Rossum0df002c2000-08-27 19:21:52 +0000967int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000968PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000969 PyCompilerFlags *flags)
970{
Guido van Rossum82598051997-03-05 00:20:32 +0000971 PyObject *m, *d, *v;
Martin v. Löwis95292d62002-12-11 14:04:59 +0000972 const char *ext;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000973 int set_file_name = 0, ret;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000974
Guido van Rossum82598051997-03-05 00:20:32 +0000975 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000976 if (m == NULL)
977 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000978 d = PyModule_GetDict(m);
Fred Drake8ed02042002-10-17 21:24:58 +0000979 if (PyDict_GetItemString(d, "__file__") == NULL) {
Guido van Rossum00bc0e02007-10-15 02:52:41 +0000980 PyObject *f;
981 f = PyUnicode_DecodeFSDefault(filename);
Fred Drake8ed02042002-10-17 21:24:58 +0000982 if (f == NULL)
983 return -1;
984 if (PyDict_SetItemString(d, "__file__", f) < 0) {
985 Py_DECREF(f);
986 return -1;
987 }
Guido van Rossumd8faa362007-04-27 19:54:29 +0000988 set_file_name = 1;
Fred Drake8ed02042002-10-17 21:24:58 +0000989 Py_DECREF(f);
990 }
Guido van Rossumfdef2711994-09-14 13:31:04 +0000991 ext = filename + strlen(filename) - 4;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000992 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000993 /* Try to run a pyc file. First, re-open in binary */
Guido van Rossum0df002c2000-08-27 19:21:52 +0000994 if (closeit)
995 fclose(fp);
Fred Drake8ed02042002-10-17 21:24:58 +0000996 if ((fp = fopen(filename, "rb")) == NULL) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000997 fprintf(stderr, "python: Can't reopen .pyc file\n");
Guido van Rossumd8faa362007-04-27 19:54:29 +0000998 ret = -1;
999 goto done;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001000 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +00001001 /* Turn on optimization if a .pyo file is given */
1002 if (strcmp(ext, ".pyo") == 0)
1003 Py_OptimizeFlag = 1;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001004 v = run_pyc_file(fp, filename, d, d, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001005 } else {
Tim Petersd08e3822003-04-17 15:24:21 +00001006 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001007 closeit, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001008 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001009 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +00001010 PyErr_Print();
Guido van Rossumd8faa362007-04-27 19:54:29 +00001011 ret = -1;
1012 goto done;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001013 }
Guido van Rossum82598051997-03-05 00:20:32 +00001014 Py_DECREF(v);
Guido van Rossumd8faa362007-04-27 19:54:29 +00001015 ret = 0;
1016 done:
1017 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1018 PyErr_Clear();
1019 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001020}
1021
1022int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001023PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001024{
Guido van Rossum82598051997-03-05 00:20:32 +00001025 PyObject *m, *d, *v;
1026 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001027 if (m == NULL)
1028 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +00001029 d = PyModule_GetDict(m);
Guido van Rossum393661d2001-08-31 17:40:15 +00001030 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001031 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +00001032 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001033 return -1;
1034 }
Guido van Rossum82598051997-03-05 00:20:32 +00001035 Py_DECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001036 return 0;
1037}
1038
Barry Warsaw035574d1997-08-29 22:07:17 +00001039static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001040parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
1041 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001042{
1043 long hold;
1044 PyObject *v;
1045
1046 /* old style errors */
1047 if (PyTuple_Check(err))
Neal Norwitz78293352002-04-01 01:41:20 +00001048 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
Neal Norwitz9589ee22006-03-04 19:01:22 +00001049 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001050
1051 /* new style errors. `err' is an instance */
1052
1053 if (! (v = PyObject_GetAttrString(err, "msg")))
1054 goto finally;
1055 *message = v;
1056
1057 if (!(v = PyObject_GetAttrString(err, "filename")))
1058 goto finally;
1059 if (v == Py_None)
1060 *filename = NULL;
1061 else if (! (*filename = PyString_AsString(v)))
1062 goto finally;
1063
1064 Py_DECREF(v);
1065 if (!(v = PyObject_GetAttrString(err, "lineno")))
1066 goto finally;
1067 hold = PyInt_AsLong(v);
1068 Py_DECREF(v);
1069 v = NULL;
1070 if (hold < 0 && PyErr_Occurred())
1071 goto finally;
1072 *lineno = (int)hold;
1073
1074 if (!(v = PyObject_GetAttrString(err, "offset")))
1075 goto finally;
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001076 if (v == Py_None) {
1077 *offset = -1;
1078 Py_DECREF(v);
1079 v = NULL;
1080 } else {
1081 hold = PyInt_AsLong(v);
1082 Py_DECREF(v);
1083 v = NULL;
1084 if (hold < 0 && PyErr_Occurred())
1085 goto finally;
1086 *offset = (int)hold;
1087 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001088
1089 if (!(v = PyObject_GetAttrString(err, "text")))
1090 goto finally;
1091 if (v == Py_None)
1092 *text = NULL;
Guido van Rossumc5724de2007-10-10 21:38:59 +00001093 else if (!PyUnicode_Check(v) ||
1094 !(*text = PyUnicode_AsString(v)))
Barry Warsaw035574d1997-08-29 22:07:17 +00001095 goto finally;
1096 Py_DECREF(v);
1097 return 1;
1098
1099finally:
1100 Py_XDECREF(v);
1101 return 0;
1102}
1103
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001104void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001105PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001106{
Guido van Rossuma61691e1998-02-06 22:27:24 +00001107 PyErr_PrintEx(1);
1108}
1109
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001110static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001111print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001112{
1113 char *nl;
1114 if (offset >= 0) {
1115 if (offset > 0 && offset == (int)strlen(text))
1116 offset--;
1117 for (;;) {
1118 nl = strchr(text, '\n');
1119 if (nl == NULL || nl-text >= offset)
1120 break;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001121 offset -= (int)(nl+1-text);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001122 text = nl+1;
1123 }
1124 while (*text == ' ' || *text == '\t') {
1125 text++;
1126 offset--;
1127 }
1128 }
1129 PyFile_WriteString(" ", f);
1130 PyFile_WriteString(text, f);
1131 if (*text == '\0' || text[strlen(text)-1] != '\n')
1132 PyFile_WriteString("\n", f);
1133 if (offset == -1)
1134 return;
1135 PyFile_WriteString(" ", f);
1136 offset--;
1137 while (offset > 0) {
1138 PyFile_WriteString(" ", f);
1139 offset--;
1140 }
1141 PyFile_WriteString("^\n", f);
1142}
1143
Guido van Rossum66e8e862001-03-23 17:54:43 +00001144static void
1145handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001146{
Neal Norwitz9589ee22006-03-04 19:01:22 +00001147 PyObject *exception, *value, *tb;
1148 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001149
Guido van Rossumd8faa362007-04-27 19:54:29 +00001150 if (Py_InspectFlag)
1151 /* Don't exit if -i flag was given. This flag is set to 0
1152 * when entering interactive mode for inspecting. */
1153 return;
1154
Guido van Rossum66e8e862001-03-23 17:54:43 +00001155 PyErr_Fetch(&exception, &value, &tb);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001156 fflush(stdout);
1157 if (value == NULL || value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001158 goto done;
Brett Cannonbf364092006-03-01 04:25:17 +00001159 if (PyExceptionInstance_Check(value)) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001160 /* The error code should be in the `code' attribute. */
1161 PyObject *code = PyObject_GetAttrString(value, "code");
1162 if (code) {
1163 Py_DECREF(value);
1164 value = code;
1165 if (value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001166 goto done;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001167 }
1168 /* If we failed to dig out the 'code' attribute,
1169 just let the else clause below print the error. */
1170 }
1171 if (PyInt_Check(value))
Tim Peterscf615b52003-04-19 18:47:02 +00001172 exitcode = (int)PyInt_AsLong(value);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001173 else {
1174 PyObject_Print(value, stderr, Py_PRINT_RAW);
1175 PySys_WriteStderr("\n");
Tim Peterscf615b52003-04-19 18:47:02 +00001176 exitcode = 1;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001177 }
Tim Peterscf615b52003-04-19 18:47:02 +00001178 done:
Neal Norwitz9589ee22006-03-04 19:01:22 +00001179 /* Restore and clear the exception info, in order to properly decref
1180 * the exception, value, and traceback. If we just exit instead,
1181 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1182 * some finalizers from running.
1183 */
Tim Peterscf615b52003-04-19 18:47:02 +00001184 PyErr_Restore(exception, value, tb);
1185 PyErr_Clear();
1186 Py_Exit(exitcode);
1187 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001188}
1189
1190void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001191PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001192{
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001193 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001194
1195 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1196 handle_system_exit();
1197 }
Guido van Rossum82598051997-03-05 00:20:32 +00001198 PyErr_Fetch(&exception, &v, &tb);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001199 if (exception == NULL)
1200 return;
Barry Warsaw035574d1997-08-29 22:07:17 +00001201 PyErr_NormalizeException(&exception, &v, &tb);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001202 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +00001203 return;
Guido van Rossum9d785502006-03-07 18:31:44 +00001204 /* Now we know v != NULL too */
Guido van Rossuma61691e1998-02-06 22:27:24 +00001205 if (set_sys_last_vars) {
1206 PySys_SetObject("last_type", exception);
1207 PySys_SetObject("last_value", v);
Guido van Rossumc5724de2007-10-10 21:38:59 +00001208 PySys_SetObject("last_traceback", tb ? tb : Py_None);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001209 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001210 hook = PySys_GetObject("excepthook");
1211 if (hook) {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00001212 PyObject *args = PyTuple_Pack(3,
Guido van Rossum9d785502006-03-07 18:31:44 +00001213 exception, v, tb ? tb : Py_None);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001214 PyObject *result = PyEval_CallObject(hook, args);
1215 if (result == NULL) {
1216 PyObject *exception2, *v2, *tb2;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001217 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1218 handle_system_exit();
1219 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001220 PyErr_Fetch(&exception2, &v2, &tb2);
1221 PyErr_NormalizeException(&exception2, &v2, &tb2);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001222 /* It should not be possible for exception2 or v2
1223 to be NULL. However PyErr_Display() can't
1224 tolerate NULLs, so just be safe. */
1225 if (exception2 == NULL) {
1226 exception2 = Py_None;
1227 Py_INCREF(exception2);
1228 }
1229 if (v2 == NULL) {
1230 v2 = Py_None;
1231 Py_INCREF(v2);
1232 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001233 fflush(stdout);
1234 PySys_WriteStderr("Error in sys.excepthook:\n");
1235 PyErr_Display(exception2, v2, tb2);
1236 PySys_WriteStderr("\nOriginal exception was:\n");
1237 PyErr_Display(exception, v, tb);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001238 Py_DECREF(exception2);
1239 Py_DECREF(v2);
Jeremy Hylton07028582001-12-07 15:35:35 +00001240 Py_XDECREF(tb2);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001241 }
1242 Py_XDECREF(result);
1243 Py_XDECREF(args);
1244 } else {
1245 PySys_WriteStderr("sys.excepthook is missing\n");
1246 PyErr_Display(exception, v, tb);
1247 }
1248 Py_XDECREF(exception);
1249 Py_XDECREF(v);
1250 Py_XDECREF(tb);
1251}
1252
Thomas Wouters477c8d52006-05-27 19:21:47 +00001253void
1254PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001255{
1256 int err = 0;
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001257 PyObject *f = PySys_GetObject("stderr");
Armin Rigo5d2c6832004-03-22 20:16:58 +00001258 Py_INCREF(value);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001259 if (f == NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00001260 _PyObject_Dump(value);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001261 fprintf(stderr, "lost sys.stderr\n");
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001262 }
Guido van Rossum3165fe61992-09-25 21:59:05 +00001263 else {
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001264 fflush(stdout);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001265 if (tb && tb != Py_None)
1266 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +00001267 if (err == 0 &&
Armin Rigo5d2c6832004-03-22 20:16:58 +00001268 PyObject_HasAttrString(value, "print_file_and_line"))
Barry Warsaw36b8f941997-08-26 18:09:48 +00001269 {
Guido van Rossum82598051997-03-05 00:20:32 +00001270 PyObject *message;
Martin v. Löwis95292d62002-12-11 14:04:59 +00001271 const char *filename, *text;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001272 int lineno, offset;
Armin Rigo5d2c6832004-03-22 20:16:58 +00001273 if (!parse_syntax_error(value, &message, &filename,
Barry Warsaw035574d1997-08-29 22:07:17 +00001274 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +00001275 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001276 else {
1277 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +00001278 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001279 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +00001280 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001281 else
Guido van Rossum82598051997-03-05 00:20:32 +00001282 PyFile_WriteString(filename, f);
1283 PyFile_WriteString("\", line ", f);
Jeremy Hylton518ab1c2001-11-28 20:42:20 +00001284 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +00001285 PyFile_WriteString(buf, f);
1286 PyFile_WriteString("\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001287 if (text != NULL)
1288 print_error_text(f, offset, text);
Armin Rigo5d2c6832004-03-22 20:16:58 +00001289 Py_DECREF(value);
1290 value = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001291 /* Can't be bothered to check all those
1292 PyFile_WriteString() calls */
1293 if (PyErr_Occurred())
1294 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001295 }
1296 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001297 if (err) {
1298 /* Don't do anything else */
1299 }
Brett Cannonbf364092006-03-01 04:25:17 +00001300 else if (PyExceptionClass_Check(exception)) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001301 PyObject* moduleName;
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001302 char* className = PyExceptionClass_Name(exception);
1303 if (className != NULL) {
1304 char *dot = strrchr(className, '.');
1305 if (dot != NULL)
1306 className = dot+1;
1307 }
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001308
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001309 moduleName = PyObject_GetAttrString(exception, "__module__");
Guido van Rossumc5724de2007-10-10 21:38:59 +00001310 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1311 {
1312 Py_DECREF(moduleName);
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001313 err = PyFile_WriteString("<unknown>", f);
Guido van Rossumc5724de2007-10-10 21:38:59 +00001314 }
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001315 else {
Guido van Rossumc5724de2007-10-10 21:38:59 +00001316 char* modstr = PyUnicode_AsString(moduleName);
Neal Norwitz2633c692007-02-26 22:22:47 +00001317 if (modstr && strcmp(modstr, "__builtin__"))
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001318 {
1319 err = PyFile_WriteString(modstr, f);
1320 err += PyFile_WriteString(".", f);
1321 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001322 Py_DECREF(moduleName);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001323 }
1324 if (err == 0) {
1325 if (className == NULL)
1326 err = PyFile_WriteString("<unknown>", f);
1327 else
Brett Cannonbf364092006-03-01 04:25:17 +00001328 err = PyFile_WriteString(className, f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001329 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001330 }
1331 else
1332 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
Brett Cannon2e63b732006-03-02 18:34:57 +00001333 if (err == 0 && (value != Py_None)) {
Guido van Rossumc5724de2007-10-10 21:38:59 +00001334 PyObject *s = PyObject_Unicode(value);
Brett Cannon2e63b732006-03-02 18:34:57 +00001335 /* only print colon if the str() of the
1336 object is not the empty string
1337 */
1338 if (s == NULL)
1339 err = -1;
Guido van Rossumc5724de2007-10-10 21:38:59 +00001340 else if (!PyUnicode_Check(s) ||
1341 PyUnicode_GetSize(s) != 0)
Brett Cannon2e63b732006-03-02 18:34:57 +00001342 err = PyFile_WriteString(": ", f);
1343 if (err == 0)
1344 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1345 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +00001346 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00001347 /* try to write a newline in any case */
1348 err += PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001349 }
Armin Rigo5d2c6832004-03-22 20:16:58 +00001350 Py_DECREF(value);
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001351 /* If an error happened here, don't show it.
1352 XXX This is wrong, but too many callers rely on this behavior. */
1353 if (err != 0)
1354 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001355}
1356
Guido van Rossum82598051997-03-05 00:20:32 +00001357PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001358PyRun_StringFlags(const char *str, int start, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001359 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001360{
Neal Norwitze92fba02006-03-04 18:52:26 +00001361 PyObject *ret = NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001362 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001363 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001364 if (arena == NULL)
1365 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001366
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001367 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
Neal Norwitze92fba02006-03-04 18:52:26 +00001368 if (mod != NULL)
1369 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001370 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001371 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001372}
1373
1374PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001375PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001376 PyObject *locals, int closeit, PyCompilerFlags *flags)
1377{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001378 PyObject *ret;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001379 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001380 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001381 if (arena == NULL)
1382 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001383
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001384 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001385 flags, NULL, arena);
Guido van Rossumd8faa362007-04-27 19:54:29 +00001386 if (closeit)
1387 fclose(fp);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001388 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001389 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001390 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001391 }
Neal Norwitze92fba02006-03-04 18:52:26 +00001392 ret = run_mod(mod, filename, globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001393 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001394 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001395}
1396
Guido van Rossum82598051997-03-05 00:20:32 +00001397static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001398run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001399 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001400{
Guido van Rossum82598051997-03-05 00:20:32 +00001401 PyCodeObject *co;
1402 PyObject *v;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001403 co = PyAST_Compile(mod, filename, flags, arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001404 if (co == NULL)
1405 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +00001406 v = PyEval_EvalCode(co, globals, locals);
1407 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001408 return v;
1409}
1410
Guido van Rossum82598051997-03-05 00:20:32 +00001411static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001412run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001413 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001414{
Guido van Rossum82598051997-03-05 00:20:32 +00001415 PyCodeObject *co;
1416 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001417 long magic;
Fred Drakee8de31c2000-08-31 05:38:39 +00001418 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001419
Guido van Rossum82598051997-03-05 00:20:32 +00001420 magic = PyMarshal_ReadLongFromFile(fp);
1421 if (magic != PyImport_GetMagicNumber()) {
1422 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001423 "Bad magic number in .pyc file");
1424 return NULL;
1425 }
Guido van Rossum82598051997-03-05 00:20:32 +00001426 (void) PyMarshal_ReadLongFromFile(fp);
Tim Petersd9b9ac82001-01-28 00:27:39 +00001427 v = PyMarshal_ReadLastObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001428 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +00001429 if (v == NULL || !PyCode_Check(v)) {
1430 Py_XDECREF(v);
1431 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001432 "Bad code object in .pyc file");
1433 return NULL;
1434 }
Guido van Rossum82598051997-03-05 00:20:32 +00001435 co = (PyCodeObject *)v;
1436 v = PyEval_EvalCode(co, globals, locals);
Jeremy Hyltonb857ba22001-08-10 21:41:33 +00001437 if (v && flags)
1438 flags->cf_flags |= (co->co_flags & PyCF_MASK);
Guido van Rossum82598051997-03-05 00:20:32 +00001439 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001440 return v;
1441}
1442
Guido van Rossum82598051997-03-05 00:20:32 +00001443PyObject *
Tim Petersd08e3822003-04-17 15:24:21 +00001444Py_CompileStringFlags(const char *str, const char *filename, int start,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001445 PyCompilerFlags *flags)
1446{
Guido van Rossum82598051997-03-05 00:20:32 +00001447 PyCodeObject *co;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001448 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001449 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001450 if (arena == NULL)
1451 return NULL;
1452
1453 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001454 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001455 PyArena_Free(arena);
Guido van Rossum5b722181993-03-30 17:46:03 +00001456 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001457 }
Martin v. Löwis2b366e42006-02-26 22:12:35 +00001458 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001459 PyObject *result = PyAST_mod2obj(mod);
1460 PyArena_Free(arena);
1461 return result;
1462 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001463 co = PyAST_Compile(mod, filename, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001464 PyArena_Free(arena);
Guido van Rossum82598051997-03-05 00:20:32 +00001465 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001466}
1467
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001468struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001469Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001470{
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001471 struct symtable *st;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001472 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001473 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001474 if (arena == NULL)
1475 return NULL;
1476
1477 mod = PyParser_ASTFromString(str, filename, start, NULL, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001478 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001479 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001480 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001481 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001482 st = PySymtable_Build(mod, filename, 0);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001483 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001484 return st;
1485}
1486
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001487/* Preferred access to parser is through AST. */
1488mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001489PyParser_ASTFromString(const char *s, const char *filename, int start,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001490 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001491{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001492 mod_ty mod;
1493 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001494 node *n = PyParser_ParseStringFlagsFilename(s, filename,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001495 &_PyParser_Grammar, start, &err,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001496 PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001497 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001498 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001499 PyNode_Free(n);
1500 return mod;
1501 }
1502 else {
1503 err_input(&err);
1504 return NULL;
1505 }
1506}
1507
1508mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001509PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
1510 int start, char *ps1,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001511 char *ps2, PyCompilerFlags *flags, int *errcode,
Neal Norwitz9589ee22006-03-04 19:01:22 +00001512 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001513{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001514 mod_ty mod;
1515 perrdetail err;
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001516 node *n = PyParser_ParseFileFlags(fp, filename, enc,
1517 &_PyParser_Grammar,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001518 start, ps1, ps2, &err, PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001519 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001520 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001521 PyNode_Free(n);
1522 return mod;
1523 }
1524 else {
1525 err_input(&err);
1526 if (errcode)
1527 *errcode = err.error;
1528 return NULL;
1529 }
1530}
1531
Guido van Rossuma110aa61994-08-29 12:50:44 +00001532/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001533
Guido van Rossuma110aa61994-08-29 12:50:44 +00001534node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001535PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001536{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001537 perrdetail err;
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001538 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
1539 &_PyParser_Grammar,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001540 start, NULL, NULL, &err, flags);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001541 if (n == NULL)
1542 err_input(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001543
Guido van Rossuma110aa61994-08-29 12:50:44 +00001544 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001545}
1546
Guido van Rossuma110aa61994-08-29 12:50:44 +00001547/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001548
Guido van Rossuma110aa61994-08-29 12:50:44 +00001549node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001550PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001551{
Tim Petersfe2127d2001-07-16 05:37:24 +00001552 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001553 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1554 start, &err, flags);
Tim Petersfe2127d2001-07-16 05:37:24 +00001555 if (n == NULL)
1556 err_input(&err);
1557 return n;
1558}
1559
1560node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001561PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Thomas Heller6b17abf2002-07-09 09:23:27 +00001562 int start, int flags)
1563{
Thomas Heller6b17abf2002-07-09 09:23:27 +00001564 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001565 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1566 &_PyParser_Grammar, start, &err, flags);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001567 if (n == NULL)
1568 err_input(&err);
1569 return n;
1570}
1571
1572node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001573PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001574{
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001575 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001576}
1577
Guido van Rossum66ebd912003-04-17 16:02:26 +00001578/* May want to move a more generalized form of this to parsetok.c or
1579 even parser modules. */
1580
1581void
1582PyParser_SetError(perrdetail *err)
1583{
1584 err_input(err);
1585}
1586
Guido van Rossuma110aa61994-08-29 12:50:44 +00001587/* Set the error appropriate to the given input error code (see errcode.h) */
1588
1589static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001590err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00001591{
Martin v. Löwis5deb2102007-08-31 11:17:42 +00001592 PyObject *v, *w, *errtype, *errtext;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001593 PyObject* u = NULL;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001594 char *msg = NULL;
Fred Drake85f36392000-07-11 17:53:00 +00001595 errtype = PyExc_SyntaxError;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001596 switch (err->error) {
1597 case E_SYNTAX:
Fred Drake85f36392000-07-11 17:53:00 +00001598 errtype = PyExc_IndentationError;
1599 if (err->expected == INDENT)
1600 msg = "expected an indented block";
1601 else if (err->token == INDENT)
1602 msg = "unexpected indent";
1603 else if (err->token == DEDENT)
1604 msg = "unexpected unindent";
1605 else {
1606 errtype = PyExc_SyntaxError;
1607 msg = "invalid syntax";
1608 }
Guido van Rossuma110aa61994-08-29 12:50:44 +00001609 break;
1610 case E_TOKEN:
1611 msg = "invalid token";
Guido van Rossuma110aa61994-08-29 12:50:44 +00001612 break;
Skip Montanaro118ec702002-08-15 01:20:16 +00001613 case E_EOFS:
1614 msg = "EOF while scanning triple-quoted string";
1615 break;
1616 case E_EOLS:
1617 msg = "EOL while scanning single-quoted string";
1618 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001619 case E_INTR:
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001620 if (!PyErr_Occurred())
1621 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001622 return;
1623 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +00001624 PyErr_NoMemory();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001625 return;
1626 case E_EOF:
1627 msg = "unexpected EOF while parsing";
1628 break;
Fred Drake85f36392000-07-11 17:53:00 +00001629 case E_TABSPACE:
1630 errtype = PyExc_TabError;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001631 msg = "inconsistent use of tabs and spaces in indentation";
1632 break;
Jeremy Hylton94988062000-06-20 19:10:44 +00001633 case E_OVERFLOW:
1634 msg = "expression too long";
1635 break;
Fred Drake85f36392000-07-11 17:53:00 +00001636 case E_DEDENT:
1637 errtype = PyExc_IndentationError;
1638 msg = "unindent does not match any outer indentation level";
1639 break;
1640 case E_TOODEEP:
1641 errtype = PyExc_IndentationError;
1642 msg = "too many levels of indentation";
1643 break;
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001644 case E_DECODE: {
1645 PyObject *type, *value, *tb;
1646 PyErr_Fetch(&type, &value, &tb);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001647 if (value != NULL) {
Guido van Rossumc5724de2007-10-10 21:38:59 +00001648 u = PyObject_Unicode(value);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001649 if (u != NULL) {
Guido van Rossumc5724de2007-10-10 21:38:59 +00001650 msg = PyUnicode_AsString(u);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001651 }
1652 }
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001653 if (msg == NULL)
1654 msg = "unknown decode error";
Neal Norwitzdb83eb32005-12-18 05:29:30 +00001655 Py_XDECREF(type);
1656 Py_XDECREF(value);
Neal Norwitz40d37812005-10-02 01:48:49 +00001657 Py_XDECREF(tb);
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001658 break;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001659 }
Martin v. Löwis4bf108d2005-03-03 11:45:45 +00001660 case E_LINECONT:
1661 msg = "unexpected character after line continuation character";
1662 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00001663
1664 case E_IDENTIFIER:
1665 msg = "invalid character in identifier";
1666 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001667 default:
1668 fprintf(stderr, "error=%d\n", err->error);
1669 msg = "unknown parsing error";
1670 break;
1671 }
Martin v. Löwis5deb2102007-08-31 11:17:42 +00001672 /* err->text may not be UTF-8 in case of decoding errors.
1673 Explicitly convert to an object. */
1674 if (!err->text) {
1675 errtext = Py_None;
1676 Py_INCREF(Py_None);
1677 } else {
1678 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
1679 "replace");
1680 }
1681 v = Py_BuildValue("(ziiN)", err->filename,
1682 err->lineno, err->offset, errtext);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001683 if (err->text != NULL) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001684 PyObject_FREE(err->text);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001685 err->text = NULL;
1686 }
1687 w = NULL;
1688 if (v != NULL)
1689 w = Py_BuildValue("(sO)", msg, v);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001690 Py_XDECREF(u);
Guido van Rossum41318302001-03-23 04:01:07 +00001691 Py_XDECREF(v);
Fred Drake85f36392000-07-11 17:53:00 +00001692 PyErr_SetObject(errtype, w);
Guido van Rossum82598051997-03-05 00:20:32 +00001693 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001694}
1695
1696/* Print fatal error message and abort */
1697
1698void
Tim Peters7c321a82002-07-09 02:57:01 +00001699Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001700{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00001701 fprintf(stderr, "Fatal Python error: %s\n", msg);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001702 if (PyErr_Occurred()) {
1703 PyErr_Print();
1704 }
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001705#ifdef MS_WINDOWS
Guido van Rossum23c94461997-05-22 20:21:30 +00001706 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +00001707 OutputDebugString(msg);
1708 OutputDebugString("\n");
Guido van Rossum0ba35361998-08-13 13:33:16 +00001709#ifdef _DEBUG
1710 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00001711#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001712#endif /* MS_WINDOWS */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001713 abort();
1714}
1715
1716/* Clean up and exit */
1717
Guido van Rossuma110aa61994-08-29 12:50:44 +00001718#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00001719#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001720#endif
1721
Collin Winter670e6922007-03-21 02:57:17 +00001722static void (*pyexitfunc)(void) = NULL;
1723/* For the atexit module. */
1724void _Py_PyAtExit(void (*func)(void))
1725{
1726 pyexitfunc = func;
1727}
1728
1729static void
1730call_py_exitfuncs(void)
1731{
Guido van Rossum98297ee2007-11-06 21:34:58 +00001732 if (pyexitfunc == NULL)
Collin Winter670e6922007-03-21 02:57:17 +00001733 return;
1734
1735 (*pyexitfunc)();
1736 PyErr_Clear();
1737}
1738
Guido van Rossum2dcfc961998-10-01 16:01:57 +00001739#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001740static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00001741static int nexitfuncs = 0;
1742
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001743int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00001744{
1745 if (nexitfuncs >= NEXITFUNCS)
1746 return -1;
1747 exitfuncs[nexitfuncs++] = func;
1748 return 0;
1749}
1750
Guido van Rossumcc283f51997-08-05 02:22:03 +00001751static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001752call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00001753{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001754 while (nexitfuncs > 0)
1755 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001756
1757 fflush(stdout);
1758 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001759}
1760
1761void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001762Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001763{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001764 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001765
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001766 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001767}
1768
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001769static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001770initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001771{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001772#ifdef SIGPIPE
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001773 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001774#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00001775#ifdef SIGXFZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001776 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00001777#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001778#ifdef SIGXFSZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001779 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001780#endif
Guido van Rossum82598051997-03-05 00:20:32 +00001781 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001782}
1783
Guido van Rossum7433b121997-02-14 19:45:36 +00001784
1785/*
1786 * The file descriptor fd is considered ``interactive'' if either
1787 * a) isatty(fd) is TRUE, or
1788 * b) the -i flag was given, and the filename associated with
1789 * the descriptor is NULL or "<stdin>" or "???".
1790 */
1791int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001792Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00001793{
1794 if (isatty((int)fileno(fp)))
1795 return 1;
1796 if (!Py_InteractiveFlag)
1797 return 0;
1798 return (filename == NULL) ||
1799 (strcmp(filename, "<stdin>") == 0) ||
1800 (strcmp(filename, "???") == 0);
1801}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001802
1803
Tim Petersd08e3822003-04-17 15:24:21 +00001804#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001805#if defined(WIN32) && defined(_MSC_VER)
1806
1807/* Stack checking for Microsoft C */
1808
1809#include <malloc.h>
1810#include <excpt.h>
1811
Fred Drakee8de31c2000-08-31 05:38:39 +00001812/*
1813 * Return non-zero when we run out of memory on the stack; zero otherwise.
1814 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001815int
Fred Drake399739f2000-08-31 05:52:44 +00001816PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001817{
1818 __try {
Tim Peters92e4dd82002-10-05 01:47:34 +00001819 /* alloca throws a stack overflow exception if there's
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001820 not enough space left on the stack */
Tim Peters92e4dd82002-10-05 01:47:34 +00001821 alloca(PYOS_STACK_MARGIN * sizeof(void*));
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001822 return 0;
1823 } __except (EXCEPTION_EXECUTE_HANDLER) {
1824 /* just ignore all errors */
1825 }
1826 return 1;
1827}
1828
1829#endif /* WIN32 && _MSC_VER */
1830
1831/* Alternate implementations can be added here... */
1832
1833#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00001834
1835
1836/* Wrappers around sigaction() or signal(). */
1837
1838PyOS_sighandler_t
1839PyOS_getsig(int sig)
1840{
1841#ifdef HAVE_SIGACTION
1842 struct sigaction context;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001843 if (sigaction(sig, NULL, &context) == -1)
1844 return SIG_ERR;
Guido van Rossum6f256182000-09-16 16:32:19 +00001845 return context.sa_handler;
1846#else
1847 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00001848/* Special signal handling for the secure CRT in Visual Studio 2005 */
1849#if defined(_MSC_VER) && _MSC_VER >= 1400
1850 switch (sig) {
1851 /* Only these signals are valid */
1852 case SIGINT:
1853 case SIGILL:
1854 case SIGFPE:
1855 case SIGSEGV:
1856 case SIGTERM:
1857 case SIGBREAK:
1858 case SIGABRT:
1859 break;
1860 /* Don't call signal() with other values or it will assert */
1861 default:
1862 return SIG_ERR;
1863 }
1864#endif /* _MSC_VER && _MSC_VER >= 1400 */
Guido van Rossum6f256182000-09-16 16:32:19 +00001865 handler = signal(sig, SIG_IGN);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001866 if (handler != SIG_ERR)
1867 signal(sig, handler);
Guido van Rossum6f256182000-09-16 16:32:19 +00001868 return handler;
1869#endif
1870}
1871
1872PyOS_sighandler_t
1873PyOS_setsig(int sig, PyOS_sighandler_t handler)
1874{
1875#ifdef HAVE_SIGACTION
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001876 struct sigaction context, ocontext;
Guido van Rossum6f256182000-09-16 16:32:19 +00001877 context.sa_handler = handler;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001878 sigemptyset(&context.sa_mask);
1879 context.sa_flags = 0;
1880 if (sigaction(sig, &context, &ocontext) == -1)
1881 return SIG_ERR;
1882 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001883#else
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001884 PyOS_sighandler_t oldhandler;
1885 oldhandler = signal(sig, handler);
1886#ifdef HAVE_SIGINTERRUPT
1887 siginterrupt(sig, 1);
1888#endif
1889 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001890#endif
1891}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001892
1893/* Deprecated C API functions still provided for binary compatiblity */
1894
1895#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001896PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001897PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
1898{
1899 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
1900}
1901
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001902#undef PyParser_SimpleParseString
1903PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001904PyParser_SimpleParseString(const char *str, int start)
1905{
1906 return PyParser_SimpleParseStringFlags(str, start, 0);
1907}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001908
1909#undef PyRun_AnyFile
1910PyAPI_FUNC(int)
1911PyRun_AnyFile(FILE *fp, const char *name)
1912{
1913 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
1914}
1915
1916#undef PyRun_AnyFileEx
1917PyAPI_FUNC(int)
1918PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
1919{
1920 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
1921}
1922
1923#undef PyRun_AnyFileFlags
1924PyAPI_FUNC(int)
1925PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
1926{
1927 return PyRun_AnyFileExFlags(fp, name, 0, flags);
1928}
1929
1930#undef PyRun_File
1931PyAPI_FUNC(PyObject *)
1932PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
1933{
1934 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
1935}
1936
1937#undef PyRun_FileEx
1938PyAPI_FUNC(PyObject *)
1939PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
1940{
1941 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
1942}
1943
1944#undef PyRun_FileFlags
1945PyAPI_FUNC(PyObject *)
1946PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
1947 PyCompilerFlags *flags)
1948{
1949 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
1950}
1951
1952#undef PyRun_SimpleFile
1953PyAPI_FUNC(int)
1954PyRun_SimpleFile(FILE *f, const char *p)
1955{
1956 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
1957}
1958
1959#undef PyRun_SimpleFileEx
1960PyAPI_FUNC(int)
1961PyRun_SimpleFileEx(FILE *f, const char *p, int c)
1962{
1963 return PyRun_SimpleFileExFlags(f, p, c, NULL);
1964}
1965
1966
1967#undef PyRun_String
1968PyAPI_FUNC(PyObject *)
1969PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
1970{
1971 return PyRun_StringFlags(str, s, g, l, NULL);
1972}
1973
1974#undef PyRun_SimpleString
1975PyAPI_FUNC(int)
1976PyRun_SimpleString(const char *s)
1977{
1978 return PyRun_SimpleStringFlags(s, NULL);
1979}
1980
1981#undef Py_CompileString
1982PyAPI_FUNC(PyObject *)
1983Py_CompileString(const char *str, const char *p, int s)
1984{
1985 return Py_CompileStringFlags(str, p, s, NULL);
1986}
1987
1988#undef PyRun_InteractiveOne
1989PyAPI_FUNC(int)
1990PyRun_InteractiveOne(FILE *f, const char *p)
1991{
1992 return PyRun_InteractiveOneFlags(f, p, NULL);
1993}
1994
1995#undef PyRun_InteractiveLoop
1996PyAPI_FUNC(int)
1997PyRun_InteractiveLoop(FILE *f, const char *p)
1998{
1999 return PyRun_InteractiveLoopFlags(f, p, NULL);
2000}
2001
2002#ifdef __cplusplus
2003}
2004#endif