blob: aa7e6245677e6689e69ebe6134a0449e90322e3c [file] [log] [blame]
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001
2/* Python interpreter top-level routines, including init/exit */
3
Guido van Rossum82598051997-03-05 00:20:32 +00004#include "Python.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +00005
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "Python-ast.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +00007#include "grammar.h"
8#include "node.h"
Fred Drake85f36392000-07-11 17:53:00 +00009#include "token.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000010#include "parsetok.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000011#include "errcode.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000012#include "code.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000013#include "compile.h"
Jeremy Hylton4b38da62001-02-02 18:19:15 +000014#include "symtable.h"
Neal Norwitzadb69fc2005-12-17 20:54:49 +000015#include "pyarena.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000016#include "ast.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000017#include "eval.h"
Guido van Rossumfdef2711994-09-14 13:31:04 +000018#include "marshal.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000019
Martin v. Löwis0e8bd7e2006-06-10 12:23:46 +000020#ifdef HAVE_SIGNAL_H
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000021#include <signal.h>
Martin v. Löwis0e8bd7e2006-06-10 12:23:46 +000022#endif
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000023
Martin v. Löwis73d538b2003-03-05 15:13:47 +000024#ifdef HAVE_LANGINFO_H
25#include <locale.h>
26#include <langinfo.h>
27#endif
28
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000029#ifdef MS_WINDOWS
Guido van Rossuma44823b1995-03-14 15:01:17 +000030#undef BYTE
31#include "windows.h"
32#endif
33
Neal Norwitz4281cef2006-03-04 19:58:13 +000034#ifndef Py_REF_DEBUG
Tim Peters62e97f02006-03-28 21:44:32 +000035#define PRINT_TOTAL_REFS()
Neal Norwitz4281cef2006-03-04 19:58:13 +000036#else /* Py_REF_DEBUG */
Tim Peters62e97f02006-03-28 21:44:32 +000037#define PRINT_TOTAL_REFS() fprintf(stderr, \
38 "[%" PY_FORMAT_SIZE_T "d refs]\n", \
Armin Rigoe1709372006-04-12 17:06:05 +000039 _Py_GetRefTotal())
Neal Norwitz4281cef2006-03-04 19:58:13 +000040#endif
41
Anthony Baxterac6bd462006-04-13 02:06:09 +000042#ifdef __cplusplus
43extern "C" {
44#endif
45
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000046extern char *Py_GetPath(void);
Guido van Rossum1984f1e1992-08-04 12:41:02 +000047
Guido van Rossum82598051997-03-05 00:20:32 +000048extern grammar _PyParser_Grammar; /* From graminit.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000049
Guido van Rossumb73cc041993-11-01 16:28:59 +000050/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000051static void initmain(void);
52static void initsite(void);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000053static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
Neal Norwitzadb69fc2005-12-17 20:54:49 +000054 PyCompilerFlags *, PyArena *);
Martin v. Löwis95292d62002-12-11 14:04:59 +000055static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
Jeremy Hyltonbc320242001-03-22 02:47:58 +000056 PyCompilerFlags *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000057static void err_input(perrdetail *);
58static void initsigs(void);
59static void call_sys_exitfunc(void);
60static void call_ll_exitfuncs(void);
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000061extern void _PyUnicode_Init(void);
62extern void _PyUnicode_Fini(void);
Guido van Rossumc94044c2000-03-10 23:03:54 +000063
Mark Hammond8d98d2c2003-04-19 15:41:53 +000064#ifdef WITH_THREAD
65extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
66extern void _PyGILState_Fini(void);
67#endif /* WITH_THREAD */
68
Guido van Rossum82598051997-03-05 00:20:32 +000069int Py_DebugFlag; /* Needed by parser.c */
70int Py_VerboseFlag; /* Needed by import.c */
Guido van Rossum7433b121997-02-14 19:45:36 +000071int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Georg Brandl49aafc92007-03-07 00:34:46 +000072int Py_InspectFlag; /* Needed to determine whether to exit at SystemError */
Guido van Rossumdcc0c131997-08-29 22:32:42 +000073int Py_NoSiteFlag; /* Suppress 'import site' */
Barry Warsaw3ce09642000-05-02 19:18:59 +000074int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
Guido van Rossuma61691e1998-02-06 22:27:24 +000075int Py_FrozenFlag; /* Needed by getpath.c */
Guido van Rossumb16d1972000-05-01 17:55:15 +000076int Py_UnicodeFlag = 0; /* Needed by compile.c */
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +000077int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Tim Peters3caca232001-12-06 06:23:26 +000078/* _XXX Py_QnewFlag should go away in 2.3. It's true iff -Qnew is passed,
79 on the command line, and is used in 2.2 by ceval.c to make all "/" divisions
80 true divisions (which they will be in 2.3). */
81int _Py_QnewFlag = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +000082
Mark Hammonda43fd0c2003-02-19 00:33:33 +000083/* Reference to 'warnings' module, to avoid importing it
Mark Hammondedd07732003-07-15 23:03:55 +000084 on the fly when the import lock may be held. See 683658/771097
Mark Hammonda43fd0c2003-02-19 00:33:33 +000085*/
Mark Hammondedd07732003-07-15 23:03:55 +000086static PyObject *warnings_module = NULL;
87
88/* Returns a borrowed reference to the 'warnings' module, or NULL.
89 If the module is returned, it is guaranteed to have been obtained
90 without acquiring the import lock
91*/
Martin v. Löwisa2c17c52003-08-09 09:47:11 +000092PyObject *PyModule_GetWarningsModule(void)
Mark Hammondedd07732003-07-15 23:03:55 +000093{
94 PyObject *typ, *val, *tb;
95 PyObject *all_modules;
96 /* If we managed to get the module at init time, just use it */
97 if (warnings_module)
98 return warnings_module;
99 /* If it wasn't available at init time, it may be available
100 now in sys.modules (common scenario is frozen apps: import
101 at init time fails, but the frozen init code sets up sys.path
102 correctly, then does an implicit import of warnings for us
103 */
104 /* Save and restore any exceptions */
105 PyErr_Fetch(&typ, &val, &tb);
106
Mark Hammond5f4e8ca2003-07-16 01:54:38 +0000107 all_modules = PySys_GetObject("modules");
Mark Hammondedd07732003-07-15 23:03:55 +0000108 if (all_modules) {
109 warnings_module = PyDict_GetItemString(all_modules, "warnings");
110 /* We keep a ref in the global */
111 Py_XINCREF(warnings_module);
112 }
113 PyErr_Restore(typ, val, tb);
114 return warnings_module;
115}
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000116
Guido van Rossum25ce5661997-08-02 03:10:38 +0000117static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000118
Thomas Wouters7e474022000-07-16 12:04:32 +0000119/* API to access the initialized flag -- useful for esoteric use */
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000120
121int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000122Py_IsInitialized(void)
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000123{
124 return initialized;
125}
126
Guido van Rossum25ce5661997-08-02 03:10:38 +0000127/* Global initializations. Can be undone by Py_Finalize(). Don't
128 call this twice without an intervening Py_Finalize() call. When
129 initializations fail, a fatal error is issued and the function does
130 not return. On return, the first thread and interpreter state have
131 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000132
Guido van Rossum25ce5661997-08-02 03:10:38 +0000133 Locking: you must hold the interpreter lock while calling this.
134 (If the lock has not yet been initialized, that's equivalent to
135 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000136
Guido van Rossum25ce5661997-08-02 03:10:38 +0000137*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000138
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000139static int
140add_flag(int flag, const char *envs)
141{
142 int env = atoi(envs);
143 if (flag < env)
144 flag = env;
145 if (flag < 1)
146 flag = 1;
147 return flag;
148}
149
Guido van Rossuma027efa1997-05-05 20:56:21 +0000150void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000151Py_InitializeEx(int install_sigs)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000152{
Guido van Rossuma027efa1997-05-05 20:56:21 +0000153 PyInterpreterState *interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000154 PyThreadState *tstate;
155 PyObject *bimod, *sysmod;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000156 char *p;
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000157#if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
158 char *codeset;
159 char *saved_locale;
160 PyObject *sys_stream, *sys_isatty;
161#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +0000162 extern void _Py_ReadyTypes(void);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000163
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000164 if (initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000165 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000166 initialized = 1;
Tim Petersd08e3822003-04-17 15:24:21 +0000167
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000168 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000169 Py_DebugFlag = add_flag(Py_DebugFlag, p);
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000170 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000171 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000172 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000173 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000174
Guido van Rossuma027efa1997-05-05 20:56:21 +0000175 interp = PyInterpreterState_New();
176 if (interp == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000177 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000178
Guido van Rossuma027efa1997-05-05 20:56:21 +0000179 tstate = PyThreadState_New(interp);
180 if (tstate == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000181 Py_FatalError("Py_Initialize: can't make first thread");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000182 (void) PyThreadState_Swap(tstate);
183
Guido van Rossum70d893a2001-08-16 08:21:42 +0000184 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000185
Neal Norwitzb2501f42002-12-31 03:42:13 +0000186 if (!_PyFrame_Init())
Neal Norwitzc91ed402002-12-30 22:29:22 +0000187 Py_FatalError("Py_Initialize: can't init frames");
188
Neal Norwitzb2501f42002-12-31 03:42:13 +0000189 if (!_PyInt_Init())
Neal Norwitzc91ed402002-12-30 22:29:22 +0000190 Py_FatalError("Py_Initialize: can't init ints");
191
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000192 _PyFloat_Init();
193
Guido van Rossum25ce5661997-08-02 03:10:38 +0000194 interp->modules = PyDict_New();
195 if (interp->modules == NULL)
196 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000197
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000198#ifdef Py_USING_UNICODE
Guido van Rossumc94044c2000-03-10 23:03:54 +0000199 /* Init Unicode implementation; relies on the codec registry */
200 _PyUnicode_Init();
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000201#endif
Guido van Rossumc94044c2000-03-10 23:03:54 +0000202
Barry Warsawf242aa02000-05-25 23:09:49 +0000203 bimod = _PyBuiltin_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000204 if (bimod == NULL)
205 Py_FatalError("Py_Initialize: can't initialize __builtin__");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000206 interp->builtins = PyModule_GetDict(bimod);
Neal Norwitz0f7dbf72006-08-12 03:17:41 +0000207 if (interp->builtins == NULL)
208 Py_FatalError("Py_Initialize: can't initialize builtins dict");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000209 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000210
211 sysmod = _PySys_Init();
212 if (sysmod == NULL)
213 Py_FatalError("Py_Initialize: can't initialize sys");
214 interp->sysdict = PyModule_GetDict(sysmod);
Neal Norwitz0f7dbf72006-08-12 03:17:41 +0000215 if (interp->sysdict == NULL)
216 Py_FatalError("Py_Initialize: can't initialize sys dict");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000217 Py_INCREF(interp->sysdict);
218 _PyImport_FixupExtension("sys", "sys");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000219 PySys_SetPath(Py_GetPath());
Guido van Rossum25ce5661997-08-02 03:10:38 +0000220 PyDict_SetItemString(interp->sysdict, "modules",
221 interp->modules);
222
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000223 _PyImport_Init();
224
Barry Warsawf242aa02000-05-25 23:09:49 +0000225 /* initialize builtin exceptions */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000226 _PyExc_Init();
Barry Warsaw5821bc52001-08-13 23:04:56 +0000227 _PyImport_FixupExtension("exceptions", "exceptions");
Barry Warsawf242aa02000-05-25 23:09:49 +0000228
Barry Warsaw035574d1997-08-29 22:07:17 +0000229 /* phase 2 of builtins */
Barry Warsaw963b8711997-09-18 16:42:02 +0000230 _PyImport_FixupExtension("__builtin__", "__builtin__");
Barry Warsaw035574d1997-08-29 22:07:17 +0000231
Just van Rossum52e14d62002-12-30 22:08:05 +0000232 _PyImportHooks_Init();
233
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000234 if (install_sigs)
235 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000236
237 initmain(); /* Module __main__ */
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000238 if (!Py_NoSiteFlag)
239 initsite(); /* Module site */
Just van Rossum5bfba3a2003-02-25 20:25:12 +0000240
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000241 /* auto-thread-state API, if available */
242#ifdef WITH_THREAD
243 _PyGILState_Init(interp, tstate);
244#endif /* WITH_THREAD */
245
Mark Hammondedd07732003-07-15 23:03:55 +0000246 warnings_module = PyImport_ImportModule("warnings");
247 if (!warnings_module)
248 PyErr_Clear();
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000249
250#if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
251 /* On Unix, set the file system encoding according to the
252 user's preference, if the CODESET names a well-known
253 Python codec, and Py_FileSystemDefaultEncoding isn't
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000254 initialized by other means. Also set the encoding of
255 stdin and stdout if these are terminals. */
256
Martin v. Löwisf56d0152003-11-13 07:43:21 +0000257 saved_locale = strdup(setlocale(LC_CTYPE, NULL));
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000258 setlocale(LC_CTYPE, "");
259 codeset = nl_langinfo(CODESET);
260 if (codeset && *codeset) {
261 PyObject *enc = PyCodec_Encoder(codeset);
262 if (enc) {
263 codeset = strdup(codeset);
264 Py_DECREF(enc);
265 } else {
266 codeset = NULL;
267 PyErr_Clear();
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000268 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000269 } else
270 codeset = NULL;
271 setlocale(LC_CTYPE, saved_locale);
Martin v. Löwisf56d0152003-11-13 07:43:21 +0000272 free(saved_locale);
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000273
274 if (codeset) {
Michael W. Hudson68debc92003-08-11 12:20:24 +0000275 sys_stream = PySys_GetObject("stdin");
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000276 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
277 if (!sys_isatty)
278 PyErr_Clear();
Thomas Woutersafea5292007-01-23 13:42:00 +0000279 if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
280 PyFile_Check(sys_stream)) {
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000281 if (!PyFile_SetEncoding(sys_stream, codeset))
282 Py_FatalError("Cannot set codeset of stdin");
283 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000284 Py_XDECREF(sys_isatty);
285
286 sys_stream = PySys_GetObject("stdout");
287 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
288 if (!sys_isatty)
289 PyErr_Clear();
Thomas Woutersafea5292007-01-23 13:42:00 +0000290 if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
291 PyFile_Check(sys_stream)) {
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000292 if (!PyFile_SetEncoding(sys_stream, codeset))
293 Py_FatalError("Cannot set codeset of stdout");
294 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000295 Py_XDECREF(sys_isatty);
296
Martin v. Löwisea62d252006-04-03 10:56:49 +0000297 sys_stream = PySys_GetObject("stderr");
298 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
299 if (!sys_isatty)
300 PyErr_Clear();
Thomas Woutersafea5292007-01-23 13:42:00 +0000301 if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
302 PyFile_Check(sys_stream)) {
Martin v. Löwisea62d252006-04-03 10:56:49 +0000303 if (!PyFile_SetEncoding(sys_stream, codeset))
304 Py_FatalError("Cannot set codeset of stderr");
305 }
306 Py_XDECREF(sys_isatty);
307
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000308 if (!Py_FileSystemDefaultEncoding)
309 Py_FileSystemDefaultEncoding = codeset;
310 else
311 free(codeset);
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000312 }
313#endif
Guido van Rossum25ce5661997-08-02 03:10:38 +0000314}
315
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000316void
317Py_Initialize(void)
318{
319 Py_InitializeEx(1);
320}
321
322
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000323#ifdef COUNT_ALLOCS
Martin v. Löwis45294a92006-04-18 06:24:08 +0000324extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000325#endif
326
Guido van Rossum25ce5661997-08-02 03:10:38 +0000327/* Undo the effect of Py_Initialize().
328
329 Beware: if multiple interpreter and/or thread states exist, these
330 are not wiped out; only the current thread and interpreter state
331 are deleted. But since everything else is deleted, those other
332 interpreter and thread states should no longer be used.
333
334 (XXX We should do better, e.g. wipe out all interpreters and
335 threads.)
336
337 Locking: as above.
338
339*/
340
341void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000342Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000343{
344 PyInterpreterState *interp;
345 PyThreadState *tstate;
346
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000347 if (!initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000348 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000349
Tim Peters384fd102001-01-21 03:40:37 +0000350 /* The interpreter is still entirely intact at this point, and the
351 * exit funcs may be relying on that. In particular, if some thread
352 * or exit func is still waiting to do an import, the import machinery
353 * expects Py_IsInitialized() to return true. So don't say the
354 * interpreter is uninitialized until after the exit funcs have run.
355 * Note that Threading.py uses an exit func to do a join on all the
356 * threads created thru it, so this also protects pending imports in
357 * the threads created via Threading.
358 */
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000359 call_sys_exitfunc();
Tim Peters384fd102001-01-21 03:40:37 +0000360 initialized = 0;
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000361
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000362 /* Get current thread state and interpreter pointer */
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000363 tstate = PyThreadState_GET();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000364 interp = tstate->interp;
365
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000366 /* Disable signal handling */
367 PyOS_FiniInterrupts();
368
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000369 /* drop module references we saved */
Mark Hammondedd07732003-07-15 23:03:55 +0000370 Py_XDECREF(warnings_module);
371 warnings_module = NULL;
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000372
Guido van Rossume13ddc92003-04-17 17:29:22 +0000373 /* Collect garbage. This may call finalizers; it's nice to call these
Tim Peters1d7323e2003-12-01 21:35:27 +0000374 * before all modules are destroyed.
375 * XXX If a __del__ or weakref callback is triggered here, and tries to
376 * XXX import a module, bad things can happen, because Python no
377 * XXX longer believes it's initialized.
378 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
379 * XXX is easy to provoke that way. I've also seen, e.g.,
380 * XXX Exception exceptions.ImportError: 'No module named sha'
381 * XXX in <function callback at 0x008F5718> ignored
382 * XXX but I'm unclear on exactly how that one happens. In any case,
383 * XXX I haven't seen a real-life report of either of these.
Neal Norwitz9589ee22006-03-04 19:01:22 +0000384 */
Guido van Rossume13ddc92003-04-17 17:29:22 +0000385 PyGC_Collect();
Martin v. Löwis45294a92006-04-18 06:24:08 +0000386#ifdef COUNT_ALLOCS
387 /* With COUNT_ALLOCS, it helps to run GC multiple times:
388 each collection might release some types from the type
389 list, so they become garbage. */
390 while (PyGC_Collect() > 0)
391 /* nothing */;
392#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000393
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000394 /* Destroy all modules */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000395 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000396
Guido van Rossume13ddc92003-04-17 17:29:22 +0000397 /* Collect final garbage. This disposes of cycles created by
Tim Peters1d7323e2003-12-01 21:35:27 +0000398 * new-style class definitions, for example.
399 * XXX This is disabled because it caused too many problems. If
400 * XXX a __del__ or weakref callback triggers here, Python code has
401 * XXX a hard time running, because even the sys module has been
402 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
403 * XXX One symptom is a sequence of information-free messages
404 * XXX coming from threads (if a __del__ or callback is invoked,
405 * XXX other threads can execute too, and any exception they encounter
406 * XXX triggers a comedy of errors as subsystem after subsystem
407 * XXX fails to find what it *expects* to find in sys to help report
408 * XXX the exception and consequent unexpected failures). I've also
409 * XXX seen segfaults then, after adding print statements to the
410 * XXX Python code getting called.
411 */
412#if 0
Guido van Rossume13ddc92003-04-17 17:29:22 +0000413 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000414#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000415
Guido van Rossum1707aad1997-12-08 23:43:45 +0000416 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
417 _PyImport_Fini();
418
419 /* Debugging stuff */
420#ifdef COUNT_ALLOCS
Martin v. Löwis45294a92006-04-18 06:24:08 +0000421 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000422#endif
423
Tim Peters62e97f02006-03-28 21:44:32 +0000424 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000425
Tim Peters9cf25ce2003-04-17 15:21:01 +0000426#ifdef Py_TRACE_REFS
427 /* Display all objects still alive -- this can invoke arbitrary
428 * __repr__ overrides, so requires a mostly-intact interpreter.
429 * Alas, a lot of stuff may still be alive now that will be cleaned
430 * up later.
431 */
Tim Peters269b2a62003-04-17 19:52:29 +0000432 if (Py_GETENV("PYTHONDUMPREFS"))
Tim Peters9cf25ce2003-04-17 15:21:01 +0000433 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000434#endif /* Py_TRACE_REFS */
435
Mark Hammond6cb90292003-04-22 11:18:00 +0000436 /* Cleanup auto-thread-state */
437#ifdef WITH_THREAD
438 _PyGILState_Fini();
439#endif /* WITH_THREAD */
440
Guido van Rossumd922fa42003-04-15 14:10:09 +0000441 /* Clear interpreter state */
Barry Warsawf242aa02000-05-25 23:09:49 +0000442 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000443
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000444 /* Now we decref the exception classes. After this point nothing
445 can raise an exception. That's okay, because each Fini() method
446 below has been checked to make sure no exceptions are ever
447 raised.
448 */
449
450 _PyExc_Fini();
451
Guido van Rossumd922fa42003-04-15 14:10:09 +0000452 /* Delete current thread */
Barry Warsawf242aa02000-05-25 23:09:49 +0000453 PyThreadState_Swap(NULL);
454 PyInterpreterState_Delete(interp);
455
Guido van Rossumd922fa42003-04-15 14:10:09 +0000456 /* Sundry finalizers */
Guido van Rossumcc283f51997-08-05 02:22:03 +0000457 PyMethod_Fini();
458 PyFrame_Fini();
459 PyCFunction_Fini();
460 PyTuple_Fini();
Raymond Hettingerfb09f0e2004-10-07 03:58:07 +0000461 PyList_Fini();
Raymond Hettingerd7946662005-08-01 21:39:29 +0000462 PySet_Fini();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000463 PyString_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000464 PyInt_Fini();
465 PyFloat_Fini();
466
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000467#ifdef Py_USING_UNICODE
468 /* Cleanup Unicode implementation */
469 _PyUnicode_Fini();
470#endif
471
Guido van Rossumcc283f51997-08-05 02:22:03 +0000472 /* XXX Still allocated:
473 - various static ad-hoc pointers to interned strings
474 - int and float free list blocks
475 - whatever various modules and libraries allocate
476 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000477
478 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000479
Tim Peters269b2a62003-04-17 19:52:29 +0000480#ifdef Py_TRACE_REFS
481 /* Display addresses (& refcnts) of all objects still alive.
482 * An address can be used to find the repr of the object, printed
483 * above by _Py_PrintReferences.
484 */
485 if (Py_GETENV("PYTHONDUMPREFS"))
486 _Py_PrintReferenceAddresses(stderr);
487#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000488#ifdef PYMALLOC_DEBUG
489 if (Py_GETENV("PYTHONMALLOCSTATS"))
490 _PyObject_DebugMallocStats();
491#endif
492
Guido van Rossumcc283f51997-08-05 02:22:03 +0000493 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000494}
495
496/* Create and initialize a new interpreter and thread, and return the
497 new thread. This requires that Py_Initialize() has been called
498 first.
499
500 Unsuccessful initialization yields a NULL pointer. Note that *no*
501 exception information is available even in this case -- the
502 exception information is held in the thread, and there is no
503 thread.
504
505 Locking: as above.
506
507*/
508
509PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000510Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000511{
512 PyInterpreterState *interp;
513 PyThreadState *tstate, *save_tstate;
514 PyObject *bimod, *sysmod;
515
516 if (!initialized)
517 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
518
519 interp = PyInterpreterState_New();
520 if (interp == NULL)
521 return NULL;
522
523 tstate = PyThreadState_New(interp);
524 if (tstate == NULL) {
525 PyInterpreterState_Delete(interp);
526 return NULL;
527 }
528
529 save_tstate = PyThreadState_Swap(tstate);
530
531 /* XXX The following is lax in error checking */
532
533 interp->modules = PyDict_New();
534
535 bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
536 if (bimod != NULL) {
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000537 interp->builtins = PyModule_GetDict(bimod);
Neal Norwitz0c6ae5b2006-08-21 20:16:24 +0000538 if (interp->builtins == NULL)
539 goto handle_error;
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000540 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000541 }
542 sysmod = _PyImport_FindExtension("sys", "sys");
543 if (bimod != NULL && sysmod != NULL) {
544 interp->sysdict = PyModule_GetDict(sysmod);
Neal Norwitz0c6ae5b2006-08-21 20:16:24 +0000545 if (interp->sysdict == NULL)
546 goto handle_error;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000547 Py_INCREF(interp->sysdict);
548 PySys_SetPath(Py_GetPath());
549 PyDict_SetItemString(interp->sysdict, "modules",
550 interp->modules);
Martin v. Löwisd7ceb222003-01-22 09:00:38 +0000551 _PyImportHooks_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000552 initmain();
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000553 if (!Py_NoSiteFlag)
554 initsite();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000555 }
556
557 if (!PyErr_Occurred())
558 return tstate;
559
Neal Norwitz0c6ae5b2006-08-21 20:16:24 +0000560handle_error:
Guido van Rossum25ce5661997-08-02 03:10:38 +0000561 /* Oops, it didn't work. Undo it all. */
562
563 PyErr_Print();
564 PyThreadState_Clear(tstate);
565 PyThreadState_Swap(save_tstate);
566 PyThreadState_Delete(tstate);
567 PyInterpreterState_Delete(interp);
568
569 return NULL;
570}
571
572/* Delete an interpreter and its last thread. This requires that the
573 given thread state is current, that the thread has no remaining
574 frames, and that it is its interpreter's only remaining thread.
575 It is a fatal error to violate these constraints.
576
577 (Py_Finalize() doesn't have these constraints -- it zaps
578 everything, regardless.)
579
580 Locking: as above.
581
582*/
583
584void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000585Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000586{
587 PyInterpreterState *interp = tstate->interp;
588
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000589 if (tstate != PyThreadState_GET())
Guido van Rossum25ce5661997-08-02 03:10:38 +0000590 Py_FatalError("Py_EndInterpreter: thread is not current");
591 if (tstate->frame != NULL)
592 Py_FatalError("Py_EndInterpreter: thread still has a frame");
593 if (tstate != interp->tstate_head || tstate->next != NULL)
594 Py_FatalError("Py_EndInterpreter: not the last thread");
595
596 PyImport_Cleanup();
597 PyInterpreterState_Clear(interp);
598 PyThreadState_Swap(NULL);
599 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000600}
601
602static char *progname = "python";
603
604void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000605Py_SetProgramName(char *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000606{
607 if (pn && *pn)
608 progname = pn;
609}
610
611char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000612Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000613{
614 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000615}
616
Guido van Rossuma61691e1998-02-06 22:27:24 +0000617static char *default_home = NULL;
618
619void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000620Py_SetPythonHome(char *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000621{
622 default_home = home;
623}
624
625char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000626Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000627{
628 char *home = default_home;
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000629 if (home == NULL && !Py_IgnoreEnvironmentFlag)
630 home = Py_GETENV("PYTHONHOME");
Guido van Rossuma61691e1998-02-06 22:27:24 +0000631 return home;
632}
633
Guido van Rossum6135a871995-01-09 17:53:26 +0000634/* Create __main__ module */
635
636static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000637initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000638{
Guido van Rossum82598051997-03-05 00:20:32 +0000639 PyObject *m, *d;
640 m = PyImport_AddModule("__main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000641 if (m == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000642 Py_FatalError("can't create __main__ module");
643 d = PyModule_GetDict(m);
644 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
Guido van Rossum858cb731997-11-19 16:15:37 +0000645 PyObject *bimod = PyImport_ImportModule("__builtin__");
646 if (bimod == NULL ||
647 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
Guido van Rossum82598051997-03-05 00:20:32 +0000648 Py_FatalError("can't add __builtins__ to __main__");
Barry Warsaw3d05b1a1999-01-29 21:30:22 +0000649 Py_DECREF(bimod);
Guido van Rossum6135a871995-01-09 17:53:26 +0000650 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000651}
652
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000653/* Import the site module (not into __main__ though) */
654
655static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000656initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000657{
658 PyObject *m, *f;
659 m = PyImport_ImportModule("site");
660 if (m == NULL) {
661 f = PySys_GetObject("stderr");
662 if (Py_VerboseFlag) {
663 PyFile_WriteString(
664 "'import site' failed; traceback:\n", f);
665 PyErr_Print();
666 }
667 else {
668 PyFile_WriteString(
669 "'import site' failed; use -v for traceback\n", f);
670 PyErr_Clear();
671 }
672 }
673 else {
674 Py_DECREF(m);
675 }
676}
677
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000678/* Parse input from a file and execute it */
679
680int
Tim Peters5e9d6cf2006-05-28 10:41:29 +0000681PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000682 PyCompilerFlags *flags)
683{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000684 if (filename == NULL)
685 filename = "???";
Guido van Rossum0df002c2000-08-27 19:21:52 +0000686 if (Py_FdIsInteractive(fp, filename)) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000687 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
Guido van Rossum0df002c2000-08-27 19:21:52 +0000688 if (closeit)
689 fclose(fp);
690 return err;
691 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000692 else
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000693 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000694}
695
696int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000697PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000698{
Guido van Rossum82598051997-03-05 00:20:32 +0000699 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000700 int ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000701 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000702
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000703 if (flags == NULL) {
704 flags = &local_flags;
Tim Peters5ba58662001-07-16 02:29:45 +0000705 local_flags.cf_flags = 0;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000706 }
Guido van Rossum82598051997-03-05 00:20:32 +0000707 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000708 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000709 PySys_SetObject("ps1", v = PyString_FromString(">>> "));
710 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000711 }
Guido van Rossum82598051997-03-05 00:20:32 +0000712 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000713 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000714 PySys_SetObject("ps2", v = PyString_FromString("... "));
715 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000716 }
717 for (;;) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000718 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
Tim Peters62e97f02006-03-28 21:44:32 +0000719 PRINT_TOTAL_REFS();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000720 if (ret == E_EOF)
721 return 0;
722 /*
723 if (ret == E_NOMEM)
724 return -1;
725 */
726 }
727}
728
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000729/* compute parser flags based on compiler flags */
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000730#define PARSER_FLAGS(flags) \
Thomas Wouters34aa7ba2006-02-28 19:02:24 +0000731 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
Neal Norwitzca460d92006-09-06 06:28:06 +0000732 PyPARSE_DONT_IMPLY_DEDENT : 0)) : 0)
733
734#if 0
735/* Keep an example of flags with future keyword support. */
736#define PARSER_FLAGS(flags) \
737 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
Thomas Wouters34aa7ba2006-02-28 19:02:24 +0000738 PyPARSE_DONT_IMPLY_DEDENT : 0) \
Neal Norwitz9589ee22006-03-04 19:01:22 +0000739 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
740 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Neal Norwitzca460d92006-09-06 06:28:06 +0000741#endif
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000742
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000743int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000744PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000745{
Guido van Rossum82598051997-03-05 00:20:32 +0000746 PyObject *m, *d, *v, *w;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000747 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +0000748 PyArena *arena;
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000749 char *ps1 = "", *ps2 = "";
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000750 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +0000751
Guido van Rossum82598051997-03-05 00:20:32 +0000752 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000753 if (v != NULL) {
754 v = PyObject_Str(v);
755 if (v == NULL)
756 PyErr_Clear();
757 else if (PyString_Check(v))
758 ps1 = PyString_AsString(v);
759 }
Guido van Rossum82598051997-03-05 00:20:32 +0000760 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000761 if (w != NULL) {
762 w = PyObject_Str(w);
763 if (w == NULL)
764 PyErr_Clear();
765 else if (PyString_Check(w))
766 ps2 = PyString_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000767 }
Neal Norwitz9589ee22006-03-04 19:01:22 +0000768 arena = PyArena_New();
Neal Norwitzb59d08c2006-07-22 16:20:49 +0000769 if (arena == NULL) {
770 Py_XDECREF(v);
771 Py_XDECREF(w);
772 return -1;
773 }
Tim Peters5e9d6cf2006-05-28 10:41:29 +0000774 mod = PyParser_ASTFromFile(fp, filename,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000775 Py_single_input, ps1, ps2,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000776 flags, &errcode, arena);
Guido van Rossum82598051997-03-05 00:20:32 +0000777 Py_XDECREF(v);
778 Py_XDECREF(w);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000779 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000780 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000781 if (errcode == E_EOF) {
782 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000783 return E_EOF;
784 }
Guido van Rossum82598051997-03-05 00:20:32 +0000785 PyErr_Print();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000786 return -1;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000787 }
Guido van Rossum82598051997-03-05 00:20:32 +0000788 m = PyImport_AddModule("__main__");
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000789 if (m == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000790 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000791 return -1;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000792 }
Guido van Rossum82598051997-03-05 00:20:32 +0000793 d = PyModule_GetDict(m);
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000794 v = run_mod(mod, filename, d, d, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +0000795 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000796 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000797 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000798 return -1;
799 }
Guido van Rossum82598051997-03-05 00:20:32 +0000800 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000801 if (Py_FlushLine())
802 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000803 return 0;
804}
805
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000806/* Check whether a file maybe a pyc file: Look at the extension,
807 the file type, and, if we may close it, at the first few bytes. */
808
809static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000810maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000811{
812 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
813 return 1;
814
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000815 /* Only look into the file if we are allowed to close it, since
816 it then should also be seekable. */
817 if (closeit) {
818 /* Read only two bytes of the magic. If the file was opened in
819 text mode, the bytes 3 and 4 of the magic (\r\n) might not
820 be read as they are on disk. */
821 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
822 unsigned char buf[2];
Tim Peters3e876562001-02-11 04:35:39 +0000823 /* Mess: In case of -x, the stream is NOT at its start now,
824 and ungetc() was used to push back the first newline,
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000825 which makes the current stream position formally undefined,
826 and a x-platform nightmare.
827 Unfortunately, we have no direct way to know whether -x
828 was specified. So we use a terrible hack: if the current
829 stream position is not 0, we assume -x was specified, and
830 give up. Bug 132850 on SourceForge spells out the
831 hopelessness of trying anything else (fseek and ftell
832 don't work predictably x-platform for text-mode files).
Tim Peters3e876562001-02-11 04:35:39 +0000833 */
Tim Peters3e876562001-02-11 04:35:39 +0000834 int ispyc = 0;
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000835 if (ftell(fp) == 0) {
836 if (fread(buf, 1, 2, fp) == 2 &&
Tim Petersd08e3822003-04-17 15:24:21 +0000837 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000838 ispyc = 1;
839 rewind(fp);
840 }
Tim Peters3e876562001-02-11 04:35:39 +0000841 return ispyc;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000842 }
843 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +0000844}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000845
Guido van Rossum0df002c2000-08-27 19:21:52 +0000846int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000847PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000848 PyCompilerFlags *flags)
849{
Guido van Rossum82598051997-03-05 00:20:32 +0000850 PyObject *m, *d, *v;
Martin v. Löwis95292d62002-12-11 14:04:59 +0000851 const char *ext;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000852
Guido van Rossum82598051997-03-05 00:20:32 +0000853 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000854 if (m == NULL)
855 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000856 d = PyModule_GetDict(m);
Fred Drake8ed02042002-10-17 21:24:58 +0000857 if (PyDict_GetItemString(d, "__file__") == NULL) {
858 PyObject *f = PyString_FromString(filename);
859 if (f == NULL)
860 return -1;
861 if (PyDict_SetItemString(d, "__file__", f) < 0) {
862 Py_DECREF(f);
863 return -1;
864 }
865 Py_DECREF(f);
866 }
Guido van Rossumfdef2711994-09-14 13:31:04 +0000867 ext = filename + strlen(filename) - 4;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000868 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000869 /* Try to run a pyc file. First, re-open in binary */
Guido van Rossum0df002c2000-08-27 19:21:52 +0000870 if (closeit)
871 fclose(fp);
Fred Drake8ed02042002-10-17 21:24:58 +0000872 if ((fp = fopen(filename, "rb")) == NULL) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000873 fprintf(stderr, "python: Can't reopen .pyc file\n");
874 return -1;
875 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000876 /* Turn on optimization if a .pyo file is given */
877 if (strcmp(ext, ".pyo") == 0)
878 Py_OptimizeFlag = 1;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000879 v = run_pyc_file(fp, filename, d, d, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000880 } else {
Tim Petersd08e3822003-04-17 15:24:21 +0000881 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000882 closeit, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000883 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000884 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000885 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000886 return -1;
887 }
Guido van Rossum82598051997-03-05 00:20:32 +0000888 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000889 if (Py_FlushLine())
890 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000891 return 0;
892}
893
894int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000895PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +0000896{
Guido van Rossum82598051997-03-05 00:20:32 +0000897 PyObject *m, *d, *v;
898 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000899 if (m == NULL)
900 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000901 d = PyModule_GetDict(m);
Guido van Rossum393661d2001-08-31 17:40:15 +0000902 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000903 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000904 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000905 return -1;
906 }
Guido van Rossum82598051997-03-05 00:20:32 +0000907 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000908 if (Py_FlushLine())
909 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000910 return 0;
911}
912
Barry Warsaw035574d1997-08-29 22:07:17 +0000913static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000914parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
915 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +0000916{
917 long hold;
918 PyObject *v;
919
920 /* old style errors */
921 if (PyTuple_Check(err))
Neal Norwitz78293352002-04-01 01:41:20 +0000922 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
Neal Norwitz9589ee22006-03-04 19:01:22 +0000923 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +0000924
925 /* new style errors. `err' is an instance */
926
927 if (! (v = PyObject_GetAttrString(err, "msg")))
928 goto finally;
929 *message = v;
930
931 if (!(v = PyObject_GetAttrString(err, "filename")))
932 goto finally;
933 if (v == Py_None)
934 *filename = NULL;
935 else if (! (*filename = PyString_AsString(v)))
936 goto finally;
937
938 Py_DECREF(v);
939 if (!(v = PyObject_GetAttrString(err, "lineno")))
940 goto finally;
941 hold = PyInt_AsLong(v);
942 Py_DECREF(v);
943 v = NULL;
944 if (hold < 0 && PyErr_Occurred())
945 goto finally;
946 *lineno = (int)hold;
947
948 if (!(v = PyObject_GetAttrString(err, "offset")))
949 goto finally;
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000950 if (v == Py_None) {
951 *offset = -1;
952 Py_DECREF(v);
953 v = NULL;
954 } else {
955 hold = PyInt_AsLong(v);
956 Py_DECREF(v);
957 v = NULL;
958 if (hold < 0 && PyErr_Occurred())
959 goto finally;
960 *offset = (int)hold;
961 }
Barry Warsaw035574d1997-08-29 22:07:17 +0000962
963 if (!(v = PyObject_GetAttrString(err, "text")))
964 goto finally;
965 if (v == Py_None)
966 *text = NULL;
967 else if (! (*text = PyString_AsString(v)))
968 goto finally;
969 Py_DECREF(v);
970 return 1;
971
972finally:
973 Py_XDECREF(v);
974 return 0;
975}
976
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000977void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000978PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000979{
Guido van Rossuma61691e1998-02-06 22:27:24 +0000980 PyErr_PrintEx(1);
981}
982
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000983static void
Martin v. Löwis95292d62002-12-11 14:04:59 +0000984print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000985{
986 char *nl;
987 if (offset >= 0) {
988 if (offset > 0 && offset == (int)strlen(text))
989 offset--;
990 for (;;) {
991 nl = strchr(text, '\n');
992 if (nl == NULL || nl-text >= offset)
993 break;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000994 offset -= (int)(nl+1-text);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000995 text = nl+1;
996 }
997 while (*text == ' ' || *text == '\t') {
998 text++;
999 offset--;
1000 }
1001 }
1002 PyFile_WriteString(" ", f);
1003 PyFile_WriteString(text, f);
1004 if (*text == '\0' || text[strlen(text)-1] != '\n')
1005 PyFile_WriteString("\n", f);
1006 if (offset == -1)
1007 return;
1008 PyFile_WriteString(" ", f);
1009 offset--;
1010 while (offset > 0) {
1011 PyFile_WriteString(" ", f);
1012 offset--;
1013 }
1014 PyFile_WriteString("^\n", f);
1015}
1016
Guido van Rossum66e8e862001-03-23 17:54:43 +00001017static void
1018handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001019{
Neal Norwitz9589ee22006-03-04 19:01:22 +00001020 PyObject *exception, *value, *tb;
1021 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001022
Georg Brandl49aafc92007-03-07 00:34:46 +00001023 if (Py_InspectFlag)
1024 /* Don't exit if -i flag was given. This flag is set to 0
1025 * when entering interactive mode for inspecting. */
1026 return;
1027
Guido van Rossum66e8e862001-03-23 17:54:43 +00001028 PyErr_Fetch(&exception, &value, &tb);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001029 if (Py_FlushLine())
1030 PyErr_Clear();
1031 fflush(stdout);
1032 if (value == NULL || value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001033 goto done;
Brett Cannonbf364092006-03-01 04:25:17 +00001034 if (PyExceptionInstance_Check(value)) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001035 /* The error code should be in the `code' attribute. */
1036 PyObject *code = PyObject_GetAttrString(value, "code");
1037 if (code) {
1038 Py_DECREF(value);
1039 value = code;
1040 if (value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001041 goto done;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001042 }
1043 /* If we failed to dig out the 'code' attribute,
1044 just let the else clause below print the error. */
1045 }
1046 if (PyInt_Check(value))
Tim Peterscf615b52003-04-19 18:47:02 +00001047 exitcode = (int)PyInt_AsLong(value);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001048 else {
1049 PyObject_Print(value, stderr, Py_PRINT_RAW);
1050 PySys_WriteStderr("\n");
Tim Peterscf615b52003-04-19 18:47:02 +00001051 exitcode = 1;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001052 }
Tim Peterscf615b52003-04-19 18:47:02 +00001053 done:
Neal Norwitz9589ee22006-03-04 19:01:22 +00001054 /* Restore and clear the exception info, in order to properly decref
1055 * the exception, value, and traceback. If we just exit instead,
1056 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1057 * some finalizers from running.
1058 */
Tim Peterscf615b52003-04-19 18:47:02 +00001059 PyErr_Restore(exception, value, tb);
1060 PyErr_Clear();
1061 Py_Exit(exitcode);
1062 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001063}
1064
1065void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001066PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001067{
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001068 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001069
1070 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1071 handle_system_exit();
1072 }
Guido van Rossum82598051997-03-05 00:20:32 +00001073 PyErr_Fetch(&exception, &v, &tb);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001074 if (exception == NULL)
1075 return;
Barry Warsaw035574d1997-08-29 22:07:17 +00001076 PyErr_NormalizeException(&exception, &v, &tb);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001077 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +00001078 return;
Guido van Rossum9d785502006-03-07 18:31:44 +00001079 /* Now we know v != NULL too */
Guido van Rossuma61691e1998-02-06 22:27:24 +00001080 if (set_sys_last_vars) {
1081 PySys_SetObject("last_type", exception);
1082 PySys_SetObject("last_value", v);
1083 PySys_SetObject("last_traceback", tb);
1084 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001085 hook = PySys_GetObject("excepthook");
1086 if (hook) {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00001087 PyObject *args = PyTuple_Pack(3,
Guido van Rossum9d785502006-03-07 18:31:44 +00001088 exception, v, tb ? tb : Py_None);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001089 PyObject *result = PyEval_CallObject(hook, args);
1090 if (result == NULL) {
1091 PyObject *exception2, *v2, *tb2;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001092 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1093 handle_system_exit();
1094 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001095 PyErr_Fetch(&exception2, &v2, &tb2);
1096 PyErr_NormalizeException(&exception2, &v2, &tb2);
Neal Norwitza5e4f222006-07-17 00:59:04 +00001097 /* It should not be possible for exception2 or v2
1098 to be NULL. However PyErr_Display() can't
1099 tolerate NULLs, so just be safe. */
1100 if (exception2 == NULL) {
1101 exception2 = Py_None;
1102 Py_INCREF(exception2);
1103 }
1104 if (v2 == NULL) {
1105 v2 = Py_None;
1106 Py_INCREF(v2);
1107 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001108 if (Py_FlushLine())
1109 PyErr_Clear();
1110 fflush(stdout);
1111 PySys_WriteStderr("Error in sys.excepthook:\n");
1112 PyErr_Display(exception2, v2, tb2);
1113 PySys_WriteStderr("\nOriginal exception was:\n");
1114 PyErr_Display(exception, v, tb);
Neal Norwitza5e4f222006-07-17 00:59:04 +00001115 Py_DECREF(exception2);
1116 Py_DECREF(v2);
Jeremy Hylton07028582001-12-07 15:35:35 +00001117 Py_XDECREF(tb2);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001118 }
1119 Py_XDECREF(result);
1120 Py_XDECREF(args);
1121 } else {
1122 PySys_WriteStderr("sys.excepthook is missing\n");
1123 PyErr_Display(exception, v, tb);
1124 }
1125 Py_XDECREF(exception);
1126 Py_XDECREF(v);
1127 Py_XDECREF(tb);
1128}
1129
Richard Jones7b9558d2006-05-27 12:29:24 +00001130void
1131PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001132{
1133 int err = 0;
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001134 PyObject *f = PySys_GetObject("stderr");
Armin Rigo5d2c6832004-03-22 20:16:58 +00001135 Py_INCREF(value);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001136 if (f == NULL)
1137 fprintf(stderr, "lost sys.stderr\n");
1138 else {
Guido van Rossum0829c751998-02-28 04:31:39 +00001139 if (Py_FlushLine())
1140 PyErr_Clear();
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001141 fflush(stdout);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001142 if (tb && tb != Py_None)
1143 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +00001144 if (err == 0 &&
Armin Rigo5d2c6832004-03-22 20:16:58 +00001145 PyObject_HasAttrString(value, "print_file_and_line"))
Barry Warsaw36b8f941997-08-26 18:09:48 +00001146 {
Guido van Rossum82598051997-03-05 00:20:32 +00001147 PyObject *message;
Martin v. Löwis95292d62002-12-11 14:04:59 +00001148 const char *filename, *text;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001149 int lineno, offset;
Armin Rigo5d2c6832004-03-22 20:16:58 +00001150 if (!parse_syntax_error(value, &message, &filename,
Barry Warsaw035574d1997-08-29 22:07:17 +00001151 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +00001152 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001153 else {
1154 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +00001155 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001156 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +00001157 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001158 else
Guido van Rossum82598051997-03-05 00:20:32 +00001159 PyFile_WriteString(filename, f);
1160 PyFile_WriteString("\", line ", f);
Jeremy Hylton518ab1c2001-11-28 20:42:20 +00001161 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +00001162 PyFile_WriteString(buf, f);
1163 PyFile_WriteString("\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001164 if (text != NULL)
1165 print_error_text(f, offset, text);
Armin Rigo5d2c6832004-03-22 20:16:58 +00001166 Py_DECREF(value);
1167 value = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001168 /* Can't be bothered to check all those
1169 PyFile_WriteString() calls */
1170 if (PyErr_Occurred())
1171 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001172 }
1173 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001174 if (err) {
1175 /* Don't do anything else */
1176 }
Brett Cannonbf364092006-03-01 04:25:17 +00001177 else if (PyExceptionClass_Check(exception)) {
Richard Jones7b9558d2006-05-27 12:29:24 +00001178 PyObject* moduleName;
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001179 char* className = PyExceptionClass_Name(exception);
1180 if (className != NULL) {
1181 char *dot = strrchr(className, '.');
1182 if (dot != NULL)
1183 className = dot+1;
1184 }
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001185
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001186 moduleName = PyObject_GetAttrString(exception, "__module__");
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001187 if (moduleName == NULL)
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001188 err = PyFile_WriteString("<unknown>", f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001189 else {
1190 char* modstr = PyString_AsString(moduleName);
Tim Petersd08e3822003-04-17 15:24:21 +00001191 if (modstr && strcmp(modstr, "exceptions"))
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001192 {
1193 err = PyFile_WriteString(modstr, f);
1194 err += PyFile_WriteString(".", f);
1195 }
Richard Jones7b9558d2006-05-27 12:29:24 +00001196 Py_DECREF(moduleName);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001197 }
1198 if (err == 0) {
1199 if (className == NULL)
1200 err = PyFile_WriteString("<unknown>", f);
1201 else
Brett Cannonbf364092006-03-01 04:25:17 +00001202 err = PyFile_WriteString(className, f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001203 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001204 }
1205 else
1206 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
Brett Cannon2e63b732006-03-02 18:34:57 +00001207 if (err == 0 && (value != Py_None)) {
1208 PyObject *s = PyObject_Str(value);
1209 /* only print colon if the str() of the
1210 object is not the empty string
1211 */
1212 if (s == NULL)
1213 err = -1;
1214 else if (!PyString_Check(s) ||
1215 PyString_GET_SIZE(s) != 0)
1216 err = PyFile_WriteString(": ", f);
1217 if (err == 0)
1218 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1219 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +00001220 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001221 if (err == 0)
1222 err = PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001223 }
Armin Rigo5d2c6832004-03-22 20:16:58 +00001224 Py_DECREF(value);
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001225 /* If an error happened here, don't show it.
1226 XXX This is wrong, but too many callers rely on this behavior. */
1227 if (err != 0)
1228 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001229}
1230
Guido van Rossum82598051997-03-05 00:20:32 +00001231PyObject *
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001232PyRun_StringFlags(const char *str, int start, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001233 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001234{
Neal Norwitze92fba02006-03-04 18:52:26 +00001235 PyObject *ret = NULL;
Neal Norwitzd12bd012006-07-21 07:59:47 +00001236 mod_ty mod;
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001237 PyArena *arena = PyArena_New();
Neal Norwitzd12bd012006-07-21 07:59:47 +00001238 if (arena == NULL)
1239 return NULL;
1240
1241 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
Neal Norwitze92fba02006-03-04 18:52:26 +00001242 if (mod != NULL)
1243 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001244 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001245 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001246}
1247
1248PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001249PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001250 PyObject *locals, int closeit, PyCompilerFlags *flags)
1251{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001252 PyObject *ret;
Neal Norwitzd12bd012006-07-21 07:59:47 +00001253 mod_ty mod;
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001254 PyArena *arena = PyArena_New();
Neal Norwitzd12bd012006-07-21 07:59:47 +00001255 if (arena == NULL)
1256 return NULL;
1257
1258 mod = PyParser_ASTFromFile(fp, filename, start, 0, 0,
1259 flags, NULL, arena);
Georg Brandl098cd692007-03-06 12:17:50 +00001260 if (closeit)
1261 fclose(fp);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001262 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001263 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001264 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001265 }
Neal Norwitze92fba02006-03-04 18:52:26 +00001266 ret = run_mod(mod, filename, globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001267 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001268 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001269}
1270
Guido van Rossum82598051997-03-05 00:20:32 +00001271static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001272run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001273 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001274{
Guido van Rossum82598051997-03-05 00:20:32 +00001275 PyCodeObject *co;
1276 PyObject *v;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001277 co = PyAST_Compile(mod, filename, flags, arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001278 if (co == NULL)
1279 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +00001280 v = PyEval_EvalCode(co, globals, locals);
1281 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001282 return v;
1283}
1284
Guido van Rossum82598051997-03-05 00:20:32 +00001285static PyObject *
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001286run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001287 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001288{
Guido van Rossum82598051997-03-05 00:20:32 +00001289 PyCodeObject *co;
1290 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001291 long magic;
Fred Drakee8de31c2000-08-31 05:38:39 +00001292 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001293
Guido van Rossum82598051997-03-05 00:20:32 +00001294 magic = PyMarshal_ReadLongFromFile(fp);
1295 if (magic != PyImport_GetMagicNumber()) {
1296 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001297 "Bad magic number in .pyc file");
1298 return NULL;
1299 }
Guido van Rossum82598051997-03-05 00:20:32 +00001300 (void) PyMarshal_ReadLongFromFile(fp);
Tim Petersd9b9ac82001-01-28 00:27:39 +00001301 v = PyMarshal_ReadLastObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001302 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +00001303 if (v == NULL || !PyCode_Check(v)) {
1304 Py_XDECREF(v);
1305 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001306 "Bad code object in .pyc file");
1307 return NULL;
1308 }
Guido van Rossum82598051997-03-05 00:20:32 +00001309 co = (PyCodeObject *)v;
1310 v = PyEval_EvalCode(co, globals, locals);
Jeremy Hyltonb857ba22001-08-10 21:41:33 +00001311 if (v && flags)
1312 flags->cf_flags |= (co->co_flags & PyCF_MASK);
Guido van Rossum82598051997-03-05 00:20:32 +00001313 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001314 return v;
1315}
1316
Guido van Rossum82598051997-03-05 00:20:32 +00001317PyObject *
Tim Petersd08e3822003-04-17 15:24:21 +00001318Py_CompileStringFlags(const char *str, const char *filename, int start,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001319 PyCompilerFlags *flags)
1320{
Guido van Rossum82598051997-03-05 00:20:32 +00001321 PyCodeObject *co;
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001322 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001323 PyArena *arena = PyArena_New();
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001324 if (arena == NULL)
1325 return NULL;
1326
1327 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001328 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001329 PyArena_Free(arena);
Guido van Rossum5b722181993-03-30 17:46:03 +00001330 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001331 }
Martin v. Löwis2b366e42006-02-26 22:12:35 +00001332 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001333 PyObject *result = PyAST_mod2obj(mod);
1334 PyArena_Free(arena);
1335 return result;
1336 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001337 co = PyAST_Compile(mod, filename, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001338 PyArena_Free(arena);
Guido van Rossum82598051997-03-05 00:20:32 +00001339 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001340}
1341
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001342struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001343Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001344{
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001345 struct symtable *st;
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001346 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001347 PyArena *arena = PyArena_New();
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001348 if (arena == NULL)
1349 return NULL;
1350
1351 mod = PyParser_ASTFromString(str, filename, start, NULL, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001352 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001353 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001354 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001355 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001356 st = PySymtable_Build(mod, filename, 0);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001357 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001358 return st;
1359}
1360
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001361/* Preferred access to parser is through AST. */
1362mod_ty
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001363PyParser_ASTFromString(const char *s, const char *filename, int start,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001364 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001365{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001366 mod_ty mod;
1367 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001368 node *n = PyParser_ParseStringFlagsFilename(s, filename,
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001369 &_PyParser_Grammar, start, &err,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001370 PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001371 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001372 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001373 PyNode_Free(n);
1374 return mod;
1375 }
1376 else {
1377 err_input(&err);
1378 return NULL;
1379 }
1380}
1381
1382mod_ty
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001383PyParser_ASTFromFile(FILE *fp, const char *filename, int start, char *ps1,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001384 char *ps2, PyCompilerFlags *flags, int *errcode,
Neal Norwitz9589ee22006-03-04 19:01:22 +00001385 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001386{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001387 mod_ty mod;
1388 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001389 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
1390 start, ps1, ps2, &err, PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001391 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001392 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001393 PyNode_Free(n);
1394 return mod;
1395 }
1396 else {
1397 err_input(&err);
1398 if (errcode)
1399 *errcode = err.error;
1400 return NULL;
1401 }
1402}
1403
Guido van Rossuma110aa61994-08-29 12:50:44 +00001404/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001405
Guido van Rossuma110aa61994-08-29 12:50:44 +00001406node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001407PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001408{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001409 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001410 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
1411 start, NULL, NULL, &err, flags);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001412 if (n == NULL)
1413 err_input(&err);
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001414
Guido van Rossuma110aa61994-08-29 12:50:44 +00001415 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001416}
1417
Guido van Rossuma110aa61994-08-29 12:50:44 +00001418/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001419
Guido van Rossuma110aa61994-08-29 12:50:44 +00001420node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001421PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001422{
Tim Petersfe2127d2001-07-16 05:37:24 +00001423 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001424 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1425 start, &err, flags);
Tim Petersfe2127d2001-07-16 05:37:24 +00001426 if (n == NULL)
1427 err_input(&err);
1428 return n;
1429}
1430
1431node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001432PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Thomas Heller6b17abf2002-07-09 09:23:27 +00001433 int start, int flags)
1434{
Thomas Heller6b17abf2002-07-09 09:23:27 +00001435 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001436 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1437 &_PyParser_Grammar, start, &err, flags);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001438 if (n == NULL)
1439 err_input(&err);
1440 return n;
1441}
1442
1443node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001444PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001445{
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001446 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001447}
1448
Guido van Rossum66ebd912003-04-17 16:02:26 +00001449/* May want to move a more generalized form of this to parsetok.c or
1450 even parser modules. */
1451
1452void
1453PyParser_SetError(perrdetail *err)
1454{
1455 err_input(err);
1456}
1457
Guido van Rossuma110aa61994-08-29 12:50:44 +00001458/* Set the error appropriate to the given input error code (see errcode.h) */
1459
1460static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001461err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00001462{
Fred Drake85f36392000-07-11 17:53:00 +00001463 PyObject *v, *w, *errtype;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001464 PyObject* u = NULL;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001465 char *msg = NULL;
Fred Drake85f36392000-07-11 17:53:00 +00001466 errtype = PyExc_SyntaxError;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001467 switch (err->error) {
1468 case E_SYNTAX:
Fred Drake85f36392000-07-11 17:53:00 +00001469 errtype = PyExc_IndentationError;
1470 if (err->expected == INDENT)
1471 msg = "expected an indented block";
1472 else if (err->token == INDENT)
1473 msg = "unexpected indent";
1474 else if (err->token == DEDENT)
1475 msg = "unexpected unindent";
1476 else {
1477 errtype = PyExc_SyntaxError;
1478 msg = "invalid syntax";
1479 }
Guido van Rossuma110aa61994-08-29 12:50:44 +00001480 break;
1481 case E_TOKEN:
1482 msg = "invalid token";
Guido van Rossuma110aa61994-08-29 12:50:44 +00001483 break;
Skip Montanaro118ec702002-08-15 01:20:16 +00001484 case E_EOFS:
1485 msg = "EOF while scanning triple-quoted string";
1486 break;
1487 case E_EOLS:
1488 msg = "EOL while scanning single-quoted string";
1489 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001490 case E_INTR:
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001491 if (!PyErr_Occurred())
1492 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001493 return;
1494 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +00001495 PyErr_NoMemory();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001496 return;
1497 case E_EOF:
1498 msg = "unexpected EOF while parsing";
1499 break;
Fred Drake85f36392000-07-11 17:53:00 +00001500 case E_TABSPACE:
1501 errtype = PyExc_TabError;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001502 msg = "inconsistent use of tabs and spaces in indentation";
1503 break;
Jeremy Hylton94988062000-06-20 19:10:44 +00001504 case E_OVERFLOW:
1505 msg = "expression too long";
1506 break;
Fred Drake85f36392000-07-11 17:53:00 +00001507 case E_DEDENT:
1508 errtype = PyExc_IndentationError;
1509 msg = "unindent does not match any outer indentation level";
1510 break;
1511 case E_TOODEEP:
1512 errtype = PyExc_IndentationError;
1513 msg = "too many levels of indentation";
1514 break;
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001515 case E_DECODE: {
1516 PyObject *type, *value, *tb;
1517 PyErr_Fetch(&type, &value, &tb);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001518 if (value != NULL) {
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001519 u = PyObject_Str(value);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001520 if (u != NULL) {
1521 msg = PyString_AsString(u);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001522 }
1523 }
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001524 if (msg == NULL)
1525 msg = "unknown decode error";
Neal Norwitzdb83eb32005-12-18 05:29:30 +00001526 Py_XDECREF(type);
1527 Py_XDECREF(value);
Neal Norwitz40d37812005-10-02 01:48:49 +00001528 Py_XDECREF(tb);
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001529 break;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001530 }
Martin v. Löwis4bf108d2005-03-03 11:45:45 +00001531 case E_LINECONT:
1532 msg = "unexpected character after line continuation character";
1533 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001534 default:
1535 fprintf(stderr, "error=%d\n", err->error);
1536 msg = "unknown parsing error";
1537 break;
1538 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001539 v = Py_BuildValue("(ziiz)", err->filename,
1540 err->lineno, err->offset, err->text);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001541 if (err->text != NULL) {
Tim Petersc9d78aa2006-03-26 23:27:58 +00001542 PyObject_FREE(err->text);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001543 err->text = NULL;
1544 }
1545 w = NULL;
1546 if (v != NULL)
1547 w = Py_BuildValue("(sO)", msg, v);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001548 Py_XDECREF(u);
Guido van Rossum41318302001-03-23 04:01:07 +00001549 Py_XDECREF(v);
Fred Drake85f36392000-07-11 17:53:00 +00001550 PyErr_SetObject(errtype, w);
Guido van Rossum82598051997-03-05 00:20:32 +00001551 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001552}
1553
1554/* Print fatal error message and abort */
1555
1556void
Tim Peters7c321a82002-07-09 02:57:01 +00001557Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001558{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00001559 fprintf(stderr, "Fatal Python error: %s\n", msg);
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001560#ifdef MS_WINDOWS
Guido van Rossum23c94461997-05-22 20:21:30 +00001561 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +00001562 OutputDebugString(msg);
1563 OutputDebugString("\n");
Guido van Rossum0ba35361998-08-13 13:33:16 +00001564#ifdef _DEBUG
1565 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00001566#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001567#endif /* MS_WINDOWS */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001568 abort();
1569}
1570
1571/* Clean up and exit */
1572
Guido van Rossuma110aa61994-08-29 12:50:44 +00001573#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00001574#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001575#endif
1576
Guido van Rossum2dcfc961998-10-01 16:01:57 +00001577#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001578static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00001579static int nexitfuncs = 0;
1580
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001581int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00001582{
1583 if (nexitfuncs >= NEXITFUNCS)
1584 return -1;
1585 exitfuncs[nexitfuncs++] = func;
1586 return 0;
1587}
1588
Guido van Rossumcc283f51997-08-05 02:22:03 +00001589static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001590call_sys_exitfunc(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001591{
Guido van Rossum82598051997-03-05 00:20:32 +00001592 PyObject *exitfunc = PySys_GetObject("exitfunc");
Guido van Rossum59bff391992-09-03 20:28:00 +00001593
1594 if (exitfunc) {
Fred Drake6a12d8d2001-03-23 17:34:02 +00001595 PyObject *res;
Guido van Rossum82598051997-03-05 00:20:32 +00001596 Py_INCREF(exitfunc);
1597 PySys_SetObject("exitfunc", (PyObject *)NULL);
1598 res = PyEval_CallObject(exitfunc, (PyObject *)NULL);
Guido van Rossum59bff391992-09-03 20:28:00 +00001599 if (res == NULL) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001600 if (!PyErr_ExceptionMatches(PyExc_SystemExit)) {
1601 PySys_WriteStderr("Error in sys.exitfunc:\n");
1602 }
Guido van Rossum82598051997-03-05 00:20:32 +00001603 PyErr_Print();
Guido van Rossum59bff391992-09-03 20:28:00 +00001604 }
Guido van Rossum82598051997-03-05 00:20:32 +00001605 Py_DECREF(exitfunc);
Guido van Rossum59bff391992-09-03 20:28:00 +00001606 }
1607
Guido van Rossum0829c751998-02-28 04:31:39 +00001608 if (Py_FlushLine())
1609 PyErr_Clear();
Guido van Rossumcc283f51997-08-05 02:22:03 +00001610}
Guido van Rossum1662dd51994-09-07 14:38:28 +00001611
Guido van Rossumcc283f51997-08-05 02:22:03 +00001612static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001613call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00001614{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001615 while (nexitfuncs > 0)
1616 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001617
1618 fflush(stdout);
1619 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001620}
1621
1622void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001623Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001624{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001625 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001626
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001627 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001628}
1629
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001630static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001631initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001632{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001633#ifdef SIGPIPE
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001634 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001635#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00001636#ifdef SIGXFZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001637 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00001638#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001639#ifdef SIGXFSZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001640 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001641#endif
Guido van Rossum82598051997-03-05 00:20:32 +00001642 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001643}
1644
Guido van Rossum7433b121997-02-14 19:45:36 +00001645
1646/*
1647 * The file descriptor fd is considered ``interactive'' if either
1648 * a) isatty(fd) is TRUE, or
1649 * b) the -i flag was given, and the filename associated with
1650 * the descriptor is NULL or "<stdin>" or "???".
1651 */
1652int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001653Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00001654{
1655 if (isatty((int)fileno(fp)))
1656 return 1;
1657 if (!Py_InteractiveFlag)
1658 return 0;
1659 return (filename == NULL) ||
1660 (strcmp(filename, "<stdin>") == 0) ||
1661 (strcmp(filename, "???") == 0);
1662}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001663
1664
Tim Petersd08e3822003-04-17 15:24:21 +00001665#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001666#if defined(WIN32) && defined(_MSC_VER)
1667
1668/* Stack checking for Microsoft C */
1669
1670#include <malloc.h>
1671#include <excpt.h>
1672
Fred Drakee8de31c2000-08-31 05:38:39 +00001673/*
1674 * Return non-zero when we run out of memory on the stack; zero otherwise.
1675 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001676int
Fred Drake399739f2000-08-31 05:52:44 +00001677PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001678{
1679 __try {
Tim Peters92e4dd82002-10-05 01:47:34 +00001680 /* alloca throws a stack overflow exception if there's
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001681 not enough space left on the stack */
Tim Peters92e4dd82002-10-05 01:47:34 +00001682 alloca(PYOS_STACK_MARGIN * sizeof(void*));
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001683 return 0;
1684 } __except (EXCEPTION_EXECUTE_HANDLER) {
1685 /* just ignore all errors */
1686 }
1687 return 1;
1688}
1689
1690#endif /* WIN32 && _MSC_VER */
1691
1692/* Alternate implementations can be added here... */
1693
1694#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00001695
1696
1697/* Wrappers around sigaction() or signal(). */
1698
1699PyOS_sighandler_t
1700PyOS_getsig(int sig)
1701{
1702#ifdef HAVE_SIGACTION
1703 struct sigaction context;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001704 if (sigaction(sig, NULL, &context) == -1)
1705 return SIG_ERR;
Guido van Rossum6f256182000-09-16 16:32:19 +00001706 return context.sa_handler;
1707#else
1708 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00001709/* Special signal handling for the secure CRT in Visual Studio 2005 */
1710#if defined(_MSC_VER) && _MSC_VER >= 1400
1711 switch (sig) {
1712 /* Only these signals are valid */
1713 case SIGINT:
1714 case SIGILL:
1715 case SIGFPE:
1716 case SIGSEGV:
1717 case SIGTERM:
1718 case SIGBREAK:
1719 case SIGABRT:
1720 break;
1721 /* Don't call signal() with other values or it will assert */
1722 default:
1723 return SIG_ERR;
1724 }
1725#endif /* _MSC_VER && _MSC_VER >= 1400 */
Guido van Rossum6f256182000-09-16 16:32:19 +00001726 handler = signal(sig, SIG_IGN);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001727 if (handler != SIG_ERR)
1728 signal(sig, handler);
Guido van Rossum6f256182000-09-16 16:32:19 +00001729 return handler;
1730#endif
1731}
1732
1733PyOS_sighandler_t
1734PyOS_setsig(int sig, PyOS_sighandler_t handler)
1735{
1736#ifdef HAVE_SIGACTION
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001737 struct sigaction context, ocontext;
Guido van Rossum6f256182000-09-16 16:32:19 +00001738 context.sa_handler = handler;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001739 sigemptyset(&context.sa_mask);
1740 context.sa_flags = 0;
1741 if (sigaction(sig, &context, &ocontext) == -1)
1742 return SIG_ERR;
1743 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001744#else
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001745 PyOS_sighandler_t oldhandler;
1746 oldhandler = signal(sig, handler);
1747#ifdef HAVE_SIGINTERRUPT
1748 siginterrupt(sig, 1);
1749#endif
1750 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001751#endif
1752}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001753
1754/* Deprecated C API functions still provided for binary compatiblity */
1755
1756#undef PyParser_SimpleParseFile
Thomas Heller1b046642006-04-18 18:51:06 +00001757PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001758PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
1759{
1760 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
1761}
1762
Thomas Heller1b046642006-04-18 18:51:06 +00001763#undef PyParser_SimpleParseString
1764PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001765PyParser_SimpleParseString(const char *str, int start)
1766{
1767 return PyParser_SimpleParseStringFlags(str, start, 0);
1768}
Anthony Baxterac6bd462006-04-13 02:06:09 +00001769
Thomas Heller1b046642006-04-18 18:51:06 +00001770#undef PyRun_AnyFile
1771PyAPI_FUNC(int)
1772PyRun_AnyFile(FILE *fp, const char *name)
1773{
1774 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
1775}
1776
1777#undef PyRun_AnyFileEx
1778PyAPI_FUNC(int)
1779PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
1780{
1781 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
1782}
1783
1784#undef PyRun_AnyFileFlags
1785PyAPI_FUNC(int)
1786PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
1787{
1788 return PyRun_AnyFileExFlags(fp, name, 0, flags);
1789}
1790
1791#undef PyRun_File
1792PyAPI_FUNC(PyObject *)
1793PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
1794{
1795 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
1796}
1797
1798#undef PyRun_FileEx
1799PyAPI_FUNC(PyObject *)
1800PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
1801{
1802 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
1803}
1804
1805#undef PyRun_FileFlags
1806PyAPI_FUNC(PyObject *)
1807PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
1808 PyCompilerFlags *flags)
1809{
1810 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
1811}
1812
1813#undef PyRun_SimpleFile
1814PyAPI_FUNC(int)
1815PyRun_SimpleFile(FILE *f, const char *p)
1816{
1817 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
1818}
1819
1820#undef PyRun_SimpleFileEx
1821PyAPI_FUNC(int)
1822PyRun_SimpleFileEx(FILE *f, const char *p, int c)
1823{
1824 return PyRun_SimpleFileExFlags(f, p, c, NULL);
1825}
1826
1827
1828#undef PyRun_String
1829PyAPI_FUNC(PyObject *)
1830PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
1831{
1832 return PyRun_StringFlags(str, s, g, l, NULL);
1833}
1834
1835#undef PyRun_SimpleString
1836PyAPI_FUNC(int)
1837PyRun_SimpleString(const char *s)
1838{
1839 return PyRun_SimpleStringFlags(s, NULL);
1840}
1841
1842#undef Py_CompileString
1843PyAPI_FUNC(PyObject *)
1844Py_CompileString(const char *str, const char *p, int s)
1845{
1846 return Py_CompileStringFlags(str, p, s, NULL);
1847}
1848
1849#undef PyRun_InteractiveOne
1850PyAPI_FUNC(int)
1851PyRun_InteractiveOne(FILE *f, const char *p)
1852{
1853 return PyRun_InteractiveOneFlags(f, p, NULL);
1854}
1855
1856#undef PyRun_InteractiveLoop
1857PyAPI_FUNC(int)
1858PyRun_InteractiveLoop(FILE *f, const char *p)
1859{
1860 return PyRun_InteractiveLoopFlags(f, p, NULL);
1861}
1862
Anthony Baxterac6bd462006-04-13 02:06:09 +00001863#ifdef __cplusplus
1864}
1865#endif
1866