blob: 76da8fb7f772ccccd3182509f8500cb628a3449a [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' */
Barry Warsaw3ce09642000-05-02 19:18:59 +000078int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
Guido van Rossuma61691e1998-02-06 22:27:24 +000079int Py_FrozenFlag; /* Needed by getpath.c */
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +000080int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000081
Mark Hammonda43fd0c2003-02-19 00:33:33 +000082/* Reference to 'warnings' module, to avoid importing it
Mark Hammondedd07732003-07-15 23:03:55 +000083 on the fly when the import lock may be held. See 683658/771097
Mark Hammonda43fd0c2003-02-19 00:33:33 +000084*/
Mark Hammondedd07732003-07-15 23:03:55 +000085static PyObject *warnings_module = NULL;
86
87/* Returns a borrowed reference to the 'warnings' module, or NULL.
88 If the module is returned, it is guaranteed to have been obtained
89 without acquiring the import lock
90*/
Martin v. Löwisa2c17c52003-08-09 09:47:11 +000091PyObject *PyModule_GetWarningsModule(void)
Mark Hammondedd07732003-07-15 23:03:55 +000092{
93 PyObject *typ, *val, *tb;
94 PyObject *all_modules;
95 /* If we managed to get the module at init time, just use it */
96 if (warnings_module)
97 return warnings_module;
98 /* If it wasn't available at init time, it may be available
99 now in sys.modules (common scenario is frozen apps: import
100 at init time fails, but the frozen init code sets up sys.path
101 correctly, then does an implicit import of warnings for us
102 */
103 /* Save and restore any exceptions */
104 PyErr_Fetch(&typ, &val, &tb);
105
Mark Hammond5f4e8ca2003-07-16 01:54:38 +0000106 all_modules = PySys_GetObject("modules");
Mark Hammondedd07732003-07-15 23:03:55 +0000107 if (all_modules) {
108 warnings_module = PyDict_GetItemString(all_modules, "warnings");
109 /* We keep a ref in the global */
110 Py_XINCREF(warnings_module);
111 }
112 PyErr_Restore(typ, val, tb);
113 return warnings_module;
114}
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000115
Guido van Rossum25ce5661997-08-02 03:10:38 +0000116static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000117
Thomas Wouters7e474022000-07-16 12:04:32 +0000118/* API to access the initialized flag -- useful for esoteric use */
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000119
120int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000121Py_IsInitialized(void)
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000122{
123 return initialized;
124}
125
Guido van Rossum25ce5661997-08-02 03:10:38 +0000126/* Global initializations. Can be undone by Py_Finalize(). Don't
127 call this twice without an intervening Py_Finalize() call. When
128 initializations fail, a fatal error is issued and the function does
129 not return. On return, the first thread and interpreter state have
130 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000131
Guido van Rossum25ce5661997-08-02 03:10:38 +0000132 Locking: you must hold the interpreter lock while calling this.
133 (If the lock has not yet been initialized, that's equivalent to
134 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000135
Guido van Rossum25ce5661997-08-02 03:10:38 +0000136*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000137
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000138static int
139add_flag(int flag, const char *envs)
140{
141 int env = atoi(envs);
142 if (flag < env)
143 flag = env;
144 if (flag < 1)
145 flag = 1;
146 return flag;
147}
148
Guido van Rossuma027efa1997-05-05 20:56:21 +0000149void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000150Py_InitializeEx(int install_sigs)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000151{
Guido van Rossuma027efa1997-05-05 20:56:21 +0000152 PyInterpreterState *interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000153 PyThreadState *tstate;
154 PyObject *bimod, *sysmod;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000155 char *p;
Guido van Rossum8d30cc02007-05-03 17:49:24 +0000156#if defined(HAVE_LANGINFO_H) && defined(CODESET)
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000157 char *codeset;
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000158#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +0000159 extern void _Py_ReadyTypes(void);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000160
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000161 if (initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000162 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000163 initialized = 1;
Tim Petersd08e3822003-04-17 15:24:21 +0000164
Martin v. Löwisd1cd4d42007-08-11 14:02:14 +0000165#ifdef HAVE_SETLOCALE
166 /* Set up the LC_CTYPE locale, so we can obtain
167 the locale's charset without having to switch
168 locales. */
169 setlocale(LC_CTYPE, "");
170#endif
171
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000172 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000173 Py_DebugFlag = add_flag(Py_DebugFlag, p);
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000174 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000175 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000176 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000177 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000178
Guido van Rossuma027efa1997-05-05 20:56:21 +0000179 interp = PyInterpreterState_New();
180 if (interp == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000181 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000182
Guido van Rossuma027efa1997-05-05 20:56:21 +0000183 tstate = PyThreadState_New(interp);
184 if (tstate == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000185 Py_FatalError("Py_Initialize: can't make first thread");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000186 (void) PyThreadState_Swap(tstate);
187
Guido van Rossum70d893a2001-08-16 08:21:42 +0000188 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000189
Neal Norwitzb2501f42002-12-31 03:42:13 +0000190 if (!_PyFrame_Init())
Neal Norwitzc91ed402002-12-30 22:29:22 +0000191 Py_FatalError("Py_Initialize: can't init frames");
192
Guido van Rossumddefaf32007-01-14 03:31:43 +0000193 if (!_PyLong_Init())
194 Py_FatalError("Py_Initialize: can't init longs");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000195
Neal Norwitz6968b052007-02-27 19:02:19 +0000196 if (!PyBytes_Init())
197 Py_FatalError("Py_Initialize: can't init bytes");
198
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000199 _PyFloat_Init();
200
Guido van Rossum25ce5661997-08-02 03:10:38 +0000201 interp->modules = PyDict_New();
202 if (interp->modules == NULL)
203 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossumd8faa362007-04-27 19:54:29 +0000204 interp->modules_reloading = PyDict_New();
205 if (interp->modules_reloading == NULL)
206 Py_FatalError("Py_Initialize: can't make modules_reloading dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000207
Guido van Rossumc94044c2000-03-10 23:03:54 +0000208 /* Init Unicode implementation; relies on the codec registry */
209 _PyUnicode_Init();
210
Barry Warsawf242aa02000-05-25 23:09:49 +0000211 bimod = _PyBuiltin_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000212 if (bimod == NULL)
213 Py_FatalError("Py_Initialize: can't initialize __builtin__");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000214 interp->builtins = PyModule_GetDict(bimod);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000215 if (interp->builtins == NULL)
216 Py_FatalError("Py_Initialize: can't initialize builtins dict");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000217 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000218
219 sysmod = _PySys_Init();
220 if (sysmod == NULL)
221 Py_FatalError("Py_Initialize: can't initialize sys");
222 interp->sysdict = PyModule_GetDict(sysmod);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000223 if (interp->sysdict == NULL)
224 Py_FatalError("Py_Initialize: can't initialize sys dict");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000225 Py_INCREF(interp->sysdict);
226 _PyImport_FixupExtension("sys", "sys");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000227 PySys_SetPath(Py_GetPath());
Guido van Rossum25ce5661997-08-02 03:10:38 +0000228 PyDict_SetItemString(interp->sysdict, "modules",
229 interp->modules);
230
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000231 _PyImport_Init();
232
Barry Warsawf242aa02000-05-25 23:09:49 +0000233 /* initialize builtin exceptions */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000234 _PyExc_Init();
Barry Warsawf242aa02000-05-25 23:09:49 +0000235
Barry Warsaw035574d1997-08-29 22:07:17 +0000236 /* phase 2 of builtins */
Barry Warsaw963b8711997-09-18 16:42:02 +0000237 _PyImport_FixupExtension("__builtin__", "__builtin__");
Barry Warsaw035574d1997-08-29 22:07:17 +0000238
Just van Rossum52e14d62002-12-30 22:08:05 +0000239 _PyImportHooks_Init();
240
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000241 if (install_sigs)
242 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000243
244 initmain(); /* Module __main__ */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000245 if (initstdio() < 0)
246 Py_FatalError(
247 "Py_Initialize: can't initialize sys standard streams");
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000248 if (!Py_NoSiteFlag)
249 initsite(); /* Module site */
Just van Rossum5bfba3a2003-02-25 20:25:12 +0000250
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000251 /* auto-thread-state API, if available */
252#ifdef WITH_THREAD
253 _PyGILState_Init(interp, tstate);
254#endif /* WITH_THREAD */
255
Mark Hammondedd07732003-07-15 23:03:55 +0000256 warnings_module = PyImport_ImportModule("warnings");
257 if (!warnings_module)
258 PyErr_Clear();
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000259
Guido van Rossum8d30cc02007-05-03 17:49:24 +0000260#if defined(HAVE_LANGINFO_H) && defined(CODESET)
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000261 /* On Unix, set the file system encoding according to the
262 user's preference, if the CODESET names a well-known
263 Python codec, and Py_FileSystemDefaultEncoding isn't
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000264 initialized by other means. Also set the encoding of
265 stdin and stdout if these are terminals. */
266
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000267 codeset = nl_langinfo(CODESET);
268 if (codeset && *codeset) {
269 PyObject *enc = PyCodec_Encoder(codeset);
270 if (enc) {
271 codeset = strdup(codeset);
272 Py_DECREF(enc);
273 } else {
274 codeset = NULL;
275 PyErr_Clear();
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000276 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000277 } else
278 codeset = NULL;
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000279
280 if (codeset) {
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000281 if (!Py_FileSystemDefaultEncoding)
282 Py_FileSystemDefaultEncoding = codeset;
283 else
284 free(codeset);
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000285 }
286#endif
Guido van Rossum25ce5661997-08-02 03:10:38 +0000287}
288
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000289void
290Py_Initialize(void)
291{
292 Py_InitializeEx(1);
293}
294
295
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000296#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000297extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000298#endif
299
Guido van Rossume8432ac2007-07-09 15:04:50 +0000300/* Flush stdout and stderr */
301
Neal Norwitz2bad9702007-08-27 06:19:22 +0000302static void
Guido van Rossum1bd21222007-07-10 20:14:13 +0000303flush_std_files(void)
Guido van Rossume8432ac2007-07-09 15:04:50 +0000304{
305 PyObject *fout = PySys_GetObject("stdout");
306 PyObject *ferr = PySys_GetObject("stderr");
307 PyObject *tmp;
308
309 if (fout != NULL) {
310 tmp = PyObject_CallMethod(fout, "flush", "");
311 if (tmp == NULL)
312 PyErr_Clear();
313 else
314 Py_DECREF(tmp);
315 }
316
317 if (ferr != NULL) {
318 tmp = PyObject_CallMethod(ferr, "flush", "");
319 if (tmp == NULL)
320 PyErr_Clear();
321 else
322 Py_DECREF(tmp);
323 }
324}
325
Guido van Rossum25ce5661997-08-02 03:10:38 +0000326/* Undo the effect of Py_Initialize().
327
328 Beware: if multiple interpreter and/or thread states exist, these
329 are not wiped out; only the current thread and interpreter state
330 are deleted. But since everything else is deleted, those other
331 interpreter and thread states should no longer be used.
332
333 (XXX We should do better, e.g. wipe out all interpreters and
334 threads.)
335
336 Locking: as above.
337
338*/
339
340void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000341Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000342{
343 PyInterpreterState *interp;
344 PyThreadState *tstate;
345
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000346 if (!initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000347 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000348
Tim Peters384fd102001-01-21 03:40:37 +0000349 /* The interpreter is still entirely intact at this point, and the
350 * exit funcs may be relying on that. In particular, if some thread
351 * or exit func is still waiting to do an import, the import machinery
352 * expects Py_IsInitialized() to return true. So don't say the
353 * interpreter is uninitialized until after the exit funcs have run.
354 * Note that Threading.py uses an exit func to do a join on all the
355 * threads created thru it, so this also protects pending imports in
356 * the threads created via Threading.
357 */
Collin Winter670e6922007-03-21 02:57:17 +0000358 call_py_exitfuncs();
Tim Peters384fd102001-01-21 03:40:37 +0000359 initialized = 0;
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000360
Guido van Rossume8432ac2007-07-09 15:04:50 +0000361 /* Flush stdout+stderr */
362 flush_std_files();
363
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000364 /* Get current thread state and interpreter pointer */
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000365 tstate = PyThreadState_GET();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000366 interp = tstate->interp;
367
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000368 /* Disable signal handling */
369 PyOS_FiniInterrupts();
370
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000371 /* drop module references we saved */
Mark Hammondedd07732003-07-15 23:03:55 +0000372 Py_XDECREF(warnings_module);
373 warnings_module = NULL;
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000374
Guido van Rossume13ddc92003-04-17 17:29:22 +0000375 /* Collect garbage. This may call finalizers; it's nice to call these
Tim Peters1d7323e2003-12-01 21:35:27 +0000376 * before all modules are destroyed.
377 * XXX If a __del__ or weakref callback is triggered here, and tries to
378 * XXX import a module, bad things can happen, because Python no
379 * XXX longer believes it's initialized.
380 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
381 * XXX is easy to provoke that way. I've also seen, e.g.,
382 * XXX Exception exceptions.ImportError: 'No module named sha'
383 * XXX in <function callback at 0x008F5718> ignored
384 * XXX but I'm unclear on exactly how that one happens. In any case,
385 * XXX I haven't seen a real-life report of either of these.
Neal Norwitz9589ee22006-03-04 19:01:22 +0000386 */
Guido van Rossume13ddc92003-04-17 17:29:22 +0000387 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000388#ifdef COUNT_ALLOCS
389 /* With COUNT_ALLOCS, it helps to run GC multiple times:
390 each collection might release some types from the type
391 list, so they become garbage. */
392 while (PyGC_Collect() > 0)
393 /* nothing */;
394#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000395
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000396 /* Destroy all modules */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000397 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000398
Guido van Rossume8432ac2007-07-09 15:04:50 +0000399 /* Flush stdout+stderr (again, in case more was printed) */
400 flush_std_files();
401
Guido van Rossume13ddc92003-04-17 17:29:22 +0000402 /* Collect final garbage. This disposes of cycles created by
Tim Peters1d7323e2003-12-01 21:35:27 +0000403 * new-style class definitions, for example.
404 * XXX This is disabled because it caused too many problems. If
405 * XXX a __del__ or weakref callback triggers here, Python code has
406 * XXX a hard time running, because even the sys module has been
407 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
408 * XXX One symptom is a sequence of information-free messages
409 * XXX coming from threads (if a __del__ or callback is invoked,
410 * XXX other threads can execute too, and any exception they encounter
411 * XXX triggers a comedy of errors as subsystem after subsystem
412 * XXX fails to find what it *expects* to find in sys to help report
413 * XXX the exception and consequent unexpected failures). I've also
414 * XXX seen segfaults then, after adding print statements to the
415 * XXX Python code getting called.
416 */
417#if 0
Guido van Rossume13ddc92003-04-17 17:29:22 +0000418 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000419#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000420
Guido van Rossum1707aad1997-12-08 23:43:45 +0000421 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
422 _PyImport_Fini();
423
424 /* Debugging stuff */
425#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000426 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000427#endif
428
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000429 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000430
Tim Peters9cf25ce2003-04-17 15:21:01 +0000431#ifdef Py_TRACE_REFS
432 /* Display all objects still alive -- this can invoke arbitrary
433 * __repr__ overrides, so requires a mostly-intact interpreter.
434 * Alas, a lot of stuff may still be alive now that will be cleaned
435 * up later.
436 */
Tim Peters269b2a62003-04-17 19:52:29 +0000437 if (Py_GETENV("PYTHONDUMPREFS"))
Tim Peters9cf25ce2003-04-17 15:21:01 +0000438 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000439#endif /* Py_TRACE_REFS */
440
Mark Hammond6cb90292003-04-22 11:18:00 +0000441 /* Cleanup auto-thread-state */
442#ifdef WITH_THREAD
443 _PyGILState_Fini();
444#endif /* WITH_THREAD */
445
Guido van Rossumd922fa42003-04-15 14:10:09 +0000446 /* Clear interpreter state */
Barry Warsawf242aa02000-05-25 23:09:49 +0000447 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000448
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000449 /* Now we decref the exception classes. After this point nothing
450 can raise an exception. That's okay, because each Fini() method
451 below has been checked to make sure no exceptions are ever
452 raised.
453 */
454
455 _PyExc_Fini();
456
Guido van Rossumd922fa42003-04-15 14:10:09 +0000457 /* Delete current thread */
Barry Warsawf242aa02000-05-25 23:09:49 +0000458 PyThreadState_Swap(NULL);
459 PyInterpreterState_Delete(interp);
460
Guido van Rossumd922fa42003-04-15 14:10:09 +0000461 /* Sundry finalizers */
Guido van Rossumcc283f51997-08-05 02:22:03 +0000462 PyMethod_Fini();
463 PyFrame_Fini();
464 PyCFunction_Fini();
465 PyTuple_Fini();
Raymond Hettingerfb09f0e2004-10-07 03:58:07 +0000466 PyList_Fini();
Raymond Hettingerd7946662005-08-01 21:39:29 +0000467 PySet_Fini();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000468 PyString_Fini();
Neal Norwitz6968b052007-02-27 19:02:19 +0000469 PyBytes_Fini();
Guido van Rossumddefaf32007-01-14 03:31:43 +0000470 PyLong_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000471 PyFloat_Fini();
472
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000473 /* Cleanup Unicode implementation */
474 _PyUnicode_Fini();
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000475
Guido van Rossumcc283f51997-08-05 02:22:03 +0000476 /* XXX Still allocated:
477 - various static ad-hoc pointers to interned strings
478 - int and float free list blocks
479 - whatever various modules and libraries allocate
480 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000481
482 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000483
Tim Peters269b2a62003-04-17 19:52:29 +0000484#ifdef Py_TRACE_REFS
485 /* Display addresses (& refcnts) of all objects still alive.
486 * An address can be used to find the repr of the object, printed
487 * above by _Py_PrintReferences.
488 */
489 if (Py_GETENV("PYTHONDUMPREFS"))
490 _Py_PrintReferenceAddresses(stderr);
491#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000492#ifdef PYMALLOC_DEBUG
493 if (Py_GETENV("PYTHONMALLOCSTATS"))
494 _PyObject_DebugMallocStats();
495#endif
496
Guido van Rossumcc283f51997-08-05 02:22:03 +0000497 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000498}
499
500/* Create and initialize a new interpreter and thread, and return the
501 new thread. This requires that Py_Initialize() has been called
502 first.
503
504 Unsuccessful initialization yields a NULL pointer. Note that *no*
505 exception information is available even in this case -- the
506 exception information is held in the thread, and there is no
507 thread.
508
509 Locking: as above.
510
511*/
512
513PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000514Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000515{
516 PyInterpreterState *interp;
517 PyThreadState *tstate, *save_tstate;
518 PyObject *bimod, *sysmod;
519
520 if (!initialized)
521 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
522
523 interp = PyInterpreterState_New();
524 if (interp == NULL)
525 return NULL;
526
527 tstate = PyThreadState_New(interp);
528 if (tstate == NULL) {
529 PyInterpreterState_Delete(interp);
530 return NULL;
531 }
532
533 save_tstate = PyThreadState_Swap(tstate);
534
535 /* XXX The following is lax in error checking */
536
537 interp->modules = PyDict_New();
Guido van Rossumd8faa362007-04-27 19:54:29 +0000538 interp->modules_reloading = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000539
540 bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
541 if (bimod != NULL) {
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000542 interp->builtins = PyModule_GetDict(bimod);
Thomas Wouters89f507f2006-12-13 04:49:30 +0000543 if (interp->builtins == NULL)
544 goto handle_error;
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000545 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000546 }
547 sysmod = _PyImport_FindExtension("sys", "sys");
548 if (bimod != NULL && sysmod != NULL) {
549 interp->sysdict = PyModule_GetDict(sysmod);
Thomas Wouters89f507f2006-12-13 04:49:30 +0000550 if (interp->sysdict == NULL)
551 goto handle_error;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000552 Py_INCREF(interp->sysdict);
553 PySys_SetPath(Py_GetPath());
554 PyDict_SetItemString(interp->sysdict, "modules",
555 interp->modules);
Martin v. Löwisd7ceb222003-01-22 09:00:38 +0000556 _PyImportHooks_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000557 initmain();
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000558 if (!Py_NoSiteFlag)
559 initsite();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000560 }
561
562 if (!PyErr_Occurred())
563 return tstate;
564
Thomas Wouters89f507f2006-12-13 04:49:30 +0000565handle_error:
Guido van Rossum25ce5661997-08-02 03:10:38 +0000566 /* Oops, it didn't work. Undo it all. */
567
568 PyErr_Print();
569 PyThreadState_Clear(tstate);
570 PyThreadState_Swap(save_tstate);
571 PyThreadState_Delete(tstate);
572 PyInterpreterState_Delete(interp);
573
574 return NULL;
575}
576
577/* Delete an interpreter and its last thread. This requires that the
578 given thread state is current, that the thread has no remaining
579 frames, and that it is its interpreter's only remaining thread.
580 It is a fatal error to violate these constraints.
581
582 (Py_Finalize() doesn't have these constraints -- it zaps
583 everything, regardless.)
584
585 Locking: as above.
586
587*/
588
589void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000590Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000591{
592 PyInterpreterState *interp = tstate->interp;
593
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000594 if (tstate != PyThreadState_GET())
Guido van Rossum25ce5661997-08-02 03:10:38 +0000595 Py_FatalError("Py_EndInterpreter: thread is not current");
596 if (tstate->frame != NULL)
597 Py_FatalError("Py_EndInterpreter: thread still has a frame");
598 if (tstate != interp->tstate_head || tstate->next != NULL)
599 Py_FatalError("Py_EndInterpreter: not the last thread");
600
601 PyImport_Cleanup();
602 PyInterpreterState_Clear(interp);
603 PyThreadState_Swap(NULL);
604 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000605}
606
607static char *progname = "python";
608
609void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000610Py_SetProgramName(char *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000611{
612 if (pn && *pn)
613 progname = pn;
614}
615
616char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000617Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000618{
619 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000620}
621
Guido van Rossuma61691e1998-02-06 22:27:24 +0000622static char *default_home = NULL;
623
624void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000625Py_SetPythonHome(char *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000626{
627 default_home = home;
628}
629
630char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000631Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000632{
633 char *home = default_home;
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000634 if (home == NULL && !Py_IgnoreEnvironmentFlag)
635 home = Py_GETENV("PYTHONHOME");
Guido van Rossuma61691e1998-02-06 22:27:24 +0000636 return home;
637}
638
Guido van Rossum6135a871995-01-09 17:53:26 +0000639/* Create __main__ module */
640
641static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000642initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000643{
Guido van Rossum82598051997-03-05 00:20:32 +0000644 PyObject *m, *d;
645 m = PyImport_AddModule("__main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000646 if (m == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000647 Py_FatalError("can't create __main__ module");
648 d = PyModule_GetDict(m);
649 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
Guido van Rossum858cb731997-11-19 16:15:37 +0000650 PyObject *bimod = PyImport_ImportModule("__builtin__");
651 if (bimod == NULL ||
652 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
Guido van Rossum82598051997-03-05 00:20:32 +0000653 Py_FatalError("can't add __builtins__ to __main__");
Barry Warsaw3d05b1a1999-01-29 21:30:22 +0000654 Py_DECREF(bimod);
Guido van Rossum6135a871995-01-09 17:53:26 +0000655 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000656}
657
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000658/* Import the site module (not into __main__ though) */
659
660static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000661initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000662{
663 PyObject *m, *f;
664 m = PyImport_ImportModule("site");
665 if (m == NULL) {
666 f = PySys_GetObject("stderr");
667 if (Py_VerboseFlag) {
668 PyFile_WriteString(
669 "'import site' failed; traceback:\n", f);
670 PyErr_Print();
671 }
672 else {
673 PyFile_WriteString(
674 "'import site' failed; use -v for traceback\n", f);
675 PyErr_Clear();
676 }
677 }
678 else {
679 Py_DECREF(m);
680 }
681}
682
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000683/* Initialize sys.stdin, stdout, stderr and __builtin__.open */
684static int
685initstdio(void)
686{
687 PyObject *iomod = NULL, *wrapper;
688 PyObject *bimod = NULL;
689 PyObject *m;
690 PyObject *std = NULL;
691 int status = 0;
692
693 /* Hack to avoid a nasty recursion issue when Python is invoked
694 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
695 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
696 goto error;
697 }
698 Py_DECREF(m);
699
700 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
701 goto error;
702 }
703 Py_DECREF(m);
704
705 if (!(bimod = PyImport_ImportModule("__builtin__"))) {
706 goto error;
707 }
708
709 if (!(iomod = PyImport_ImportModule("io"))) {
710 goto error;
711 }
712 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
713 goto error;
714 }
715
716 /* Set __builtin__.open */
717 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
718 goto error;
719 }
720
721 /* Set sys.stdin */
Guido van Rossum40d20bc2007-10-22 00:09:51 +0000722 if (!(std = PyFile_FromFd(fileno(stdin), "<stdin>", "r", -1,
Guido van Rossum2dced8b2007-10-30 17:27:30 +0000723 NULL, "\n", 0))) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000724 goto error;
725 }
726 PySys_SetObject("__stdin__", std);
727 PySys_SetObject("stdin", std);
728 Py_DECREF(std);
729
730 /* Set sys.stdout */
Guido van Rossum40d20bc2007-10-22 00:09:51 +0000731 if (!(std = PyFile_FromFd(fileno(stdout), "<stdout>", "w", -1,
Guido van Rossum2dced8b2007-10-30 17:27:30 +0000732 NULL, "\n", 0))) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000733 goto error;
734 }
735 PySys_SetObject("__stdout__", std);
736 PySys_SetObject("stdout", std);
737 Py_DECREF(std);
738
Guido van Rossum2dced8b2007-10-30 17:27:30 +0000739 /* Set sys.stderr, replaces the preliminary stderr */
Guido van Rossum40d20bc2007-10-22 00:09:51 +0000740 if (!(std = PyFile_FromFd(fileno(stderr), "<stderr>", "w", -1,
Guido van Rossum2dced8b2007-10-30 17:27:30 +0000741 NULL, "\n", 0))) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000742 goto error;
743 }
744 PySys_SetObject("__stderr__", std);
745 PySys_SetObject("stderr", std);
746 Py_DECREF(std);
747
748 if (0) {
749 error:
750 status = -1;
751 }
752
753 Py_XDECREF(bimod);
754 Py_XDECREF(iomod);
755 return status;
756}
757
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000758/* Parse input from a file and execute it */
759
760int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +0000761PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000762 PyCompilerFlags *flags)
763{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000764 if (filename == NULL)
765 filename = "???";
Guido van Rossum0df002c2000-08-27 19:21:52 +0000766 if (Py_FdIsInteractive(fp, filename)) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000767 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
Guido van Rossum0df002c2000-08-27 19:21:52 +0000768 if (closeit)
769 fclose(fp);
770 return err;
771 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000772 else
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000773 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000774}
775
776int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000777PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000778{
Guido van Rossum82598051997-03-05 00:20:32 +0000779 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000780 int ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000781 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000782
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000783 if (flags == NULL) {
784 flags = &local_flags;
Tim Peters5ba58662001-07-16 02:29:45 +0000785 local_flags.cf_flags = 0;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000786 }
Guido van Rossum82598051997-03-05 00:20:32 +0000787 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000788 if (v == NULL) {
Neal Norwitza369c5a2007-08-25 07:41:59 +0000789 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
Guido van Rossum82598051997-03-05 00:20:32 +0000790 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000791 }
Guido van Rossum82598051997-03-05 00:20:32 +0000792 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000793 if (v == NULL) {
Neal Norwitza369c5a2007-08-25 07:41:59 +0000794 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
Guido van Rossum82598051997-03-05 00:20:32 +0000795 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000796 }
797 for (;;) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000798 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000799 PRINT_TOTAL_REFS();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000800 if (ret == E_EOF)
801 return 0;
802 /*
803 if (ret == E_NOMEM)
804 return -1;
805 */
806 }
807}
808
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000809/* compute parser flags based on compiler flags */
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000810#define PARSER_FLAGS(flags) \
Thomas Wouters34aa7ba2006-02-28 19:02:24 +0000811 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
Guido van Rossum45aecf42006-03-15 04:58:47 +0000812 PyPARSE_DONT_IMPLY_DEDENT : 0)) : 0)
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000813
Thomas Wouters89f507f2006-12-13 04:49:30 +0000814#if 0
815/* Keep an example of flags with future keyword support. */
816#define PARSER_FLAGS(flags) \
817 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
818 PyPARSE_DONT_IMPLY_DEDENT : 0) \
819 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
820 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
821#endif
822
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000823int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000824PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000825{
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000826 PyObject *m, *d, *v, *w, *oenc = NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000827 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +0000828 PyArena *arena;
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000829 char *ps1 = "", *ps2 = "", *enc = NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000830 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +0000831
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000832 if (fp == stdin) {
833 /* Fetch encoding from sys.stdin */
834 v = PySys_GetObject("stdin");
835 if (!v)
836 return -1;
837 oenc = PyObject_GetAttrString(v, "encoding");
838 if (!oenc)
839 return -1;
840 enc = PyUnicode_AsString(oenc);
841 }
Guido van Rossum82598051997-03-05 00:20:32 +0000842 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000843 if (v != NULL) {
Guido van Rossumc5724de2007-10-10 21:38:59 +0000844 v = PyObject_Unicode(v);
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000845 if (v == NULL)
846 PyErr_Clear();
Guido van Rossumc5724de2007-10-10 21:38:59 +0000847 else if (PyUnicode_Check(v))
848 ps1 = PyUnicode_AsString(v);
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000849 }
Guido van Rossum82598051997-03-05 00:20:32 +0000850 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000851 if (w != NULL) {
Guido van Rossumc5724de2007-10-10 21:38:59 +0000852 w = PyObject_Unicode(w);
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000853 if (w == NULL)
854 PyErr_Clear();
Guido van Rossumc5724de2007-10-10 21:38:59 +0000855 else if (PyUnicode_Check(w))
856 ps2 = PyUnicode_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000857 }
Neal Norwitz9589ee22006-03-04 19:01:22 +0000858 arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000859 if (arena == NULL) {
860 Py_XDECREF(v);
861 Py_XDECREF(w);
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000862 Py_XDECREF(oenc);
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000863 return -1;
864 }
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000865 mod = PyParser_ASTFromFile(fp, filename, enc,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000866 Py_single_input, ps1, ps2,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000867 flags, &errcode, arena);
Guido van Rossum82598051997-03-05 00:20:32 +0000868 Py_XDECREF(v);
869 Py_XDECREF(w);
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000870 Py_XDECREF(oenc);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000871 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000872 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000873 if (errcode == E_EOF) {
874 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000875 return E_EOF;
876 }
Guido van Rossum82598051997-03-05 00:20:32 +0000877 PyErr_Print();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000878 return -1;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000879 }
Guido van Rossum82598051997-03-05 00:20:32 +0000880 m = PyImport_AddModule("__main__");
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000881 if (m == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000882 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000883 return -1;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000884 }
Guido van Rossum82598051997-03-05 00:20:32 +0000885 d = PyModule_GetDict(m);
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000886 v = run_mod(mod, filename, d, d, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +0000887 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000888 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000889 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000890 return -1;
891 }
Guido van Rossum82598051997-03-05 00:20:32 +0000892 Py_DECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000893 return 0;
894}
895
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000896/* Check whether a file maybe a pyc file: Look at the extension,
897 the file type, and, if we may close it, at the first few bytes. */
898
899static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000900maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000901{
902 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
903 return 1;
904
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000905 /* Only look into the file if we are allowed to close it, since
906 it then should also be seekable. */
907 if (closeit) {
908 /* Read only two bytes of the magic. If the file was opened in
909 text mode, the bytes 3 and 4 of the magic (\r\n) might not
910 be read as they are on disk. */
911 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
912 unsigned char buf[2];
Tim Peters3e876562001-02-11 04:35:39 +0000913 /* Mess: In case of -x, the stream is NOT at its start now,
914 and ungetc() was used to push back the first newline,
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000915 which makes the current stream position formally undefined,
916 and a x-platform nightmare.
917 Unfortunately, we have no direct way to know whether -x
918 was specified. So we use a terrible hack: if the current
919 stream position is not 0, we assume -x was specified, and
920 give up. Bug 132850 on SourceForge spells out the
921 hopelessness of trying anything else (fseek and ftell
922 don't work predictably x-platform for text-mode files).
Tim Peters3e876562001-02-11 04:35:39 +0000923 */
Tim Peters3e876562001-02-11 04:35:39 +0000924 int ispyc = 0;
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000925 if (ftell(fp) == 0) {
926 if (fread(buf, 1, 2, fp) == 2 &&
Tim Petersd08e3822003-04-17 15:24:21 +0000927 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000928 ispyc = 1;
929 rewind(fp);
930 }
Tim Peters3e876562001-02-11 04:35:39 +0000931 return ispyc;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000932 }
933 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +0000934}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000935
Guido van Rossum0df002c2000-08-27 19:21:52 +0000936int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000937PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000938 PyCompilerFlags *flags)
939{
Guido van Rossum82598051997-03-05 00:20:32 +0000940 PyObject *m, *d, *v;
Martin v. Löwis95292d62002-12-11 14:04:59 +0000941 const char *ext;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000942 int set_file_name = 0, ret;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000943
Guido van Rossum82598051997-03-05 00:20:32 +0000944 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000945 if (m == NULL)
946 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000947 d = PyModule_GetDict(m);
Fred Drake8ed02042002-10-17 21:24:58 +0000948 if (PyDict_GetItemString(d, "__file__") == NULL) {
Guido van Rossum00bc0e02007-10-15 02:52:41 +0000949 PyObject *f;
950 f = PyUnicode_DecodeFSDefault(filename);
Fred Drake8ed02042002-10-17 21:24:58 +0000951 if (f == NULL)
952 return -1;
953 if (PyDict_SetItemString(d, "__file__", f) < 0) {
954 Py_DECREF(f);
955 return -1;
956 }
Guido van Rossumd8faa362007-04-27 19:54:29 +0000957 set_file_name = 1;
Fred Drake8ed02042002-10-17 21:24:58 +0000958 Py_DECREF(f);
959 }
Guido van Rossumfdef2711994-09-14 13:31:04 +0000960 ext = filename + strlen(filename) - 4;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000961 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000962 /* Try to run a pyc file. First, re-open in binary */
Guido van Rossum0df002c2000-08-27 19:21:52 +0000963 if (closeit)
964 fclose(fp);
Fred Drake8ed02042002-10-17 21:24:58 +0000965 if ((fp = fopen(filename, "rb")) == NULL) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000966 fprintf(stderr, "python: Can't reopen .pyc file\n");
Guido van Rossumd8faa362007-04-27 19:54:29 +0000967 ret = -1;
968 goto done;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000969 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000970 /* Turn on optimization if a .pyo file is given */
971 if (strcmp(ext, ".pyo") == 0)
972 Py_OptimizeFlag = 1;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000973 v = run_pyc_file(fp, filename, d, d, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000974 } else {
Tim Petersd08e3822003-04-17 15:24:21 +0000975 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000976 closeit, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000977 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000978 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000979 PyErr_Print();
Guido van Rossumd8faa362007-04-27 19:54:29 +0000980 ret = -1;
981 goto done;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000982 }
Guido van Rossum82598051997-03-05 00:20:32 +0000983 Py_DECREF(v);
Guido van Rossumd8faa362007-04-27 19:54:29 +0000984 ret = 0;
985 done:
986 if (set_file_name && PyDict_DelItemString(d, "__file__"))
987 PyErr_Clear();
988 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000989}
990
991int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000992PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +0000993{
Guido van Rossum82598051997-03-05 00:20:32 +0000994 PyObject *m, *d, *v;
995 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000996 if (m == NULL)
997 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000998 d = PyModule_GetDict(m);
Guido van Rossum393661d2001-08-31 17:40:15 +0000999 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001000 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +00001001 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001002 return -1;
1003 }
Guido van Rossum82598051997-03-05 00:20:32 +00001004 Py_DECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001005 return 0;
1006}
1007
Barry Warsaw035574d1997-08-29 22:07:17 +00001008static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001009parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
1010 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001011{
1012 long hold;
1013 PyObject *v;
1014
1015 /* old style errors */
1016 if (PyTuple_Check(err))
Neal Norwitz78293352002-04-01 01:41:20 +00001017 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
Neal Norwitz9589ee22006-03-04 19:01:22 +00001018 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001019
1020 /* new style errors. `err' is an instance */
1021
1022 if (! (v = PyObject_GetAttrString(err, "msg")))
1023 goto finally;
1024 *message = v;
1025
1026 if (!(v = PyObject_GetAttrString(err, "filename")))
1027 goto finally;
1028 if (v == Py_None)
1029 *filename = NULL;
1030 else if (! (*filename = PyString_AsString(v)))
1031 goto finally;
1032
1033 Py_DECREF(v);
1034 if (!(v = PyObject_GetAttrString(err, "lineno")))
1035 goto finally;
1036 hold = PyInt_AsLong(v);
1037 Py_DECREF(v);
1038 v = NULL;
1039 if (hold < 0 && PyErr_Occurred())
1040 goto finally;
1041 *lineno = (int)hold;
1042
1043 if (!(v = PyObject_GetAttrString(err, "offset")))
1044 goto finally;
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001045 if (v == Py_None) {
1046 *offset = -1;
1047 Py_DECREF(v);
1048 v = NULL;
1049 } else {
1050 hold = PyInt_AsLong(v);
1051 Py_DECREF(v);
1052 v = NULL;
1053 if (hold < 0 && PyErr_Occurred())
1054 goto finally;
1055 *offset = (int)hold;
1056 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001057
1058 if (!(v = PyObject_GetAttrString(err, "text")))
1059 goto finally;
1060 if (v == Py_None)
1061 *text = NULL;
Guido van Rossumc5724de2007-10-10 21:38:59 +00001062 else if (!PyUnicode_Check(v) ||
1063 !(*text = PyUnicode_AsString(v)))
Barry Warsaw035574d1997-08-29 22:07:17 +00001064 goto finally;
1065 Py_DECREF(v);
1066 return 1;
1067
1068finally:
1069 Py_XDECREF(v);
1070 return 0;
1071}
1072
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001073void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001074PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001075{
Guido van Rossuma61691e1998-02-06 22:27:24 +00001076 PyErr_PrintEx(1);
1077}
1078
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001079static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001080print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001081{
1082 char *nl;
1083 if (offset >= 0) {
1084 if (offset > 0 && offset == (int)strlen(text))
1085 offset--;
1086 for (;;) {
1087 nl = strchr(text, '\n');
1088 if (nl == NULL || nl-text >= offset)
1089 break;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001090 offset -= (int)(nl+1-text);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001091 text = nl+1;
1092 }
1093 while (*text == ' ' || *text == '\t') {
1094 text++;
1095 offset--;
1096 }
1097 }
1098 PyFile_WriteString(" ", f);
1099 PyFile_WriteString(text, f);
1100 if (*text == '\0' || text[strlen(text)-1] != '\n')
1101 PyFile_WriteString("\n", f);
1102 if (offset == -1)
1103 return;
1104 PyFile_WriteString(" ", f);
1105 offset--;
1106 while (offset > 0) {
1107 PyFile_WriteString(" ", f);
1108 offset--;
1109 }
1110 PyFile_WriteString("^\n", f);
1111}
1112
Guido van Rossum66e8e862001-03-23 17:54:43 +00001113static void
1114handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001115{
Neal Norwitz9589ee22006-03-04 19:01:22 +00001116 PyObject *exception, *value, *tb;
1117 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001118
Guido van Rossumd8faa362007-04-27 19:54:29 +00001119 if (Py_InspectFlag)
1120 /* Don't exit if -i flag was given. This flag is set to 0
1121 * when entering interactive mode for inspecting. */
1122 return;
1123
Guido van Rossum66e8e862001-03-23 17:54:43 +00001124 PyErr_Fetch(&exception, &value, &tb);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001125 fflush(stdout);
1126 if (value == NULL || value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001127 goto done;
Brett Cannonbf364092006-03-01 04:25:17 +00001128 if (PyExceptionInstance_Check(value)) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001129 /* The error code should be in the `code' attribute. */
1130 PyObject *code = PyObject_GetAttrString(value, "code");
1131 if (code) {
1132 Py_DECREF(value);
1133 value = code;
1134 if (value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001135 goto done;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001136 }
1137 /* If we failed to dig out the 'code' attribute,
1138 just let the else clause below print the error. */
1139 }
1140 if (PyInt_Check(value))
Tim Peterscf615b52003-04-19 18:47:02 +00001141 exitcode = (int)PyInt_AsLong(value);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001142 else {
1143 PyObject_Print(value, stderr, Py_PRINT_RAW);
1144 PySys_WriteStderr("\n");
Tim Peterscf615b52003-04-19 18:47:02 +00001145 exitcode = 1;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001146 }
Tim Peterscf615b52003-04-19 18:47:02 +00001147 done:
Neal Norwitz9589ee22006-03-04 19:01:22 +00001148 /* Restore and clear the exception info, in order to properly decref
1149 * the exception, value, and traceback. If we just exit instead,
1150 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1151 * some finalizers from running.
1152 */
Tim Peterscf615b52003-04-19 18:47:02 +00001153 PyErr_Restore(exception, value, tb);
1154 PyErr_Clear();
1155 Py_Exit(exitcode);
1156 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001157}
1158
1159void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001160PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001161{
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001162 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001163
1164 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1165 handle_system_exit();
1166 }
Guido van Rossum82598051997-03-05 00:20:32 +00001167 PyErr_Fetch(&exception, &v, &tb);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001168 if (exception == NULL)
1169 return;
Barry Warsaw035574d1997-08-29 22:07:17 +00001170 PyErr_NormalizeException(&exception, &v, &tb);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001171 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +00001172 return;
Guido van Rossum9d785502006-03-07 18:31:44 +00001173 /* Now we know v != NULL too */
Guido van Rossuma61691e1998-02-06 22:27:24 +00001174 if (set_sys_last_vars) {
1175 PySys_SetObject("last_type", exception);
1176 PySys_SetObject("last_value", v);
Guido van Rossumc5724de2007-10-10 21:38:59 +00001177 PySys_SetObject("last_traceback", tb ? tb : Py_None);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001178 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001179 hook = PySys_GetObject("excepthook");
1180 if (hook) {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00001181 PyObject *args = PyTuple_Pack(3,
Guido van Rossum9d785502006-03-07 18:31:44 +00001182 exception, v, tb ? tb : Py_None);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001183 PyObject *result = PyEval_CallObject(hook, args);
1184 if (result == NULL) {
1185 PyObject *exception2, *v2, *tb2;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001186 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1187 handle_system_exit();
1188 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001189 PyErr_Fetch(&exception2, &v2, &tb2);
1190 PyErr_NormalizeException(&exception2, &v2, &tb2);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001191 /* It should not be possible for exception2 or v2
1192 to be NULL. However PyErr_Display() can't
1193 tolerate NULLs, so just be safe. */
1194 if (exception2 == NULL) {
1195 exception2 = Py_None;
1196 Py_INCREF(exception2);
1197 }
1198 if (v2 == NULL) {
1199 v2 = Py_None;
1200 Py_INCREF(v2);
1201 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001202 fflush(stdout);
1203 PySys_WriteStderr("Error in sys.excepthook:\n");
1204 PyErr_Display(exception2, v2, tb2);
1205 PySys_WriteStderr("\nOriginal exception was:\n");
1206 PyErr_Display(exception, v, tb);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001207 Py_DECREF(exception2);
1208 Py_DECREF(v2);
Jeremy Hylton07028582001-12-07 15:35:35 +00001209 Py_XDECREF(tb2);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001210 }
1211 Py_XDECREF(result);
1212 Py_XDECREF(args);
1213 } else {
1214 PySys_WriteStderr("sys.excepthook is missing\n");
1215 PyErr_Display(exception, v, tb);
1216 }
1217 Py_XDECREF(exception);
1218 Py_XDECREF(v);
1219 Py_XDECREF(tb);
1220}
1221
Thomas Wouters477c8d52006-05-27 19:21:47 +00001222void
1223PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001224{
1225 int err = 0;
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001226 PyObject *f = PySys_GetObject("stderr");
Armin Rigo5d2c6832004-03-22 20:16:58 +00001227 Py_INCREF(value);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001228 if (f == NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00001229 _PyObject_Dump(value);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001230 fprintf(stderr, "lost sys.stderr\n");
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001231 }
Guido van Rossum3165fe61992-09-25 21:59:05 +00001232 else {
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001233 fflush(stdout);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001234 if (tb && tb != Py_None)
1235 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +00001236 if (err == 0 &&
Armin Rigo5d2c6832004-03-22 20:16:58 +00001237 PyObject_HasAttrString(value, "print_file_and_line"))
Barry Warsaw36b8f941997-08-26 18:09:48 +00001238 {
Guido van Rossum82598051997-03-05 00:20:32 +00001239 PyObject *message;
Martin v. Löwis95292d62002-12-11 14:04:59 +00001240 const char *filename, *text;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001241 int lineno, offset;
Armin Rigo5d2c6832004-03-22 20:16:58 +00001242 if (!parse_syntax_error(value, &message, &filename,
Barry Warsaw035574d1997-08-29 22:07:17 +00001243 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +00001244 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001245 else {
1246 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +00001247 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001248 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +00001249 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001250 else
Guido van Rossum82598051997-03-05 00:20:32 +00001251 PyFile_WriteString(filename, f);
1252 PyFile_WriteString("\", line ", f);
Jeremy Hylton518ab1c2001-11-28 20:42:20 +00001253 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +00001254 PyFile_WriteString(buf, f);
1255 PyFile_WriteString("\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001256 if (text != NULL)
1257 print_error_text(f, offset, text);
Armin Rigo5d2c6832004-03-22 20:16:58 +00001258 Py_DECREF(value);
1259 value = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001260 /* Can't be bothered to check all those
1261 PyFile_WriteString() calls */
1262 if (PyErr_Occurred())
1263 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001264 }
1265 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001266 if (err) {
1267 /* Don't do anything else */
1268 }
Brett Cannonbf364092006-03-01 04:25:17 +00001269 else if (PyExceptionClass_Check(exception)) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001270 PyObject* moduleName;
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001271 char* className = PyExceptionClass_Name(exception);
1272 if (className != NULL) {
1273 char *dot = strrchr(className, '.');
1274 if (dot != NULL)
1275 className = dot+1;
1276 }
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001277
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001278 moduleName = PyObject_GetAttrString(exception, "__module__");
Guido van Rossumc5724de2007-10-10 21:38:59 +00001279 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1280 {
1281 Py_DECREF(moduleName);
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001282 err = PyFile_WriteString("<unknown>", f);
Guido van Rossumc5724de2007-10-10 21:38:59 +00001283 }
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001284 else {
Guido van Rossumc5724de2007-10-10 21:38:59 +00001285 char* modstr = PyUnicode_AsString(moduleName);
Neal Norwitz2633c692007-02-26 22:22:47 +00001286 if (modstr && strcmp(modstr, "__builtin__"))
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001287 {
1288 err = PyFile_WriteString(modstr, f);
1289 err += PyFile_WriteString(".", f);
1290 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001291 Py_DECREF(moduleName);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001292 }
1293 if (err == 0) {
1294 if (className == NULL)
1295 err = PyFile_WriteString("<unknown>", f);
1296 else
Brett Cannonbf364092006-03-01 04:25:17 +00001297 err = PyFile_WriteString(className, f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001298 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001299 }
1300 else
1301 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
Brett Cannon2e63b732006-03-02 18:34:57 +00001302 if (err == 0 && (value != Py_None)) {
Guido van Rossumc5724de2007-10-10 21:38:59 +00001303 PyObject *s = PyObject_Unicode(value);
Brett Cannon2e63b732006-03-02 18:34:57 +00001304 /* only print colon if the str() of the
1305 object is not the empty string
1306 */
1307 if (s == NULL)
1308 err = -1;
Guido van Rossumc5724de2007-10-10 21:38:59 +00001309 else if (!PyUnicode_Check(s) ||
1310 PyUnicode_GetSize(s) != 0)
Brett Cannon2e63b732006-03-02 18:34:57 +00001311 err = PyFile_WriteString(": ", f);
1312 if (err == 0)
1313 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1314 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +00001315 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00001316 /* try to write a newline in any case */
1317 err += PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001318 }
Armin Rigo5d2c6832004-03-22 20:16:58 +00001319 Py_DECREF(value);
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001320 /* If an error happened here, don't show it.
1321 XXX This is wrong, but too many callers rely on this behavior. */
1322 if (err != 0)
1323 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001324}
1325
Guido van Rossum82598051997-03-05 00:20:32 +00001326PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001327PyRun_StringFlags(const char *str, int start, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001328 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001329{
Neal Norwitze92fba02006-03-04 18:52:26 +00001330 PyObject *ret = NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001331 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001332 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001333 if (arena == NULL)
1334 return NULL;
1335
1336 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
Neal Norwitze92fba02006-03-04 18:52:26 +00001337 if (mod != NULL)
1338 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001339 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001340 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001341}
1342
1343PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001344PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001345 PyObject *locals, int closeit, PyCompilerFlags *flags)
1346{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001347 PyObject *ret;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001348 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001349 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001350 if (arena == NULL)
1351 return NULL;
1352
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001353 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001354 flags, NULL, arena);
Guido van Rossumd8faa362007-04-27 19:54:29 +00001355 if (closeit)
1356 fclose(fp);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001357 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001358 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001359 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001360 }
Neal Norwitze92fba02006-03-04 18:52:26 +00001361 ret = run_mod(mod, filename, globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001362 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001363 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001364}
1365
Guido van Rossum82598051997-03-05 00:20:32 +00001366static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001367run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001368 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001369{
Guido van Rossum82598051997-03-05 00:20:32 +00001370 PyCodeObject *co;
1371 PyObject *v;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001372 co = PyAST_Compile(mod, filename, flags, arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001373 if (co == NULL)
1374 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +00001375 v = PyEval_EvalCode(co, globals, locals);
1376 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001377 return v;
1378}
1379
Guido van Rossum82598051997-03-05 00:20:32 +00001380static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001381run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001382 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001383{
Guido van Rossum82598051997-03-05 00:20:32 +00001384 PyCodeObject *co;
1385 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001386 long magic;
Fred Drakee8de31c2000-08-31 05:38:39 +00001387 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001388
Guido van Rossum82598051997-03-05 00:20:32 +00001389 magic = PyMarshal_ReadLongFromFile(fp);
1390 if (magic != PyImport_GetMagicNumber()) {
1391 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001392 "Bad magic number in .pyc file");
1393 return NULL;
1394 }
Guido van Rossum82598051997-03-05 00:20:32 +00001395 (void) PyMarshal_ReadLongFromFile(fp);
Tim Petersd9b9ac82001-01-28 00:27:39 +00001396 v = PyMarshal_ReadLastObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001397 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +00001398 if (v == NULL || !PyCode_Check(v)) {
1399 Py_XDECREF(v);
1400 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001401 "Bad code object in .pyc file");
1402 return NULL;
1403 }
Guido van Rossum82598051997-03-05 00:20:32 +00001404 co = (PyCodeObject *)v;
1405 v = PyEval_EvalCode(co, globals, locals);
Jeremy Hyltonb857ba22001-08-10 21:41:33 +00001406 if (v && flags)
1407 flags->cf_flags |= (co->co_flags & PyCF_MASK);
Guido van Rossum82598051997-03-05 00:20:32 +00001408 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001409 return v;
1410}
1411
Guido van Rossum82598051997-03-05 00:20:32 +00001412PyObject *
Tim Petersd08e3822003-04-17 15:24:21 +00001413Py_CompileStringFlags(const char *str, const char *filename, int start,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001414 PyCompilerFlags *flags)
1415{
Guido van Rossum82598051997-03-05 00:20:32 +00001416 PyCodeObject *co;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001417 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001418 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001419 if (arena == NULL)
1420 return NULL;
1421
1422 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001423 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001424 PyArena_Free(arena);
Guido van Rossum5b722181993-03-30 17:46:03 +00001425 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001426 }
Martin v. Löwis2b366e42006-02-26 22:12:35 +00001427 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001428 PyObject *result = PyAST_mod2obj(mod);
1429 PyArena_Free(arena);
1430 return result;
1431 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001432 co = PyAST_Compile(mod, filename, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001433 PyArena_Free(arena);
Guido van Rossum82598051997-03-05 00:20:32 +00001434 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001435}
1436
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001437struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001438Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001439{
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001440 struct symtable *st;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001441 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001442 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001443 if (arena == NULL)
1444 return NULL;
1445
1446 mod = PyParser_ASTFromString(str, filename, start, NULL, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001447 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001448 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001449 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001450 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001451 st = PySymtable_Build(mod, filename, 0);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001452 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001453 return st;
1454}
1455
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001456/* Preferred access to parser is through AST. */
1457mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001458PyParser_ASTFromString(const char *s, const char *filename, int start,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001459 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001460{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001461 mod_ty mod;
1462 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001463 node *n = PyParser_ParseStringFlagsFilename(s, filename,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001464 &_PyParser_Grammar, start, &err,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001465 PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001466 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001467 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001468 PyNode_Free(n);
1469 return mod;
1470 }
1471 else {
1472 err_input(&err);
1473 return NULL;
1474 }
1475}
1476
1477mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001478PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
1479 int start, char *ps1,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001480 char *ps2, PyCompilerFlags *flags, int *errcode,
Neal Norwitz9589ee22006-03-04 19:01:22 +00001481 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001482{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001483 mod_ty mod;
1484 perrdetail err;
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001485 node *n = PyParser_ParseFileFlags(fp, filename, enc,
1486 &_PyParser_Grammar,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001487 start, ps1, ps2, &err, PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001488 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001489 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001490 PyNode_Free(n);
1491 return mod;
1492 }
1493 else {
1494 err_input(&err);
1495 if (errcode)
1496 *errcode = err.error;
1497 return NULL;
1498 }
1499}
1500
Guido van Rossuma110aa61994-08-29 12:50:44 +00001501/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001502
Guido van Rossuma110aa61994-08-29 12:50:44 +00001503node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001504PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001505{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001506 perrdetail err;
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001507 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
1508 &_PyParser_Grammar,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001509 start, NULL, NULL, &err, flags);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001510 if (n == NULL)
1511 err_input(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001512
Guido van Rossuma110aa61994-08-29 12:50:44 +00001513 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001514}
1515
Guido van Rossuma110aa61994-08-29 12:50:44 +00001516/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001517
Guido van Rossuma110aa61994-08-29 12:50:44 +00001518node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001519PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001520{
Tim Petersfe2127d2001-07-16 05:37:24 +00001521 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001522 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1523 start, &err, flags);
Tim Petersfe2127d2001-07-16 05:37:24 +00001524 if (n == NULL)
1525 err_input(&err);
1526 return n;
1527}
1528
1529node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001530PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Thomas Heller6b17abf2002-07-09 09:23:27 +00001531 int start, int flags)
1532{
Thomas Heller6b17abf2002-07-09 09:23:27 +00001533 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001534 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1535 &_PyParser_Grammar, start, &err, flags);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001536 if (n == NULL)
1537 err_input(&err);
1538 return n;
1539}
1540
1541node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001542PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001543{
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001544 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001545}
1546
Guido van Rossum66ebd912003-04-17 16:02:26 +00001547/* May want to move a more generalized form of this to parsetok.c or
1548 even parser modules. */
1549
1550void
1551PyParser_SetError(perrdetail *err)
1552{
1553 err_input(err);
1554}
1555
Guido van Rossuma110aa61994-08-29 12:50:44 +00001556/* Set the error appropriate to the given input error code (see errcode.h) */
1557
1558static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001559err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00001560{
Martin v. Löwis5deb2102007-08-31 11:17:42 +00001561 PyObject *v, *w, *errtype, *errtext;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001562 PyObject* u = NULL;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001563 char *msg = NULL;
Fred Drake85f36392000-07-11 17:53:00 +00001564 errtype = PyExc_SyntaxError;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001565 switch (err->error) {
1566 case E_SYNTAX:
Fred Drake85f36392000-07-11 17:53:00 +00001567 errtype = PyExc_IndentationError;
1568 if (err->expected == INDENT)
1569 msg = "expected an indented block";
1570 else if (err->token == INDENT)
1571 msg = "unexpected indent";
1572 else if (err->token == DEDENT)
1573 msg = "unexpected unindent";
1574 else {
1575 errtype = PyExc_SyntaxError;
1576 msg = "invalid syntax";
1577 }
Guido van Rossuma110aa61994-08-29 12:50:44 +00001578 break;
1579 case E_TOKEN:
1580 msg = "invalid token";
Guido van Rossuma110aa61994-08-29 12:50:44 +00001581 break;
Skip Montanaro118ec702002-08-15 01:20:16 +00001582 case E_EOFS:
1583 msg = "EOF while scanning triple-quoted string";
1584 break;
1585 case E_EOLS:
1586 msg = "EOL while scanning single-quoted string";
1587 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001588 case E_INTR:
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001589 if (!PyErr_Occurred())
1590 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001591 return;
1592 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +00001593 PyErr_NoMemory();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001594 return;
1595 case E_EOF:
1596 msg = "unexpected EOF while parsing";
1597 break;
Fred Drake85f36392000-07-11 17:53:00 +00001598 case E_TABSPACE:
1599 errtype = PyExc_TabError;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001600 msg = "inconsistent use of tabs and spaces in indentation";
1601 break;
Jeremy Hylton94988062000-06-20 19:10:44 +00001602 case E_OVERFLOW:
1603 msg = "expression too long";
1604 break;
Fred Drake85f36392000-07-11 17:53:00 +00001605 case E_DEDENT:
1606 errtype = PyExc_IndentationError;
1607 msg = "unindent does not match any outer indentation level";
1608 break;
1609 case E_TOODEEP:
1610 errtype = PyExc_IndentationError;
1611 msg = "too many levels of indentation";
1612 break;
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001613 case E_DECODE: {
1614 PyObject *type, *value, *tb;
1615 PyErr_Fetch(&type, &value, &tb);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001616 if (value != NULL) {
Guido van Rossumc5724de2007-10-10 21:38:59 +00001617 u = PyObject_Unicode(value);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001618 if (u != NULL) {
Guido van Rossumc5724de2007-10-10 21:38:59 +00001619 msg = PyUnicode_AsString(u);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001620 }
1621 }
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001622 if (msg == NULL)
1623 msg = "unknown decode error";
Neal Norwitzdb83eb32005-12-18 05:29:30 +00001624 Py_XDECREF(type);
1625 Py_XDECREF(value);
Neal Norwitz40d37812005-10-02 01:48:49 +00001626 Py_XDECREF(tb);
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001627 break;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001628 }
Martin v. Löwis4bf108d2005-03-03 11:45:45 +00001629 case E_LINECONT:
1630 msg = "unexpected character after line continuation character";
1631 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00001632
1633 case E_IDENTIFIER:
1634 msg = "invalid character in identifier";
1635 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001636 default:
1637 fprintf(stderr, "error=%d\n", err->error);
1638 msg = "unknown parsing error";
1639 break;
1640 }
Martin v. Löwis5deb2102007-08-31 11:17:42 +00001641 /* err->text may not be UTF-8 in case of decoding errors.
1642 Explicitly convert to an object. */
1643 if (!err->text) {
1644 errtext = Py_None;
1645 Py_INCREF(Py_None);
1646 } else {
1647 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
1648 "replace");
1649 }
1650 v = Py_BuildValue("(ziiN)", err->filename,
1651 err->lineno, err->offset, errtext);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001652 if (err->text != NULL) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001653 PyObject_FREE(err->text);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001654 err->text = NULL;
1655 }
1656 w = NULL;
1657 if (v != NULL)
1658 w = Py_BuildValue("(sO)", msg, v);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001659 Py_XDECREF(u);
Guido van Rossum41318302001-03-23 04:01:07 +00001660 Py_XDECREF(v);
Fred Drake85f36392000-07-11 17:53:00 +00001661 PyErr_SetObject(errtype, w);
Guido van Rossum82598051997-03-05 00:20:32 +00001662 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001663}
1664
1665/* Print fatal error message and abort */
1666
1667void
Tim Peters7c321a82002-07-09 02:57:01 +00001668Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001669{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00001670 fprintf(stderr, "Fatal Python error: %s\n", msg);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001671 if (PyErr_Occurred()) {
1672 PyErr_Print();
1673 }
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001674#ifdef MS_WINDOWS
Guido van Rossum23c94461997-05-22 20:21:30 +00001675 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +00001676 OutputDebugString(msg);
1677 OutputDebugString("\n");
Guido van Rossum0ba35361998-08-13 13:33:16 +00001678#ifdef _DEBUG
1679 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00001680#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001681#endif /* MS_WINDOWS */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001682 abort();
1683}
1684
1685/* Clean up and exit */
1686
Guido van Rossuma110aa61994-08-29 12:50:44 +00001687#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00001688#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001689#endif
1690
Collin Winter670e6922007-03-21 02:57:17 +00001691static void (*pyexitfunc)(void) = NULL;
1692/* For the atexit module. */
1693void _Py_PyAtExit(void (*func)(void))
1694{
1695 pyexitfunc = func;
1696}
1697
1698static void
1699call_py_exitfuncs(void)
1700{
1701 if (pyexitfunc == NULL)
1702 return;
1703
1704 (*pyexitfunc)();
1705 PyErr_Clear();
1706}
1707
Guido van Rossum2dcfc961998-10-01 16:01:57 +00001708#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001709static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00001710static int nexitfuncs = 0;
1711
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001712int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00001713{
1714 if (nexitfuncs >= NEXITFUNCS)
1715 return -1;
1716 exitfuncs[nexitfuncs++] = func;
1717 return 0;
1718}
1719
Guido van Rossumcc283f51997-08-05 02:22:03 +00001720static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001721call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00001722{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001723 while (nexitfuncs > 0)
1724 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001725
1726 fflush(stdout);
1727 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001728}
1729
1730void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001731Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001732{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001733 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001734
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001735 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001736}
1737
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001738static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001739initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001740{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001741#ifdef SIGPIPE
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001742 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001743#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00001744#ifdef SIGXFZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001745 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00001746#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001747#ifdef SIGXFSZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001748 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001749#endif
Guido van Rossum82598051997-03-05 00:20:32 +00001750 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001751}
1752
Guido van Rossum7433b121997-02-14 19:45:36 +00001753
1754/*
1755 * The file descriptor fd is considered ``interactive'' if either
1756 * a) isatty(fd) is TRUE, or
1757 * b) the -i flag was given, and the filename associated with
1758 * the descriptor is NULL or "<stdin>" or "???".
1759 */
1760int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001761Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00001762{
1763 if (isatty((int)fileno(fp)))
1764 return 1;
1765 if (!Py_InteractiveFlag)
1766 return 0;
1767 return (filename == NULL) ||
1768 (strcmp(filename, "<stdin>") == 0) ||
1769 (strcmp(filename, "???") == 0);
1770}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001771
1772
Tim Petersd08e3822003-04-17 15:24:21 +00001773#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001774#if defined(WIN32) && defined(_MSC_VER)
1775
1776/* Stack checking for Microsoft C */
1777
1778#include <malloc.h>
1779#include <excpt.h>
1780
Fred Drakee8de31c2000-08-31 05:38:39 +00001781/*
1782 * Return non-zero when we run out of memory on the stack; zero otherwise.
1783 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001784int
Fred Drake399739f2000-08-31 05:52:44 +00001785PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001786{
1787 __try {
Tim Peters92e4dd82002-10-05 01:47:34 +00001788 /* alloca throws a stack overflow exception if there's
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001789 not enough space left on the stack */
Tim Peters92e4dd82002-10-05 01:47:34 +00001790 alloca(PYOS_STACK_MARGIN * sizeof(void*));
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001791 return 0;
1792 } __except (EXCEPTION_EXECUTE_HANDLER) {
1793 /* just ignore all errors */
1794 }
1795 return 1;
1796}
1797
1798#endif /* WIN32 && _MSC_VER */
1799
1800/* Alternate implementations can be added here... */
1801
1802#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00001803
1804
1805/* Wrappers around sigaction() or signal(). */
1806
1807PyOS_sighandler_t
1808PyOS_getsig(int sig)
1809{
1810#ifdef HAVE_SIGACTION
1811 struct sigaction context;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001812 if (sigaction(sig, NULL, &context) == -1)
1813 return SIG_ERR;
Guido van Rossum6f256182000-09-16 16:32:19 +00001814 return context.sa_handler;
1815#else
1816 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00001817/* Special signal handling for the secure CRT in Visual Studio 2005 */
1818#if defined(_MSC_VER) && _MSC_VER >= 1400
1819 switch (sig) {
1820 /* Only these signals are valid */
1821 case SIGINT:
1822 case SIGILL:
1823 case SIGFPE:
1824 case SIGSEGV:
1825 case SIGTERM:
1826 case SIGBREAK:
1827 case SIGABRT:
1828 break;
1829 /* Don't call signal() with other values or it will assert */
1830 default:
1831 return SIG_ERR;
1832 }
1833#endif /* _MSC_VER && _MSC_VER >= 1400 */
Guido van Rossum6f256182000-09-16 16:32:19 +00001834 handler = signal(sig, SIG_IGN);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001835 if (handler != SIG_ERR)
1836 signal(sig, handler);
Guido van Rossum6f256182000-09-16 16:32:19 +00001837 return handler;
1838#endif
1839}
1840
1841PyOS_sighandler_t
1842PyOS_setsig(int sig, PyOS_sighandler_t handler)
1843{
1844#ifdef HAVE_SIGACTION
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001845 struct sigaction context, ocontext;
Guido van Rossum6f256182000-09-16 16:32:19 +00001846 context.sa_handler = handler;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001847 sigemptyset(&context.sa_mask);
1848 context.sa_flags = 0;
1849 if (sigaction(sig, &context, &ocontext) == -1)
1850 return SIG_ERR;
1851 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001852#else
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001853 PyOS_sighandler_t oldhandler;
1854 oldhandler = signal(sig, handler);
1855#ifdef HAVE_SIGINTERRUPT
1856 siginterrupt(sig, 1);
1857#endif
1858 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001859#endif
1860}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001861
1862/* Deprecated C API functions still provided for binary compatiblity */
1863
1864#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001865PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001866PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
1867{
1868 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
1869}
1870
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001871#undef PyParser_SimpleParseString
1872PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001873PyParser_SimpleParseString(const char *str, int start)
1874{
1875 return PyParser_SimpleParseStringFlags(str, start, 0);
1876}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001877
1878#undef PyRun_AnyFile
1879PyAPI_FUNC(int)
1880PyRun_AnyFile(FILE *fp, const char *name)
1881{
1882 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
1883}
1884
1885#undef PyRun_AnyFileEx
1886PyAPI_FUNC(int)
1887PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
1888{
1889 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
1890}
1891
1892#undef PyRun_AnyFileFlags
1893PyAPI_FUNC(int)
1894PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
1895{
1896 return PyRun_AnyFileExFlags(fp, name, 0, flags);
1897}
1898
1899#undef PyRun_File
1900PyAPI_FUNC(PyObject *)
1901PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
1902{
1903 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
1904}
1905
1906#undef PyRun_FileEx
1907PyAPI_FUNC(PyObject *)
1908PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
1909{
1910 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
1911}
1912
1913#undef PyRun_FileFlags
1914PyAPI_FUNC(PyObject *)
1915PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
1916 PyCompilerFlags *flags)
1917{
1918 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
1919}
1920
1921#undef PyRun_SimpleFile
1922PyAPI_FUNC(int)
1923PyRun_SimpleFile(FILE *f, const char *p)
1924{
1925 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
1926}
1927
1928#undef PyRun_SimpleFileEx
1929PyAPI_FUNC(int)
1930PyRun_SimpleFileEx(FILE *f, const char *p, int c)
1931{
1932 return PyRun_SimpleFileExFlags(f, p, c, NULL);
1933}
1934
1935
1936#undef PyRun_String
1937PyAPI_FUNC(PyObject *)
1938PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
1939{
1940 return PyRun_StringFlags(str, s, g, l, NULL);
1941}
1942
1943#undef PyRun_SimpleString
1944PyAPI_FUNC(int)
1945PyRun_SimpleString(const char *s)
1946{
1947 return PyRun_SimpleStringFlags(s, NULL);
1948}
1949
1950#undef Py_CompileString
1951PyAPI_FUNC(PyObject *)
1952Py_CompileString(const char *str, const char *p, int s)
1953{
1954 return Py_CompileStringFlags(str, p, s, NULL);
1955}
1956
1957#undef PyRun_InteractiveOne
1958PyAPI_FUNC(int)
1959PyRun_InteractiveOne(FILE *f, const char *p)
1960{
1961 return PyRun_InteractiveOneFlags(f, p, NULL);
1962}
1963
1964#undef PyRun_InteractiveLoop
1965PyAPI_FUNC(int)
1966PyRun_InteractiveLoop(FILE *f, const char *p)
1967{
1968 return PyRun_InteractiveLoopFlags(f, p, NULL);
1969}
1970
1971#ifdef __cplusplus
1972}
1973#endif