blob: 3aa1295f9ef116321a7f5ddd138f7af6a50c6db8 [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
Thomas Wouters0e3f5912006-08-11 14:57:12 +000020#ifdef HAVE_SIGNAL_H
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000021#include <signal.h>
Thomas Wouters0e3f5912006-08-11 14:57:12 +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
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000035#define PRINT_TOTAL_REFS()
Neal Norwitz4281cef2006-03-04 19:58:13 +000036#else /* Py_REF_DEBUG */
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000037#define PRINT_TOTAL_REFS() fprintf(stderr, \
38 "[%" PY_FORMAT_SIZE_T "d refs]\n", \
39 _Py_GetRefTotal())
40#endif
41
42#ifdef __cplusplus
43extern "C" {
Neal Norwitz4281cef2006-03-04 19:58:13 +000044#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 Rossumddefaf32007-01-14 03:31:43 +000063extern int _PyLong_Init(void);
64extern void PyLong_Fini(void);
Guido van Rossumc94044c2000-03-10 23:03:54 +000065
Mark Hammond8d98d2c2003-04-19 15:41:53 +000066#ifdef WITH_THREAD
67extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
68extern void _PyGILState_Fini(void);
69#endif /* WITH_THREAD */
70
Guido van Rossum82598051997-03-05 00:20:32 +000071int Py_DebugFlag; /* Needed by parser.c */
72int Py_VerboseFlag; /* Needed by import.c */
Guido van Rossum7433b121997-02-14 19:45:36 +000073int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Guido van Rossumdcc0c131997-08-29 22:32:42 +000074int Py_NoSiteFlag; /* Suppress 'import site' */
Barry Warsaw3ce09642000-05-02 19:18:59 +000075int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
Guido van Rossuma61691e1998-02-06 22:27:24 +000076int Py_FrozenFlag; /* Needed by getpath.c */
Guido van Rossumb16d1972000-05-01 17:55:15 +000077int Py_UnicodeFlag = 0; /* Needed by compile.c */
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +000078int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000079
Mark Hammonda43fd0c2003-02-19 00:33:33 +000080/* Reference to 'warnings' module, to avoid importing it
Mark Hammondedd07732003-07-15 23:03:55 +000081 on the fly when the import lock may be held. See 683658/771097
Mark Hammonda43fd0c2003-02-19 00:33:33 +000082*/
Mark Hammondedd07732003-07-15 23:03:55 +000083static PyObject *warnings_module = NULL;
84
85/* Returns a borrowed reference to the 'warnings' module, or NULL.
86 If the module is returned, it is guaranteed to have been obtained
87 without acquiring the import lock
88*/
Martin v. Löwisa2c17c52003-08-09 09:47:11 +000089PyObject *PyModule_GetWarningsModule(void)
Mark Hammondedd07732003-07-15 23:03:55 +000090{
91 PyObject *typ, *val, *tb;
92 PyObject *all_modules;
93 /* If we managed to get the module at init time, just use it */
94 if (warnings_module)
95 return warnings_module;
96 /* If it wasn't available at init time, it may be available
97 now in sys.modules (common scenario is frozen apps: import
98 at init time fails, but the frozen init code sets up sys.path
99 correctly, then does an implicit import of warnings for us
100 */
101 /* Save and restore any exceptions */
102 PyErr_Fetch(&typ, &val, &tb);
103
Mark Hammond5f4e8ca2003-07-16 01:54:38 +0000104 all_modules = PySys_GetObject("modules");
Mark Hammondedd07732003-07-15 23:03:55 +0000105 if (all_modules) {
106 warnings_module = PyDict_GetItemString(all_modules, "warnings");
107 /* We keep a ref in the global */
108 Py_XINCREF(warnings_module);
109 }
110 PyErr_Restore(typ, val, tb);
111 return warnings_module;
112}
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000113
Guido van Rossum25ce5661997-08-02 03:10:38 +0000114static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000115
Thomas Wouters7e474022000-07-16 12:04:32 +0000116/* API to access the initialized flag -- useful for esoteric use */
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000117
118int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000119Py_IsInitialized(void)
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000120{
121 return initialized;
122}
123
Guido van Rossum25ce5661997-08-02 03:10:38 +0000124/* Global initializations. Can be undone by Py_Finalize(). Don't
125 call this twice without an intervening Py_Finalize() call. When
126 initializations fail, a fatal error is issued and the function does
127 not return. On return, the first thread and interpreter state have
128 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000129
Guido van Rossum25ce5661997-08-02 03:10:38 +0000130 Locking: you must hold the interpreter lock while calling this.
131 (If the lock has not yet been initialized, that's equivalent to
132 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000133
Guido van Rossum25ce5661997-08-02 03:10:38 +0000134*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000135
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000136static int
137add_flag(int flag, const char *envs)
138{
139 int env = atoi(envs);
140 if (flag < env)
141 flag = env;
142 if (flag < 1)
143 flag = 1;
144 return flag;
145}
146
Guido van Rossuma027efa1997-05-05 20:56:21 +0000147void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000148Py_InitializeEx(int install_sigs)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000149{
Guido van Rossuma027efa1997-05-05 20:56:21 +0000150 PyInterpreterState *interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000151 PyThreadState *tstate;
152 PyObject *bimod, *sysmod;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000153 char *p;
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000154#if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
155 char *codeset;
156 char *saved_locale;
157 PyObject *sys_stream, *sys_isatty;
158#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +0000159 extern void _Py_ReadyTypes(void);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000160
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000161 if (initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000162 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000163 initialized = 1;
Tim Petersd08e3822003-04-17 15:24:21 +0000164
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000165 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000166 Py_DebugFlag = add_flag(Py_DebugFlag, p);
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000167 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000168 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000169 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000170 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000171
Guido van Rossuma027efa1997-05-05 20:56:21 +0000172 interp = PyInterpreterState_New();
173 if (interp == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000174 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000175
Guido van Rossuma027efa1997-05-05 20:56:21 +0000176 tstate = PyThreadState_New(interp);
177 if (tstate == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000178 Py_FatalError("Py_Initialize: can't make first thread");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000179 (void) PyThreadState_Swap(tstate);
180
Guido van Rossum70d893a2001-08-16 08:21:42 +0000181 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000182
Neal Norwitzb2501f42002-12-31 03:42:13 +0000183 if (!_PyFrame_Init())
Neal Norwitzc91ed402002-12-30 22:29:22 +0000184 Py_FatalError("Py_Initialize: can't init frames");
185
Guido van Rossumddefaf32007-01-14 03:31:43 +0000186 if (!_PyLong_Init())
187 Py_FatalError("Py_Initialize: can't init longs");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000188
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000189 _PyFloat_Init();
190
Guido van Rossum25ce5661997-08-02 03:10:38 +0000191 interp->modules = PyDict_New();
192 if (interp->modules == NULL)
193 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000194
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000195#ifdef Py_USING_UNICODE
Guido van Rossumc94044c2000-03-10 23:03:54 +0000196 /* Init Unicode implementation; relies on the codec registry */
197 _PyUnicode_Init();
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000198#endif
Guido van Rossumc94044c2000-03-10 23:03:54 +0000199
Barry Warsawf242aa02000-05-25 23:09:49 +0000200 bimod = _PyBuiltin_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000201 if (bimod == NULL)
202 Py_FatalError("Py_Initialize: can't initialize __builtin__");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000203 interp->builtins = PyModule_GetDict(bimod);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000204 if (interp->builtins == NULL)
205 Py_FatalError("Py_Initialize: can't initialize builtins dict");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000206 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000207
208 sysmod = _PySys_Init();
209 if (sysmod == NULL)
210 Py_FatalError("Py_Initialize: can't initialize sys");
211 interp->sysdict = PyModule_GetDict(sysmod);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000212 if (interp->sysdict == NULL)
213 Py_FatalError("Py_Initialize: can't initialize sys dict");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000214 Py_INCREF(interp->sysdict);
215 _PyImport_FixupExtension("sys", "sys");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000216 PySys_SetPath(Py_GetPath());
Guido van Rossum25ce5661997-08-02 03:10:38 +0000217 PyDict_SetItemString(interp->sysdict, "modules",
218 interp->modules);
219
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000220 _PyImport_Init();
221
Barry Warsawf242aa02000-05-25 23:09:49 +0000222 /* initialize builtin exceptions */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000223 _PyExc_Init();
Barry Warsaw5821bc52001-08-13 23:04:56 +0000224 _PyImport_FixupExtension("exceptions", "exceptions");
Barry Warsawf242aa02000-05-25 23:09:49 +0000225
Barry Warsaw035574d1997-08-29 22:07:17 +0000226 /* phase 2 of builtins */
Barry Warsaw963b8711997-09-18 16:42:02 +0000227 _PyImport_FixupExtension("__builtin__", "__builtin__");
Barry Warsaw035574d1997-08-29 22:07:17 +0000228
Just van Rossum52e14d62002-12-30 22:08:05 +0000229 _PyImportHooks_Init();
230
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000231 if (install_sigs)
232 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000233
234 initmain(); /* Module __main__ */
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000235 if (!Py_NoSiteFlag)
236 initsite(); /* Module site */
Just van Rossum5bfba3a2003-02-25 20:25:12 +0000237
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000238 /* auto-thread-state API, if available */
239#ifdef WITH_THREAD
240 _PyGILState_Init(interp, tstate);
241#endif /* WITH_THREAD */
242
Mark Hammondedd07732003-07-15 23:03:55 +0000243 warnings_module = PyImport_ImportModule("warnings");
244 if (!warnings_module)
245 PyErr_Clear();
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000246
247#if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
248 /* On Unix, set the file system encoding according to the
249 user's preference, if the CODESET names a well-known
250 Python codec, and Py_FileSystemDefaultEncoding isn't
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000251 initialized by other means. Also set the encoding of
252 stdin and stdout if these are terminals. */
253
Martin v. Löwisf56d0152003-11-13 07:43:21 +0000254 saved_locale = strdup(setlocale(LC_CTYPE, NULL));
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000255 setlocale(LC_CTYPE, "");
256 codeset = nl_langinfo(CODESET);
257 if (codeset && *codeset) {
258 PyObject *enc = PyCodec_Encoder(codeset);
259 if (enc) {
260 codeset = strdup(codeset);
261 Py_DECREF(enc);
262 } else {
263 codeset = NULL;
264 PyErr_Clear();
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000265 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000266 } else
267 codeset = NULL;
268 setlocale(LC_CTYPE, saved_locale);
Martin v. Löwisf56d0152003-11-13 07:43:21 +0000269 free(saved_locale);
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000270
271 if (codeset) {
Michael W. Hudson68debc92003-08-11 12:20:24 +0000272 sys_stream = PySys_GetObject("stdin");
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000273 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
274 if (!sys_isatty)
275 PyErr_Clear();
Thomas Woutersb2137042007-02-01 18:02:27 +0000276 if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
277 PyFile_Check(sys_stream)) {
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000278 if (!PyFile_SetEncoding(sys_stream, codeset))
279 Py_FatalError("Cannot set codeset of stdin");
280 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000281 Py_XDECREF(sys_isatty);
282
283 sys_stream = PySys_GetObject("stdout");
284 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
285 if (!sys_isatty)
286 PyErr_Clear();
Thomas Woutersb2137042007-02-01 18:02:27 +0000287 if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
288 PyFile_Check(sys_stream)) {
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000289 if (!PyFile_SetEncoding(sys_stream, codeset))
290 Py_FatalError("Cannot set codeset of stdout");
291 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000292 Py_XDECREF(sys_isatty);
293
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000294 sys_stream = PySys_GetObject("stderr");
295 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
296 if (!sys_isatty)
297 PyErr_Clear();
Thomas Woutersb2137042007-02-01 18:02:27 +0000298 if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
299 PyFile_Check(sys_stream)) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000300 if (!PyFile_SetEncoding(sys_stream, codeset))
301 Py_FatalError("Cannot set codeset of stderr");
302 }
303 Py_XDECREF(sys_isatty);
304
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000305 if (!Py_FileSystemDefaultEncoding)
306 Py_FileSystemDefaultEncoding = codeset;
307 else
308 free(codeset);
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000309 }
310#endif
Guido van Rossum25ce5661997-08-02 03:10:38 +0000311}
312
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000313void
314Py_Initialize(void)
315{
316 Py_InitializeEx(1);
317}
318
319
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000320#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000321extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000322#endif
323
Guido van Rossum25ce5661997-08-02 03:10:38 +0000324/* Undo the effect of Py_Initialize().
325
326 Beware: if multiple interpreter and/or thread states exist, these
327 are not wiped out; only the current thread and interpreter state
328 are deleted. But since everything else is deleted, those other
329 interpreter and thread states should no longer be used.
330
331 (XXX We should do better, e.g. wipe out all interpreters and
332 threads.)
333
334 Locking: as above.
335
336*/
337
338void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000339Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000340{
341 PyInterpreterState *interp;
342 PyThreadState *tstate;
343
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000344 if (!initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000345 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000346
Tim Peters384fd102001-01-21 03:40:37 +0000347 /* The interpreter is still entirely intact at this point, and the
348 * exit funcs may be relying on that. In particular, if some thread
349 * or exit func is still waiting to do an import, the import machinery
350 * expects Py_IsInitialized() to return true. So don't say the
351 * interpreter is uninitialized until after the exit funcs have run.
352 * Note that Threading.py uses an exit func to do a join on all the
353 * threads created thru it, so this also protects pending imports in
354 * the threads created via Threading.
355 */
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000356 call_sys_exitfunc();
Tim Peters384fd102001-01-21 03:40:37 +0000357 initialized = 0;
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000358
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000359 /* Get current thread state and interpreter pointer */
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000360 tstate = PyThreadState_GET();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000361 interp = tstate->interp;
362
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000363 /* Disable signal handling */
364 PyOS_FiniInterrupts();
365
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000366 /* drop module references we saved */
Mark Hammondedd07732003-07-15 23:03:55 +0000367 Py_XDECREF(warnings_module);
368 warnings_module = NULL;
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000369
Guido van Rossume13ddc92003-04-17 17:29:22 +0000370 /* Collect garbage. This may call finalizers; it's nice to call these
Tim Peters1d7323e2003-12-01 21:35:27 +0000371 * before all modules are destroyed.
372 * XXX If a __del__ or weakref callback is triggered here, and tries to
373 * XXX import a module, bad things can happen, because Python no
374 * XXX longer believes it's initialized.
375 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
376 * XXX is easy to provoke that way. I've also seen, e.g.,
377 * XXX Exception exceptions.ImportError: 'No module named sha'
378 * XXX in <function callback at 0x008F5718> ignored
379 * XXX but I'm unclear on exactly how that one happens. In any case,
380 * XXX I haven't seen a real-life report of either of these.
Neal Norwitz9589ee22006-03-04 19:01:22 +0000381 */
Guido van Rossume13ddc92003-04-17 17:29:22 +0000382 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000383#ifdef COUNT_ALLOCS
384 /* With COUNT_ALLOCS, it helps to run GC multiple times:
385 each collection might release some types from the type
386 list, so they become garbage. */
387 while (PyGC_Collect() > 0)
388 /* nothing */;
389#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000390
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000391 /* Destroy all modules */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000392 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000393
Guido van Rossume13ddc92003-04-17 17:29:22 +0000394 /* Collect final garbage. This disposes of cycles created by
Tim Peters1d7323e2003-12-01 21:35:27 +0000395 * new-style class definitions, for example.
396 * XXX This is disabled because it caused too many problems. If
397 * XXX a __del__ or weakref callback triggers here, Python code has
398 * XXX a hard time running, because even the sys module has been
399 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
400 * XXX One symptom is a sequence of information-free messages
401 * XXX coming from threads (if a __del__ or callback is invoked,
402 * XXX other threads can execute too, and any exception they encounter
403 * XXX triggers a comedy of errors as subsystem after subsystem
404 * XXX fails to find what it *expects* to find in sys to help report
405 * XXX the exception and consequent unexpected failures). I've also
406 * XXX seen segfaults then, after adding print statements to the
407 * XXX Python code getting called.
408 */
409#if 0
Guido van Rossume13ddc92003-04-17 17:29:22 +0000410 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000411#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000412
Guido van Rossum1707aad1997-12-08 23:43:45 +0000413 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
414 _PyImport_Fini();
415
416 /* Debugging stuff */
417#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000418 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000419#endif
420
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000421 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000422
Tim Peters9cf25ce2003-04-17 15:21:01 +0000423#ifdef Py_TRACE_REFS
424 /* Display all objects still alive -- this can invoke arbitrary
425 * __repr__ overrides, so requires a mostly-intact interpreter.
426 * Alas, a lot of stuff may still be alive now that will be cleaned
427 * up later.
428 */
Tim Peters269b2a62003-04-17 19:52:29 +0000429 if (Py_GETENV("PYTHONDUMPREFS"))
Tim Peters9cf25ce2003-04-17 15:21:01 +0000430 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000431#endif /* Py_TRACE_REFS */
432
Mark Hammond6cb90292003-04-22 11:18:00 +0000433 /* Cleanup auto-thread-state */
434#ifdef WITH_THREAD
435 _PyGILState_Fini();
436#endif /* WITH_THREAD */
437
Guido van Rossumd922fa42003-04-15 14:10:09 +0000438 /* Clear interpreter state */
Barry Warsawf242aa02000-05-25 23:09:49 +0000439 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000440
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000441 /* Now we decref the exception classes. After this point nothing
442 can raise an exception. That's okay, because each Fini() method
443 below has been checked to make sure no exceptions are ever
444 raised.
445 */
446
447 _PyExc_Fini();
448
Guido van Rossumd922fa42003-04-15 14:10:09 +0000449 /* Delete current thread */
Barry Warsawf242aa02000-05-25 23:09:49 +0000450 PyThreadState_Swap(NULL);
451 PyInterpreterState_Delete(interp);
452
Guido van Rossumd922fa42003-04-15 14:10:09 +0000453 /* Sundry finalizers */
Guido van Rossumcc283f51997-08-05 02:22:03 +0000454 PyMethod_Fini();
455 PyFrame_Fini();
456 PyCFunction_Fini();
457 PyTuple_Fini();
Raymond Hettingerfb09f0e2004-10-07 03:58:07 +0000458 PyList_Fini();
Raymond Hettingerd7946662005-08-01 21:39:29 +0000459 PySet_Fini();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000460 PyString_Fini();
Guido van Rossumddefaf32007-01-14 03:31:43 +0000461 PyLong_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000462 PyFloat_Fini();
463
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000464#ifdef Py_USING_UNICODE
465 /* Cleanup Unicode implementation */
466 _PyUnicode_Fini();
467#endif
468
Guido van Rossumcc283f51997-08-05 02:22:03 +0000469 /* XXX Still allocated:
470 - various static ad-hoc pointers to interned strings
471 - int and float free list blocks
472 - whatever various modules and libraries allocate
473 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000474
475 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000476
Tim Peters269b2a62003-04-17 19:52:29 +0000477#ifdef Py_TRACE_REFS
478 /* Display addresses (& refcnts) of all objects still alive.
479 * An address can be used to find the repr of the object, printed
480 * above by _Py_PrintReferences.
481 */
482 if (Py_GETENV("PYTHONDUMPREFS"))
483 _Py_PrintReferenceAddresses(stderr);
484#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000485#ifdef PYMALLOC_DEBUG
486 if (Py_GETENV("PYTHONMALLOCSTATS"))
487 _PyObject_DebugMallocStats();
488#endif
489
Guido van Rossumcc283f51997-08-05 02:22:03 +0000490 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000491}
492
493/* Create and initialize a new interpreter and thread, and return the
494 new thread. This requires that Py_Initialize() has been called
495 first.
496
497 Unsuccessful initialization yields a NULL pointer. Note that *no*
498 exception information is available even in this case -- the
499 exception information is held in the thread, and there is no
500 thread.
501
502 Locking: as above.
503
504*/
505
506PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000507Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000508{
509 PyInterpreterState *interp;
510 PyThreadState *tstate, *save_tstate;
511 PyObject *bimod, *sysmod;
512
513 if (!initialized)
514 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
515
516 interp = PyInterpreterState_New();
517 if (interp == NULL)
518 return NULL;
519
520 tstate = PyThreadState_New(interp);
521 if (tstate == NULL) {
522 PyInterpreterState_Delete(interp);
523 return NULL;
524 }
525
526 save_tstate = PyThreadState_Swap(tstate);
527
528 /* XXX The following is lax in error checking */
529
530 interp->modules = PyDict_New();
531
532 bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
533 if (bimod != NULL) {
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000534 interp->builtins = PyModule_GetDict(bimod);
Thomas Wouters89f507f2006-12-13 04:49:30 +0000535 if (interp->builtins == NULL)
536 goto handle_error;
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000537 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000538 }
539 sysmod = _PyImport_FindExtension("sys", "sys");
540 if (bimod != NULL && sysmod != NULL) {
541 interp->sysdict = PyModule_GetDict(sysmod);
Thomas Wouters89f507f2006-12-13 04:49:30 +0000542 if (interp->sysdict == NULL)
543 goto handle_error;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000544 Py_INCREF(interp->sysdict);
545 PySys_SetPath(Py_GetPath());
546 PyDict_SetItemString(interp->sysdict, "modules",
547 interp->modules);
Martin v. Löwisd7ceb222003-01-22 09:00:38 +0000548 _PyImportHooks_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000549 initmain();
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000550 if (!Py_NoSiteFlag)
551 initsite();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000552 }
553
554 if (!PyErr_Occurred())
555 return tstate;
556
Thomas Wouters89f507f2006-12-13 04:49:30 +0000557handle_error:
Guido van Rossum25ce5661997-08-02 03:10:38 +0000558 /* Oops, it didn't work. Undo it all. */
559
560 PyErr_Print();
561 PyThreadState_Clear(tstate);
562 PyThreadState_Swap(save_tstate);
563 PyThreadState_Delete(tstate);
564 PyInterpreterState_Delete(interp);
565
566 return NULL;
567}
568
569/* Delete an interpreter and its last thread. This requires that the
570 given thread state is current, that the thread has no remaining
571 frames, and that it is its interpreter's only remaining thread.
572 It is a fatal error to violate these constraints.
573
574 (Py_Finalize() doesn't have these constraints -- it zaps
575 everything, regardless.)
576
577 Locking: as above.
578
579*/
580
581void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000582Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000583{
584 PyInterpreterState *interp = tstate->interp;
585
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000586 if (tstate != PyThreadState_GET())
Guido van Rossum25ce5661997-08-02 03:10:38 +0000587 Py_FatalError("Py_EndInterpreter: thread is not current");
588 if (tstate->frame != NULL)
589 Py_FatalError("Py_EndInterpreter: thread still has a frame");
590 if (tstate != interp->tstate_head || tstate->next != NULL)
591 Py_FatalError("Py_EndInterpreter: not the last thread");
592
593 PyImport_Cleanup();
594 PyInterpreterState_Clear(interp);
595 PyThreadState_Swap(NULL);
596 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000597}
598
599static char *progname = "python";
600
601void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000602Py_SetProgramName(char *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000603{
604 if (pn && *pn)
605 progname = pn;
606}
607
608char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000609Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000610{
611 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000612}
613
Guido van Rossuma61691e1998-02-06 22:27:24 +0000614static char *default_home = NULL;
615
616void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000617Py_SetPythonHome(char *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000618{
619 default_home = home;
620}
621
622char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000623Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000624{
625 char *home = default_home;
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000626 if (home == NULL && !Py_IgnoreEnvironmentFlag)
627 home = Py_GETENV("PYTHONHOME");
Guido van Rossuma61691e1998-02-06 22:27:24 +0000628 return home;
629}
630
Guido van Rossum6135a871995-01-09 17:53:26 +0000631/* Create __main__ module */
632
633static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000634initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000635{
Guido van Rossum82598051997-03-05 00:20:32 +0000636 PyObject *m, *d;
637 m = PyImport_AddModule("__main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000638 if (m == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000639 Py_FatalError("can't create __main__ module");
640 d = PyModule_GetDict(m);
641 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
Guido van Rossum858cb731997-11-19 16:15:37 +0000642 PyObject *bimod = PyImport_ImportModule("__builtin__");
643 if (bimod == NULL ||
644 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
Guido van Rossum82598051997-03-05 00:20:32 +0000645 Py_FatalError("can't add __builtins__ to __main__");
Barry Warsaw3d05b1a1999-01-29 21:30:22 +0000646 Py_DECREF(bimod);
Guido van Rossum6135a871995-01-09 17:53:26 +0000647 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000648}
649
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000650/* Import the site module (not into __main__ though) */
651
652static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000653initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000654{
655 PyObject *m, *f;
656 m = PyImport_ImportModule("site");
657 if (m == NULL) {
658 f = PySys_GetObject("stderr");
659 if (Py_VerboseFlag) {
660 PyFile_WriteString(
661 "'import site' failed; traceback:\n", f);
662 PyErr_Print();
663 }
664 else {
665 PyFile_WriteString(
666 "'import site' failed; use -v for traceback\n", f);
667 PyErr_Clear();
668 }
669 }
670 else {
671 Py_DECREF(m);
672 }
673}
674
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000675/* Parse input from a file and execute it */
676
677int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +0000678PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000679 PyCompilerFlags *flags)
680{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000681 if (filename == NULL)
682 filename = "???";
Guido van Rossum0df002c2000-08-27 19:21:52 +0000683 if (Py_FdIsInteractive(fp, filename)) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000684 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
Guido van Rossum0df002c2000-08-27 19:21:52 +0000685 if (closeit)
686 fclose(fp);
687 return err;
688 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000689 else
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000690 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000691}
692
693int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000694PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000695{
Guido van Rossum82598051997-03-05 00:20:32 +0000696 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000697 int ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000698 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000699
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000700 if (flags == NULL) {
701 flags = &local_flags;
Tim Peters5ba58662001-07-16 02:29:45 +0000702 local_flags.cf_flags = 0;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000703 }
Guido van Rossum82598051997-03-05 00:20:32 +0000704 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000705 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000706 PySys_SetObject("ps1", v = PyString_FromString(">>> "));
707 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000708 }
Guido van Rossum82598051997-03-05 00:20:32 +0000709 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000710 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000711 PySys_SetObject("ps2", v = PyString_FromString("... "));
712 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000713 }
714 for (;;) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000715 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000716 PRINT_TOTAL_REFS();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000717 if (ret == E_EOF)
718 return 0;
719 /*
720 if (ret == E_NOMEM)
721 return -1;
722 */
723 }
724}
725
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000726/* compute parser flags based on compiler flags */
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000727#define PARSER_FLAGS(flags) \
Thomas Wouters34aa7ba2006-02-28 19:02:24 +0000728 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
Guido van Rossum45aecf42006-03-15 04:58:47 +0000729 PyPARSE_DONT_IMPLY_DEDENT : 0)) : 0)
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000730
Thomas Wouters89f507f2006-12-13 04:49:30 +0000731#if 0
732/* Keep an example of flags with future keyword support. */
733#define PARSER_FLAGS(flags) \
734 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
735 PyPARSE_DONT_IMPLY_DEDENT : 0) \
736 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
737 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
738#endif
739
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000740int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000741PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000742{
Guido van Rossum82598051997-03-05 00:20:32 +0000743 PyObject *m, *d, *v, *w;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000744 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +0000745 PyArena *arena;
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000746 char *ps1 = "", *ps2 = "";
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000747 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +0000748
Guido van Rossum82598051997-03-05 00:20:32 +0000749 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000750 if (v != NULL) {
751 v = PyObject_Str(v);
752 if (v == NULL)
753 PyErr_Clear();
754 else if (PyString_Check(v))
755 ps1 = PyString_AsString(v);
756 }
Guido van Rossum82598051997-03-05 00:20:32 +0000757 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000758 if (w != NULL) {
759 w = PyObject_Str(w);
760 if (w == NULL)
761 PyErr_Clear();
762 else if (PyString_Check(w))
763 ps2 = PyString_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000764 }
Neal Norwitz9589ee22006-03-04 19:01:22 +0000765 arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000766 if (arena == NULL) {
767 Py_XDECREF(v);
768 Py_XDECREF(w);
769 return -1;
770 }
Thomas Wouters4d70c3d2006-06-08 14:42:34 +0000771 mod = PyParser_ASTFromFile(fp, filename,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000772 Py_single_input, ps1, ps2,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000773 flags, &errcode, arena);
Guido van Rossum82598051997-03-05 00:20:32 +0000774 Py_XDECREF(v);
775 Py_XDECREF(w);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000776 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000777 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000778 if (errcode == E_EOF) {
779 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000780 return E_EOF;
781 }
Guido van Rossum82598051997-03-05 00:20:32 +0000782 PyErr_Print();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000783 return -1;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000784 }
Guido van Rossum82598051997-03-05 00:20:32 +0000785 m = PyImport_AddModule("__main__");
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000786 if (m == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000787 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000788 return -1;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000789 }
Guido van Rossum82598051997-03-05 00:20:32 +0000790 d = PyModule_GetDict(m);
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000791 v = run_mod(mod, filename, d, d, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +0000792 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000793 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000794 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000795 return -1;
796 }
Guido van Rossum82598051997-03-05 00:20:32 +0000797 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000798 if (Py_FlushLine())
799 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000800 return 0;
801}
802
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000803/* Check whether a file maybe a pyc file: Look at the extension,
804 the file type, and, if we may close it, at the first few bytes. */
805
806static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000807maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000808{
809 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
810 return 1;
811
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000812 /* Only look into the file if we are allowed to close it, since
813 it then should also be seekable. */
814 if (closeit) {
815 /* Read only two bytes of the magic. If the file was opened in
816 text mode, the bytes 3 and 4 of the magic (\r\n) might not
817 be read as they are on disk. */
818 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
819 unsigned char buf[2];
Tim Peters3e876562001-02-11 04:35:39 +0000820 /* Mess: In case of -x, the stream is NOT at its start now,
821 and ungetc() was used to push back the first newline,
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000822 which makes the current stream position formally undefined,
823 and a x-platform nightmare.
824 Unfortunately, we have no direct way to know whether -x
825 was specified. So we use a terrible hack: if the current
826 stream position is not 0, we assume -x was specified, and
827 give up. Bug 132850 on SourceForge spells out the
828 hopelessness of trying anything else (fseek and ftell
829 don't work predictably x-platform for text-mode files).
Tim Peters3e876562001-02-11 04:35:39 +0000830 */
Tim Peters3e876562001-02-11 04:35:39 +0000831 int ispyc = 0;
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000832 if (ftell(fp) == 0) {
833 if (fread(buf, 1, 2, fp) == 2 &&
Tim Petersd08e3822003-04-17 15:24:21 +0000834 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000835 ispyc = 1;
836 rewind(fp);
837 }
Tim Peters3e876562001-02-11 04:35:39 +0000838 return ispyc;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000839 }
840 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +0000841}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000842
Guido van Rossum0df002c2000-08-27 19:21:52 +0000843int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000844PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000845 PyCompilerFlags *flags)
846{
Guido van Rossum82598051997-03-05 00:20:32 +0000847 PyObject *m, *d, *v;
Martin v. Löwis95292d62002-12-11 14:04:59 +0000848 const char *ext;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000849
Guido van Rossum82598051997-03-05 00:20:32 +0000850 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000851 if (m == NULL)
852 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000853 d = PyModule_GetDict(m);
Fred Drake8ed02042002-10-17 21:24:58 +0000854 if (PyDict_GetItemString(d, "__file__") == NULL) {
855 PyObject *f = PyString_FromString(filename);
856 if (f == NULL)
857 return -1;
858 if (PyDict_SetItemString(d, "__file__", f) < 0) {
859 Py_DECREF(f);
860 return -1;
861 }
862 Py_DECREF(f);
863 }
Guido van Rossumfdef2711994-09-14 13:31:04 +0000864 ext = filename + strlen(filename) - 4;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000865 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000866 /* Try to run a pyc file. First, re-open in binary */
Guido van Rossum0df002c2000-08-27 19:21:52 +0000867 if (closeit)
868 fclose(fp);
Fred Drake8ed02042002-10-17 21:24:58 +0000869 if ((fp = fopen(filename, "rb")) == NULL) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000870 fprintf(stderr, "python: Can't reopen .pyc file\n");
871 return -1;
872 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000873 /* Turn on optimization if a .pyo file is given */
874 if (strcmp(ext, ".pyo") == 0)
875 Py_OptimizeFlag = 1;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000876 v = run_pyc_file(fp, filename, d, d, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000877 } else {
Tim Petersd08e3822003-04-17 15:24:21 +0000878 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000879 closeit, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000880 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000881 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000882 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000883 return -1;
884 }
Guido van Rossum82598051997-03-05 00:20:32 +0000885 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000886 if (Py_FlushLine())
887 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000888 return 0;
889}
890
891int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000892PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +0000893{
Guido van Rossum82598051997-03-05 00:20:32 +0000894 PyObject *m, *d, *v;
895 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000896 if (m == NULL)
897 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000898 d = PyModule_GetDict(m);
Guido van Rossum393661d2001-08-31 17:40:15 +0000899 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000900 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000901 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000902 return -1;
903 }
Guido van Rossum82598051997-03-05 00:20:32 +0000904 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000905 if (Py_FlushLine())
906 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000907 return 0;
908}
909
Barry Warsaw035574d1997-08-29 22:07:17 +0000910static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000911parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
912 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +0000913{
914 long hold;
915 PyObject *v;
916
917 /* old style errors */
918 if (PyTuple_Check(err))
Neal Norwitz78293352002-04-01 01:41:20 +0000919 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
Neal Norwitz9589ee22006-03-04 19:01:22 +0000920 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +0000921
922 /* new style errors. `err' is an instance */
923
924 if (! (v = PyObject_GetAttrString(err, "msg")))
925 goto finally;
926 *message = v;
927
928 if (!(v = PyObject_GetAttrString(err, "filename")))
929 goto finally;
930 if (v == Py_None)
931 *filename = NULL;
932 else if (! (*filename = PyString_AsString(v)))
933 goto finally;
934
935 Py_DECREF(v);
936 if (!(v = PyObject_GetAttrString(err, "lineno")))
937 goto finally;
938 hold = PyInt_AsLong(v);
939 Py_DECREF(v);
940 v = NULL;
941 if (hold < 0 && PyErr_Occurred())
942 goto finally;
943 *lineno = (int)hold;
944
945 if (!(v = PyObject_GetAttrString(err, "offset")))
946 goto finally;
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000947 if (v == Py_None) {
948 *offset = -1;
949 Py_DECREF(v);
950 v = NULL;
951 } else {
952 hold = PyInt_AsLong(v);
953 Py_DECREF(v);
954 v = NULL;
955 if (hold < 0 && PyErr_Occurred())
956 goto finally;
957 *offset = (int)hold;
958 }
Barry Warsaw035574d1997-08-29 22:07:17 +0000959
960 if (!(v = PyObject_GetAttrString(err, "text")))
961 goto finally;
962 if (v == Py_None)
963 *text = NULL;
964 else if (! (*text = PyString_AsString(v)))
965 goto finally;
966 Py_DECREF(v);
967 return 1;
968
969finally:
970 Py_XDECREF(v);
971 return 0;
972}
973
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000974void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000975PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000976{
Guido van Rossuma61691e1998-02-06 22:27:24 +0000977 PyErr_PrintEx(1);
978}
979
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000980static void
Martin v. Löwis95292d62002-12-11 14:04:59 +0000981print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000982{
983 char *nl;
984 if (offset >= 0) {
985 if (offset > 0 && offset == (int)strlen(text))
986 offset--;
987 for (;;) {
988 nl = strchr(text, '\n');
989 if (nl == NULL || nl-text >= offset)
990 break;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000991 offset -= (int)(nl+1-text);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000992 text = nl+1;
993 }
994 while (*text == ' ' || *text == '\t') {
995 text++;
996 offset--;
997 }
998 }
999 PyFile_WriteString(" ", f);
1000 PyFile_WriteString(text, f);
1001 if (*text == '\0' || text[strlen(text)-1] != '\n')
1002 PyFile_WriteString("\n", f);
1003 if (offset == -1)
1004 return;
1005 PyFile_WriteString(" ", f);
1006 offset--;
1007 while (offset > 0) {
1008 PyFile_WriteString(" ", f);
1009 offset--;
1010 }
1011 PyFile_WriteString("^\n", f);
1012}
1013
Guido van Rossum66e8e862001-03-23 17:54:43 +00001014static void
1015handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001016{
Neal Norwitz9589ee22006-03-04 19:01:22 +00001017 PyObject *exception, *value, *tb;
1018 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001019
Guido van Rossum66e8e862001-03-23 17:54:43 +00001020 PyErr_Fetch(&exception, &value, &tb);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001021 if (Py_FlushLine())
1022 PyErr_Clear();
1023 fflush(stdout);
1024 if (value == NULL || value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001025 goto done;
Brett Cannonbf364092006-03-01 04:25:17 +00001026 if (PyExceptionInstance_Check(value)) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001027 /* The error code should be in the `code' attribute. */
1028 PyObject *code = PyObject_GetAttrString(value, "code");
1029 if (code) {
1030 Py_DECREF(value);
1031 value = code;
1032 if (value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001033 goto done;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001034 }
1035 /* If we failed to dig out the 'code' attribute,
1036 just let the else clause below print the error. */
1037 }
1038 if (PyInt_Check(value))
Tim Peterscf615b52003-04-19 18:47:02 +00001039 exitcode = (int)PyInt_AsLong(value);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001040 else {
1041 PyObject_Print(value, stderr, Py_PRINT_RAW);
1042 PySys_WriteStderr("\n");
Tim Peterscf615b52003-04-19 18:47:02 +00001043 exitcode = 1;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001044 }
Tim Peterscf615b52003-04-19 18:47:02 +00001045 done:
Neal Norwitz9589ee22006-03-04 19:01:22 +00001046 /* Restore and clear the exception info, in order to properly decref
1047 * the exception, value, and traceback. If we just exit instead,
1048 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1049 * some finalizers from running.
1050 */
Tim Peterscf615b52003-04-19 18:47:02 +00001051 PyErr_Restore(exception, value, tb);
1052 PyErr_Clear();
1053 Py_Exit(exitcode);
1054 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001055}
1056
1057void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001058PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001059{
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001060 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001061
1062 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1063 handle_system_exit();
1064 }
Guido van Rossum82598051997-03-05 00:20:32 +00001065 PyErr_Fetch(&exception, &v, &tb);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001066 if (exception == NULL)
1067 return;
Barry Warsaw035574d1997-08-29 22:07:17 +00001068 PyErr_NormalizeException(&exception, &v, &tb);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001069 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +00001070 return;
Guido van Rossum9d785502006-03-07 18:31:44 +00001071 /* Now we know v != NULL too */
Guido van Rossuma61691e1998-02-06 22:27:24 +00001072 if (set_sys_last_vars) {
1073 PySys_SetObject("last_type", exception);
1074 PySys_SetObject("last_value", v);
1075 PySys_SetObject("last_traceback", tb);
1076 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001077 hook = PySys_GetObject("excepthook");
1078 if (hook) {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00001079 PyObject *args = PyTuple_Pack(3,
Guido van Rossum9d785502006-03-07 18:31:44 +00001080 exception, v, tb ? tb : Py_None);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001081 PyObject *result = PyEval_CallObject(hook, args);
1082 if (result == NULL) {
1083 PyObject *exception2, *v2, *tb2;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001084 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1085 handle_system_exit();
1086 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001087 PyErr_Fetch(&exception2, &v2, &tb2);
1088 PyErr_NormalizeException(&exception2, &v2, &tb2);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001089 /* It should not be possible for exception2 or v2
1090 to be NULL. However PyErr_Display() can't
1091 tolerate NULLs, so just be safe. */
1092 if (exception2 == NULL) {
1093 exception2 = Py_None;
1094 Py_INCREF(exception2);
1095 }
1096 if (v2 == NULL) {
1097 v2 = Py_None;
1098 Py_INCREF(v2);
1099 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001100 if (Py_FlushLine())
1101 PyErr_Clear();
1102 fflush(stdout);
1103 PySys_WriteStderr("Error in sys.excepthook:\n");
1104 PyErr_Display(exception2, v2, tb2);
1105 PySys_WriteStderr("\nOriginal exception was:\n");
1106 PyErr_Display(exception, v, tb);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001107 Py_DECREF(exception2);
1108 Py_DECREF(v2);
Jeremy Hylton07028582001-12-07 15:35:35 +00001109 Py_XDECREF(tb2);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001110 }
1111 Py_XDECREF(result);
1112 Py_XDECREF(args);
1113 } else {
1114 PySys_WriteStderr("sys.excepthook is missing\n");
1115 PyErr_Display(exception, v, tb);
1116 }
1117 Py_XDECREF(exception);
1118 Py_XDECREF(v);
1119 Py_XDECREF(tb);
1120}
1121
Thomas Wouters477c8d52006-05-27 19:21:47 +00001122void
1123PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001124{
1125 int err = 0;
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001126 PyObject *f = PySys_GetObject("stderr");
Armin Rigo5d2c6832004-03-22 20:16:58 +00001127 Py_INCREF(value);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001128 if (f == NULL)
1129 fprintf(stderr, "lost sys.stderr\n");
1130 else {
Guido van Rossum0829c751998-02-28 04:31:39 +00001131 if (Py_FlushLine())
1132 PyErr_Clear();
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001133 fflush(stdout);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001134 if (tb && tb != Py_None)
1135 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +00001136 if (err == 0 &&
Armin Rigo5d2c6832004-03-22 20:16:58 +00001137 PyObject_HasAttrString(value, "print_file_and_line"))
Barry Warsaw36b8f941997-08-26 18:09:48 +00001138 {
Guido van Rossum82598051997-03-05 00:20:32 +00001139 PyObject *message;
Martin v. Löwis95292d62002-12-11 14:04:59 +00001140 const char *filename, *text;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001141 int lineno, offset;
Armin Rigo5d2c6832004-03-22 20:16:58 +00001142 if (!parse_syntax_error(value, &message, &filename,
Barry Warsaw035574d1997-08-29 22:07:17 +00001143 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +00001144 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001145 else {
1146 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +00001147 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001148 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +00001149 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001150 else
Guido van Rossum82598051997-03-05 00:20:32 +00001151 PyFile_WriteString(filename, f);
1152 PyFile_WriteString("\", line ", f);
Jeremy Hylton518ab1c2001-11-28 20:42:20 +00001153 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +00001154 PyFile_WriteString(buf, f);
1155 PyFile_WriteString("\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001156 if (text != NULL)
1157 print_error_text(f, offset, text);
Armin Rigo5d2c6832004-03-22 20:16:58 +00001158 Py_DECREF(value);
1159 value = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001160 /* Can't be bothered to check all those
1161 PyFile_WriteString() calls */
1162 if (PyErr_Occurred())
1163 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001164 }
1165 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001166 if (err) {
1167 /* Don't do anything else */
1168 }
Brett Cannonbf364092006-03-01 04:25:17 +00001169 else if (PyExceptionClass_Check(exception)) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001170 PyObject* moduleName;
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001171 char* className = PyExceptionClass_Name(exception);
1172 if (className != NULL) {
1173 char *dot = strrchr(className, '.');
1174 if (dot != NULL)
1175 className = dot+1;
1176 }
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001177
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001178 moduleName = PyObject_GetAttrString(exception, "__module__");
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001179 if (moduleName == NULL)
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001180 err = PyFile_WriteString("<unknown>", f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001181 else {
1182 char* modstr = PyString_AsString(moduleName);
Tim Petersd08e3822003-04-17 15:24:21 +00001183 if (modstr && strcmp(modstr, "exceptions"))
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001184 {
1185 err = PyFile_WriteString(modstr, f);
1186 err += PyFile_WriteString(".", f);
1187 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001188 Py_DECREF(moduleName);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001189 }
1190 if (err == 0) {
1191 if (className == NULL)
1192 err = PyFile_WriteString("<unknown>", f);
1193 else
Brett Cannonbf364092006-03-01 04:25:17 +00001194 err = PyFile_WriteString(className, f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001195 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001196 }
1197 else
1198 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
Brett Cannon2e63b732006-03-02 18:34:57 +00001199 if (err == 0 && (value != Py_None)) {
1200 PyObject *s = PyObject_Str(value);
1201 /* only print colon if the str() of the
1202 object is not the empty string
1203 */
1204 if (s == NULL)
1205 err = -1;
1206 else if (!PyString_Check(s) ||
1207 PyString_GET_SIZE(s) != 0)
1208 err = PyFile_WriteString(": ", f);
1209 if (err == 0)
1210 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1211 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +00001212 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001213 if (err == 0)
1214 err = PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001215 }
Armin Rigo5d2c6832004-03-22 20:16:58 +00001216 Py_DECREF(value);
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001217 /* If an error happened here, don't show it.
1218 XXX This is wrong, but too many callers rely on this behavior. */
1219 if (err != 0)
1220 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001221}
1222
Guido van Rossum82598051997-03-05 00:20:32 +00001223PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001224PyRun_StringFlags(const char *str, int start, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001225 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001226{
Neal Norwitze92fba02006-03-04 18:52:26 +00001227 PyObject *ret = NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001228 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001229 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001230 if (arena == NULL)
1231 return NULL;
1232
1233 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
Neal Norwitze92fba02006-03-04 18:52:26 +00001234 if (mod != NULL)
1235 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001236 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001237 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001238}
1239
1240PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001241PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001242 PyObject *locals, int closeit, PyCompilerFlags *flags)
1243{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001244 PyObject *ret;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001245 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001246 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001247 if (arena == NULL)
1248 return NULL;
1249
1250 mod = PyParser_ASTFromFile(fp, filename, start, 0, 0,
1251 flags, NULL, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001252 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001253 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001254 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001255 }
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001256 if (closeit)
1257 fclose(fp);
Neal Norwitze92fba02006-03-04 18:52:26 +00001258 ret = run_mod(mod, filename, globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001259 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001260 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001261}
1262
Guido van Rossum82598051997-03-05 00:20:32 +00001263static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001264run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001265 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001266{
Guido van Rossum82598051997-03-05 00:20:32 +00001267 PyCodeObject *co;
1268 PyObject *v;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001269 co = PyAST_Compile(mod, filename, flags, arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001270 if (co == NULL)
1271 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +00001272 v = PyEval_EvalCode(co, globals, locals);
1273 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001274 return v;
1275}
1276
Guido van Rossum82598051997-03-05 00:20:32 +00001277static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001278run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001279 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001280{
Guido van Rossum82598051997-03-05 00:20:32 +00001281 PyCodeObject *co;
1282 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001283 long magic;
Fred Drakee8de31c2000-08-31 05:38:39 +00001284 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001285
Guido van Rossum82598051997-03-05 00:20:32 +00001286 magic = PyMarshal_ReadLongFromFile(fp);
1287 if (magic != PyImport_GetMagicNumber()) {
1288 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001289 "Bad magic number in .pyc file");
1290 return NULL;
1291 }
Guido van Rossum82598051997-03-05 00:20:32 +00001292 (void) PyMarshal_ReadLongFromFile(fp);
Tim Petersd9b9ac82001-01-28 00:27:39 +00001293 v = PyMarshal_ReadLastObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001294 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +00001295 if (v == NULL || !PyCode_Check(v)) {
1296 Py_XDECREF(v);
1297 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001298 "Bad code object in .pyc file");
1299 return NULL;
1300 }
Guido van Rossum82598051997-03-05 00:20:32 +00001301 co = (PyCodeObject *)v;
1302 v = PyEval_EvalCode(co, globals, locals);
Jeremy Hyltonb857ba22001-08-10 21:41:33 +00001303 if (v && flags)
1304 flags->cf_flags |= (co->co_flags & PyCF_MASK);
Guido van Rossum82598051997-03-05 00:20:32 +00001305 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001306 return v;
1307}
1308
Guido van Rossum82598051997-03-05 00:20:32 +00001309PyObject *
Tim Petersd08e3822003-04-17 15:24:21 +00001310Py_CompileStringFlags(const char *str, const char *filename, int start,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001311 PyCompilerFlags *flags)
1312{
Guido van Rossum82598051997-03-05 00:20:32 +00001313 PyCodeObject *co;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001314 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001315 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001316 if (arena == NULL)
1317 return NULL;
1318
1319 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001320 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001321 PyArena_Free(arena);
Guido van Rossum5b722181993-03-30 17:46:03 +00001322 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001323 }
Martin v. Löwis2b366e42006-02-26 22:12:35 +00001324 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001325 PyObject *result = PyAST_mod2obj(mod);
1326 PyArena_Free(arena);
1327 return result;
1328 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001329 co = PyAST_Compile(mod, filename, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001330 PyArena_Free(arena);
Guido van Rossum82598051997-03-05 00:20:32 +00001331 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001332}
1333
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001334struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001335Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001336{
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001337 struct symtable *st;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001338 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001339 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001340 if (arena == NULL)
1341 return NULL;
1342
1343 mod = PyParser_ASTFromString(str, filename, start, NULL, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001344 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001345 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001346 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001347 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001348 st = PySymtable_Build(mod, filename, 0);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001349 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001350 return st;
1351}
1352
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001353/* Preferred access to parser is through AST. */
1354mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001355PyParser_ASTFromString(const char *s, const char *filename, int start,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001356 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001357{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001358 mod_ty mod;
1359 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001360 node *n = PyParser_ParseStringFlagsFilename(s, filename,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001361 &_PyParser_Grammar, start, &err,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001362 PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001363 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001364 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001365 PyNode_Free(n);
1366 return mod;
1367 }
1368 else {
1369 err_input(&err);
1370 return NULL;
1371 }
1372}
1373
1374mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001375PyParser_ASTFromFile(FILE *fp, const char *filename, int start, char *ps1,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001376 char *ps2, PyCompilerFlags *flags, int *errcode,
Neal Norwitz9589ee22006-03-04 19:01:22 +00001377 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001378{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001379 mod_ty mod;
1380 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001381 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
1382 start, ps1, ps2, &err, PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001383 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001384 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001385 PyNode_Free(n);
1386 return mod;
1387 }
1388 else {
1389 err_input(&err);
1390 if (errcode)
1391 *errcode = err.error;
1392 return NULL;
1393 }
1394}
1395
Guido van Rossuma110aa61994-08-29 12:50:44 +00001396/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001397
Guido van Rossuma110aa61994-08-29 12:50:44 +00001398node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001399PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001400{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001401 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001402 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
1403 start, NULL, NULL, &err, flags);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001404 if (n == NULL)
1405 err_input(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001406
Guido van Rossuma110aa61994-08-29 12:50:44 +00001407 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001408}
1409
Guido van Rossuma110aa61994-08-29 12:50:44 +00001410/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001411
Guido van Rossuma110aa61994-08-29 12:50:44 +00001412node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001413PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001414{
Tim Petersfe2127d2001-07-16 05:37:24 +00001415 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001416 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1417 start, &err, flags);
Tim Petersfe2127d2001-07-16 05:37:24 +00001418 if (n == NULL)
1419 err_input(&err);
1420 return n;
1421}
1422
1423node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001424PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Thomas Heller6b17abf2002-07-09 09:23:27 +00001425 int start, int flags)
1426{
Thomas Heller6b17abf2002-07-09 09:23:27 +00001427 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001428 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1429 &_PyParser_Grammar, start, &err, flags);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001430 if (n == NULL)
1431 err_input(&err);
1432 return n;
1433}
1434
1435node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001436PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001437{
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001438 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001439}
1440
Guido van Rossum66ebd912003-04-17 16:02:26 +00001441/* May want to move a more generalized form of this to parsetok.c or
1442 even parser modules. */
1443
1444void
1445PyParser_SetError(perrdetail *err)
1446{
1447 err_input(err);
1448}
1449
Guido van Rossuma110aa61994-08-29 12:50:44 +00001450/* Set the error appropriate to the given input error code (see errcode.h) */
1451
1452static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001453err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00001454{
Fred Drake85f36392000-07-11 17:53:00 +00001455 PyObject *v, *w, *errtype;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001456 PyObject* u = NULL;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001457 char *msg = NULL;
Fred Drake85f36392000-07-11 17:53:00 +00001458 errtype = PyExc_SyntaxError;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001459 switch (err->error) {
1460 case E_SYNTAX:
Fred Drake85f36392000-07-11 17:53:00 +00001461 errtype = PyExc_IndentationError;
1462 if (err->expected == INDENT)
1463 msg = "expected an indented block";
1464 else if (err->token == INDENT)
1465 msg = "unexpected indent";
1466 else if (err->token == DEDENT)
1467 msg = "unexpected unindent";
1468 else {
1469 errtype = PyExc_SyntaxError;
1470 msg = "invalid syntax";
1471 }
Guido van Rossuma110aa61994-08-29 12:50:44 +00001472 break;
1473 case E_TOKEN:
1474 msg = "invalid token";
Guido van Rossuma110aa61994-08-29 12:50:44 +00001475 break;
Skip Montanaro118ec702002-08-15 01:20:16 +00001476 case E_EOFS:
1477 msg = "EOF while scanning triple-quoted string";
1478 break;
1479 case E_EOLS:
1480 msg = "EOL while scanning single-quoted string";
1481 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001482 case E_INTR:
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001483 if (!PyErr_Occurred())
1484 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001485 return;
1486 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +00001487 PyErr_NoMemory();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001488 return;
1489 case E_EOF:
1490 msg = "unexpected EOF while parsing";
1491 break;
Fred Drake85f36392000-07-11 17:53:00 +00001492 case E_TABSPACE:
1493 errtype = PyExc_TabError;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001494 msg = "inconsistent use of tabs and spaces in indentation";
1495 break;
Jeremy Hylton94988062000-06-20 19:10:44 +00001496 case E_OVERFLOW:
1497 msg = "expression too long";
1498 break;
Fred Drake85f36392000-07-11 17:53:00 +00001499 case E_DEDENT:
1500 errtype = PyExc_IndentationError;
1501 msg = "unindent does not match any outer indentation level";
1502 break;
1503 case E_TOODEEP:
1504 errtype = PyExc_IndentationError;
1505 msg = "too many levels of indentation";
1506 break;
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001507 case E_DECODE: {
1508 PyObject *type, *value, *tb;
1509 PyErr_Fetch(&type, &value, &tb);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001510 if (value != NULL) {
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001511 u = PyObject_Str(value);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001512 if (u != NULL) {
1513 msg = PyString_AsString(u);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001514 }
1515 }
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001516 if (msg == NULL)
1517 msg = "unknown decode error";
Neal Norwitzdb83eb32005-12-18 05:29:30 +00001518 Py_XDECREF(type);
1519 Py_XDECREF(value);
Neal Norwitz40d37812005-10-02 01:48:49 +00001520 Py_XDECREF(tb);
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001521 break;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001522 }
Martin v. Löwis4bf108d2005-03-03 11:45:45 +00001523 case E_LINECONT:
1524 msg = "unexpected character after line continuation character";
1525 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001526 default:
1527 fprintf(stderr, "error=%d\n", err->error);
1528 msg = "unknown parsing error";
1529 break;
1530 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001531 v = Py_BuildValue("(ziiz)", err->filename,
1532 err->lineno, err->offset, err->text);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001533 if (err->text != NULL) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001534 PyObject_FREE(err->text);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001535 err->text = NULL;
1536 }
1537 w = NULL;
1538 if (v != NULL)
1539 w = Py_BuildValue("(sO)", msg, v);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001540 Py_XDECREF(u);
Guido van Rossum41318302001-03-23 04:01:07 +00001541 Py_XDECREF(v);
Fred Drake85f36392000-07-11 17:53:00 +00001542 PyErr_SetObject(errtype, w);
Guido van Rossum82598051997-03-05 00:20:32 +00001543 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001544}
1545
1546/* Print fatal error message and abort */
1547
1548void
Tim Peters7c321a82002-07-09 02:57:01 +00001549Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001550{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00001551 fprintf(stderr, "Fatal Python error: %s\n", msg);
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001552#ifdef MS_WINDOWS
Guido van Rossum23c94461997-05-22 20:21:30 +00001553 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +00001554 OutputDebugString(msg);
1555 OutputDebugString("\n");
Guido van Rossum0ba35361998-08-13 13:33:16 +00001556#ifdef _DEBUG
1557 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00001558#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001559#endif /* MS_WINDOWS */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001560 abort();
1561}
1562
1563/* Clean up and exit */
1564
Guido van Rossuma110aa61994-08-29 12:50:44 +00001565#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00001566#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001567#endif
1568
Guido van Rossum2dcfc961998-10-01 16:01:57 +00001569#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001570static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00001571static int nexitfuncs = 0;
1572
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001573int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00001574{
1575 if (nexitfuncs >= NEXITFUNCS)
1576 return -1;
1577 exitfuncs[nexitfuncs++] = func;
1578 return 0;
1579}
1580
Guido van Rossumcc283f51997-08-05 02:22:03 +00001581static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001582call_sys_exitfunc(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001583{
Guido van Rossum82598051997-03-05 00:20:32 +00001584 PyObject *exitfunc = PySys_GetObject("exitfunc");
Guido van Rossum59bff391992-09-03 20:28:00 +00001585
1586 if (exitfunc) {
Fred Drake6a12d8d2001-03-23 17:34:02 +00001587 PyObject *res;
Guido van Rossum82598051997-03-05 00:20:32 +00001588 Py_INCREF(exitfunc);
1589 PySys_SetObject("exitfunc", (PyObject *)NULL);
1590 res = PyEval_CallObject(exitfunc, (PyObject *)NULL);
Guido van Rossum59bff391992-09-03 20:28:00 +00001591 if (res == NULL) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001592 if (!PyErr_ExceptionMatches(PyExc_SystemExit)) {
1593 PySys_WriteStderr("Error in sys.exitfunc:\n");
1594 }
Guido van Rossum82598051997-03-05 00:20:32 +00001595 PyErr_Print();
Guido van Rossum59bff391992-09-03 20:28:00 +00001596 }
Guido van Rossum82598051997-03-05 00:20:32 +00001597 Py_DECREF(exitfunc);
Guido van Rossum59bff391992-09-03 20:28:00 +00001598 }
1599
Guido van Rossum0829c751998-02-28 04:31:39 +00001600 if (Py_FlushLine())
1601 PyErr_Clear();
Guido van Rossumcc283f51997-08-05 02:22:03 +00001602}
Guido van Rossum1662dd51994-09-07 14:38:28 +00001603
Guido van Rossumcc283f51997-08-05 02:22:03 +00001604static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001605call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00001606{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001607 while (nexitfuncs > 0)
1608 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001609
1610 fflush(stdout);
1611 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001612}
1613
1614void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001615Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001616{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001617 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001618
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001619 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001620}
1621
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001622static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001623initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001624{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001625#ifdef SIGPIPE
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001626 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001627#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00001628#ifdef SIGXFZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001629 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00001630#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001631#ifdef SIGXFSZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001632 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001633#endif
Guido van Rossum82598051997-03-05 00:20:32 +00001634 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001635}
1636
Guido van Rossum7433b121997-02-14 19:45:36 +00001637
1638/*
1639 * The file descriptor fd is considered ``interactive'' if either
1640 * a) isatty(fd) is TRUE, or
1641 * b) the -i flag was given, and the filename associated with
1642 * the descriptor is NULL or "<stdin>" or "???".
1643 */
1644int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001645Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00001646{
1647 if (isatty((int)fileno(fp)))
1648 return 1;
1649 if (!Py_InteractiveFlag)
1650 return 0;
1651 return (filename == NULL) ||
1652 (strcmp(filename, "<stdin>") == 0) ||
1653 (strcmp(filename, "???") == 0);
1654}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001655
1656
Tim Petersd08e3822003-04-17 15:24:21 +00001657#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001658#if defined(WIN32) && defined(_MSC_VER)
1659
1660/* Stack checking for Microsoft C */
1661
1662#include <malloc.h>
1663#include <excpt.h>
1664
Fred Drakee8de31c2000-08-31 05:38:39 +00001665/*
1666 * Return non-zero when we run out of memory on the stack; zero otherwise.
1667 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001668int
Fred Drake399739f2000-08-31 05:52:44 +00001669PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001670{
1671 __try {
Tim Peters92e4dd82002-10-05 01:47:34 +00001672 /* alloca throws a stack overflow exception if there's
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001673 not enough space left on the stack */
Tim Peters92e4dd82002-10-05 01:47:34 +00001674 alloca(PYOS_STACK_MARGIN * sizeof(void*));
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001675 return 0;
1676 } __except (EXCEPTION_EXECUTE_HANDLER) {
1677 /* just ignore all errors */
1678 }
1679 return 1;
1680}
1681
1682#endif /* WIN32 && _MSC_VER */
1683
1684/* Alternate implementations can be added here... */
1685
1686#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00001687
1688
1689/* Wrappers around sigaction() or signal(). */
1690
1691PyOS_sighandler_t
1692PyOS_getsig(int sig)
1693{
1694#ifdef HAVE_SIGACTION
1695 struct sigaction context;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001696 if (sigaction(sig, NULL, &context) == -1)
1697 return SIG_ERR;
Guido van Rossum6f256182000-09-16 16:32:19 +00001698 return context.sa_handler;
1699#else
1700 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00001701/* Special signal handling for the secure CRT in Visual Studio 2005 */
1702#if defined(_MSC_VER) && _MSC_VER >= 1400
1703 switch (sig) {
1704 /* Only these signals are valid */
1705 case SIGINT:
1706 case SIGILL:
1707 case SIGFPE:
1708 case SIGSEGV:
1709 case SIGTERM:
1710 case SIGBREAK:
1711 case SIGABRT:
1712 break;
1713 /* Don't call signal() with other values or it will assert */
1714 default:
1715 return SIG_ERR;
1716 }
1717#endif /* _MSC_VER && _MSC_VER >= 1400 */
Guido van Rossum6f256182000-09-16 16:32:19 +00001718 handler = signal(sig, SIG_IGN);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001719 if (handler != SIG_ERR)
1720 signal(sig, handler);
Guido van Rossum6f256182000-09-16 16:32:19 +00001721 return handler;
1722#endif
1723}
1724
1725PyOS_sighandler_t
1726PyOS_setsig(int sig, PyOS_sighandler_t handler)
1727{
1728#ifdef HAVE_SIGACTION
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001729 struct sigaction context, ocontext;
Guido van Rossum6f256182000-09-16 16:32:19 +00001730 context.sa_handler = handler;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001731 sigemptyset(&context.sa_mask);
1732 context.sa_flags = 0;
1733 if (sigaction(sig, &context, &ocontext) == -1)
1734 return SIG_ERR;
1735 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001736#else
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001737 PyOS_sighandler_t oldhandler;
1738 oldhandler = signal(sig, handler);
1739#ifdef HAVE_SIGINTERRUPT
1740 siginterrupt(sig, 1);
1741#endif
1742 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001743#endif
1744}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001745
1746/* Deprecated C API functions still provided for binary compatiblity */
1747
1748#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001749PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001750PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
1751{
1752 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
1753}
1754
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001755#undef PyParser_SimpleParseString
1756PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001757PyParser_SimpleParseString(const char *str, int start)
1758{
1759 return PyParser_SimpleParseStringFlags(str, start, 0);
1760}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001761
1762#undef PyRun_AnyFile
1763PyAPI_FUNC(int)
1764PyRun_AnyFile(FILE *fp, const char *name)
1765{
1766 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
1767}
1768
1769#undef PyRun_AnyFileEx
1770PyAPI_FUNC(int)
1771PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
1772{
1773 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
1774}
1775
1776#undef PyRun_AnyFileFlags
1777PyAPI_FUNC(int)
1778PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
1779{
1780 return PyRun_AnyFileExFlags(fp, name, 0, flags);
1781}
1782
1783#undef PyRun_File
1784PyAPI_FUNC(PyObject *)
1785PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
1786{
1787 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
1788}
1789
1790#undef PyRun_FileEx
1791PyAPI_FUNC(PyObject *)
1792PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
1793{
1794 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
1795}
1796
1797#undef PyRun_FileFlags
1798PyAPI_FUNC(PyObject *)
1799PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
1800 PyCompilerFlags *flags)
1801{
1802 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
1803}
1804
1805#undef PyRun_SimpleFile
1806PyAPI_FUNC(int)
1807PyRun_SimpleFile(FILE *f, const char *p)
1808{
1809 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
1810}
1811
1812#undef PyRun_SimpleFileEx
1813PyAPI_FUNC(int)
1814PyRun_SimpleFileEx(FILE *f, const char *p, int c)
1815{
1816 return PyRun_SimpleFileExFlags(f, p, c, NULL);
1817}
1818
1819
1820#undef PyRun_String
1821PyAPI_FUNC(PyObject *)
1822PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
1823{
1824 return PyRun_StringFlags(str, s, g, l, NULL);
1825}
1826
1827#undef PyRun_SimpleString
1828PyAPI_FUNC(int)
1829PyRun_SimpleString(const char *s)
1830{
1831 return PyRun_SimpleStringFlags(s, NULL);
1832}
1833
1834#undef Py_CompileString
1835PyAPI_FUNC(PyObject *)
1836Py_CompileString(const char *str, const char *p, int s)
1837{
1838 return Py_CompileStringFlags(str, p, s, NULL);
1839}
1840
1841#undef PyRun_InteractiveOne
1842PyAPI_FUNC(int)
1843PyRun_InteractiveOne(FILE *f, const char *p)
1844{
1845 return PyRun_InteractiveOneFlags(f, p, NULL);
1846}
1847
1848#undef PyRun_InteractiveLoop
1849PyAPI_FUNC(int)
1850PyRun_InteractiveLoop(FILE *f, const char *p)
1851{
1852 return PyRun_InteractiveLoopFlags(f, p, NULL);
1853}
1854
1855#ifdef __cplusplus
1856}
1857#endif
1858