blob: ada1481ca110a627ac6c9d9948ed4886bc0f16c8 [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"
Kristján Valur Jónsson67387fb2007-04-25 00:17:39 +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"
Antoine Pitrouefb60c02009-10-20 21:29:37 +000020#include "abstract.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000021
Martin v. Löwis0e8bd7e2006-06-10 12:23:46 +000022#ifdef HAVE_SIGNAL_H
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000023#include <signal.h>
Martin v. Löwis0e8bd7e2006-06-10 12:23:46 +000024#endif
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000025
Benjamin Peterson796798b2009-01-02 20:47:27 +000026#ifdef MS_WINDOWS
Martin v. Löwis5344c992009-01-02 20:32:55 +000027#include "malloc.h" /* for alloca */
Benjamin Peterson796798b2009-01-02 20:47:27 +000028#endif
Martin v. Löwis5344c992009-01-02 20:32:55 +000029
Martin v. Löwis73d538b2003-03-05 15:13:47 +000030#ifdef HAVE_LANGINFO_H
31#include <locale.h>
32#include <langinfo.h>
33#endif
34
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000035#ifdef MS_WINDOWS
Guido van Rossuma44823b1995-03-14 15:01:17 +000036#undef BYTE
37#include "windows.h"
38#endif
39
Neal Norwitz4281cef2006-03-04 19:58:13 +000040#ifndef Py_REF_DEBUG
Tim Peters62e97f02006-03-28 21:44:32 +000041#define PRINT_TOTAL_REFS()
Neal Norwitz4281cef2006-03-04 19:58:13 +000042#else /* Py_REF_DEBUG */
Tim Peters62e97f02006-03-28 21:44:32 +000043#define PRINT_TOTAL_REFS() fprintf(stderr, \
44 "[%" PY_FORMAT_SIZE_T "d refs]\n", \
Armin Rigoe1709372006-04-12 17:06:05 +000045 _Py_GetRefTotal())
Neal Norwitz4281cef2006-03-04 19:58:13 +000046#endif
47
Anthony Baxterac6bd462006-04-13 02:06:09 +000048#ifdef __cplusplus
49extern "C" {
50#endif
51
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000052extern char *Py_GetPath(void);
Guido van Rossum1984f1e1992-08-04 12:41:02 +000053
Guido van Rossum82598051997-03-05 00:20:32 +000054extern grammar _PyParser_Grammar; /* From graminit.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000055
Guido van Rossumb73cc041993-11-01 16:28:59 +000056/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000057static void initmain(void);
58static void initsite(void);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000059static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
Neal Norwitzadb69fc2005-12-17 20:54:49 +000060 PyCompilerFlags *, PyArena *);
Martin v. Löwis95292d62002-12-11 14:04:59 +000061static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
Jeremy Hyltonbc320242001-03-22 02:47:58 +000062 PyCompilerFlags *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000063static void err_input(perrdetail *);
64static void initsigs(void);
Antoine Pitrouefb60c02009-10-20 21:29:37 +000065static void wait_for_thread_shutdown(void);
Tim Petersdbd9ba62000-07-09 03:09:57 +000066static void call_sys_exitfunc(void);
67static void call_ll_exitfuncs(void);
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000068extern void _PyUnicode_Init(void);
69extern void _PyUnicode_Fini(void);
Guido van Rossumc94044c2000-03-10 23:03:54 +000070
Mark Hammond8d98d2c2003-04-19 15:41:53 +000071#ifdef WITH_THREAD
72extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
73extern void _PyGILState_Fini(void);
74#endif /* WITH_THREAD */
75
Guido van Rossum82598051997-03-05 00:20:32 +000076int Py_DebugFlag; /* Needed by parser.c */
77int Py_VerboseFlag; /* Needed by import.c */
Guido van Rossum7433b121997-02-14 19:45:36 +000078int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Georg Brandl49aafc92007-03-07 00:34:46 +000079int Py_InspectFlag; /* Needed to determine whether to exit at SystemError */
Guido van Rossumdcc0c131997-08-29 22:32:42 +000080int Py_NoSiteFlag; /* Suppress 'import site' */
Christian Heimes1a6387e2008-03-26 12:49:49 +000081int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */
Georg Brandl2da0fce2008-01-07 17:09:35 +000082int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.py[co]) */
Barry Warsaw3ce09642000-05-02 19:18:59 +000083int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
Guido van Rossuma61691e1998-02-06 22:27:24 +000084int Py_FrozenFlag; /* Needed by getpath.c */
Guido van Rossumb16d1972000-05-01 17:55:15 +000085int Py_UnicodeFlag = 0; /* Needed by compile.c */
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +000086int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Tim Peters3caca232001-12-06 06:23:26 +000087/* _XXX Py_QnewFlag should go away in 2.3. It's true iff -Qnew is passed,
88 on the command line, and is used in 2.2 by ceval.c to make all "/" divisions
89 true divisions (which they will be in 2.3). */
90int _Py_QnewFlag = 0;
Christian Heimesaf748c32008-05-06 22:41:46 +000091int Py_NoUserSiteDirectory = 0; /* for -s and site.py */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000092
Brett Cannone9746892008-04-12 23:44:07 +000093/* PyModule_GetWarningsModule is no longer necessary as of 2.6
94since _warnings is builtin. This API should not be used. */
95PyObject *
96PyModule_GetWarningsModule(void)
Mark Hammondedd07732003-07-15 23:03:55 +000097{
Brett Cannone9746892008-04-12 23:44:07 +000098 return PyImport_ImportModule("warnings");
Mark Hammondedd07732003-07-15 23:03:55 +000099}
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000100
Guido van Rossum25ce5661997-08-02 03:10:38 +0000101static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000102
Thomas Wouters7e474022000-07-16 12:04:32 +0000103/* API to access the initialized flag -- useful for esoteric use */
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000104
105int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000106Py_IsInitialized(void)
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000107{
108 return initialized;
109}
110
Guido van Rossum25ce5661997-08-02 03:10:38 +0000111/* Global initializations. Can be undone by Py_Finalize(). Don't
112 call this twice without an intervening Py_Finalize() call. When
113 initializations fail, a fatal error is issued and the function does
114 not return. On return, the first thread and interpreter state have
115 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000116
Guido van Rossum25ce5661997-08-02 03:10:38 +0000117 Locking: you must hold the interpreter lock while calling this.
118 (If the lock has not yet been initialized, that's equivalent to
119 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000120
Guido van Rossum25ce5661997-08-02 03:10:38 +0000121*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000122
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000123static int
124add_flag(int flag, const char *envs)
125{
126 int env = atoi(envs);
127 if (flag < env)
128 flag = env;
129 if (flag < 1)
130 flag = 1;
131 return flag;
132}
133
Guido van Rossuma027efa1997-05-05 20:56:21 +0000134void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000135Py_InitializeEx(int install_sigs)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000136{
Guido van Rossuma027efa1997-05-05 20:56:21 +0000137 PyInterpreterState *interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000138 PyThreadState *tstate;
139 PyObject *bimod, *sysmod;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000140 char *p;
Neal Norwitz18aa3882008-08-24 05:04:52 +0000141 char *icodeset = NULL; /* On Windows, input codeset may theoretically
142 differ from output codeset. */
Martin v. Löwis99815892008-06-01 07:20:46 +0000143 char *codeset = NULL;
144 char *errors = NULL;
145 int free_codeset = 0;
146 int overridden = 0;
Martin v. Löwisb12d8572008-06-01 08:06:17 +0000147 PyObject *sys_stream, *sys_isatty;
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000148#if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
Martin v. Löwis99815892008-06-01 07:20:46 +0000149 char *saved_locale, *loc_codeset;
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000150#endif
Martin v. Löwis99815892008-06-01 07:20:46 +0000151#ifdef MS_WINDOWS
152 char ibuf[128];
153 char buf[128];
154#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +0000155 extern void _Py_ReadyTypes(void);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000156
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000157 if (initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000158 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000159 initialized = 1;
Tim Petersd08e3822003-04-17 15:24:21 +0000160
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000161 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000162 Py_DebugFlag = add_flag(Py_DebugFlag, p);
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000163 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000164 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000165 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000166 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
Georg Brandl2da0fce2008-01-07 17:09:35 +0000167 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0')
168 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000169
Guido van Rossuma027efa1997-05-05 20:56:21 +0000170 interp = PyInterpreterState_New();
171 if (interp == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000172 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000173
Guido van Rossuma027efa1997-05-05 20:56:21 +0000174 tstate = PyThreadState_New(interp);
175 if (tstate == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000176 Py_FatalError("Py_Initialize: can't make first thread");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000177 (void) PyThreadState_Swap(tstate);
178
Guido van Rossum70d893a2001-08-16 08:21:42 +0000179 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000180
Neal Norwitzb2501f42002-12-31 03:42:13 +0000181 if (!_PyFrame_Init())
Neal Norwitzc91ed402002-12-30 22:29:22 +0000182 Py_FatalError("Py_Initialize: can't init frames");
183
Neal Norwitzb2501f42002-12-31 03:42:13 +0000184 if (!_PyInt_Init())
Neal Norwitzc91ed402002-12-30 22:29:22 +0000185 Py_FatalError("Py_Initialize: can't init ints");
186
Mark Dickinsonefc82f72009-03-20 15:51:55 +0000187 if (!_PyLong_Init())
188 Py_FatalError("Py_Initialize: can't init longs");
189
Christian Heimes3497f942008-05-26 12:29:14 +0000190 if (!PyByteArray_Init())
Christian Heimes1a6387e2008-03-26 12:49:49 +0000191 Py_FatalError("Py_Initialize: can't init bytearray");
192
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000193 _PyFloat_Init();
194
Guido van Rossum25ce5661997-08-02 03:10:38 +0000195 interp->modules = PyDict_New();
196 if (interp->modules == NULL)
197 Py_FatalError("Py_Initialize: can't make modules dictionary");
Collin Winter276887b2007-03-12 16:11:39 +0000198 interp->modules_reloading = PyDict_New();
199 if (interp->modules_reloading == NULL)
200 Py_FatalError("Py_Initialize: can't make modules_reloading dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000201
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000202#ifdef Py_USING_UNICODE
Guido van Rossumc94044c2000-03-10 23:03:54 +0000203 /* Init Unicode implementation; relies on the codec registry */
204 _PyUnicode_Init();
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000205#endif
Guido van Rossumc94044c2000-03-10 23:03:54 +0000206
Barry Warsawf242aa02000-05-25 23:09:49 +0000207 bimod = _PyBuiltin_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000208 if (bimod == NULL)
209 Py_FatalError("Py_Initialize: can't initialize __builtin__");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000210 interp->builtins = PyModule_GetDict(bimod);
Neal Norwitz0f7dbf72006-08-12 03:17:41 +0000211 if (interp->builtins == NULL)
212 Py_FatalError("Py_Initialize: can't initialize builtins dict");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000213 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000214
215 sysmod = _PySys_Init();
216 if (sysmod == NULL)
217 Py_FatalError("Py_Initialize: can't initialize sys");
218 interp->sysdict = PyModule_GetDict(sysmod);
Neal Norwitz0f7dbf72006-08-12 03:17:41 +0000219 if (interp->sysdict == NULL)
220 Py_FatalError("Py_Initialize: can't initialize sys dict");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000221 Py_INCREF(interp->sysdict);
222 _PyImport_FixupExtension("sys", "sys");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000223 PySys_SetPath(Py_GetPath());
Guido van Rossum25ce5661997-08-02 03:10:38 +0000224 PyDict_SetItemString(interp->sysdict, "modules",
225 interp->modules);
226
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000227 _PyImport_Init();
228
Barry Warsawf242aa02000-05-25 23:09:49 +0000229 /* initialize builtin exceptions */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000230 _PyExc_Init();
Barry Warsaw5821bc52001-08-13 23:04:56 +0000231 _PyImport_FixupExtension("exceptions", "exceptions");
Barry Warsawf242aa02000-05-25 23:09:49 +0000232
Barry Warsaw035574d1997-08-29 22:07:17 +0000233 /* phase 2 of builtins */
Barry Warsaw963b8711997-09-18 16:42:02 +0000234 _PyImport_FixupExtension("__builtin__", "__builtin__");
Barry Warsaw035574d1997-08-29 22:07:17 +0000235
Just van Rossum52e14d62002-12-30 22:08:05 +0000236 _PyImportHooks_Init();
237
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000238 if (install_sigs)
239 initsigs(); /* Signal handling stuff, including initintr() */
Brett Cannone9746892008-04-12 23:44:07 +0000240
Georg Brandl3c0fd562008-07-05 10:07:18 +0000241 /* Initialize warnings. */
242 _PyWarnings_Init();
243 if (PySys_HasWarnOptions()) {
244 PyObject *warnings_module = PyImport_ImportModule("warnings");
245 if (!warnings_module)
246 PyErr_Clear();
247 Py_XDECREF(warnings_module);
248 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000249
250 initmain(); /* Module __main__ */
Just van Rossum5bfba3a2003-02-25 20:25:12 +0000251
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000252 /* auto-thread-state API, if available */
253#ifdef WITH_THREAD
254 _PyGILState_Init(interp, tstate);
255#endif /* WITH_THREAD */
256
Victor Stinner66644262010-03-10 22:30:19 +0000257 if (!Py_NoSiteFlag)
258 initsite(); /* Module site */
259
Martin v. Löwis99815892008-06-01 07:20:46 +0000260 if ((p = Py_GETENV("PYTHONIOENCODING")) && *p != '\0') {
261 p = icodeset = codeset = strdup(p);
262 free_codeset = 1;
263 errors = strchr(p, ':');
264 if (errors) {
265 *errors = '\0';
266 errors++;
267 }
268 overridden = 1;
269 }
270
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000271#if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
272 /* On Unix, set the file system encoding according to the
273 user's preference, if the CODESET names a well-known
274 Python codec, and Py_FileSystemDefaultEncoding isn't
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000275 initialized by other means. Also set the encoding of
Martin v. Löwis99815892008-06-01 07:20:46 +0000276 stdin and stdout if these are terminals, unless overridden. */
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000277
Martin v. Löwis99815892008-06-01 07:20:46 +0000278 if (!overridden || !Py_FileSystemDefaultEncoding) {
279 saved_locale = strdup(setlocale(LC_CTYPE, NULL));
280 setlocale(LC_CTYPE, "");
281 loc_codeset = nl_langinfo(CODESET);
282 if (loc_codeset && *loc_codeset) {
283 PyObject *enc = PyCodec_Encoder(loc_codeset);
284 if (enc) {
285 loc_codeset = strdup(loc_codeset);
286 Py_DECREF(enc);
287 } else {
Victor Stinner66644262010-03-10 22:30:19 +0000288 if (PyErr_ExceptionMatches(PyExc_LookupError)) {
289 PyErr_Clear();
290 loc_codeset = NULL;
291 } else {
292 PyErr_Print();
293 exit(1);
294 }
Martin v. Löwis99815892008-06-01 07:20:46 +0000295 }
296 } else
297 loc_codeset = NULL;
298 setlocale(LC_CTYPE, saved_locale);
299 free(saved_locale);
300
301 if (!overridden) {
302 codeset = icodeset = loc_codeset;
303 free_codeset = 1;
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000304 }
Martin v. Löwis99815892008-06-01 07:20:46 +0000305
306 /* Initialize Py_FileSystemDefaultEncoding from
307 locale even if PYTHONIOENCODING is set. */
308 if (!Py_FileSystemDefaultEncoding) {
309 Py_FileSystemDefaultEncoding = loc_codeset;
310 if (!overridden)
311 free_codeset = 0;
312 }
313 }
314#endif
315
316#ifdef MS_WINDOWS
317 if (!overridden) {
318 icodeset = ibuf;
Martin v. Löwis6495c8d2008-06-01 08:19:02 +0000319 codeset = buf;
Martin v. Löwis99815892008-06-01 07:20:46 +0000320 sprintf(ibuf, "cp%d", GetConsoleCP());
321 sprintf(buf, "cp%d", GetConsoleOutputCP());
322 }
323#endif
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000324
325 if (codeset) {
Michael W. Hudson68debc92003-08-11 12:20:24 +0000326 sys_stream = PySys_GetObject("stdin");
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000327 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
328 if (!sys_isatty)
329 PyErr_Clear();
Martin v. Löwis99815892008-06-01 07:20:46 +0000330 if ((overridden ||
331 (sys_isatty && PyObject_IsTrue(sys_isatty))) &&
Thomas Woutersafea5292007-01-23 13:42:00 +0000332 PyFile_Check(sys_stream)) {
Martin v. Löwis99815892008-06-01 07:20:46 +0000333 if (!PyFile_SetEncodingAndErrors(sys_stream, icodeset, errors))
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000334 Py_FatalError("Cannot set codeset of stdin");
335 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000336 Py_XDECREF(sys_isatty);
337
338 sys_stream = PySys_GetObject("stdout");
339 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
340 if (!sys_isatty)
341 PyErr_Clear();
Martin v. Löwis99815892008-06-01 07:20:46 +0000342 if ((overridden ||
343 (sys_isatty && PyObject_IsTrue(sys_isatty))) &&
Thomas Woutersafea5292007-01-23 13:42:00 +0000344 PyFile_Check(sys_stream)) {
Martin v. Löwis99815892008-06-01 07:20:46 +0000345 if (!PyFile_SetEncodingAndErrors(sys_stream, codeset, errors))
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000346 Py_FatalError("Cannot set codeset of stdout");
347 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000348 Py_XDECREF(sys_isatty);
349
Martin v. Löwisea62d252006-04-03 10:56:49 +0000350 sys_stream = PySys_GetObject("stderr");
351 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
352 if (!sys_isatty)
353 PyErr_Clear();
Martin v. Löwis99815892008-06-01 07:20:46 +0000354 if((overridden ||
355 (sys_isatty && PyObject_IsTrue(sys_isatty))) &&
Thomas Woutersafea5292007-01-23 13:42:00 +0000356 PyFile_Check(sys_stream)) {
Martin v. Löwis99815892008-06-01 07:20:46 +0000357 if (!PyFile_SetEncodingAndErrors(sys_stream, codeset, errors))
Martin v. Löwisea62d252006-04-03 10:56:49 +0000358 Py_FatalError("Cannot set codeset of stderr");
359 }
360 Py_XDECREF(sys_isatty);
361
Martin v. Löwis99815892008-06-01 07:20:46 +0000362 if (free_codeset)
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000363 free(codeset);
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000364 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000365}
366
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000367void
368Py_Initialize(void)
369{
370 Py_InitializeEx(1);
371}
372
373
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000374#ifdef COUNT_ALLOCS
Martin v. Löwis45294a92006-04-18 06:24:08 +0000375extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000376#endif
377
Guido van Rossum25ce5661997-08-02 03:10:38 +0000378/* Undo the effect of Py_Initialize().
379
380 Beware: if multiple interpreter and/or thread states exist, these
381 are not wiped out; only the current thread and interpreter state
382 are deleted. But since everything else is deleted, those other
383 interpreter and thread states should no longer be used.
384
385 (XXX We should do better, e.g. wipe out all interpreters and
386 threads.)
387
388 Locking: as above.
389
390*/
391
392void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000393Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000394{
395 PyInterpreterState *interp;
396 PyThreadState *tstate;
397
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000398 if (!initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000399 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000400
Antoine Pitrouefb60c02009-10-20 21:29:37 +0000401 wait_for_thread_shutdown();
402
Tim Peters384fd102001-01-21 03:40:37 +0000403 /* The interpreter is still entirely intact at this point, and the
404 * exit funcs may be relying on that. In particular, if some thread
405 * or exit func is still waiting to do an import, the import machinery
406 * expects Py_IsInitialized() to return true. So don't say the
407 * interpreter is uninitialized until after the exit funcs have run.
408 * Note that Threading.py uses an exit func to do a join on all the
409 * threads created thru it, so this also protects pending imports in
410 * the threads created via Threading.
411 */
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000412 call_sys_exitfunc();
Tim Peters384fd102001-01-21 03:40:37 +0000413 initialized = 0;
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000414
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000415 /* Get current thread state and interpreter pointer */
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000416 tstate = PyThreadState_GET();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000417 interp = tstate->interp;
418
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000419 /* Disable signal handling */
420 PyOS_FiniInterrupts();
421
Christian Heimes908caac2008-01-27 23:34:59 +0000422 /* Clear type lookup cache */
423 PyType_ClearCache();
424
Guido van Rossume13ddc92003-04-17 17:29:22 +0000425 /* Collect garbage. This may call finalizers; it's nice to call these
Tim Peters1d7323e2003-12-01 21:35:27 +0000426 * before all modules are destroyed.
427 * XXX If a __del__ or weakref callback is triggered here, and tries to
428 * XXX import a module, bad things can happen, because Python no
429 * XXX longer believes it's initialized.
430 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
431 * XXX is easy to provoke that way. I've also seen, e.g.,
432 * XXX Exception exceptions.ImportError: 'No module named sha'
433 * XXX in <function callback at 0x008F5718> ignored
434 * XXX but I'm unclear on exactly how that one happens. In any case,
435 * XXX I haven't seen a real-life report of either of these.
Neal Norwitz9589ee22006-03-04 19:01:22 +0000436 */
Guido van Rossume13ddc92003-04-17 17:29:22 +0000437 PyGC_Collect();
Martin v. Löwis45294a92006-04-18 06:24:08 +0000438#ifdef COUNT_ALLOCS
439 /* With COUNT_ALLOCS, it helps to run GC multiple times:
440 each collection might release some types from the type
441 list, so they become garbage. */
442 while (PyGC_Collect() > 0)
443 /* nothing */;
444#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000445
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000446 /* Destroy all modules */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000447 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000448
Guido van Rossume13ddc92003-04-17 17:29:22 +0000449 /* Collect final garbage. This disposes of cycles created by
Tim Peters1d7323e2003-12-01 21:35:27 +0000450 * new-style class definitions, for example.
451 * XXX This is disabled because it caused too many problems. If
452 * XXX a __del__ or weakref callback triggers here, Python code has
453 * XXX a hard time running, because even the sys module has been
454 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
455 * XXX One symptom is a sequence of information-free messages
456 * XXX coming from threads (if a __del__ or callback is invoked,
457 * XXX other threads can execute too, and any exception they encounter
458 * XXX triggers a comedy of errors as subsystem after subsystem
459 * XXX fails to find what it *expects* to find in sys to help report
460 * XXX the exception and consequent unexpected failures). I've also
461 * XXX seen segfaults then, after adding print statements to the
462 * XXX Python code getting called.
463 */
464#if 0
Guido van Rossume13ddc92003-04-17 17:29:22 +0000465 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000466#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000467
Guido van Rossum1707aad1997-12-08 23:43:45 +0000468 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
469 _PyImport_Fini();
470
471 /* Debugging stuff */
472#ifdef COUNT_ALLOCS
Martin v. Löwis45294a92006-04-18 06:24:08 +0000473 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000474#endif
475
Tim Peters62e97f02006-03-28 21:44:32 +0000476 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000477
Tim Peters9cf25ce2003-04-17 15:21:01 +0000478#ifdef Py_TRACE_REFS
479 /* Display all objects still alive -- this can invoke arbitrary
480 * __repr__ overrides, so requires a mostly-intact interpreter.
481 * Alas, a lot of stuff may still be alive now that will be cleaned
482 * up later.
483 */
Tim Peters269b2a62003-04-17 19:52:29 +0000484 if (Py_GETENV("PYTHONDUMPREFS"))
Tim Peters9cf25ce2003-04-17 15:21:01 +0000485 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000486#endif /* Py_TRACE_REFS */
487
Guido van Rossumd922fa42003-04-15 14:10:09 +0000488 /* Clear interpreter state */
Barry Warsawf242aa02000-05-25 23:09:49 +0000489 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000490
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000491 /* Now we decref the exception classes. After this point nothing
492 can raise an exception. That's okay, because each Fini() method
493 below has been checked to make sure no exceptions are ever
494 raised.
495 */
496
497 _PyExc_Fini();
498
Amaury Forgeot d'Arc025c3472007-11-29 23:35:25 +0000499 /* Cleanup auto-thread-state */
500#ifdef WITH_THREAD
501 _PyGILState_Fini();
502#endif /* WITH_THREAD */
503
Guido van Rossumd922fa42003-04-15 14:10:09 +0000504 /* Delete current thread */
Barry Warsawf242aa02000-05-25 23:09:49 +0000505 PyThreadState_Swap(NULL);
506 PyInterpreterState_Delete(interp);
507
Guido van Rossumd922fa42003-04-15 14:10:09 +0000508 /* Sundry finalizers */
Guido van Rossumcc283f51997-08-05 02:22:03 +0000509 PyMethod_Fini();
510 PyFrame_Fini();
511 PyCFunction_Fini();
512 PyTuple_Fini();
Raymond Hettingerfb09f0e2004-10-07 03:58:07 +0000513 PyList_Fini();
Raymond Hettingerd7946662005-08-01 21:39:29 +0000514 PySet_Fini();
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000515 PyString_Fini();
Christian Heimes3497f942008-05-26 12:29:14 +0000516 PyByteArray_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000517 PyInt_Fini();
518 PyFloat_Fini();
Christian Heimesf75dbef2008-02-08 00:11:31 +0000519 PyDict_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000520
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000521#ifdef Py_USING_UNICODE
522 /* Cleanup Unicode implementation */
523 _PyUnicode_Fini();
524#endif
525
Guido van Rossumcc283f51997-08-05 02:22:03 +0000526 /* XXX Still allocated:
527 - various static ad-hoc pointers to interned strings
528 - int and float free list blocks
529 - whatever various modules and libraries allocate
530 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000531
532 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000533
Tim Peters269b2a62003-04-17 19:52:29 +0000534#ifdef Py_TRACE_REFS
535 /* Display addresses (& refcnts) of all objects still alive.
536 * An address can be used to find the repr of the object, printed
537 * above by _Py_PrintReferences.
538 */
539 if (Py_GETENV("PYTHONDUMPREFS"))
540 _Py_PrintReferenceAddresses(stderr);
541#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000542#ifdef PYMALLOC_DEBUG
543 if (Py_GETENV("PYTHONMALLOCSTATS"))
544 _PyObject_DebugMallocStats();
545#endif
546
Guido van Rossumcc283f51997-08-05 02:22:03 +0000547 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000548}
549
550/* Create and initialize a new interpreter and thread, and return the
551 new thread. This requires that Py_Initialize() has been called
552 first.
553
554 Unsuccessful initialization yields a NULL pointer. Note that *no*
555 exception information is available even in this case -- the
556 exception information is held in the thread, and there is no
557 thread.
558
559 Locking: as above.
560
561*/
562
563PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000564Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000565{
566 PyInterpreterState *interp;
567 PyThreadState *tstate, *save_tstate;
568 PyObject *bimod, *sysmod;
569
570 if (!initialized)
571 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
572
573 interp = PyInterpreterState_New();
574 if (interp == NULL)
575 return NULL;
576
577 tstate = PyThreadState_New(interp);
578 if (tstate == NULL) {
579 PyInterpreterState_Delete(interp);
580 return NULL;
581 }
582
583 save_tstate = PyThreadState_Swap(tstate);
584
585 /* XXX The following is lax in error checking */
586
587 interp->modules = PyDict_New();
Collin Winter276887b2007-03-12 16:11:39 +0000588 interp->modules_reloading = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000589
590 bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
591 if (bimod != NULL) {
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000592 interp->builtins = PyModule_GetDict(bimod);
Neal Norwitz0c6ae5b2006-08-21 20:16:24 +0000593 if (interp->builtins == NULL)
594 goto handle_error;
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000595 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000596 }
597 sysmod = _PyImport_FindExtension("sys", "sys");
598 if (bimod != NULL && sysmod != NULL) {
599 interp->sysdict = PyModule_GetDict(sysmod);
Neal Norwitz0c6ae5b2006-08-21 20:16:24 +0000600 if (interp->sysdict == NULL)
601 goto handle_error;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000602 Py_INCREF(interp->sysdict);
603 PySys_SetPath(Py_GetPath());
604 PyDict_SetItemString(interp->sysdict, "modules",
605 interp->modules);
Martin v. Löwisd7ceb222003-01-22 09:00:38 +0000606 _PyImportHooks_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000607 initmain();
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000608 if (!Py_NoSiteFlag)
609 initsite();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000610 }
611
612 if (!PyErr_Occurred())
613 return tstate;
614
Neal Norwitz0c6ae5b2006-08-21 20:16:24 +0000615handle_error:
Guido van Rossum25ce5661997-08-02 03:10:38 +0000616 /* Oops, it didn't work. Undo it all. */
617
618 PyErr_Print();
619 PyThreadState_Clear(tstate);
620 PyThreadState_Swap(save_tstate);
621 PyThreadState_Delete(tstate);
622 PyInterpreterState_Delete(interp);
623
624 return NULL;
625}
626
627/* Delete an interpreter and its last thread. This requires that the
628 given thread state is current, that the thread has no remaining
629 frames, and that it is its interpreter's only remaining thread.
630 It is a fatal error to violate these constraints.
631
632 (Py_Finalize() doesn't have these constraints -- it zaps
633 everything, regardless.)
634
635 Locking: as above.
636
637*/
638
639void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000640Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000641{
642 PyInterpreterState *interp = tstate->interp;
643
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000644 if (tstate != PyThreadState_GET())
Guido van Rossum25ce5661997-08-02 03:10:38 +0000645 Py_FatalError("Py_EndInterpreter: thread is not current");
646 if (tstate->frame != NULL)
647 Py_FatalError("Py_EndInterpreter: thread still has a frame");
648 if (tstate != interp->tstate_head || tstate->next != NULL)
649 Py_FatalError("Py_EndInterpreter: not the last thread");
650
651 PyImport_Cleanup();
652 PyInterpreterState_Clear(interp);
653 PyThreadState_Swap(NULL);
654 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000655}
656
657static char *progname = "python";
658
659void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000660Py_SetProgramName(char *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000661{
662 if (pn && *pn)
663 progname = pn;
664}
665
666char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000667Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000668{
669 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000670}
671
Guido van Rossuma61691e1998-02-06 22:27:24 +0000672static char *default_home = NULL;
673
674void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000675Py_SetPythonHome(char *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000676{
677 default_home = home;
678}
679
680char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000681Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000682{
683 char *home = default_home;
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000684 if (home == NULL && !Py_IgnoreEnvironmentFlag)
685 home = Py_GETENV("PYTHONHOME");
Guido van Rossuma61691e1998-02-06 22:27:24 +0000686 return home;
687}
688
Guido van Rossum6135a871995-01-09 17:53:26 +0000689/* Create __main__ module */
690
691static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000692initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000693{
Guido van Rossum82598051997-03-05 00:20:32 +0000694 PyObject *m, *d;
695 m = PyImport_AddModule("__main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000696 if (m == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000697 Py_FatalError("can't create __main__ module");
698 d = PyModule_GetDict(m);
699 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
Guido van Rossum858cb731997-11-19 16:15:37 +0000700 PyObject *bimod = PyImport_ImportModule("__builtin__");
701 if (bimod == NULL ||
702 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
Guido van Rossum82598051997-03-05 00:20:32 +0000703 Py_FatalError("can't add __builtins__ to __main__");
Barry Warsaw3d05b1a1999-01-29 21:30:22 +0000704 Py_DECREF(bimod);
Guido van Rossum6135a871995-01-09 17:53:26 +0000705 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000706}
707
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000708/* Import the site module (not into __main__ though) */
709
710static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000711initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000712{
Victor Stinner66644262010-03-10 22:30:19 +0000713 PyObject *m;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000714 m = PyImport_ImportModule("site");
715 if (m == NULL) {
Victor Stinner66644262010-03-10 22:30:19 +0000716 PyErr_Print();
717 Py_Finalize();
718 exit(1);
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000719 }
720 else {
721 Py_DECREF(m);
722 }
723}
724
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000725/* Parse input from a file and execute it */
726
727int
Tim Peters5e9d6cf2006-05-28 10:41:29 +0000728PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000729 PyCompilerFlags *flags)
730{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000731 if (filename == NULL)
732 filename = "???";
Guido van Rossum0df002c2000-08-27 19:21:52 +0000733 if (Py_FdIsInteractive(fp, filename)) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000734 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
Guido van Rossum0df002c2000-08-27 19:21:52 +0000735 if (closeit)
736 fclose(fp);
737 return err;
738 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000739 else
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000740 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000741}
742
743int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000744PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000745{
Guido van Rossum82598051997-03-05 00:20:32 +0000746 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000747 int ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000748 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000749
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000750 if (flags == NULL) {
751 flags = &local_flags;
Tim Peters5ba58662001-07-16 02:29:45 +0000752 local_flags.cf_flags = 0;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000753 }
Guido van Rossum82598051997-03-05 00:20:32 +0000754 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000755 if (v == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000756 PySys_SetObject("ps1", v = PyString_FromString(">>> "));
Guido van Rossum82598051997-03-05 00:20:32 +0000757 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000758 }
Guido van Rossum82598051997-03-05 00:20:32 +0000759 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000760 if (v == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000761 PySys_SetObject("ps2", v = PyString_FromString("... "));
Guido van Rossum82598051997-03-05 00:20:32 +0000762 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000763 }
764 for (;;) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000765 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
Tim Peters62e97f02006-03-28 21:44:32 +0000766 PRINT_TOTAL_REFS();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000767 if (ret == E_EOF)
768 return 0;
769 /*
770 if (ret == E_NOMEM)
771 return -1;
772 */
773 }
774}
775
Eric Smith7c478942008-03-18 23:45:49 +0000776#if 0
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000777/* compute parser flags based on compiler flags */
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000778#define PARSER_FLAGS(flags) \
Thomas Wouters34aa7ba2006-02-28 19:02:24 +0000779 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
Neal Norwitzca460d92006-09-06 06:28:06 +0000780 PyPARSE_DONT_IMPLY_DEDENT : 0)) : 0)
Eric Smith7c478942008-03-18 23:45:49 +0000781#endif
782#if 1
Neal Norwitzca460d92006-09-06 06:28:06 +0000783/* Keep an example of flags with future keyword support. */
784#define PARSER_FLAGS(flags) \
785 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
Thomas Wouters34aa7ba2006-02-28 19:02:24 +0000786 PyPARSE_DONT_IMPLY_DEDENT : 0) \
Christian Heimes3c608332008-03-26 22:01:37 +0000787 | (((flags)->cf_flags & CO_FUTURE_PRINT_FUNCTION) ? \
788 PyPARSE_PRINT_IS_FUNCTION : 0) \
789 | (((flags)->cf_flags & CO_FUTURE_UNICODE_LITERALS) ? \
790 PyPARSE_UNICODE_LITERALS : 0) \
791 ) : 0)
Neal Norwitzca460d92006-09-06 06:28:06 +0000792#endif
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000793
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000794int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000795PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000796{
Guido van Rossum82598051997-03-05 00:20:32 +0000797 PyObject *m, *d, *v, *w;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000798 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +0000799 PyArena *arena;
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000800 char *ps1 = "", *ps2 = "";
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000801 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +0000802
Guido van Rossum82598051997-03-05 00:20:32 +0000803 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000804 if (v != NULL) {
805 v = PyObject_Str(v);
806 if (v == NULL)
807 PyErr_Clear();
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000808 else if (PyString_Check(v))
809 ps1 = PyString_AsString(v);
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000810 }
Guido van Rossum82598051997-03-05 00:20:32 +0000811 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000812 if (w != NULL) {
813 w = PyObject_Str(w);
814 if (w == NULL)
815 PyErr_Clear();
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000816 else if (PyString_Check(w))
817 ps2 = PyString_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000818 }
Neal Norwitz9589ee22006-03-04 19:01:22 +0000819 arena = PyArena_New();
Neal Norwitzb59d08c2006-07-22 16:20:49 +0000820 if (arena == NULL) {
821 Py_XDECREF(v);
822 Py_XDECREF(w);
823 return -1;
824 }
Tim Peters5e9d6cf2006-05-28 10:41:29 +0000825 mod = PyParser_ASTFromFile(fp, filename,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000826 Py_single_input, ps1, ps2,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000827 flags, &errcode, arena);
Guido van Rossum82598051997-03-05 00:20:32 +0000828 Py_XDECREF(v);
829 Py_XDECREF(w);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000830 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000831 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000832 if (errcode == E_EOF) {
833 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000834 return E_EOF;
835 }
Guido van Rossum82598051997-03-05 00:20:32 +0000836 PyErr_Print();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000837 return -1;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000838 }
Guido van Rossum82598051997-03-05 00:20:32 +0000839 m = PyImport_AddModule("__main__");
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000840 if (m == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000841 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000842 return -1;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000843 }
Guido van Rossum82598051997-03-05 00:20:32 +0000844 d = PyModule_GetDict(m);
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000845 v = run_mod(mod, filename, d, d, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +0000846 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000847 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000848 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000849 return -1;
850 }
Guido van Rossum82598051997-03-05 00:20:32 +0000851 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000852 if (Py_FlushLine())
853 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000854 return 0;
855}
856
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000857/* Check whether a file maybe a pyc file: Look at the extension,
858 the file type, and, if we may close it, at the first few bytes. */
859
860static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000861maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000862{
863 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
864 return 1;
865
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000866 /* Only look into the file if we are allowed to close it, since
867 it then should also be seekable. */
868 if (closeit) {
869 /* Read only two bytes of the magic. If the file was opened in
870 text mode, the bytes 3 and 4 of the magic (\r\n) might not
871 be read as they are on disk. */
872 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
873 unsigned char buf[2];
Tim Peters3e876562001-02-11 04:35:39 +0000874 /* Mess: In case of -x, the stream is NOT at its start now,
875 and ungetc() was used to push back the first newline,
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000876 which makes the current stream position formally undefined,
877 and a x-platform nightmare.
878 Unfortunately, we have no direct way to know whether -x
879 was specified. So we use a terrible hack: if the current
880 stream position is not 0, we assume -x was specified, and
881 give up. Bug 132850 on SourceForge spells out the
882 hopelessness of trying anything else (fseek and ftell
883 don't work predictably x-platform for text-mode files).
Tim Peters3e876562001-02-11 04:35:39 +0000884 */
Tim Peters3e876562001-02-11 04:35:39 +0000885 int ispyc = 0;
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000886 if (ftell(fp) == 0) {
887 if (fread(buf, 1, 2, fp) == 2 &&
Tim Petersd08e3822003-04-17 15:24:21 +0000888 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000889 ispyc = 1;
890 rewind(fp);
891 }
Tim Peters3e876562001-02-11 04:35:39 +0000892 return ispyc;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000893 }
894 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +0000895}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000896
Guido van Rossum0df002c2000-08-27 19:21:52 +0000897int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000898PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000899 PyCompilerFlags *flags)
900{
Guido van Rossum82598051997-03-05 00:20:32 +0000901 PyObject *m, *d, *v;
Martin v. Löwis95292d62002-12-11 14:04:59 +0000902 const char *ext;
Matthias Kloseedb5e1e2009-04-04 14:18:13 +0000903 int set_file_name = 0, ret, len;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000904
Guido van Rossum82598051997-03-05 00:20:32 +0000905 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000906 if (m == NULL)
907 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000908 d = PyModule_GetDict(m);
Fred Drake8ed02042002-10-17 21:24:58 +0000909 if (PyDict_GetItemString(d, "__file__") == NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000910 PyObject *f = PyString_FromString(filename);
Fred Drake8ed02042002-10-17 21:24:58 +0000911 if (f == NULL)
912 return -1;
913 if (PyDict_SetItemString(d, "__file__", f) < 0) {
914 Py_DECREF(f);
915 return -1;
916 }
Georg Brandlaa2321b2007-03-07 00:40:28 +0000917 set_file_name = 1;
Fred Drake8ed02042002-10-17 21:24:58 +0000918 Py_DECREF(f);
919 }
Matthias Kloseedb5e1e2009-04-04 14:18:13 +0000920 len = strlen(filename);
921 ext = filename + len - (len > 4 ? 4 : 0);
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000922 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000923 /* Try to run a pyc file. First, re-open in binary */
Guido van Rossum0df002c2000-08-27 19:21:52 +0000924 if (closeit)
925 fclose(fp);
Fred Drake8ed02042002-10-17 21:24:58 +0000926 if ((fp = fopen(filename, "rb")) == NULL) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000927 fprintf(stderr, "python: Can't reopen .pyc file\n");
Georg Brandlaa2321b2007-03-07 00:40:28 +0000928 ret = -1;
929 goto done;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000930 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000931 /* Turn on optimization if a .pyo file is given */
932 if (strcmp(ext, ".pyo") == 0)
933 Py_OptimizeFlag = 1;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000934 v = run_pyc_file(fp, filename, d, d, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000935 } else {
Tim Petersd08e3822003-04-17 15:24:21 +0000936 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000937 closeit, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000938 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000939 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000940 PyErr_Print();
Georg Brandlaa2321b2007-03-07 00:40:28 +0000941 ret = -1;
942 goto done;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000943 }
Guido van Rossum82598051997-03-05 00:20:32 +0000944 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000945 if (Py_FlushLine())
946 PyErr_Clear();
Georg Brandlaa2321b2007-03-07 00:40:28 +0000947 ret = 0;
948 done:
949 if (set_file_name && PyDict_DelItemString(d, "__file__"))
950 PyErr_Clear();
951 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000952}
953
954int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000955PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +0000956{
Guido van Rossum82598051997-03-05 00:20:32 +0000957 PyObject *m, *d, *v;
958 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000959 if (m == NULL)
960 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000961 d = PyModule_GetDict(m);
Guido van Rossum393661d2001-08-31 17:40:15 +0000962 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000963 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000964 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000965 return -1;
966 }
Guido van Rossum82598051997-03-05 00:20:32 +0000967 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000968 if (Py_FlushLine())
969 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000970 return 0;
971}
972
Barry Warsaw035574d1997-08-29 22:07:17 +0000973static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000974parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
975 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +0000976{
977 long hold;
978 PyObject *v;
979
980 /* old style errors */
981 if (PyTuple_Check(err))
Neal Norwitz78293352002-04-01 01:41:20 +0000982 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
Neal Norwitz9589ee22006-03-04 19:01:22 +0000983 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +0000984
985 /* new style errors. `err' is an instance */
986
987 if (! (v = PyObject_GetAttrString(err, "msg")))
988 goto finally;
989 *message = v;
990
991 if (!(v = PyObject_GetAttrString(err, "filename")))
992 goto finally;
993 if (v == Py_None)
994 *filename = NULL;
Gregory P. Smithdd96db62008-06-09 04:58:54 +0000995 else if (! (*filename = PyString_AsString(v)))
Barry Warsaw035574d1997-08-29 22:07:17 +0000996 goto finally;
997
998 Py_DECREF(v);
999 if (!(v = PyObject_GetAttrString(err, "lineno")))
1000 goto finally;
1001 hold = PyInt_AsLong(v);
1002 Py_DECREF(v);
1003 v = NULL;
1004 if (hold < 0 && PyErr_Occurred())
1005 goto finally;
1006 *lineno = (int)hold;
1007
1008 if (!(v = PyObject_GetAttrString(err, "offset")))
1009 goto finally;
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001010 if (v == Py_None) {
1011 *offset = -1;
1012 Py_DECREF(v);
1013 v = NULL;
1014 } else {
1015 hold = PyInt_AsLong(v);
1016 Py_DECREF(v);
1017 v = NULL;
1018 if (hold < 0 && PyErr_Occurred())
1019 goto finally;
1020 *offset = (int)hold;
1021 }
Barry Warsaw035574d1997-08-29 22:07:17 +00001022
1023 if (!(v = PyObject_GetAttrString(err, "text")))
1024 goto finally;
1025 if (v == Py_None)
1026 *text = NULL;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001027 else if (! (*text = PyString_AsString(v)))
Barry Warsaw035574d1997-08-29 22:07:17 +00001028 goto finally;
1029 Py_DECREF(v);
1030 return 1;
1031
1032finally:
1033 Py_XDECREF(v);
1034 return 0;
1035}
1036
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001037void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001038PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001039{
Guido van Rossuma61691e1998-02-06 22:27:24 +00001040 PyErr_PrintEx(1);
1041}
1042
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001043static void
Martin v. Löwis95292d62002-12-11 14:04:59 +00001044print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001045{
1046 char *nl;
1047 if (offset >= 0) {
1048 if (offset > 0 && offset == (int)strlen(text))
1049 offset--;
1050 for (;;) {
1051 nl = strchr(text, '\n');
1052 if (nl == NULL || nl-text >= offset)
1053 break;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001054 offset -= (int)(nl+1-text);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001055 text = nl+1;
1056 }
1057 while (*text == ' ' || *text == '\t') {
1058 text++;
1059 offset--;
1060 }
1061 }
1062 PyFile_WriteString(" ", f);
1063 PyFile_WriteString(text, f);
1064 if (*text == '\0' || text[strlen(text)-1] != '\n')
1065 PyFile_WriteString("\n", f);
1066 if (offset == -1)
1067 return;
1068 PyFile_WriteString(" ", f);
1069 offset--;
1070 while (offset > 0) {
1071 PyFile_WriteString(" ", f);
1072 offset--;
1073 }
1074 PyFile_WriteString("^\n", f);
1075}
1076
Guido van Rossum66e8e862001-03-23 17:54:43 +00001077static void
1078handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001079{
Neal Norwitz9589ee22006-03-04 19:01:22 +00001080 PyObject *exception, *value, *tb;
1081 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001082
Georg Brandl49aafc92007-03-07 00:34:46 +00001083 if (Py_InspectFlag)
1084 /* Don't exit if -i flag was given. This flag is set to 0
1085 * when entering interactive mode for inspecting. */
1086 return;
1087
Guido van Rossum66e8e862001-03-23 17:54:43 +00001088 PyErr_Fetch(&exception, &value, &tb);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001089 if (Py_FlushLine())
1090 PyErr_Clear();
1091 fflush(stdout);
1092 if (value == NULL || value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001093 goto done;
Brett Cannonbf364092006-03-01 04:25:17 +00001094 if (PyExceptionInstance_Check(value)) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001095 /* The error code should be in the `code' attribute. */
1096 PyObject *code = PyObject_GetAttrString(value, "code");
1097 if (code) {
1098 Py_DECREF(value);
1099 value = code;
1100 if (value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001101 goto done;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001102 }
1103 /* If we failed to dig out the 'code' attribute,
1104 just let the else clause below print the error. */
1105 }
1106 if (PyInt_Check(value))
Tim Peterscf615b52003-04-19 18:47:02 +00001107 exitcode = (int)PyInt_AsLong(value);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001108 else {
1109 PyObject_Print(value, stderr, Py_PRINT_RAW);
1110 PySys_WriteStderr("\n");
Tim Peterscf615b52003-04-19 18:47:02 +00001111 exitcode = 1;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001112 }
Tim Peterscf615b52003-04-19 18:47:02 +00001113 done:
Neal Norwitz9589ee22006-03-04 19:01:22 +00001114 /* Restore and clear the exception info, in order to properly decref
1115 * the exception, value, and traceback. If we just exit instead,
1116 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1117 * some finalizers from running.
1118 */
Tim Peterscf615b52003-04-19 18:47:02 +00001119 PyErr_Restore(exception, value, tb);
1120 PyErr_Clear();
1121 Py_Exit(exitcode);
1122 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001123}
1124
1125void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001126PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001127{
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001128 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001129
1130 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1131 handle_system_exit();
1132 }
Guido van Rossum82598051997-03-05 00:20:32 +00001133 PyErr_Fetch(&exception, &v, &tb);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001134 if (exception == NULL)
1135 return;
Barry Warsaw035574d1997-08-29 22:07:17 +00001136 PyErr_NormalizeException(&exception, &v, &tb);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001137 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +00001138 return;
Georg Brandl3c0fd562008-07-05 10:07:18 +00001139 /* Now we know v != NULL too */
Guido van Rossuma61691e1998-02-06 22:27:24 +00001140 if (set_sys_last_vars) {
1141 PySys_SetObject("last_type", exception);
1142 PySys_SetObject("last_value", v);
1143 PySys_SetObject("last_traceback", tb);
1144 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001145 hook = PySys_GetObject("excepthook");
1146 if (hook) {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00001147 PyObject *args = PyTuple_Pack(3,
Guido van Rossum9d785502006-03-07 18:31:44 +00001148 exception, v, tb ? tb : Py_None);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001149 PyObject *result = PyEval_CallObject(hook, args);
1150 if (result == NULL) {
1151 PyObject *exception2, *v2, *tb2;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001152 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1153 handle_system_exit();
1154 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001155 PyErr_Fetch(&exception2, &v2, &tb2);
1156 PyErr_NormalizeException(&exception2, &v2, &tb2);
Neal Norwitza5e4f222006-07-17 00:59:04 +00001157 /* It should not be possible for exception2 or v2
1158 to be NULL. However PyErr_Display() can't
1159 tolerate NULLs, so just be safe. */
1160 if (exception2 == NULL) {
1161 exception2 = Py_None;
1162 Py_INCREF(exception2);
1163 }
1164 if (v2 == NULL) {
1165 v2 = Py_None;
1166 Py_INCREF(v2);
1167 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001168 if (Py_FlushLine())
1169 PyErr_Clear();
1170 fflush(stdout);
1171 PySys_WriteStderr("Error in sys.excepthook:\n");
1172 PyErr_Display(exception2, v2, tb2);
1173 PySys_WriteStderr("\nOriginal exception was:\n");
1174 PyErr_Display(exception, v, tb);
Neal Norwitza5e4f222006-07-17 00:59:04 +00001175 Py_DECREF(exception2);
1176 Py_DECREF(v2);
Jeremy Hylton07028582001-12-07 15:35:35 +00001177 Py_XDECREF(tb2);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001178 }
1179 Py_XDECREF(result);
1180 Py_XDECREF(args);
1181 } else {
1182 PySys_WriteStderr("sys.excepthook is missing\n");
1183 PyErr_Display(exception, v, tb);
1184 }
1185 Py_XDECREF(exception);
1186 Py_XDECREF(v);
1187 Py_XDECREF(tb);
1188}
1189
Richard Jones7b9558d2006-05-27 12:29:24 +00001190void
1191PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001192{
1193 int err = 0;
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001194 PyObject *f = PySys_GetObject("stderr");
Armin Rigo5d2c6832004-03-22 20:16:58 +00001195 Py_INCREF(value);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001196 if (f == NULL)
1197 fprintf(stderr, "lost sys.stderr\n");
1198 else {
Guido van Rossum0829c751998-02-28 04:31:39 +00001199 if (Py_FlushLine())
1200 PyErr_Clear();
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001201 fflush(stdout);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001202 if (tb && tb != Py_None)
1203 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +00001204 if (err == 0 &&
Armin Rigo5d2c6832004-03-22 20:16:58 +00001205 PyObject_HasAttrString(value, "print_file_and_line"))
Barry Warsaw36b8f941997-08-26 18:09:48 +00001206 {
Guido van Rossum82598051997-03-05 00:20:32 +00001207 PyObject *message;
Martin v. Löwis95292d62002-12-11 14:04:59 +00001208 const char *filename, *text;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001209 int lineno, offset;
Armin Rigo5d2c6832004-03-22 20:16:58 +00001210 if (!parse_syntax_error(value, &message, &filename,
Barry Warsaw035574d1997-08-29 22:07:17 +00001211 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +00001212 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001213 else {
1214 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +00001215 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001216 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +00001217 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001218 else
Guido van Rossum82598051997-03-05 00:20:32 +00001219 PyFile_WriteString(filename, f);
1220 PyFile_WriteString("\", line ", f);
Jeremy Hylton518ab1c2001-11-28 20:42:20 +00001221 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +00001222 PyFile_WriteString(buf, f);
1223 PyFile_WriteString("\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001224 if (text != NULL)
1225 print_error_text(f, offset, text);
Armin Rigo5d2c6832004-03-22 20:16:58 +00001226 Py_DECREF(value);
1227 value = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001228 /* Can't be bothered to check all those
1229 PyFile_WriteString() calls */
1230 if (PyErr_Occurred())
1231 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001232 }
1233 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001234 if (err) {
1235 /* Don't do anything else */
1236 }
Brett Cannonbf364092006-03-01 04:25:17 +00001237 else if (PyExceptionClass_Check(exception)) {
Richard Jones7b9558d2006-05-27 12:29:24 +00001238 PyObject* moduleName;
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001239 char* className = PyExceptionClass_Name(exception);
1240 if (className != NULL) {
1241 char *dot = strrchr(className, '.');
1242 if (dot != NULL)
1243 className = dot+1;
1244 }
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001245
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001246 moduleName = PyObject_GetAttrString(exception, "__module__");
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001247 if (moduleName == NULL)
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001248 err = PyFile_WriteString("<unknown>", f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001249 else {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001250 char* modstr = PyString_AsString(moduleName);
Tim Petersd08e3822003-04-17 15:24:21 +00001251 if (modstr && strcmp(modstr, "exceptions"))
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001252 {
1253 err = PyFile_WriteString(modstr, f);
1254 err += PyFile_WriteString(".", f);
1255 }
Richard Jones7b9558d2006-05-27 12:29:24 +00001256 Py_DECREF(moduleName);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001257 }
1258 if (err == 0) {
1259 if (className == NULL)
1260 err = PyFile_WriteString("<unknown>", f);
1261 else
Brett Cannonbf364092006-03-01 04:25:17 +00001262 err = PyFile_WriteString(className, f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001263 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001264 }
1265 else
1266 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
Brett Cannon2e63b732006-03-02 18:34:57 +00001267 if (err == 0 && (value != Py_None)) {
1268 PyObject *s = PyObject_Str(value);
1269 /* only print colon if the str() of the
1270 object is not the empty string
1271 */
1272 if (s == NULL)
1273 err = -1;
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001274 else if (!PyString_Check(s) ||
1275 PyString_GET_SIZE(s) != 0)
Brett Cannon2e63b732006-03-02 18:34:57 +00001276 err = PyFile_WriteString(": ", f);
1277 if (err == 0)
1278 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1279 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +00001280 }
Georg Brandl7b9c5552007-03-12 14:30:05 +00001281 /* try to write a newline in any case */
1282 err += PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001283 }
Armin Rigo5d2c6832004-03-22 20:16:58 +00001284 Py_DECREF(value);
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001285 /* If an error happened here, don't show it.
1286 XXX This is wrong, but too many callers rely on this behavior. */
1287 if (err != 0)
1288 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001289}
1290
Guido van Rossum82598051997-03-05 00:20:32 +00001291PyObject *
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001292PyRun_StringFlags(const char *str, int start, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001293 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001294{
Neal Norwitze92fba02006-03-04 18:52:26 +00001295 PyObject *ret = NULL;
Neal Norwitzd12bd012006-07-21 07:59:47 +00001296 mod_ty mod;
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001297 PyArena *arena = PyArena_New();
Neal Norwitzd12bd012006-07-21 07:59:47 +00001298 if (arena == NULL)
1299 return NULL;
1300
1301 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
Neal Norwitze92fba02006-03-04 18:52:26 +00001302 if (mod != NULL)
1303 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001304 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001305 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001306}
1307
1308PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001309PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001310 PyObject *locals, int closeit, PyCompilerFlags *flags)
1311{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001312 PyObject *ret;
Neal Norwitzd12bd012006-07-21 07:59:47 +00001313 mod_ty mod;
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001314 PyArena *arena = PyArena_New();
Neal Norwitzd12bd012006-07-21 07:59:47 +00001315 if (arena == NULL)
1316 return NULL;
1317
1318 mod = PyParser_ASTFromFile(fp, filename, start, 0, 0,
1319 flags, NULL, arena);
Georg Brandl098cd692007-03-06 12:17:50 +00001320 if (closeit)
1321 fclose(fp);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001322 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001323 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001324 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001325 }
Neal Norwitze92fba02006-03-04 18:52:26 +00001326 ret = run_mod(mod, filename, globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001327 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001328 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001329}
1330
Guido van Rossum82598051997-03-05 00:20:32 +00001331static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001332run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001333 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001334{
Guido van Rossum82598051997-03-05 00:20:32 +00001335 PyCodeObject *co;
1336 PyObject *v;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001337 co = PyAST_Compile(mod, filename, flags, arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001338 if (co == NULL)
1339 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +00001340 v = PyEval_EvalCode(co, globals, locals);
1341 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001342 return v;
1343}
1344
Guido van Rossum82598051997-03-05 00:20:32 +00001345static PyObject *
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001346run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001347 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001348{
Guido van Rossum82598051997-03-05 00:20:32 +00001349 PyCodeObject *co;
1350 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001351 long magic;
Fred Drakee8de31c2000-08-31 05:38:39 +00001352 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001353
Guido van Rossum82598051997-03-05 00:20:32 +00001354 magic = PyMarshal_ReadLongFromFile(fp);
1355 if (magic != PyImport_GetMagicNumber()) {
1356 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001357 "Bad magic number in .pyc file");
1358 return NULL;
1359 }
Guido van Rossum82598051997-03-05 00:20:32 +00001360 (void) PyMarshal_ReadLongFromFile(fp);
Tim Petersd9b9ac82001-01-28 00:27:39 +00001361 v = PyMarshal_ReadLastObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001362 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +00001363 if (v == NULL || !PyCode_Check(v)) {
1364 Py_XDECREF(v);
1365 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001366 "Bad code object in .pyc file");
1367 return NULL;
1368 }
Guido van Rossum82598051997-03-05 00:20:32 +00001369 co = (PyCodeObject *)v;
1370 v = PyEval_EvalCode(co, globals, locals);
Jeremy Hyltonb857ba22001-08-10 21:41:33 +00001371 if (v && flags)
1372 flags->cf_flags |= (co->co_flags & PyCF_MASK);
Guido van Rossum82598051997-03-05 00:20:32 +00001373 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001374 return v;
1375}
1376
Guido van Rossum82598051997-03-05 00:20:32 +00001377PyObject *
Tim Petersd08e3822003-04-17 15:24:21 +00001378Py_CompileStringFlags(const char *str, const char *filename, int start,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001379 PyCompilerFlags *flags)
1380{
Guido van Rossum82598051997-03-05 00:20:32 +00001381 PyCodeObject *co;
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001382 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001383 PyArena *arena = PyArena_New();
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001384 if (arena == NULL)
1385 return NULL;
1386
1387 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001388 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001389 PyArena_Free(arena);
Guido van Rossum5b722181993-03-30 17:46:03 +00001390 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001391 }
Martin v. Löwis2b366e42006-02-26 22:12:35 +00001392 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001393 PyObject *result = PyAST_mod2obj(mod);
1394 PyArena_Free(arena);
1395 return result;
1396 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001397 co = PyAST_Compile(mod, filename, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001398 PyArena_Free(arena);
Guido van Rossum82598051997-03-05 00:20:32 +00001399 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001400}
1401
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001402struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001403Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001404{
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001405 struct symtable *st;
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001406 mod_ty mod;
Christian Heimes3c608332008-03-26 22:01:37 +00001407 PyCompilerFlags flags;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001408 PyArena *arena = PyArena_New();
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001409 if (arena == NULL)
1410 return NULL;
1411
Christian Heimes7f23d862008-03-26 22:51:58 +00001412 flags.cf_flags = 0;
1413
Christian Heimes3c608332008-03-26 22:01:37 +00001414 mod = PyParser_ASTFromString(str, filename, start, &flags, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001415 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001416 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001417 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001418 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001419 st = PySymtable_Build(mod, filename, 0);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001420 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001421 return st;
1422}
1423
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001424/* Preferred access to parser is through AST. */
1425mod_ty
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001426PyParser_ASTFromString(const char *s, const char *filename, int start,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001427 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001428{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001429 mod_ty mod;
Benjamin Petersondcee09d2008-10-31 02:16:05 +00001430 PyCompilerFlags localflags;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001431 perrdetail err;
Amaury Forgeot d'Arcdf70e052008-03-26 23:07:43 +00001432 int iflags = PARSER_FLAGS(flags);
Christian Heimes3c608332008-03-26 22:01:37 +00001433
1434 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename,
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001435 &_PyParser_Grammar, start, &err,
Christian Heimes3c608332008-03-26 22:01:37 +00001436 &iflags);
Benjamin Petersondcee09d2008-10-31 02:16:05 +00001437 if (flags == NULL) {
1438 localflags.cf_flags = 0;
1439 flags = &localflags;
1440 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001441 if (n) {
Benjamin Petersondcee09d2008-10-31 02:16:05 +00001442 flags->cf_flags |= iflags & PyCF_MASK;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001443 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001444 PyNode_Free(n);
1445 return mod;
1446 }
1447 else {
1448 err_input(&err);
1449 return NULL;
1450 }
1451}
1452
1453mod_ty
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001454PyParser_ASTFromFile(FILE *fp, const char *filename, int start, char *ps1,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001455 char *ps2, PyCompilerFlags *flags, int *errcode,
Neal Norwitz9589ee22006-03-04 19:01:22 +00001456 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001457{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001458 mod_ty mod;
Benjamin Petersondcee09d2008-10-31 02:16:05 +00001459 PyCompilerFlags localflags;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001460 perrdetail err;
Amaury Forgeot d'Arcdf70e052008-03-26 23:07:43 +00001461 int iflags = PARSER_FLAGS(flags);
Christian Heimes3c608332008-03-26 22:01:37 +00001462
Christian Heimes3c608332008-03-26 22:01:37 +00001463 node *n = PyParser_ParseFileFlagsEx(fp, filename, &_PyParser_Grammar,
1464 start, ps1, ps2, &err, &iflags);
Benjamin Petersondcee09d2008-10-31 02:16:05 +00001465 if (flags == NULL) {
1466 localflags.cf_flags = 0;
1467 flags = &localflags;
1468 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001469 if (n) {
Benjamin Petersondcee09d2008-10-31 02:16:05 +00001470 flags->cf_flags |= iflags & PyCF_MASK;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001471 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001472 PyNode_Free(n);
1473 return mod;
1474 }
1475 else {
1476 err_input(&err);
1477 if (errcode)
1478 *errcode = err.error;
1479 return NULL;
1480 }
1481}
1482
Guido van Rossuma110aa61994-08-29 12:50:44 +00001483/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001484
Guido van Rossuma110aa61994-08-29 12:50:44 +00001485node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001486PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001487{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001488 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001489 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
1490 start, NULL, NULL, &err, flags);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001491 if (n == NULL)
1492 err_input(&err);
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001493
Guido van Rossuma110aa61994-08-29 12:50:44 +00001494 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001495}
1496
Guido van Rossuma110aa61994-08-29 12:50:44 +00001497/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001498
Guido van Rossuma110aa61994-08-29 12:50:44 +00001499node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001500PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001501{
Tim Petersfe2127d2001-07-16 05:37:24 +00001502 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001503 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1504 start, &err, flags);
Tim Petersfe2127d2001-07-16 05:37:24 +00001505 if (n == NULL)
1506 err_input(&err);
1507 return n;
1508}
1509
1510node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001511PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Thomas Heller6b17abf2002-07-09 09:23:27 +00001512 int start, int flags)
1513{
Thomas Heller6b17abf2002-07-09 09:23:27 +00001514 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001515 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1516 &_PyParser_Grammar, start, &err, flags);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001517 if (n == NULL)
1518 err_input(&err);
1519 return n;
1520}
1521
1522node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001523PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001524{
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001525 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001526}
1527
Guido van Rossum66ebd912003-04-17 16:02:26 +00001528/* May want to move a more generalized form of this to parsetok.c or
1529 even parser modules. */
1530
1531void
1532PyParser_SetError(perrdetail *err)
1533{
1534 err_input(err);
1535}
1536
Guido van Rossuma110aa61994-08-29 12:50:44 +00001537/* Set the error appropriate to the given input error code (see errcode.h) */
1538
1539static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001540err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00001541{
Fred Drake85f36392000-07-11 17:53:00 +00001542 PyObject *v, *w, *errtype;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001543 PyObject* u = NULL;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001544 char *msg = NULL;
Fred Drake85f36392000-07-11 17:53:00 +00001545 errtype = PyExc_SyntaxError;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001546 switch (err->error) {
Victor Stinner66644262010-03-10 22:30:19 +00001547 case E_ERROR:
1548 return;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001549 case E_SYNTAX:
Fred Drake85f36392000-07-11 17:53:00 +00001550 errtype = PyExc_IndentationError;
1551 if (err->expected == INDENT)
1552 msg = "expected an indented block";
1553 else if (err->token == INDENT)
1554 msg = "unexpected indent";
1555 else if (err->token == DEDENT)
1556 msg = "unexpected unindent";
1557 else {
1558 errtype = PyExc_SyntaxError;
1559 msg = "invalid syntax";
1560 }
Guido van Rossuma110aa61994-08-29 12:50:44 +00001561 break;
1562 case E_TOKEN:
1563 msg = "invalid token";
Guido van Rossuma110aa61994-08-29 12:50:44 +00001564 break;
Skip Montanaro118ec702002-08-15 01:20:16 +00001565 case E_EOFS:
Georg Brandlb52a74b2008-05-11 15:07:39 +00001566 msg = "EOF while scanning triple-quoted string literal";
Skip Montanaro118ec702002-08-15 01:20:16 +00001567 break;
1568 case E_EOLS:
Georg Brandlb52a74b2008-05-11 15:07:39 +00001569 msg = "EOL while scanning string literal";
Skip Montanaro118ec702002-08-15 01:20:16 +00001570 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001571 case E_INTR:
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001572 if (!PyErr_Occurred())
1573 PyErr_SetNone(PyExc_KeyboardInterrupt);
Georg Brandl1ad108d2008-07-19 10:08:55 +00001574 goto cleanup;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001575 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +00001576 PyErr_NoMemory();
Georg Brandl1ad108d2008-07-19 10:08:55 +00001577 goto cleanup;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001578 case E_EOF:
1579 msg = "unexpected EOF while parsing";
1580 break;
Fred Drake85f36392000-07-11 17:53:00 +00001581 case E_TABSPACE:
1582 errtype = PyExc_TabError;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001583 msg = "inconsistent use of tabs and spaces in indentation";
1584 break;
Jeremy Hylton94988062000-06-20 19:10:44 +00001585 case E_OVERFLOW:
1586 msg = "expression too long";
1587 break;
Fred Drake85f36392000-07-11 17:53:00 +00001588 case E_DEDENT:
1589 errtype = PyExc_IndentationError;
1590 msg = "unindent does not match any outer indentation level";
1591 break;
1592 case E_TOODEEP:
1593 errtype = PyExc_IndentationError;
1594 msg = "too many levels of indentation";
1595 break;
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001596 case E_DECODE: {
1597 PyObject *type, *value, *tb;
1598 PyErr_Fetch(&type, &value, &tb);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001599 if (value != NULL) {
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001600 u = PyObject_Str(value);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001601 if (u != NULL) {
Gregory P. Smithdd96db62008-06-09 04:58:54 +00001602 msg = PyString_AsString(u);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001603 }
1604 }
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001605 if (msg == NULL)
1606 msg = "unknown decode error";
Neal Norwitzdb83eb32005-12-18 05:29:30 +00001607 Py_XDECREF(type);
1608 Py_XDECREF(value);
Neal Norwitz40d37812005-10-02 01:48:49 +00001609 Py_XDECREF(tb);
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001610 break;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001611 }
Martin v. Löwis4bf108d2005-03-03 11:45:45 +00001612 case E_LINECONT:
1613 msg = "unexpected character after line continuation character";
1614 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001615 default:
1616 fprintf(stderr, "error=%d\n", err->error);
1617 msg = "unknown parsing error";
1618 break;
1619 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001620 v = Py_BuildValue("(ziiz)", err->filename,
1621 err->lineno, err->offset, err->text);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001622 w = NULL;
1623 if (v != NULL)
1624 w = Py_BuildValue("(sO)", msg, v);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001625 Py_XDECREF(u);
Guido van Rossum41318302001-03-23 04:01:07 +00001626 Py_XDECREF(v);
Fred Drake85f36392000-07-11 17:53:00 +00001627 PyErr_SetObject(errtype, w);
Guido van Rossum82598051997-03-05 00:20:32 +00001628 Py_XDECREF(w);
Georg Brandl1ad108d2008-07-19 10:08:55 +00001629cleanup:
1630 if (err->text != NULL) {
1631 PyObject_FREE(err->text);
1632 err->text = NULL;
1633 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001634}
1635
1636/* Print fatal error message and abort */
1637
1638void
Tim Peters7c321a82002-07-09 02:57:01 +00001639Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001640{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00001641 fprintf(stderr, "Fatal Python error: %s\n", msg);
Jesse Noller42f9b4e2009-03-31 22:20:35 +00001642 fflush(stderr); /* it helps in Windows debug build */
1643
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001644#ifdef MS_WINDOWS
Martin v. Löwis5344c992009-01-02 20:32:55 +00001645 {
1646 size_t len = strlen(msg);
1647 WCHAR* buffer;
1648 size_t i;
1649
1650 /* Convert the message to wchar_t. This uses a simple one-to-one
1651 conversion, assuming that the this error message actually uses ASCII
1652 only. If this ceases to be true, we will have to convert. */
1653 buffer = alloca( (len+1) * (sizeof *buffer));
1654 for( i=0; i<=len; ++i)
1655 buffer[i] = msg[i];
1656 OutputDebugStringW(L"Fatal Python error: ");
1657 OutputDebugStringW(buffer);
1658 OutputDebugStringW(L"\n");
1659 }
Guido van Rossum0ba35361998-08-13 13:33:16 +00001660#ifdef _DEBUG
1661 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00001662#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001663#endif /* MS_WINDOWS */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001664 abort();
1665}
1666
1667/* Clean up and exit */
1668
Guido van Rossuma110aa61994-08-29 12:50:44 +00001669#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00001670#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001671#endif
1672
Antoine Pitrouefb60c02009-10-20 21:29:37 +00001673/* Wait until threading._shutdown completes, provided
1674 the threading module was imported in the first place.
1675 The shutdown routine will wait until all non-daemon
1676 "threading" threads have completed. */
1677static void
1678wait_for_thread_shutdown(void)
1679{
1680#ifdef WITH_THREAD
1681 PyObject *result;
1682 PyThreadState *tstate = PyThreadState_GET();
1683 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
1684 "threading");
1685 if (threading == NULL) {
1686 /* threading not imported */
1687 PyErr_Clear();
1688 return;
1689 }
1690 result = PyObject_CallMethod(threading, "_shutdown", "");
1691 if (result == NULL)
1692 PyErr_WriteUnraisable(threading);
1693 else
1694 Py_DECREF(result);
1695 Py_DECREF(threading);
1696#endif
1697}
1698
Guido van Rossum2dcfc961998-10-01 16:01:57 +00001699#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001700static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00001701static int nexitfuncs = 0;
1702
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001703int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00001704{
1705 if (nexitfuncs >= NEXITFUNCS)
1706 return -1;
1707 exitfuncs[nexitfuncs++] = func;
1708 return 0;
1709}
1710
Guido van Rossumcc283f51997-08-05 02:22:03 +00001711static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001712call_sys_exitfunc(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001713{
Guido van Rossum82598051997-03-05 00:20:32 +00001714 PyObject *exitfunc = PySys_GetObject("exitfunc");
Guido van Rossum59bff391992-09-03 20:28:00 +00001715
1716 if (exitfunc) {
Fred Drake6a12d8d2001-03-23 17:34:02 +00001717 PyObject *res;
Guido van Rossum82598051997-03-05 00:20:32 +00001718 Py_INCREF(exitfunc);
1719 PySys_SetObject("exitfunc", (PyObject *)NULL);
1720 res = PyEval_CallObject(exitfunc, (PyObject *)NULL);
Guido van Rossum59bff391992-09-03 20:28:00 +00001721 if (res == NULL) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001722 if (!PyErr_ExceptionMatches(PyExc_SystemExit)) {
1723 PySys_WriteStderr("Error in sys.exitfunc:\n");
1724 }
Guido van Rossum82598051997-03-05 00:20:32 +00001725 PyErr_Print();
Guido van Rossum59bff391992-09-03 20:28:00 +00001726 }
Guido van Rossum82598051997-03-05 00:20:32 +00001727 Py_DECREF(exitfunc);
Guido van Rossum59bff391992-09-03 20:28:00 +00001728 }
1729
Guido van Rossum0829c751998-02-28 04:31:39 +00001730 if (Py_FlushLine())
1731 PyErr_Clear();
Guido van Rossumcc283f51997-08-05 02:22:03 +00001732}
Guido van Rossum1662dd51994-09-07 14:38:28 +00001733
Guido van Rossumcc283f51997-08-05 02:22:03 +00001734static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001735call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00001736{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001737 while (nexitfuncs > 0)
1738 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001739
1740 fflush(stdout);
1741 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001742}
1743
1744void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001745Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001746{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001747 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001748
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001749 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001750}
1751
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001752static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001753initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001754{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001755#ifdef SIGPIPE
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001756 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001757#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00001758#ifdef SIGXFZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001759 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00001760#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001761#ifdef SIGXFSZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001762 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001763#endif
Guido van Rossum82598051997-03-05 00:20:32 +00001764 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001765}
1766
Guido van Rossum7433b121997-02-14 19:45:36 +00001767
1768/*
1769 * The file descriptor fd is considered ``interactive'' if either
1770 * a) isatty(fd) is TRUE, or
1771 * b) the -i flag was given, and the filename associated with
1772 * the descriptor is NULL or "<stdin>" or "???".
1773 */
1774int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001775Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00001776{
1777 if (isatty((int)fileno(fp)))
1778 return 1;
1779 if (!Py_InteractiveFlag)
1780 return 0;
1781 return (filename == NULL) ||
1782 (strcmp(filename, "<stdin>") == 0) ||
1783 (strcmp(filename, "???") == 0);
1784}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001785
1786
Tim Petersd08e3822003-04-17 15:24:21 +00001787#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001788#if defined(WIN32) && defined(_MSC_VER)
1789
1790/* Stack checking for Microsoft C */
1791
1792#include <malloc.h>
1793#include <excpt.h>
1794
Fred Drakee8de31c2000-08-31 05:38:39 +00001795/*
1796 * Return non-zero when we run out of memory on the stack; zero otherwise.
1797 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001798int
Fred Drake399739f2000-08-31 05:52:44 +00001799PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001800{
1801 __try {
Tim Peters92e4dd82002-10-05 01:47:34 +00001802 /* alloca throws a stack overflow exception if there's
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001803 not enough space left on the stack */
Tim Peters92e4dd82002-10-05 01:47:34 +00001804 alloca(PYOS_STACK_MARGIN * sizeof(void*));
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001805 return 0;
Kristján Valur Jónsson52999352008-02-18 17:40:47 +00001806 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
1807 EXCEPTION_EXECUTE_HANDLER :
1808 EXCEPTION_CONTINUE_SEARCH) {
1809 int errcode = _resetstkoflw();
Amaury Forgeot d'Arcdc619012008-11-22 20:01:18 +00001810 if (errcode == 0)
Kristján Valur Jónsson52999352008-02-18 17:40:47 +00001811 {
1812 Py_FatalError("Could not reset the stack!");
1813 }
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001814 }
1815 return 1;
1816}
1817
1818#endif /* WIN32 && _MSC_VER */
1819
1820/* Alternate implementations can be added here... */
1821
1822#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00001823
1824
1825/* Wrappers around sigaction() or signal(). */
1826
1827PyOS_sighandler_t
1828PyOS_getsig(int sig)
1829{
1830#ifdef HAVE_SIGACTION
1831 struct sigaction context;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001832 if (sigaction(sig, NULL, &context) == -1)
1833 return SIG_ERR;
Guido van Rossum6f256182000-09-16 16:32:19 +00001834 return context.sa_handler;
1835#else
1836 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00001837/* Special signal handling for the secure CRT in Visual Studio 2005 */
1838#if defined(_MSC_VER) && _MSC_VER >= 1400
1839 switch (sig) {
1840 /* Only these signals are valid */
1841 case SIGINT:
1842 case SIGILL:
1843 case SIGFPE:
1844 case SIGSEGV:
1845 case SIGTERM:
1846 case SIGBREAK:
1847 case SIGABRT:
1848 break;
1849 /* Don't call signal() with other values or it will assert */
1850 default:
1851 return SIG_ERR;
1852 }
1853#endif /* _MSC_VER && _MSC_VER >= 1400 */
Guido van Rossum6f256182000-09-16 16:32:19 +00001854 handler = signal(sig, SIG_IGN);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001855 if (handler != SIG_ERR)
1856 signal(sig, handler);
Guido van Rossum6f256182000-09-16 16:32:19 +00001857 return handler;
1858#endif
1859}
1860
1861PyOS_sighandler_t
1862PyOS_setsig(int sig, PyOS_sighandler_t handler)
1863{
1864#ifdef HAVE_SIGACTION
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001865 struct sigaction context, ocontext;
Guido van Rossum6f256182000-09-16 16:32:19 +00001866 context.sa_handler = handler;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001867 sigemptyset(&context.sa_mask);
1868 context.sa_flags = 0;
1869 if (sigaction(sig, &context, &ocontext) == -1)
1870 return SIG_ERR;
1871 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001872#else
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001873 PyOS_sighandler_t oldhandler;
1874 oldhandler = signal(sig, handler);
1875#ifdef HAVE_SIGINTERRUPT
1876 siginterrupt(sig, 1);
1877#endif
1878 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001879#endif
1880}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001881
1882/* Deprecated C API functions still provided for binary compatiblity */
1883
1884#undef PyParser_SimpleParseFile
Thomas Heller1b046642006-04-18 18:51:06 +00001885PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001886PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
1887{
1888 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
1889}
1890
Thomas Heller1b046642006-04-18 18:51:06 +00001891#undef PyParser_SimpleParseString
1892PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001893PyParser_SimpleParseString(const char *str, int start)
1894{
1895 return PyParser_SimpleParseStringFlags(str, start, 0);
1896}
Anthony Baxterac6bd462006-04-13 02:06:09 +00001897
Thomas Heller1b046642006-04-18 18:51:06 +00001898#undef PyRun_AnyFile
1899PyAPI_FUNC(int)
1900PyRun_AnyFile(FILE *fp, const char *name)
1901{
1902 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
1903}
1904
1905#undef PyRun_AnyFileEx
1906PyAPI_FUNC(int)
1907PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
1908{
1909 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
1910}
1911
1912#undef PyRun_AnyFileFlags
1913PyAPI_FUNC(int)
1914PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
1915{
1916 return PyRun_AnyFileExFlags(fp, name, 0, flags);
1917}
1918
1919#undef PyRun_File
1920PyAPI_FUNC(PyObject *)
1921PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
1922{
Georg Brandl3c0fd562008-07-05 10:07:18 +00001923 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
Thomas Heller1b046642006-04-18 18:51:06 +00001924}
1925
1926#undef PyRun_FileEx
1927PyAPI_FUNC(PyObject *)
1928PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
1929{
Georg Brandl3c0fd562008-07-05 10:07:18 +00001930 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
Thomas Heller1b046642006-04-18 18:51:06 +00001931}
1932
1933#undef PyRun_FileFlags
1934PyAPI_FUNC(PyObject *)
1935PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
1936 PyCompilerFlags *flags)
1937{
Georg Brandl3c0fd562008-07-05 10:07:18 +00001938 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
Thomas Heller1b046642006-04-18 18:51:06 +00001939}
1940
1941#undef PyRun_SimpleFile
1942PyAPI_FUNC(int)
1943PyRun_SimpleFile(FILE *f, const char *p)
1944{
1945 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
1946}
1947
1948#undef PyRun_SimpleFileEx
1949PyAPI_FUNC(int)
1950PyRun_SimpleFileEx(FILE *f, const char *p, int c)
1951{
1952 return PyRun_SimpleFileExFlags(f, p, c, NULL);
1953}
1954
1955
1956#undef PyRun_String
1957PyAPI_FUNC(PyObject *)
1958PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
1959{
1960 return PyRun_StringFlags(str, s, g, l, NULL);
1961}
1962
1963#undef PyRun_SimpleString
1964PyAPI_FUNC(int)
1965PyRun_SimpleString(const char *s)
1966{
1967 return PyRun_SimpleStringFlags(s, NULL);
1968}
1969
1970#undef Py_CompileString
1971PyAPI_FUNC(PyObject *)
1972Py_CompileString(const char *str, const char *p, int s)
1973{
1974 return Py_CompileStringFlags(str, p, s, NULL);
1975}
1976
1977#undef PyRun_InteractiveOne
1978PyAPI_FUNC(int)
1979PyRun_InteractiveOne(FILE *f, const char *p)
1980{
1981 return PyRun_InteractiveOneFlags(f, p, NULL);
1982}
1983
1984#undef PyRun_InteractiveLoop
1985PyAPI_FUNC(int)
1986PyRun_InteractiveLoop(FILE *f, const char *p)
1987{
1988 return PyRun_InteractiveLoopFlags(f, p, NULL);
1989}
1990
Anthony Baxterac6bd462006-04-13 02:06:09 +00001991#ifdef __cplusplus
1992}
1993#endif
1994