blob: 0ba8646ab5d2fcbff62f91d513922ecff96fa8c0 [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
Christian Heimes9a68f8c2007-11-14 00:16:07 +0000220 /* initialize builtin exceptions */
221 _PyExc_Init();
222
Guido van Rossum25ce5661997-08-02 03:10:38 +0000223 sysmod = _PySys_Init();
224 if (sysmod == NULL)
225 Py_FatalError("Py_Initialize: can't initialize sys");
226 interp->sysdict = PyModule_GetDict(sysmod);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000227 if (interp->sysdict == NULL)
228 Py_FatalError("Py_Initialize: can't initialize sys dict");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000229 Py_INCREF(interp->sysdict);
230 _PyImport_FixupExtension("sys", "sys");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000231 PySys_SetPath(Py_GetPath());
Guido van Rossum25ce5661997-08-02 03:10:38 +0000232 PyDict_SetItemString(interp->sysdict, "modules",
233 interp->modules);
234
Guido van Rossum826d8972007-10-30 18:34:07 +0000235 /* Set up a preliminary stderr printer until we have enough
236 infrastructure for the io module in place. */
237 pstderr = PyFile_NewStdPrinter(fileno(stderr));
238 if (pstderr == NULL)
239 Py_FatalError("Py_Initialize: can't set preliminary stderr");
240 PySys_SetObject("stderr", pstderr);
Guido van Rossum98297ee2007-11-06 21:34:58 +0000241 PySys_SetObject("__stderr__", pstderr);
Guido van Rossum826d8972007-10-30 18:34:07 +0000242
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000243 _PyImport_Init();
244
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
Christian Heimes2be03732007-11-15 02:26:46 +0000338 if (fout != NULL && fout != Py_None) {
Guido van Rossume8432ac2007-07-09 15:04:50 +0000339 tmp = PyObject_CallMethod(fout, "flush", "");
340 if (tmp == NULL)
341 PyErr_Clear();
342 else
343 Py_DECREF(tmp);
344 }
345
Christian Heimes2be03732007-11-15 02:26:46 +0000346 if (ferr != NULL || ferr != Py_None) {
Guido van Rossume8432ac2007-07-09 15:04:50 +0000347 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");
Christian Heimes2be03732007-11-15 02:26:46 +0000696 if (f == NULL || f == Py_None)
697 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000698 if (Py_VerboseFlag) {
699 PyFile_WriteString(
700 "'import site' failed; traceback:\n", f);
701 PyErr_Print();
702 }
703 else {
704 PyFile_WriteString(
705 "'import site' failed; use -v for traceback\n", f);
706 PyErr_Clear();
707 }
708 }
709 else {
710 Py_DECREF(m);
711 }
712}
713
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000714/* Initialize sys.stdin, stdout, stderr and __builtin__.open */
715static int
716initstdio(void)
717{
718 PyObject *iomod = NULL, *wrapper;
719 PyObject *bimod = NULL;
720 PyObject *m;
721 PyObject *std = NULL;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000722 int status = 0, fd;
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000723
724 /* Hack to avoid a nasty recursion issue when Python is invoked
725 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
726 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
727 goto error;
728 }
729 Py_DECREF(m);
730
731 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
732 goto error;
733 }
734 Py_DECREF(m);
735
736 if (!(bimod = PyImport_ImportModule("__builtin__"))) {
737 goto error;
738 }
739
740 if (!(iomod = PyImport_ImportModule("io"))) {
741 goto error;
742 }
743 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
744 goto error;
745 }
746
747 /* Set __builtin__.open */
748 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
749 goto error;
750 }
751
752 /* Set sys.stdin */
Christian Heimes58cb1b82007-11-13 02:19:40 +0000753 fd = fileno(stdin);
754 /* Under some conditions stdin, stdout and stderr may not be connected
755 * and fileno() may point to an invalid file descriptor. For example
756 * GUI apps don't have valid standard streams by default.
757 */
758 if (fd < 0) {
759#ifdef MS_WINDOWS
760 std = Py_None;
761 Py_INCREF(std);
762#else
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000763 goto error;
Christian Heimes58cb1b82007-11-13 02:19:40 +0000764#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000765 }
Christian Heimes58cb1b82007-11-13 02:19:40 +0000766 else {
767 if (!(std = PyFile_FromFd(fd, "<stdin>", "r", -1, NULL,
768 "\n", 0))) {
769 goto error;
770 }
771 } /* if (fd < 0) */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000772 PySys_SetObject("__stdin__", std);
773 PySys_SetObject("stdin", std);
774 Py_DECREF(std);
775
776 /* Set sys.stdout */
Christian Heimes58cb1b82007-11-13 02:19:40 +0000777 fd = fileno(stdout);
778 if (fd < 0) {
779#ifdef MS_WINDOWS
780 std = Py_None;
781 Py_INCREF(std);
782#else
783 goto error;
784#endif
785 }
786 else {
787 if (!(std = PyFile_FromFd(fd, "<stdout>", "w", -1, NULL,
788 "\n", 0))) {
789 goto error;
790 }
791 } /* if (fd < 0) */
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000792 PySys_SetObject("__stdout__", std);
793 PySys_SetObject("stdout", std);
794 Py_DECREF(std);
795
Guido van Rossum98297ee2007-11-06 21:34:58 +0000796#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
Guido van Rossum2dced8b2007-10-30 17:27:30 +0000797 /* Set sys.stderr, replaces the preliminary stderr */
Christian Heimes58cb1b82007-11-13 02:19:40 +0000798 fd = fileno(stderr);
799 if (fd < 0) {
800#ifdef MS_WINDOWS
801 std = Py_None;
802 Py_INCREF(std);
803#else
804 goto error;
805#endif
806 }
807 else {
808 if (!(std = PyFile_FromFd(fd, "<stderr>", "w", -1, NULL,
809 "\n", 0))) {
810 goto error;
811 }
812 } /* if (fd < 0) */
Christian Heimesdb233082007-11-13 02:34:21 +0000813 PySys_SetObject("__stderr__", std);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000814 PySys_SetObject("stderr", std);
815 Py_DECREF(std);
Guido van Rossum98297ee2007-11-06 21:34:58 +0000816#endif
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000817
Christian Heimes58cb1b82007-11-13 02:19:40 +0000818 if (0) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000819 error:
Christian Heimesdb233082007-11-13 02:34:21 +0000820 status = -1;
821 }
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000822
823 Py_XDECREF(bimod);
824 Py_XDECREF(iomod);
825 return status;
826}
827
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000828/* Parse input from a file and execute it */
829
830int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +0000831PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000832 PyCompilerFlags *flags)
833{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000834 if (filename == NULL)
835 filename = "???";
Guido van Rossum0df002c2000-08-27 19:21:52 +0000836 if (Py_FdIsInteractive(fp, filename)) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000837 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
Guido van Rossum0df002c2000-08-27 19:21:52 +0000838 if (closeit)
839 fclose(fp);
840 return err;
841 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000842 else
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000843 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000844}
845
846int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000847PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000848{
Guido van Rossum82598051997-03-05 00:20:32 +0000849 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000850 int ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000851 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000852
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000853 if (flags == NULL) {
854 flags = &local_flags;
Tim Peters5ba58662001-07-16 02:29:45 +0000855 local_flags.cf_flags = 0;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000856 }
Guido van Rossum82598051997-03-05 00:20:32 +0000857 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000858 if (v == NULL) {
Neal Norwitza369c5a2007-08-25 07:41:59 +0000859 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> "));
Guido van Rossum82598051997-03-05 00:20:32 +0000860 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000861 }
Guido van Rossum82598051997-03-05 00:20:32 +0000862 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000863 if (v == NULL) {
Neal Norwitza369c5a2007-08-25 07:41:59 +0000864 PySys_SetObject("ps2", v = PyUnicode_FromString("... "));
Guido van Rossum82598051997-03-05 00:20:32 +0000865 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000866 }
867 for (;;) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000868 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000869 PRINT_TOTAL_REFS();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000870 if (ret == E_EOF)
871 return 0;
872 /*
873 if (ret == E_NOMEM)
874 return -1;
875 */
876 }
877}
878
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000879/* compute parser flags based on compiler flags */
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000880#define PARSER_FLAGS(flags) \
Thomas Wouters34aa7ba2006-02-28 19:02:24 +0000881 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
Guido van Rossum45aecf42006-03-15 04:58:47 +0000882 PyPARSE_DONT_IMPLY_DEDENT : 0)) : 0)
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000883
Thomas Wouters89f507f2006-12-13 04:49:30 +0000884#if 0
885/* Keep an example of flags with future keyword support. */
886#define PARSER_FLAGS(flags) \
887 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
888 PyPARSE_DONT_IMPLY_DEDENT : 0) \
889 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
890 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
891#endif
892
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000893int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000894PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000895{
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000896 PyObject *m, *d, *v, *w, *oenc = NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000897 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +0000898 PyArena *arena;
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000899 char *ps1 = "", *ps2 = "", *enc = NULL;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000900 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +0000901
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000902 if (fp == stdin) {
903 /* Fetch encoding from sys.stdin */
904 v = PySys_GetObject("stdin");
Christian Heimes2be03732007-11-15 02:26:46 +0000905 if (v == NULL || v == Py_None)
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000906 return -1;
907 oenc = PyObject_GetAttrString(v, "encoding");
908 if (!oenc)
909 return -1;
910 enc = PyUnicode_AsString(oenc);
911 }
Guido van Rossum82598051997-03-05 00:20:32 +0000912 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000913 if (v != NULL) {
Thomas Heller519a0422007-11-15 20:48:54 +0000914 v = PyObject_Str(v);
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000915 if (v == NULL)
916 PyErr_Clear();
Guido van Rossumc5724de2007-10-10 21:38:59 +0000917 else if (PyUnicode_Check(v))
918 ps1 = PyUnicode_AsString(v);
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000919 }
Guido van Rossum82598051997-03-05 00:20:32 +0000920 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000921 if (w != NULL) {
Thomas Heller519a0422007-11-15 20:48:54 +0000922 w = PyObject_Str(w);
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000923 if (w == NULL)
924 PyErr_Clear();
Guido van Rossumc5724de2007-10-10 21:38:59 +0000925 else if (PyUnicode_Check(w))
926 ps2 = PyUnicode_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000927 }
Neal Norwitz9589ee22006-03-04 19:01:22 +0000928 arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000929 if (arena == NULL) {
930 Py_XDECREF(v);
931 Py_XDECREF(w);
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000932 Py_XDECREF(oenc);
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000933 return -1;
934 }
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000935 mod = PyParser_ASTFromFile(fp, filename, enc,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000936 Py_single_input, ps1, ps2,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000937 flags, &errcode, arena);
Guido van Rossum82598051997-03-05 00:20:32 +0000938 Py_XDECREF(v);
939 Py_XDECREF(w);
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000940 Py_XDECREF(oenc);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000941 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000942 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000943 if (errcode == E_EOF) {
944 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000945 return E_EOF;
946 }
Guido van Rossum82598051997-03-05 00:20:32 +0000947 PyErr_Print();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000948 return -1;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000949 }
Guido van Rossum82598051997-03-05 00:20:32 +0000950 m = PyImport_AddModule("__main__");
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000951 if (m == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000952 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000953 return -1;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000954 }
Guido van Rossum82598051997-03-05 00:20:32 +0000955 d = PyModule_GetDict(m);
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000956 v = run_mod(mod, filename, d, d, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +0000957 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000958 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000959 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000960 return -1;
961 }
Guido van Rossum82598051997-03-05 00:20:32 +0000962 Py_DECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000963 return 0;
964}
965
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000966/* Check whether a file maybe a pyc file: Look at the extension,
967 the file type, and, if we may close it, at the first few bytes. */
968
969static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000970maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000971{
972 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
973 return 1;
974
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000975 /* Only look into the file if we are allowed to close it, since
976 it then should also be seekable. */
977 if (closeit) {
978 /* Read only two bytes of the magic. If the file was opened in
979 text mode, the bytes 3 and 4 of the magic (\r\n) might not
980 be read as they are on disk. */
981 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
982 unsigned char buf[2];
Tim Peters3e876562001-02-11 04:35:39 +0000983 /* Mess: In case of -x, the stream is NOT at its start now,
984 and ungetc() was used to push back the first newline,
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000985 which makes the current stream position formally undefined,
986 and a x-platform nightmare.
987 Unfortunately, we have no direct way to know whether -x
988 was specified. So we use a terrible hack: if the current
989 stream position is not 0, we assume -x was specified, and
990 give up. Bug 132850 on SourceForge spells out the
991 hopelessness of trying anything else (fseek and ftell
992 don't work predictably x-platform for text-mode files).
Tim Peters3e876562001-02-11 04:35:39 +0000993 */
Tim Peters3e876562001-02-11 04:35:39 +0000994 int ispyc = 0;
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000995 if (ftell(fp) == 0) {
996 if (fread(buf, 1, 2, fp) == 2 &&
Tim Petersd08e3822003-04-17 15:24:21 +0000997 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000998 ispyc = 1;
999 rewind(fp);
1000 }
Tim Peters3e876562001-02-11 04:35:39 +00001001 return ispyc;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001002 }
1003 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +00001004}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001005
Guido van Rossum0df002c2000-08-27 19:21:52 +00001006int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001007PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001008 PyCompilerFlags *flags)
1009{
Guido van Rossum82598051997-03-05 00:20:32 +00001010 PyObject *m, *d, *v;
Martin v. Löwis95292d62002-12-11 14:04:59 +00001011 const char *ext;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001012 int set_file_name = 0, ret;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001013
Guido van Rossum82598051997-03-05 00:20:32 +00001014 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001015 if (m == NULL)
1016 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +00001017 d = PyModule_GetDict(m);
Fred Drake8ed02042002-10-17 21:24:58 +00001018 if (PyDict_GetItemString(d, "__file__") == NULL) {
Guido van Rossum00bc0e02007-10-15 02:52:41 +00001019 PyObject *f;
1020 f = PyUnicode_DecodeFSDefault(filename);
Fred Drake8ed02042002-10-17 21:24:58 +00001021 if (f == NULL)
1022 return -1;
1023 if (PyDict_SetItemString(d, "__file__", f) < 0) {
1024 Py_DECREF(f);
1025 return -1;
1026 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00001027 set_file_name = 1;
Fred Drake8ed02042002-10-17 21:24:58 +00001028 Py_DECREF(f);
1029 }
Guido van Rossumfdef2711994-09-14 13:31:04 +00001030 ext = filename + strlen(filename) - 4;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +00001031 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Guido van Rossumfdef2711994-09-14 13:31:04 +00001032 /* Try to run a pyc file. First, re-open in binary */
Guido van Rossum0df002c2000-08-27 19:21:52 +00001033 if (closeit)
1034 fclose(fp);
Fred Drake8ed02042002-10-17 21:24:58 +00001035 if ((fp = fopen(filename, "rb")) == NULL) {
Guido van Rossumfdef2711994-09-14 13:31:04 +00001036 fprintf(stderr, "python: Can't reopen .pyc file\n");
Guido van Rossumd8faa362007-04-27 19:54:29 +00001037 ret = -1;
1038 goto done;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001039 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +00001040 /* Turn on optimization if a .pyo file is given */
1041 if (strcmp(ext, ".pyo") == 0)
1042 Py_OptimizeFlag = 1;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001043 v = run_pyc_file(fp, filename, d, d, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001044 } else {
Tim Petersd08e3822003-04-17 15:24:21 +00001045 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001046 closeit, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001047 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001048 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +00001049 PyErr_Print();
Guido van Rossumd8faa362007-04-27 19:54:29 +00001050 ret = -1;
1051 goto done;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001052 }
Guido van Rossum82598051997-03-05 00:20:32 +00001053 Py_DECREF(v);
Guido van Rossumd8faa362007-04-27 19:54:29 +00001054 ret = 0;
1055 done:
1056 if (set_file_name && PyDict_DelItemString(d, "__file__"))
1057 PyErr_Clear();
1058 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001059}
1060
1061int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001062PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +00001063{
Guido van Rossum82598051997-03-05 00:20:32 +00001064 PyObject *m, *d, *v;
1065 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001066 if (m == NULL)
1067 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +00001068 d = PyModule_GetDict(m);
Guido van Rossum393661d2001-08-31 17:40:15 +00001069 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001070 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +00001071 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001072 return -1;
1073 }
Guido van Rossum82598051997-03-05 00:20:32 +00001074 Py_DECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001075 return 0;
1076}
1077
Barry Warsaw035574d1997-08-29 22:07:17 +00001078static int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001079parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
1080 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +00001081{
1082 long hold;
1083 PyObject *v;
1084
1085 /* old style errors */
1086 if (PyTuple_Check(err))
Neal Norwitz78293352002-04-01 01:41:20 +00001087 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
Neal Norwitz9589ee22006-03-04 19:01:22 +00001088 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +00001089
1090 /* new style errors. `err' is an instance */
1091
1092 if (! (v = PyObject_GetAttrString(err, "msg")))
1093 goto finally;
1094 *message = v;
1095
1096 if (!(v = PyObject_GetAttrString(err, "filename")))
1097 goto finally;
1098 if (v == Py_None)
1099 *filename = NULL;
1100 else if (! (*filename = PyString_AsString(v)))
1101 goto finally;
1102
1103 Py_DECREF(v);
1104 if (!(v = PyObject_GetAttrString(err, "lineno")))
1105 goto finally;
1106 hold = PyInt_AsLong(v);
1107 Py_DECREF(v);
1108 v = NULL;
1109 if (hold < 0 && PyErr_Occurred())
1110 goto finally;
1111 *lineno = (int)hold;
1112
1113 if (!(v = PyObject_GetAttrString(err, "offset")))
1114 goto finally;
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001115 if (v == Py_None) {
1116 *offset = -1;
1117 Py_DECREF(v);
1118 v = NULL;
1119 } else {
1120 hold = PyInt_AsLong(v);
1121 Py_DECREF(v);
1122 v = NULL;
1123 if (hold < 0 && PyErr_Occurred())
1124 goto finally;
1125 *offset = (int)hold;
1126 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001127
1128 if (!(v = PyObject_GetAttrString(err, "text")))
1129 goto finally;
1130 if (v == Py_None)
1131 *text = NULL;
Guido van Rossumc5724de2007-10-10 21:38:59 +00001132 else if (!PyUnicode_Check(v) ||
1133 !(*text = PyUnicode_AsString(v)))
Barry Warsaw035574d1997-08-29 22:07:17 +00001134 goto finally;
1135 Py_DECREF(v);
1136 return 1;
1137
1138finally:
1139 Py_XDECREF(v);
1140 return 0;
1141}
1142
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001143void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001144PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001145{
Guido van Rossuma61691e1998-02-06 22:27:24 +00001146 PyErr_PrintEx(1);
1147}
1148
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001149static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001150print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001151{
1152 char *nl;
1153 if (offset >= 0) {
1154 if (offset > 0 && offset == (int)strlen(text))
1155 offset--;
1156 for (;;) {
1157 nl = strchr(text, '\n');
1158 if (nl == NULL || nl-text >= offset)
1159 break;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001160 offset -= (int)(nl+1-text);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001161 text = nl+1;
1162 }
1163 while (*text == ' ' || *text == '\t') {
1164 text++;
1165 offset--;
1166 }
1167 }
1168 PyFile_WriteString(" ", f);
1169 PyFile_WriteString(text, f);
1170 if (*text == '\0' || text[strlen(text)-1] != '\n')
1171 PyFile_WriteString("\n", f);
1172 if (offset == -1)
1173 return;
1174 PyFile_WriteString(" ", f);
1175 offset--;
1176 while (offset > 0) {
1177 PyFile_WriteString(" ", f);
1178 offset--;
1179 }
1180 PyFile_WriteString("^\n", f);
1181}
1182
Guido van Rossum66e8e862001-03-23 17:54:43 +00001183static void
1184handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001185{
Neal Norwitz9589ee22006-03-04 19:01:22 +00001186 PyObject *exception, *value, *tb;
1187 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001188
Guido van Rossumd8faa362007-04-27 19:54:29 +00001189 if (Py_InspectFlag)
1190 /* Don't exit if -i flag was given. This flag is set to 0
1191 * when entering interactive mode for inspecting. */
1192 return;
1193
Guido van Rossum66e8e862001-03-23 17:54:43 +00001194 PyErr_Fetch(&exception, &value, &tb);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001195 fflush(stdout);
1196 if (value == NULL || value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001197 goto done;
Brett Cannonbf364092006-03-01 04:25:17 +00001198 if (PyExceptionInstance_Check(value)) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001199 /* The error code should be in the `code' attribute. */
1200 PyObject *code = PyObject_GetAttrString(value, "code");
1201 if (code) {
1202 Py_DECREF(value);
1203 value = code;
1204 if (value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001205 goto done;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001206 }
1207 /* If we failed to dig out the 'code' attribute,
1208 just let the else clause below print the error. */
1209 }
1210 if (PyInt_Check(value))
Tim Peterscf615b52003-04-19 18:47:02 +00001211 exitcode = (int)PyInt_AsLong(value);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001212 else {
1213 PyObject_Print(value, stderr, Py_PRINT_RAW);
1214 PySys_WriteStderr("\n");
Tim Peterscf615b52003-04-19 18:47:02 +00001215 exitcode = 1;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001216 }
Tim Peterscf615b52003-04-19 18:47:02 +00001217 done:
Neal Norwitz9589ee22006-03-04 19:01:22 +00001218 /* Restore and clear the exception info, in order to properly decref
1219 * the exception, value, and traceback. If we just exit instead,
1220 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1221 * some finalizers from running.
1222 */
Tim Peterscf615b52003-04-19 18:47:02 +00001223 PyErr_Restore(exception, value, tb);
1224 PyErr_Clear();
1225 Py_Exit(exitcode);
1226 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001227}
1228
1229void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001230PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001231{
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001232 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001233
1234 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1235 handle_system_exit();
1236 }
Guido van Rossum82598051997-03-05 00:20:32 +00001237 PyErr_Fetch(&exception, &v, &tb);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001238 if (exception == NULL)
1239 return;
Barry Warsaw035574d1997-08-29 22:07:17 +00001240 PyErr_NormalizeException(&exception, &v, &tb);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001241 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +00001242 return;
Guido van Rossum9d785502006-03-07 18:31:44 +00001243 /* Now we know v != NULL too */
Guido van Rossuma61691e1998-02-06 22:27:24 +00001244 if (set_sys_last_vars) {
1245 PySys_SetObject("last_type", exception);
1246 PySys_SetObject("last_value", v);
Guido van Rossumc5724de2007-10-10 21:38:59 +00001247 PySys_SetObject("last_traceback", tb ? tb : Py_None);
Guido van Rossuma61691e1998-02-06 22:27:24 +00001248 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001249 hook = PySys_GetObject("excepthook");
1250 if (hook) {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00001251 PyObject *args = PyTuple_Pack(3,
Guido van Rossum9d785502006-03-07 18:31:44 +00001252 exception, v, tb ? tb : Py_None);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001253 PyObject *result = PyEval_CallObject(hook, args);
1254 if (result == NULL) {
1255 PyObject *exception2, *v2, *tb2;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001256 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1257 handle_system_exit();
1258 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001259 PyErr_Fetch(&exception2, &v2, &tb2);
1260 PyErr_NormalizeException(&exception2, &v2, &tb2);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001261 /* It should not be possible for exception2 or v2
1262 to be NULL. However PyErr_Display() can't
1263 tolerate NULLs, so just be safe. */
1264 if (exception2 == NULL) {
1265 exception2 = Py_None;
1266 Py_INCREF(exception2);
1267 }
1268 if (v2 == NULL) {
1269 v2 = Py_None;
1270 Py_INCREF(v2);
1271 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001272 fflush(stdout);
1273 PySys_WriteStderr("Error in sys.excepthook:\n");
1274 PyErr_Display(exception2, v2, tb2);
1275 PySys_WriteStderr("\nOriginal exception was:\n");
1276 PyErr_Display(exception, v, tb);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001277 Py_DECREF(exception2);
1278 Py_DECREF(v2);
Jeremy Hylton07028582001-12-07 15:35:35 +00001279 Py_XDECREF(tb2);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001280 }
1281 Py_XDECREF(result);
1282 Py_XDECREF(args);
1283 } else {
1284 PySys_WriteStderr("sys.excepthook is missing\n");
1285 PyErr_Display(exception, v, tb);
1286 }
1287 Py_XDECREF(exception);
1288 Py_XDECREF(v);
1289 Py_XDECREF(tb);
1290}
1291
Thomas Wouters477c8d52006-05-27 19:21:47 +00001292void
1293PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001294{
1295 int err = 0;
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001296 PyObject *f = PySys_GetObject("stderr");
Armin Rigo5d2c6832004-03-22 20:16:58 +00001297 Py_INCREF(value);
Christian Heimes2be03732007-11-15 02:26:46 +00001298 if (f == Py_None) {
1299 /* pass */
1300 }
1301 else if (f == NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00001302 _PyObject_Dump(value);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001303 fprintf(stderr, "lost sys.stderr\n");
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001304 }
Guido van Rossum3165fe61992-09-25 21:59:05 +00001305 else {
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001306 fflush(stdout);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001307 if (tb && tb != Py_None)
1308 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +00001309 if (err == 0 &&
Armin Rigo5d2c6832004-03-22 20:16:58 +00001310 PyObject_HasAttrString(value, "print_file_and_line"))
Barry Warsaw36b8f941997-08-26 18:09:48 +00001311 {
Guido van Rossum82598051997-03-05 00:20:32 +00001312 PyObject *message;
Martin v. Löwis95292d62002-12-11 14:04:59 +00001313 const char *filename, *text;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001314 int lineno, offset;
Armin Rigo5d2c6832004-03-22 20:16:58 +00001315 if (!parse_syntax_error(value, &message, &filename,
Barry Warsaw035574d1997-08-29 22:07:17 +00001316 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +00001317 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001318 else {
1319 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +00001320 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001321 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +00001322 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001323 else
Guido van Rossum82598051997-03-05 00:20:32 +00001324 PyFile_WriteString(filename, f);
1325 PyFile_WriteString("\", line ", f);
Jeremy Hylton518ab1c2001-11-28 20:42:20 +00001326 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +00001327 PyFile_WriteString(buf, f);
1328 PyFile_WriteString("\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001329 if (text != NULL)
1330 print_error_text(f, offset, text);
Armin Rigo5d2c6832004-03-22 20:16:58 +00001331 Py_DECREF(value);
1332 value = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001333 /* Can't be bothered to check all those
1334 PyFile_WriteString() calls */
1335 if (PyErr_Occurred())
1336 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001337 }
1338 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001339 if (err) {
1340 /* Don't do anything else */
1341 }
Brett Cannonbf364092006-03-01 04:25:17 +00001342 else if (PyExceptionClass_Check(exception)) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001343 PyObject* moduleName;
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001344 char* className = PyExceptionClass_Name(exception);
1345 if (className != NULL) {
1346 char *dot = strrchr(className, '.');
1347 if (dot != NULL)
1348 className = dot+1;
1349 }
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001350
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001351 moduleName = PyObject_GetAttrString(exception, "__module__");
Guido van Rossumc5724de2007-10-10 21:38:59 +00001352 if (moduleName == NULL || !PyUnicode_Check(moduleName))
1353 {
1354 Py_DECREF(moduleName);
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001355 err = PyFile_WriteString("<unknown>", f);
Guido van Rossumc5724de2007-10-10 21:38:59 +00001356 }
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001357 else {
Guido van Rossumc5724de2007-10-10 21:38:59 +00001358 char* modstr = PyUnicode_AsString(moduleName);
Neal Norwitz2633c692007-02-26 22:22:47 +00001359 if (modstr && strcmp(modstr, "__builtin__"))
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001360 {
1361 err = PyFile_WriteString(modstr, f);
1362 err += PyFile_WriteString(".", f);
1363 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001364 Py_DECREF(moduleName);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001365 }
1366 if (err == 0) {
1367 if (className == NULL)
1368 err = PyFile_WriteString("<unknown>", f);
1369 else
Brett Cannonbf364092006-03-01 04:25:17 +00001370 err = PyFile_WriteString(className, f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001371 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001372 }
1373 else
1374 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
Brett Cannon2e63b732006-03-02 18:34:57 +00001375 if (err == 0 && (value != Py_None)) {
Thomas Heller519a0422007-11-15 20:48:54 +00001376 PyObject *s = PyObject_Str(value);
Brett Cannon2e63b732006-03-02 18:34:57 +00001377 /* only print colon if the str() of the
1378 object is not the empty string
1379 */
1380 if (s == NULL)
1381 err = -1;
Guido van Rossumc5724de2007-10-10 21:38:59 +00001382 else if (!PyUnicode_Check(s) ||
1383 PyUnicode_GetSize(s) != 0)
Brett Cannon2e63b732006-03-02 18:34:57 +00001384 err = PyFile_WriteString(": ", f);
1385 if (err == 0)
1386 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1387 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +00001388 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00001389 /* try to write a newline in any case */
1390 err += PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001391 }
Armin Rigo5d2c6832004-03-22 20:16:58 +00001392 Py_DECREF(value);
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001393 /* If an error happened here, don't show it.
1394 XXX This is wrong, but too many callers rely on this behavior. */
1395 if (err != 0)
1396 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001397}
1398
Guido van Rossum82598051997-03-05 00:20:32 +00001399PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001400PyRun_StringFlags(const char *str, int start, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001401 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001402{
Neal Norwitze92fba02006-03-04 18:52:26 +00001403 PyObject *ret = NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001404 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001405 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001406 if (arena == NULL)
1407 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001408
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001409 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
Neal Norwitze92fba02006-03-04 18:52:26 +00001410 if (mod != NULL)
1411 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001412 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001413 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001414}
1415
1416PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001417PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001418 PyObject *locals, int closeit, PyCompilerFlags *flags)
1419{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001420 PyObject *ret;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001421 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001422 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001423 if (arena == NULL)
1424 return NULL;
Guido van Rossum98297ee2007-11-06 21:34:58 +00001425
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001426 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0,
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001427 flags, NULL, arena);
Guido van Rossumd8faa362007-04-27 19:54:29 +00001428 if (closeit)
1429 fclose(fp);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001430 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001431 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001432 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001433 }
Neal Norwitze92fba02006-03-04 18:52:26 +00001434 ret = run_mod(mod, filename, globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001435 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001436 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001437}
1438
Guido van Rossum82598051997-03-05 00:20:32 +00001439static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001440run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001441 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001442{
Guido van Rossum82598051997-03-05 00:20:32 +00001443 PyCodeObject *co;
1444 PyObject *v;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001445 co = PyAST_Compile(mod, filename, flags, arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001446 if (co == NULL)
1447 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +00001448 v = PyEval_EvalCode(co, globals, locals);
1449 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001450 return v;
1451}
1452
Guido van Rossum82598051997-03-05 00:20:32 +00001453static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001454run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001455 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001456{
Guido van Rossum82598051997-03-05 00:20:32 +00001457 PyCodeObject *co;
1458 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001459 long magic;
Fred Drakee8de31c2000-08-31 05:38:39 +00001460 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001461
Guido van Rossum82598051997-03-05 00:20:32 +00001462 magic = PyMarshal_ReadLongFromFile(fp);
1463 if (magic != PyImport_GetMagicNumber()) {
1464 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001465 "Bad magic number in .pyc file");
1466 return NULL;
1467 }
Guido van Rossum82598051997-03-05 00:20:32 +00001468 (void) PyMarshal_ReadLongFromFile(fp);
Tim Petersd9b9ac82001-01-28 00:27:39 +00001469 v = PyMarshal_ReadLastObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001470 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +00001471 if (v == NULL || !PyCode_Check(v)) {
1472 Py_XDECREF(v);
1473 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001474 "Bad code object in .pyc file");
1475 return NULL;
1476 }
Guido van Rossum82598051997-03-05 00:20:32 +00001477 co = (PyCodeObject *)v;
1478 v = PyEval_EvalCode(co, globals, locals);
Jeremy Hyltonb857ba22001-08-10 21:41:33 +00001479 if (v && flags)
1480 flags->cf_flags |= (co->co_flags & PyCF_MASK);
Guido van Rossum82598051997-03-05 00:20:32 +00001481 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001482 return v;
1483}
1484
Guido van Rossum82598051997-03-05 00:20:32 +00001485PyObject *
Tim Petersd08e3822003-04-17 15:24:21 +00001486Py_CompileStringFlags(const char *str, const char *filename, int start,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001487 PyCompilerFlags *flags)
1488{
Guido van Rossum82598051997-03-05 00:20:32 +00001489 PyCodeObject *co;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001490 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001491 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001492 if (arena == NULL)
1493 return NULL;
1494
1495 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001496 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001497 PyArena_Free(arena);
Guido van Rossum5b722181993-03-30 17:46:03 +00001498 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001499 }
Martin v. Löwis2b366e42006-02-26 22:12:35 +00001500 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001501 PyObject *result = PyAST_mod2obj(mod);
1502 PyArena_Free(arena);
1503 return result;
1504 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001505 co = PyAST_Compile(mod, filename, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001506 PyArena_Free(arena);
Guido van Rossum82598051997-03-05 00:20:32 +00001507 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001508}
1509
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001510struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001511Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001512{
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001513 struct symtable *st;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001514 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001515 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001516 if (arena == NULL)
1517 return NULL;
1518
1519 mod = PyParser_ASTFromString(str, filename, start, NULL, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001520 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001521 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001522 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001523 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001524 st = PySymtable_Build(mod, filename, 0);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001525 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001526 return st;
1527}
1528
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001529/* Preferred access to parser is through AST. */
1530mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001531PyParser_ASTFromString(const char *s, const char *filename, int start,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001532 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001533{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001534 mod_ty mod;
1535 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001536 node *n = PyParser_ParseStringFlagsFilename(s, filename,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001537 &_PyParser_Grammar, start, &err,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001538 PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001539 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001540 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001541 PyNode_Free(n);
1542 return mod;
1543 }
1544 else {
1545 err_input(&err);
1546 return NULL;
1547 }
1548}
1549
1550mod_ty
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001551PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc,
1552 int start, char *ps1,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001553 char *ps2, PyCompilerFlags *flags, int *errcode,
Neal Norwitz9589ee22006-03-04 19:01:22 +00001554 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001555{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001556 mod_ty mod;
1557 perrdetail err;
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001558 node *n = PyParser_ParseFileFlags(fp, filename, enc,
1559 &_PyParser_Grammar,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001560 start, ps1, ps2, &err, PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001561 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001562 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001563 PyNode_Free(n);
1564 return mod;
1565 }
1566 else {
1567 err_input(&err);
1568 if (errcode)
1569 *errcode = err.error;
1570 return NULL;
1571 }
1572}
1573
Guido van Rossuma110aa61994-08-29 12:50:44 +00001574/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001575
Guido van Rossuma110aa61994-08-29 12:50:44 +00001576node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001577PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001578{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001579 perrdetail err;
Martin v. Löwis85bcc662007-09-04 09:18:06 +00001580 node *n = PyParser_ParseFileFlags(fp, filename, NULL,
1581 &_PyParser_Grammar,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001582 start, NULL, NULL, &err, flags);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001583 if (n == NULL)
1584 err_input(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001585
Guido van Rossuma110aa61994-08-29 12:50:44 +00001586 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001587}
1588
Guido van Rossuma110aa61994-08-29 12:50:44 +00001589/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001590
Guido van Rossuma110aa61994-08-29 12:50:44 +00001591node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001592PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001593{
Tim Petersfe2127d2001-07-16 05:37:24 +00001594 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001595 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1596 start, &err, flags);
Tim Petersfe2127d2001-07-16 05:37:24 +00001597 if (n == NULL)
1598 err_input(&err);
1599 return n;
1600}
1601
1602node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001603PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Thomas Heller6b17abf2002-07-09 09:23:27 +00001604 int start, int flags)
1605{
Thomas Heller6b17abf2002-07-09 09:23:27 +00001606 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001607 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1608 &_PyParser_Grammar, start, &err, flags);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001609 if (n == NULL)
1610 err_input(&err);
1611 return n;
1612}
1613
1614node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001615PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001616{
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001617 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001618}
1619
Guido van Rossum66ebd912003-04-17 16:02:26 +00001620/* May want to move a more generalized form of this to parsetok.c or
1621 even parser modules. */
1622
1623void
1624PyParser_SetError(perrdetail *err)
1625{
1626 err_input(err);
1627}
1628
Guido van Rossuma110aa61994-08-29 12:50:44 +00001629/* Set the error appropriate to the given input error code (see errcode.h) */
1630
1631static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001632err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00001633{
Martin v. Löwis5deb2102007-08-31 11:17:42 +00001634 PyObject *v, *w, *errtype, *errtext;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001635 PyObject* u = NULL;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001636 char *msg = NULL;
Fred Drake85f36392000-07-11 17:53:00 +00001637 errtype = PyExc_SyntaxError;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001638 switch (err->error) {
1639 case E_SYNTAX:
Fred Drake85f36392000-07-11 17:53:00 +00001640 errtype = PyExc_IndentationError;
1641 if (err->expected == INDENT)
1642 msg = "expected an indented block";
1643 else if (err->token == INDENT)
1644 msg = "unexpected indent";
1645 else if (err->token == DEDENT)
1646 msg = "unexpected unindent";
1647 else {
1648 errtype = PyExc_SyntaxError;
1649 msg = "invalid syntax";
1650 }
Guido van Rossuma110aa61994-08-29 12:50:44 +00001651 break;
1652 case E_TOKEN:
1653 msg = "invalid token";
Guido van Rossuma110aa61994-08-29 12:50:44 +00001654 break;
Skip Montanaro118ec702002-08-15 01:20:16 +00001655 case E_EOFS:
1656 msg = "EOF while scanning triple-quoted string";
1657 break;
1658 case E_EOLS:
1659 msg = "EOL while scanning single-quoted string";
1660 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001661 case E_INTR:
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001662 if (!PyErr_Occurred())
1663 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001664 return;
1665 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +00001666 PyErr_NoMemory();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001667 return;
1668 case E_EOF:
1669 msg = "unexpected EOF while parsing";
1670 break;
Fred Drake85f36392000-07-11 17:53:00 +00001671 case E_TABSPACE:
1672 errtype = PyExc_TabError;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001673 msg = "inconsistent use of tabs and spaces in indentation";
1674 break;
Jeremy Hylton94988062000-06-20 19:10:44 +00001675 case E_OVERFLOW:
1676 msg = "expression too long";
1677 break;
Fred Drake85f36392000-07-11 17:53:00 +00001678 case E_DEDENT:
1679 errtype = PyExc_IndentationError;
1680 msg = "unindent does not match any outer indentation level";
1681 break;
1682 case E_TOODEEP:
1683 errtype = PyExc_IndentationError;
1684 msg = "too many levels of indentation";
1685 break;
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001686 case E_DECODE: {
1687 PyObject *type, *value, *tb;
1688 PyErr_Fetch(&type, &value, &tb);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001689 if (value != NULL) {
Thomas Heller519a0422007-11-15 20:48:54 +00001690 u = PyObject_Str(value);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001691 if (u != NULL) {
Guido van Rossumc5724de2007-10-10 21:38:59 +00001692 msg = PyUnicode_AsString(u);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001693 }
1694 }
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001695 if (msg == NULL)
1696 msg = "unknown decode error";
Neal Norwitzdb83eb32005-12-18 05:29:30 +00001697 Py_XDECREF(type);
1698 Py_XDECREF(value);
Neal Norwitz40d37812005-10-02 01:48:49 +00001699 Py_XDECREF(tb);
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001700 break;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001701 }
Martin v. Löwis4bf108d2005-03-03 11:45:45 +00001702 case E_LINECONT:
1703 msg = "unexpected character after line continuation character";
1704 break;
Martin v. Löwis47383402007-08-15 07:32:56 +00001705
1706 case E_IDENTIFIER:
1707 msg = "invalid character in identifier";
1708 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001709 default:
1710 fprintf(stderr, "error=%d\n", err->error);
1711 msg = "unknown parsing error";
1712 break;
1713 }
Martin v. Löwis5deb2102007-08-31 11:17:42 +00001714 /* err->text may not be UTF-8 in case of decoding errors.
1715 Explicitly convert to an object. */
1716 if (!err->text) {
1717 errtext = Py_None;
1718 Py_INCREF(Py_None);
1719 } else {
1720 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text),
1721 "replace");
1722 }
1723 v = Py_BuildValue("(ziiN)", err->filename,
1724 err->lineno, err->offset, errtext);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001725 if (err->text != NULL) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001726 PyObject_FREE(err->text);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001727 err->text = NULL;
1728 }
1729 w = NULL;
1730 if (v != NULL)
1731 w = Py_BuildValue("(sO)", msg, v);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001732 Py_XDECREF(u);
Guido van Rossum41318302001-03-23 04:01:07 +00001733 Py_XDECREF(v);
Fred Drake85f36392000-07-11 17:53:00 +00001734 PyErr_SetObject(errtype, w);
Guido van Rossum82598051997-03-05 00:20:32 +00001735 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001736}
1737
1738/* Print fatal error message and abort */
1739
1740void
Tim Peters7c321a82002-07-09 02:57:01 +00001741Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001742{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00001743 fprintf(stderr, "Fatal Python error: %s\n", msg);
Guido van Rossumce3a72a2007-10-19 23:16:50 +00001744 if (PyErr_Occurred()) {
1745 PyErr_Print();
1746 }
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001747#ifdef MS_WINDOWS
Guido van Rossum23c94461997-05-22 20:21:30 +00001748 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +00001749 OutputDebugString(msg);
1750 OutputDebugString("\n");
Guido van Rossum0ba35361998-08-13 13:33:16 +00001751#ifdef _DEBUG
1752 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00001753#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001754#endif /* MS_WINDOWS */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001755 abort();
1756}
1757
1758/* Clean up and exit */
1759
Guido van Rossuma110aa61994-08-29 12:50:44 +00001760#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00001761#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001762#endif
1763
Collin Winter670e6922007-03-21 02:57:17 +00001764static void (*pyexitfunc)(void) = NULL;
1765/* For the atexit module. */
1766void _Py_PyAtExit(void (*func)(void))
1767{
1768 pyexitfunc = func;
1769}
1770
1771static void
1772call_py_exitfuncs(void)
1773{
Guido van Rossum98297ee2007-11-06 21:34:58 +00001774 if (pyexitfunc == NULL)
Collin Winter670e6922007-03-21 02:57:17 +00001775 return;
1776
1777 (*pyexitfunc)();
1778 PyErr_Clear();
1779}
1780
Guido van Rossum2dcfc961998-10-01 16:01:57 +00001781#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001782static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00001783static int nexitfuncs = 0;
1784
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001785int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00001786{
1787 if (nexitfuncs >= NEXITFUNCS)
1788 return -1;
1789 exitfuncs[nexitfuncs++] = func;
1790 return 0;
1791}
1792
Guido van Rossumcc283f51997-08-05 02:22:03 +00001793static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001794call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00001795{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001796 while (nexitfuncs > 0)
1797 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001798
1799 fflush(stdout);
1800 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001801}
1802
1803void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001804Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001805{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001806 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001807
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001808 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001809}
1810
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001811static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001812initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001813{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001814#ifdef SIGPIPE
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001815 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001816#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00001817#ifdef SIGXFZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001818 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00001819#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001820#ifdef SIGXFSZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001821 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001822#endif
Guido van Rossum82598051997-03-05 00:20:32 +00001823 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001824}
1825
Guido van Rossum7433b121997-02-14 19:45:36 +00001826
1827/*
1828 * The file descriptor fd is considered ``interactive'' if either
1829 * a) isatty(fd) is TRUE, or
1830 * b) the -i flag was given, and the filename associated with
1831 * the descriptor is NULL or "<stdin>" or "???".
1832 */
1833int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001834Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00001835{
1836 if (isatty((int)fileno(fp)))
1837 return 1;
1838 if (!Py_InteractiveFlag)
1839 return 0;
1840 return (filename == NULL) ||
1841 (strcmp(filename, "<stdin>") == 0) ||
1842 (strcmp(filename, "???") == 0);
1843}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001844
1845
Tim Petersd08e3822003-04-17 15:24:21 +00001846#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001847#if defined(WIN32) && defined(_MSC_VER)
1848
1849/* Stack checking for Microsoft C */
1850
1851#include <malloc.h>
1852#include <excpt.h>
1853
Fred Drakee8de31c2000-08-31 05:38:39 +00001854/*
1855 * Return non-zero when we run out of memory on the stack; zero otherwise.
1856 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001857int
Fred Drake399739f2000-08-31 05:52:44 +00001858PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001859{
1860 __try {
Tim Peters92e4dd82002-10-05 01:47:34 +00001861 /* alloca throws a stack overflow exception if there's
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001862 not enough space left on the stack */
Tim Peters92e4dd82002-10-05 01:47:34 +00001863 alloca(PYOS_STACK_MARGIN * sizeof(void*));
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001864 return 0;
1865 } __except (EXCEPTION_EXECUTE_HANDLER) {
1866 /* just ignore all errors */
1867 }
1868 return 1;
1869}
1870
1871#endif /* WIN32 && _MSC_VER */
1872
1873/* Alternate implementations can be added here... */
1874
1875#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00001876
1877
1878/* Wrappers around sigaction() or signal(). */
1879
1880PyOS_sighandler_t
1881PyOS_getsig(int sig)
1882{
1883#ifdef HAVE_SIGACTION
1884 struct sigaction context;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001885 if (sigaction(sig, NULL, &context) == -1)
1886 return SIG_ERR;
Guido van Rossum6f256182000-09-16 16:32:19 +00001887 return context.sa_handler;
1888#else
1889 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00001890/* Special signal handling for the secure CRT in Visual Studio 2005 */
1891#if defined(_MSC_VER) && _MSC_VER >= 1400
1892 switch (sig) {
1893 /* Only these signals are valid */
1894 case SIGINT:
1895 case SIGILL:
1896 case SIGFPE:
1897 case SIGSEGV:
1898 case SIGTERM:
1899 case SIGBREAK:
1900 case SIGABRT:
1901 break;
1902 /* Don't call signal() with other values or it will assert */
1903 default:
1904 return SIG_ERR;
1905 }
1906#endif /* _MSC_VER && _MSC_VER >= 1400 */
Guido van Rossum6f256182000-09-16 16:32:19 +00001907 handler = signal(sig, SIG_IGN);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001908 if (handler != SIG_ERR)
1909 signal(sig, handler);
Guido van Rossum6f256182000-09-16 16:32:19 +00001910 return handler;
1911#endif
1912}
1913
1914PyOS_sighandler_t
1915PyOS_setsig(int sig, PyOS_sighandler_t handler)
1916{
1917#ifdef HAVE_SIGACTION
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001918 struct sigaction context, ocontext;
Guido van Rossum6f256182000-09-16 16:32:19 +00001919 context.sa_handler = handler;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001920 sigemptyset(&context.sa_mask);
1921 context.sa_flags = 0;
1922 if (sigaction(sig, &context, &ocontext) == -1)
1923 return SIG_ERR;
1924 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001925#else
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001926 PyOS_sighandler_t oldhandler;
1927 oldhandler = signal(sig, handler);
1928#ifdef HAVE_SIGINTERRUPT
1929 siginterrupt(sig, 1);
1930#endif
1931 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001932#endif
1933}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001934
1935/* Deprecated C API functions still provided for binary compatiblity */
1936
1937#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001938PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001939PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
1940{
1941 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
1942}
1943
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001944#undef PyParser_SimpleParseString
1945PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001946PyParser_SimpleParseString(const char *str, int start)
1947{
1948 return PyParser_SimpleParseStringFlags(str, start, 0);
1949}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001950
1951#undef PyRun_AnyFile
1952PyAPI_FUNC(int)
1953PyRun_AnyFile(FILE *fp, const char *name)
1954{
1955 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
1956}
1957
1958#undef PyRun_AnyFileEx
1959PyAPI_FUNC(int)
1960PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
1961{
1962 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
1963}
1964
1965#undef PyRun_AnyFileFlags
1966PyAPI_FUNC(int)
1967PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
1968{
1969 return PyRun_AnyFileExFlags(fp, name, 0, flags);
1970}
1971
1972#undef PyRun_File
1973PyAPI_FUNC(PyObject *)
1974PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
1975{
1976 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
1977}
1978
1979#undef PyRun_FileEx
1980PyAPI_FUNC(PyObject *)
1981PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
1982{
1983 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
1984}
1985
1986#undef PyRun_FileFlags
1987PyAPI_FUNC(PyObject *)
1988PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
1989 PyCompilerFlags *flags)
1990{
1991 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
1992}
1993
1994#undef PyRun_SimpleFile
1995PyAPI_FUNC(int)
1996PyRun_SimpleFile(FILE *f, const char *p)
1997{
1998 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
1999}
2000
2001#undef PyRun_SimpleFileEx
2002PyAPI_FUNC(int)
2003PyRun_SimpleFileEx(FILE *f, const char *p, int c)
2004{
2005 return PyRun_SimpleFileExFlags(f, p, c, NULL);
2006}
2007
2008
2009#undef PyRun_String
2010PyAPI_FUNC(PyObject *)
2011PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
2012{
2013 return PyRun_StringFlags(str, s, g, l, NULL);
2014}
2015
2016#undef PyRun_SimpleString
2017PyAPI_FUNC(int)
2018PyRun_SimpleString(const char *s)
2019{
2020 return PyRun_SimpleStringFlags(s, NULL);
2021}
2022
2023#undef Py_CompileString
2024PyAPI_FUNC(PyObject *)
2025Py_CompileString(const char *str, const char *p, int s)
2026{
2027 return Py_CompileStringFlags(str, p, s, NULL);
2028}
2029
2030#undef PyRun_InteractiveOne
2031PyAPI_FUNC(int)
2032PyRun_InteractiveOne(FILE *f, const char *p)
2033{
2034 return PyRun_InteractiveOneFlags(f, p, NULL);
2035}
2036
2037#undef PyRun_InteractiveLoop
2038PyAPI_FUNC(int)
2039PyRun_InteractiveLoop(FILE *f, const char *p)
2040{
2041 return PyRun_InteractiveLoopFlags(f, p, NULL);
2042}
2043
2044#ifdef __cplusplus
2045}
2046#endif