blob: ad6c44f2da02a37bff45e1cdc7a516adb753d41b [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();
276 if(sys_isatty && PyObject_IsTrue(sys_isatty)) {
277 if (!PyFile_SetEncoding(sys_stream, codeset))
278 Py_FatalError("Cannot set codeset of stdin");
279 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000280 Py_XDECREF(sys_isatty);
281
282 sys_stream = PySys_GetObject("stdout");
283 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
284 if (!sys_isatty)
285 PyErr_Clear();
286 if(sys_isatty && PyObject_IsTrue(sys_isatty)) {
287 if (!PyFile_SetEncoding(sys_stream, codeset))
288 Py_FatalError("Cannot set codeset of stdout");
289 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000290 Py_XDECREF(sys_isatty);
291
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000292 sys_stream = PySys_GetObject("stderr");
293 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
294 if (!sys_isatty)
295 PyErr_Clear();
296 if(sys_isatty && PyObject_IsTrue(sys_isatty)) {
297 if (!PyFile_SetEncoding(sys_stream, codeset))
298 Py_FatalError("Cannot set codeset of stderr");
299 }
300 Py_XDECREF(sys_isatty);
301
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000302 if (!Py_FileSystemDefaultEncoding)
303 Py_FileSystemDefaultEncoding = codeset;
304 else
305 free(codeset);
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000306 }
307#endif
Guido van Rossum25ce5661997-08-02 03:10:38 +0000308}
309
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000310void
311Py_Initialize(void)
312{
313 Py_InitializeEx(1);
314}
315
316
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000317#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000318extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000319#endif
320
Guido van Rossum25ce5661997-08-02 03:10:38 +0000321/* Undo the effect of Py_Initialize().
322
323 Beware: if multiple interpreter and/or thread states exist, these
324 are not wiped out; only the current thread and interpreter state
325 are deleted. But since everything else is deleted, those other
326 interpreter and thread states should no longer be used.
327
328 (XXX We should do better, e.g. wipe out all interpreters and
329 threads.)
330
331 Locking: as above.
332
333*/
334
335void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000336Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000337{
338 PyInterpreterState *interp;
339 PyThreadState *tstate;
340
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000341 if (!initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000342 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000343
Tim Peters384fd102001-01-21 03:40:37 +0000344 /* The interpreter is still entirely intact at this point, and the
345 * exit funcs may be relying on that. In particular, if some thread
346 * or exit func is still waiting to do an import, the import machinery
347 * expects Py_IsInitialized() to return true. So don't say the
348 * interpreter is uninitialized until after the exit funcs have run.
349 * Note that Threading.py uses an exit func to do a join on all the
350 * threads created thru it, so this also protects pending imports in
351 * the threads created via Threading.
352 */
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000353 call_sys_exitfunc();
Tim Peters384fd102001-01-21 03:40:37 +0000354 initialized = 0;
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000355
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000356 /* Get current thread state and interpreter pointer */
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000357 tstate = PyThreadState_GET();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000358 interp = tstate->interp;
359
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000360 /* Disable signal handling */
361 PyOS_FiniInterrupts();
362
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000363 /* drop module references we saved */
Mark Hammondedd07732003-07-15 23:03:55 +0000364 Py_XDECREF(warnings_module);
365 warnings_module = NULL;
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000366
Guido van Rossume13ddc92003-04-17 17:29:22 +0000367 /* Collect garbage. This may call finalizers; it's nice to call these
Tim Peters1d7323e2003-12-01 21:35:27 +0000368 * before all modules are destroyed.
369 * XXX If a __del__ or weakref callback is triggered here, and tries to
370 * XXX import a module, bad things can happen, because Python no
371 * XXX longer believes it's initialized.
372 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
373 * XXX is easy to provoke that way. I've also seen, e.g.,
374 * XXX Exception exceptions.ImportError: 'No module named sha'
375 * XXX in <function callback at 0x008F5718> ignored
376 * XXX but I'm unclear on exactly how that one happens. In any case,
377 * XXX I haven't seen a real-life report of either of these.
Neal Norwitz9589ee22006-03-04 19:01:22 +0000378 */
Guido van Rossume13ddc92003-04-17 17:29:22 +0000379 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000380#ifdef COUNT_ALLOCS
381 /* With COUNT_ALLOCS, it helps to run GC multiple times:
382 each collection might release some types from the type
383 list, so they become garbage. */
384 while (PyGC_Collect() > 0)
385 /* nothing */;
386#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000387
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000388 /* Destroy all modules */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000389 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000390
Guido van Rossume13ddc92003-04-17 17:29:22 +0000391 /* Collect final garbage. This disposes of cycles created by
Tim Peters1d7323e2003-12-01 21:35:27 +0000392 * new-style class definitions, for example.
393 * XXX This is disabled because it caused too many problems. If
394 * XXX a __del__ or weakref callback triggers here, Python code has
395 * XXX a hard time running, because even the sys module has been
396 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
397 * XXX One symptom is a sequence of information-free messages
398 * XXX coming from threads (if a __del__ or callback is invoked,
399 * XXX other threads can execute too, and any exception they encounter
400 * XXX triggers a comedy of errors as subsystem after subsystem
401 * XXX fails to find what it *expects* to find in sys to help report
402 * XXX the exception and consequent unexpected failures). I've also
403 * XXX seen segfaults then, after adding print statements to the
404 * XXX Python code getting called.
405 */
406#if 0
Guido van Rossume13ddc92003-04-17 17:29:22 +0000407 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000408#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000409
Guido van Rossum1707aad1997-12-08 23:43:45 +0000410 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
411 _PyImport_Fini();
412
413 /* Debugging stuff */
414#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000415 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000416#endif
417
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000418 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000419
Tim Peters9cf25ce2003-04-17 15:21:01 +0000420#ifdef Py_TRACE_REFS
421 /* Display all objects still alive -- this can invoke arbitrary
422 * __repr__ overrides, so requires a mostly-intact interpreter.
423 * Alas, a lot of stuff may still be alive now that will be cleaned
424 * up later.
425 */
Tim Peters269b2a62003-04-17 19:52:29 +0000426 if (Py_GETENV("PYTHONDUMPREFS"))
Tim Peters9cf25ce2003-04-17 15:21:01 +0000427 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000428#endif /* Py_TRACE_REFS */
429
Mark Hammond6cb90292003-04-22 11:18:00 +0000430 /* Cleanup auto-thread-state */
431#ifdef WITH_THREAD
432 _PyGILState_Fini();
433#endif /* WITH_THREAD */
434
Guido van Rossumd922fa42003-04-15 14:10:09 +0000435 /* Clear interpreter state */
Barry Warsawf242aa02000-05-25 23:09:49 +0000436 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000437
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000438 /* Now we decref the exception classes. After this point nothing
439 can raise an exception. That's okay, because each Fini() method
440 below has been checked to make sure no exceptions are ever
441 raised.
442 */
443
444 _PyExc_Fini();
445
Guido van Rossumd922fa42003-04-15 14:10:09 +0000446 /* Delete current thread */
Barry Warsawf242aa02000-05-25 23:09:49 +0000447 PyThreadState_Swap(NULL);
448 PyInterpreterState_Delete(interp);
449
Guido van Rossumd922fa42003-04-15 14:10:09 +0000450 /* Sundry finalizers */
Guido van Rossumcc283f51997-08-05 02:22:03 +0000451 PyMethod_Fini();
452 PyFrame_Fini();
453 PyCFunction_Fini();
454 PyTuple_Fini();
Raymond Hettingerfb09f0e2004-10-07 03:58:07 +0000455 PyList_Fini();
Raymond Hettingerd7946662005-08-01 21:39:29 +0000456 PySet_Fini();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000457 PyString_Fini();
Guido van Rossumddefaf32007-01-14 03:31:43 +0000458 PyLong_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000459 PyFloat_Fini();
460
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000461#ifdef Py_USING_UNICODE
462 /* Cleanup Unicode implementation */
463 _PyUnicode_Fini();
464#endif
465
Guido van Rossumcc283f51997-08-05 02:22:03 +0000466 /* XXX Still allocated:
467 - various static ad-hoc pointers to interned strings
468 - int and float free list blocks
469 - whatever various modules and libraries allocate
470 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000471
472 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000473
Tim Peters269b2a62003-04-17 19:52:29 +0000474#ifdef Py_TRACE_REFS
475 /* Display addresses (& refcnts) of all objects still alive.
476 * An address can be used to find the repr of the object, printed
477 * above by _Py_PrintReferences.
478 */
479 if (Py_GETENV("PYTHONDUMPREFS"))
480 _Py_PrintReferenceAddresses(stderr);
481#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000482#ifdef PYMALLOC_DEBUG
483 if (Py_GETENV("PYTHONMALLOCSTATS"))
484 _PyObject_DebugMallocStats();
485#endif
486
Guido van Rossumcc283f51997-08-05 02:22:03 +0000487 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000488}
489
490/* Create and initialize a new interpreter and thread, and return the
491 new thread. This requires that Py_Initialize() has been called
492 first.
493
494 Unsuccessful initialization yields a NULL pointer. Note that *no*
495 exception information is available even in this case -- the
496 exception information is held in the thread, and there is no
497 thread.
498
499 Locking: as above.
500
501*/
502
503PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000504Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000505{
506 PyInterpreterState *interp;
507 PyThreadState *tstate, *save_tstate;
508 PyObject *bimod, *sysmod;
509
510 if (!initialized)
511 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
512
513 interp = PyInterpreterState_New();
514 if (interp == NULL)
515 return NULL;
516
517 tstate = PyThreadState_New(interp);
518 if (tstate == NULL) {
519 PyInterpreterState_Delete(interp);
520 return NULL;
521 }
522
523 save_tstate = PyThreadState_Swap(tstate);
524
525 /* XXX The following is lax in error checking */
526
527 interp->modules = PyDict_New();
528
529 bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
530 if (bimod != NULL) {
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000531 interp->builtins = PyModule_GetDict(bimod);
Thomas Wouters89f507f2006-12-13 04:49:30 +0000532 if (interp->builtins == NULL)
533 goto handle_error;
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000534 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000535 }
536 sysmod = _PyImport_FindExtension("sys", "sys");
537 if (bimod != NULL && sysmod != NULL) {
538 interp->sysdict = PyModule_GetDict(sysmod);
Thomas Wouters89f507f2006-12-13 04:49:30 +0000539 if (interp->sysdict == NULL)
540 goto handle_error;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000541 Py_INCREF(interp->sysdict);
542 PySys_SetPath(Py_GetPath());
543 PyDict_SetItemString(interp->sysdict, "modules",
544 interp->modules);
Martin v. Löwisd7ceb222003-01-22 09:00:38 +0000545 _PyImportHooks_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000546 initmain();
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000547 if (!Py_NoSiteFlag)
548 initsite();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000549 }
550
551 if (!PyErr_Occurred())
552 return tstate;
553
Thomas Wouters89f507f2006-12-13 04:49:30 +0000554handle_error:
Guido van Rossum25ce5661997-08-02 03:10:38 +0000555 /* Oops, it didn't work. Undo it all. */
556
557 PyErr_Print();
558 PyThreadState_Clear(tstate);
559 PyThreadState_Swap(save_tstate);
560 PyThreadState_Delete(tstate);
561 PyInterpreterState_Delete(interp);
562
563 return NULL;
564}
565
566/* Delete an interpreter and its last thread. This requires that the
567 given thread state is current, that the thread has no remaining
568 frames, and that it is its interpreter's only remaining thread.
569 It is a fatal error to violate these constraints.
570
571 (Py_Finalize() doesn't have these constraints -- it zaps
572 everything, regardless.)
573
574 Locking: as above.
575
576*/
577
578void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000579Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000580{
581 PyInterpreterState *interp = tstate->interp;
582
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000583 if (tstate != PyThreadState_GET())
Guido van Rossum25ce5661997-08-02 03:10:38 +0000584 Py_FatalError("Py_EndInterpreter: thread is not current");
585 if (tstate->frame != NULL)
586 Py_FatalError("Py_EndInterpreter: thread still has a frame");
587 if (tstate != interp->tstate_head || tstate->next != NULL)
588 Py_FatalError("Py_EndInterpreter: not the last thread");
589
590 PyImport_Cleanup();
591 PyInterpreterState_Clear(interp);
592 PyThreadState_Swap(NULL);
593 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000594}
595
596static char *progname = "python";
597
598void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000599Py_SetProgramName(char *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000600{
601 if (pn && *pn)
602 progname = pn;
603}
604
605char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000606Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000607{
608 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000609}
610
Guido van Rossuma61691e1998-02-06 22:27:24 +0000611static char *default_home = NULL;
612
613void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000614Py_SetPythonHome(char *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000615{
616 default_home = home;
617}
618
619char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000620Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000621{
622 char *home = default_home;
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000623 if (home == NULL && !Py_IgnoreEnvironmentFlag)
624 home = Py_GETENV("PYTHONHOME");
Guido van Rossuma61691e1998-02-06 22:27:24 +0000625 return home;
626}
627
Guido van Rossum6135a871995-01-09 17:53:26 +0000628/* Create __main__ module */
629
630static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000631initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000632{
Guido van Rossum82598051997-03-05 00:20:32 +0000633 PyObject *m, *d;
634 m = PyImport_AddModule("__main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000635 if (m == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000636 Py_FatalError("can't create __main__ module");
637 d = PyModule_GetDict(m);
638 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
Guido van Rossum858cb731997-11-19 16:15:37 +0000639 PyObject *bimod = PyImport_ImportModule("__builtin__");
640 if (bimod == NULL ||
641 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
Guido van Rossum82598051997-03-05 00:20:32 +0000642 Py_FatalError("can't add __builtins__ to __main__");
Barry Warsaw3d05b1a1999-01-29 21:30:22 +0000643 Py_DECREF(bimod);
Guido van Rossum6135a871995-01-09 17:53:26 +0000644 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000645}
646
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000647/* Import the site module (not into __main__ though) */
648
649static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000650initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000651{
652 PyObject *m, *f;
653 m = PyImport_ImportModule("site");
654 if (m == NULL) {
655 f = PySys_GetObject("stderr");
656 if (Py_VerboseFlag) {
657 PyFile_WriteString(
658 "'import site' failed; traceback:\n", f);
659 PyErr_Print();
660 }
661 else {
662 PyFile_WriteString(
663 "'import site' failed; use -v for traceback\n", f);
664 PyErr_Clear();
665 }
666 }
667 else {
668 Py_DECREF(m);
669 }
670}
671
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000672/* Parse input from a file and execute it */
673
674int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +0000675PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000676 PyCompilerFlags *flags)
677{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000678 if (filename == NULL)
679 filename = "???";
Guido van Rossum0df002c2000-08-27 19:21:52 +0000680 if (Py_FdIsInteractive(fp, filename)) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000681 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
Guido van Rossum0df002c2000-08-27 19:21:52 +0000682 if (closeit)
683 fclose(fp);
684 return err;
685 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000686 else
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000687 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000688}
689
690int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000691PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000692{
Guido van Rossum82598051997-03-05 00:20:32 +0000693 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000694 int ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000695 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000696
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000697 if (flags == NULL) {
698 flags = &local_flags;
Tim Peters5ba58662001-07-16 02:29:45 +0000699 local_flags.cf_flags = 0;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000700 }
Guido van Rossum82598051997-03-05 00:20:32 +0000701 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000702 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000703 PySys_SetObject("ps1", v = PyString_FromString(">>> "));
704 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000705 }
Guido van Rossum82598051997-03-05 00:20:32 +0000706 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000707 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000708 PySys_SetObject("ps2", v = PyString_FromString("... "));
709 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000710 }
711 for (;;) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000712 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000713 PRINT_TOTAL_REFS();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000714 if (ret == E_EOF)
715 return 0;
716 /*
717 if (ret == E_NOMEM)
718 return -1;
719 */
720 }
721}
722
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000723/* compute parser flags based on compiler flags */
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000724#define PARSER_FLAGS(flags) \
Thomas Wouters34aa7ba2006-02-28 19:02:24 +0000725 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
Guido van Rossum45aecf42006-03-15 04:58:47 +0000726 PyPARSE_DONT_IMPLY_DEDENT : 0)) : 0)
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000727
Thomas Wouters89f507f2006-12-13 04:49:30 +0000728#if 0
729/* Keep an example of flags with future keyword support. */
730#define PARSER_FLAGS(flags) \
731 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
732 PyPARSE_DONT_IMPLY_DEDENT : 0) \
733 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
734 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
735#endif
736
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000737int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000738PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000739{
Guido van Rossum82598051997-03-05 00:20:32 +0000740 PyObject *m, *d, *v, *w;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000741 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +0000742 PyArena *arena;
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000743 char *ps1 = "", *ps2 = "";
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000744 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +0000745
Guido van Rossum82598051997-03-05 00:20:32 +0000746 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000747 if (v != NULL) {
748 v = PyObject_Str(v);
749 if (v == NULL)
750 PyErr_Clear();
751 else if (PyString_Check(v))
752 ps1 = PyString_AsString(v);
753 }
Guido van Rossum82598051997-03-05 00:20:32 +0000754 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000755 if (w != NULL) {
756 w = PyObject_Str(w);
757 if (w == NULL)
758 PyErr_Clear();
759 else if (PyString_Check(w))
760 ps2 = PyString_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000761 }
Neal Norwitz9589ee22006-03-04 19:01:22 +0000762 arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000763 if (arena == NULL) {
764 Py_XDECREF(v);
765 Py_XDECREF(w);
766 return -1;
767 }
Thomas Wouters4d70c3d2006-06-08 14:42:34 +0000768 mod = PyParser_ASTFromFile(fp, filename,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000769 Py_single_input, ps1, ps2,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000770 flags, &errcode, arena);
Guido van Rossum82598051997-03-05 00:20:32 +0000771 Py_XDECREF(v);
772 Py_XDECREF(w);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000773 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000774 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000775 if (errcode == E_EOF) {
776 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000777 return E_EOF;
778 }
Guido van Rossum82598051997-03-05 00:20:32 +0000779 PyErr_Print();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000780 return -1;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000781 }
Guido van Rossum82598051997-03-05 00:20:32 +0000782 m = PyImport_AddModule("__main__");
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000783 if (m == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000784 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000785 return -1;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000786 }
Guido van Rossum82598051997-03-05 00:20:32 +0000787 d = PyModule_GetDict(m);
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000788 v = run_mod(mod, filename, d, d, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +0000789 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000790 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000791 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000792 return -1;
793 }
Guido van Rossum82598051997-03-05 00:20:32 +0000794 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000795 if (Py_FlushLine())
796 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000797 return 0;
798}
799
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000800/* Check whether a file maybe a pyc file: Look at the extension,
801 the file type, and, if we may close it, at the first few bytes. */
802
803static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000804maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000805{
806 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
807 return 1;
808
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000809 /* Only look into the file if we are allowed to close it, since
810 it then should also be seekable. */
811 if (closeit) {
812 /* Read only two bytes of the magic. If the file was opened in
813 text mode, the bytes 3 and 4 of the magic (\r\n) might not
814 be read as they are on disk. */
815 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
816 unsigned char buf[2];
Tim Peters3e876562001-02-11 04:35:39 +0000817 /* Mess: In case of -x, the stream is NOT at its start now,
818 and ungetc() was used to push back the first newline,
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000819 which makes the current stream position formally undefined,
820 and a x-platform nightmare.
821 Unfortunately, we have no direct way to know whether -x
822 was specified. So we use a terrible hack: if the current
823 stream position is not 0, we assume -x was specified, and
824 give up. Bug 132850 on SourceForge spells out the
825 hopelessness of trying anything else (fseek and ftell
826 don't work predictably x-platform for text-mode files).
Tim Peters3e876562001-02-11 04:35:39 +0000827 */
Tim Peters3e876562001-02-11 04:35:39 +0000828 int ispyc = 0;
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000829 if (ftell(fp) == 0) {
830 if (fread(buf, 1, 2, fp) == 2 &&
Tim Petersd08e3822003-04-17 15:24:21 +0000831 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000832 ispyc = 1;
833 rewind(fp);
834 }
Tim Peters3e876562001-02-11 04:35:39 +0000835 return ispyc;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000836 }
837 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +0000838}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000839
Guido van Rossum0df002c2000-08-27 19:21:52 +0000840int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000841PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000842 PyCompilerFlags *flags)
843{
Guido van Rossum82598051997-03-05 00:20:32 +0000844 PyObject *m, *d, *v;
Martin v. Löwis95292d62002-12-11 14:04:59 +0000845 const char *ext;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000846
Guido van Rossum82598051997-03-05 00:20:32 +0000847 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000848 if (m == NULL)
849 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000850 d = PyModule_GetDict(m);
Fred Drake8ed02042002-10-17 21:24:58 +0000851 if (PyDict_GetItemString(d, "__file__") == NULL) {
852 PyObject *f = PyString_FromString(filename);
853 if (f == NULL)
854 return -1;
855 if (PyDict_SetItemString(d, "__file__", f) < 0) {
856 Py_DECREF(f);
857 return -1;
858 }
859 Py_DECREF(f);
860 }
Guido van Rossumfdef2711994-09-14 13:31:04 +0000861 ext = filename + strlen(filename) - 4;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000862 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000863 /* Try to run a pyc file. First, re-open in binary */
Guido van Rossum0df002c2000-08-27 19:21:52 +0000864 if (closeit)
865 fclose(fp);
Fred Drake8ed02042002-10-17 21:24:58 +0000866 if ((fp = fopen(filename, "rb")) == NULL) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000867 fprintf(stderr, "python: Can't reopen .pyc file\n");
868 return -1;
869 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000870 /* Turn on optimization if a .pyo file is given */
871 if (strcmp(ext, ".pyo") == 0)
872 Py_OptimizeFlag = 1;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000873 v = run_pyc_file(fp, filename, d, d, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000874 } else {
Tim Petersd08e3822003-04-17 15:24:21 +0000875 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000876 closeit, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000877 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000878 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000879 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000880 return -1;
881 }
Guido van Rossum82598051997-03-05 00:20:32 +0000882 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000883 if (Py_FlushLine())
884 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000885 return 0;
886}
887
888int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000889PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +0000890{
Guido van Rossum82598051997-03-05 00:20:32 +0000891 PyObject *m, *d, *v;
892 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000893 if (m == NULL)
894 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000895 d = PyModule_GetDict(m);
Guido van Rossum393661d2001-08-31 17:40:15 +0000896 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000897 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000898 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000899 return -1;
900 }
Guido van Rossum82598051997-03-05 00:20:32 +0000901 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000902 if (Py_FlushLine())
903 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000904 return 0;
905}
906
Barry Warsaw035574d1997-08-29 22:07:17 +0000907static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000908parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
909 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +0000910{
911 long hold;
912 PyObject *v;
913
914 /* old style errors */
915 if (PyTuple_Check(err))
Neal Norwitz78293352002-04-01 01:41:20 +0000916 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
Neal Norwitz9589ee22006-03-04 19:01:22 +0000917 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +0000918
919 /* new style errors. `err' is an instance */
920
921 if (! (v = PyObject_GetAttrString(err, "msg")))
922 goto finally;
923 *message = v;
924
925 if (!(v = PyObject_GetAttrString(err, "filename")))
926 goto finally;
927 if (v == Py_None)
928 *filename = NULL;
929 else if (! (*filename = PyString_AsString(v)))
930 goto finally;
931
932 Py_DECREF(v);
933 if (!(v = PyObject_GetAttrString(err, "lineno")))
934 goto finally;
935 hold = PyInt_AsLong(v);
936 Py_DECREF(v);
937 v = NULL;
938 if (hold < 0 && PyErr_Occurred())
939 goto finally;
940 *lineno = (int)hold;
941
942 if (!(v = PyObject_GetAttrString(err, "offset")))
943 goto finally;
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000944 if (v == Py_None) {
945 *offset = -1;
946 Py_DECREF(v);
947 v = NULL;
948 } else {
949 hold = PyInt_AsLong(v);
950 Py_DECREF(v);
951 v = NULL;
952 if (hold < 0 && PyErr_Occurred())
953 goto finally;
954 *offset = (int)hold;
955 }
Barry Warsaw035574d1997-08-29 22:07:17 +0000956
957 if (!(v = PyObject_GetAttrString(err, "text")))
958 goto finally;
959 if (v == Py_None)
960 *text = NULL;
961 else if (! (*text = PyString_AsString(v)))
962 goto finally;
963 Py_DECREF(v);
964 return 1;
965
966finally:
967 Py_XDECREF(v);
968 return 0;
969}
970
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000971void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000972PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000973{
Guido van Rossuma61691e1998-02-06 22:27:24 +0000974 PyErr_PrintEx(1);
975}
976
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000977static void
Martin v. Löwis95292d62002-12-11 14:04:59 +0000978print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000979{
980 char *nl;
981 if (offset >= 0) {
982 if (offset > 0 && offset == (int)strlen(text))
983 offset--;
984 for (;;) {
985 nl = strchr(text, '\n');
986 if (nl == NULL || nl-text >= offset)
987 break;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000988 offset -= (int)(nl+1-text);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000989 text = nl+1;
990 }
991 while (*text == ' ' || *text == '\t') {
992 text++;
993 offset--;
994 }
995 }
996 PyFile_WriteString(" ", f);
997 PyFile_WriteString(text, f);
998 if (*text == '\0' || text[strlen(text)-1] != '\n')
999 PyFile_WriteString("\n", f);
1000 if (offset == -1)
1001 return;
1002 PyFile_WriteString(" ", f);
1003 offset--;
1004 while (offset > 0) {
1005 PyFile_WriteString(" ", f);
1006 offset--;
1007 }
1008 PyFile_WriteString("^\n", f);
1009}
1010
Guido van Rossum66e8e862001-03-23 17:54:43 +00001011static void
1012handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001013{
Neal Norwitz9589ee22006-03-04 19:01:22 +00001014 PyObject *exception, *value, *tb;
1015 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001016
Guido van Rossum66e8e862001-03-23 17:54:43 +00001017 PyErr_Fetch(&exception, &value, &tb);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001018 if (Py_FlushLine())
1019 PyErr_Clear();
1020 fflush(stdout);
1021 if (value == NULL || value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001022 goto done;
Brett Cannonbf364092006-03-01 04:25:17 +00001023 if (PyExceptionInstance_Check(value)) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001024 /* The error code should be in the `code' attribute. */
1025 PyObject *code = PyObject_GetAttrString(value, "code");
1026 if (code) {
1027 Py_DECREF(value);
1028 value = code;
1029 if (value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001030 goto done;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001031 }
1032 /* If we failed to dig out the 'code' attribute,
1033 just let the else clause below print the error. */
1034 }
1035 if (PyInt_Check(value))
Tim Peterscf615b52003-04-19 18:47:02 +00001036 exitcode = (int)PyInt_AsLong(value);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001037 else {
1038 PyObject_Print(value, stderr, Py_PRINT_RAW);
1039 PySys_WriteStderr("\n");
Tim Peterscf615b52003-04-19 18:47:02 +00001040 exitcode = 1;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001041 }
Tim Peterscf615b52003-04-19 18:47:02 +00001042 done:
Neal Norwitz9589ee22006-03-04 19:01:22 +00001043 /* Restore and clear the exception info, in order to properly decref
1044 * the exception, value, and traceback. If we just exit instead,
1045 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1046 * some finalizers from running.
1047 */
Tim Peterscf615b52003-04-19 18:47:02 +00001048 PyErr_Restore(exception, value, tb);
1049 PyErr_Clear();
1050 Py_Exit(exitcode);
1051 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001052}
1053
1054void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001055PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001056{
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001057 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001058
1059 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1060 handle_system_exit();
1061 }
Guido van Rossum82598051997-03-05 00:20:32 +00001062 PyErr_Fetch(&exception, &v, &tb);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001063 if (exception == NULL)
1064 return;
Barry Warsaw035574d1997-08-29 22:07:17 +00001065 PyErr_NormalizeException(&exception, &v, &tb);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001066 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +00001067 return;
Guido van Rossum9d785502006-03-07 18:31:44 +00001068 /* Now we know v != NULL too */
Guido van Rossuma61691e1998-02-06 22:27:24 +00001069 if (set_sys_last_vars) {
1070 PySys_SetObject("last_type", exception);
1071 PySys_SetObject("last_value", v);
1072 PySys_SetObject("last_traceback", tb);
1073 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001074 hook = PySys_GetObject("excepthook");
1075 if (hook) {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00001076 PyObject *args = PyTuple_Pack(3,
Guido van Rossum9d785502006-03-07 18:31:44 +00001077 exception, v, tb ? tb : Py_None);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001078 PyObject *result = PyEval_CallObject(hook, args);
1079 if (result == NULL) {
1080 PyObject *exception2, *v2, *tb2;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001081 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1082 handle_system_exit();
1083 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001084 PyErr_Fetch(&exception2, &v2, &tb2);
1085 PyErr_NormalizeException(&exception2, &v2, &tb2);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001086 /* It should not be possible for exception2 or v2
1087 to be NULL. However PyErr_Display() can't
1088 tolerate NULLs, so just be safe. */
1089 if (exception2 == NULL) {
1090 exception2 = Py_None;
1091 Py_INCREF(exception2);
1092 }
1093 if (v2 == NULL) {
1094 v2 = Py_None;
1095 Py_INCREF(v2);
1096 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001097 if (Py_FlushLine())
1098 PyErr_Clear();
1099 fflush(stdout);
1100 PySys_WriteStderr("Error in sys.excepthook:\n");
1101 PyErr_Display(exception2, v2, tb2);
1102 PySys_WriteStderr("\nOriginal exception was:\n");
1103 PyErr_Display(exception, v, tb);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001104 Py_DECREF(exception2);
1105 Py_DECREF(v2);
Jeremy Hylton07028582001-12-07 15:35:35 +00001106 Py_XDECREF(tb2);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001107 }
1108 Py_XDECREF(result);
1109 Py_XDECREF(args);
1110 } else {
1111 PySys_WriteStderr("sys.excepthook is missing\n");
1112 PyErr_Display(exception, v, tb);
1113 }
1114 Py_XDECREF(exception);
1115 Py_XDECREF(v);
1116 Py_XDECREF(tb);
1117}
1118
Thomas Wouters477c8d52006-05-27 19:21:47 +00001119void
1120PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001121{
1122 int err = 0;
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001123 PyObject *f = PySys_GetObject("stderr");
Armin Rigo5d2c6832004-03-22 20:16:58 +00001124 Py_INCREF(value);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001125 if (f == NULL)
1126 fprintf(stderr, "lost sys.stderr\n");
1127 else {
Guido van Rossum0829c751998-02-28 04:31:39 +00001128 if (Py_FlushLine())
1129 PyErr_Clear();
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001130 fflush(stdout);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001131 if (tb && tb != Py_None)
1132 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +00001133 if (err == 0 &&
Armin Rigo5d2c6832004-03-22 20:16:58 +00001134 PyObject_HasAttrString(value, "print_file_and_line"))
Barry Warsaw36b8f941997-08-26 18:09:48 +00001135 {
Guido van Rossum82598051997-03-05 00:20:32 +00001136 PyObject *message;
Martin v. Löwis95292d62002-12-11 14:04:59 +00001137 const char *filename, *text;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001138 int lineno, offset;
Armin Rigo5d2c6832004-03-22 20:16:58 +00001139 if (!parse_syntax_error(value, &message, &filename,
Barry Warsaw035574d1997-08-29 22:07:17 +00001140 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +00001141 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001142 else {
1143 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +00001144 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001145 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +00001146 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001147 else
Guido van Rossum82598051997-03-05 00:20:32 +00001148 PyFile_WriteString(filename, f);
1149 PyFile_WriteString("\", line ", f);
Jeremy Hylton518ab1c2001-11-28 20:42:20 +00001150 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +00001151 PyFile_WriteString(buf, f);
1152 PyFile_WriteString("\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001153 if (text != NULL)
1154 print_error_text(f, offset, text);
Armin Rigo5d2c6832004-03-22 20:16:58 +00001155 Py_DECREF(value);
1156 value = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001157 /* Can't be bothered to check all those
1158 PyFile_WriteString() calls */
1159 if (PyErr_Occurred())
1160 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001161 }
1162 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001163 if (err) {
1164 /* Don't do anything else */
1165 }
Brett Cannonbf364092006-03-01 04:25:17 +00001166 else if (PyExceptionClass_Check(exception)) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001167 PyObject* moduleName;
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001168 char* className = PyExceptionClass_Name(exception);
1169 if (className != NULL) {
1170 char *dot = strrchr(className, '.');
1171 if (dot != NULL)
1172 className = dot+1;
1173 }
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001174
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001175 moduleName = PyObject_GetAttrString(exception, "__module__");
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001176 if (moduleName == NULL)
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001177 err = PyFile_WriteString("<unknown>", f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001178 else {
1179 char* modstr = PyString_AsString(moduleName);
Tim Petersd08e3822003-04-17 15:24:21 +00001180 if (modstr && strcmp(modstr, "exceptions"))
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001181 {
1182 err = PyFile_WriteString(modstr, f);
1183 err += PyFile_WriteString(".", f);
1184 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001185 Py_DECREF(moduleName);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001186 }
1187 if (err == 0) {
1188 if (className == NULL)
1189 err = PyFile_WriteString("<unknown>", f);
1190 else
Brett Cannonbf364092006-03-01 04:25:17 +00001191 err = PyFile_WriteString(className, f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001192 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001193 }
1194 else
1195 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
Brett Cannon2e63b732006-03-02 18:34:57 +00001196 if (err == 0 && (value != Py_None)) {
1197 PyObject *s = PyObject_Str(value);
1198 /* only print colon if the str() of the
1199 object is not the empty string
1200 */
1201 if (s == NULL)
1202 err = -1;
1203 else if (!PyString_Check(s) ||
1204 PyString_GET_SIZE(s) != 0)
1205 err = PyFile_WriteString(": ", f);
1206 if (err == 0)
1207 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1208 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +00001209 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001210 if (err == 0)
1211 err = PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001212 }
Armin Rigo5d2c6832004-03-22 20:16:58 +00001213 Py_DECREF(value);
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001214 /* If an error happened here, don't show it.
1215 XXX This is wrong, but too many callers rely on this behavior. */
1216 if (err != 0)
1217 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001218}
1219
Guido van Rossum82598051997-03-05 00:20:32 +00001220PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001221PyRun_StringFlags(const char *str, int start, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001222 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001223{
Neal Norwitze92fba02006-03-04 18:52:26 +00001224 PyObject *ret = NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001225 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001226 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001227 if (arena == NULL)
1228 return NULL;
1229
1230 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
Neal Norwitze92fba02006-03-04 18:52:26 +00001231 if (mod != NULL)
1232 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001233 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001234 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001235}
1236
1237PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001238PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001239 PyObject *locals, int closeit, PyCompilerFlags *flags)
1240{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001241 PyObject *ret;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001242 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001243 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001244 if (arena == NULL)
1245 return NULL;
1246
1247 mod = PyParser_ASTFromFile(fp, filename, start, 0, 0,
1248 flags, NULL, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001249 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001250 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001251 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001252 }
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001253 if (closeit)
1254 fclose(fp);
Neal Norwitze92fba02006-03-04 18:52:26 +00001255 ret = run_mod(mod, filename, globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001256 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001257 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001258}
1259
Guido van Rossum82598051997-03-05 00:20:32 +00001260static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001261run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001262 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001263{
Guido van Rossum82598051997-03-05 00:20:32 +00001264 PyCodeObject *co;
1265 PyObject *v;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001266 co = PyAST_Compile(mod, filename, flags, arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001267 if (co == NULL)
1268 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +00001269 v = PyEval_EvalCode(co, globals, locals);
1270 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001271 return v;
1272}
1273
Guido van Rossum82598051997-03-05 00:20:32 +00001274static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001275run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001276 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001277{
Guido van Rossum82598051997-03-05 00:20:32 +00001278 PyCodeObject *co;
1279 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001280 long magic;
Fred Drakee8de31c2000-08-31 05:38:39 +00001281 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001282
Guido van Rossum82598051997-03-05 00:20:32 +00001283 magic = PyMarshal_ReadLongFromFile(fp);
1284 if (magic != PyImport_GetMagicNumber()) {
1285 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001286 "Bad magic number in .pyc file");
1287 return NULL;
1288 }
Guido van Rossum82598051997-03-05 00:20:32 +00001289 (void) PyMarshal_ReadLongFromFile(fp);
Tim Petersd9b9ac82001-01-28 00:27:39 +00001290 v = PyMarshal_ReadLastObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001291 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +00001292 if (v == NULL || !PyCode_Check(v)) {
1293 Py_XDECREF(v);
1294 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001295 "Bad code object in .pyc file");
1296 return NULL;
1297 }
Guido van Rossum82598051997-03-05 00:20:32 +00001298 co = (PyCodeObject *)v;
1299 v = PyEval_EvalCode(co, globals, locals);
Jeremy Hyltonb857ba22001-08-10 21:41:33 +00001300 if (v && flags)
1301 flags->cf_flags |= (co->co_flags & PyCF_MASK);
Guido van Rossum82598051997-03-05 00:20:32 +00001302 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001303 return v;
1304}
1305
Guido van Rossum82598051997-03-05 00:20:32 +00001306PyObject *
Tim Petersd08e3822003-04-17 15:24:21 +00001307Py_CompileStringFlags(const char *str, const char *filename, int start,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001308 PyCompilerFlags *flags)
1309{
Guido van Rossum82598051997-03-05 00:20:32 +00001310 PyCodeObject *co;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001311 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001312 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001313 if (arena == NULL)
1314 return NULL;
1315
1316 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001317 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001318 PyArena_Free(arena);
Guido van Rossum5b722181993-03-30 17:46:03 +00001319 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001320 }
Martin v. Löwis2b366e42006-02-26 22:12:35 +00001321 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001322 PyObject *result = PyAST_mod2obj(mod);
1323 PyArena_Free(arena);
1324 return result;
1325 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001326 co = PyAST_Compile(mod, filename, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001327 PyArena_Free(arena);
Guido van Rossum82598051997-03-05 00:20:32 +00001328 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001329}
1330
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001331struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001332Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001333{
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001334 struct symtable *st;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001335 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001336 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001337 if (arena == NULL)
1338 return NULL;
1339
1340 mod = PyParser_ASTFromString(str, filename, start, NULL, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001341 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001342 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001343 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001344 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001345 st = PySymtable_Build(mod, filename, 0);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001346 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001347 return st;
1348}
1349
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001350/* Preferred access to parser is through AST. */
1351mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001352PyParser_ASTFromString(const char *s, const char *filename, int start,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001353 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001354{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001355 mod_ty mod;
1356 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001357 node *n = PyParser_ParseStringFlagsFilename(s, filename,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001358 &_PyParser_Grammar, start, &err,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001359 PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001360 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001361 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001362 PyNode_Free(n);
1363 return mod;
1364 }
1365 else {
1366 err_input(&err);
1367 return NULL;
1368 }
1369}
1370
1371mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001372PyParser_ASTFromFile(FILE *fp, const char *filename, int start, char *ps1,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001373 char *ps2, PyCompilerFlags *flags, int *errcode,
Neal Norwitz9589ee22006-03-04 19:01:22 +00001374 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001375{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001376 mod_ty mod;
1377 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001378 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
1379 start, ps1, ps2, &err, PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001380 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001381 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001382 PyNode_Free(n);
1383 return mod;
1384 }
1385 else {
1386 err_input(&err);
1387 if (errcode)
1388 *errcode = err.error;
1389 return NULL;
1390 }
1391}
1392
Guido van Rossuma110aa61994-08-29 12:50:44 +00001393/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001394
Guido van Rossuma110aa61994-08-29 12:50:44 +00001395node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001396PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001397{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001398 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001399 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
1400 start, NULL, NULL, &err, flags);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001401 if (n == NULL)
1402 err_input(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001403
Guido van Rossuma110aa61994-08-29 12:50:44 +00001404 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001405}
1406
Guido van Rossuma110aa61994-08-29 12:50:44 +00001407/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001408
Guido van Rossuma110aa61994-08-29 12:50:44 +00001409node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001410PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001411{
Tim Petersfe2127d2001-07-16 05:37:24 +00001412 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001413 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1414 start, &err, flags);
Tim Petersfe2127d2001-07-16 05:37:24 +00001415 if (n == NULL)
1416 err_input(&err);
1417 return n;
1418}
1419
1420node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001421PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Thomas Heller6b17abf2002-07-09 09:23:27 +00001422 int start, int flags)
1423{
Thomas Heller6b17abf2002-07-09 09:23:27 +00001424 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001425 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1426 &_PyParser_Grammar, start, &err, flags);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001427 if (n == NULL)
1428 err_input(&err);
1429 return n;
1430}
1431
1432node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001433PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001434{
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001435 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001436}
1437
Guido van Rossum66ebd912003-04-17 16:02:26 +00001438/* May want to move a more generalized form of this to parsetok.c or
1439 even parser modules. */
1440
1441void
1442PyParser_SetError(perrdetail *err)
1443{
1444 err_input(err);
1445}
1446
Guido van Rossuma110aa61994-08-29 12:50:44 +00001447/* Set the error appropriate to the given input error code (see errcode.h) */
1448
1449static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001450err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00001451{
Fred Drake85f36392000-07-11 17:53:00 +00001452 PyObject *v, *w, *errtype;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001453 PyObject* u = NULL;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001454 char *msg = NULL;
Fred Drake85f36392000-07-11 17:53:00 +00001455 errtype = PyExc_SyntaxError;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001456 switch (err->error) {
1457 case E_SYNTAX:
Fred Drake85f36392000-07-11 17:53:00 +00001458 errtype = PyExc_IndentationError;
1459 if (err->expected == INDENT)
1460 msg = "expected an indented block";
1461 else if (err->token == INDENT)
1462 msg = "unexpected indent";
1463 else if (err->token == DEDENT)
1464 msg = "unexpected unindent";
1465 else {
1466 errtype = PyExc_SyntaxError;
1467 msg = "invalid syntax";
1468 }
Guido van Rossuma110aa61994-08-29 12:50:44 +00001469 break;
1470 case E_TOKEN:
1471 msg = "invalid token";
Guido van Rossuma110aa61994-08-29 12:50:44 +00001472 break;
Skip Montanaro118ec702002-08-15 01:20:16 +00001473 case E_EOFS:
1474 msg = "EOF while scanning triple-quoted string";
1475 break;
1476 case E_EOLS:
1477 msg = "EOL while scanning single-quoted string";
1478 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001479 case E_INTR:
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001480 if (!PyErr_Occurred())
1481 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001482 return;
1483 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +00001484 PyErr_NoMemory();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001485 return;
1486 case E_EOF:
1487 msg = "unexpected EOF while parsing";
1488 break;
Fred Drake85f36392000-07-11 17:53:00 +00001489 case E_TABSPACE:
1490 errtype = PyExc_TabError;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001491 msg = "inconsistent use of tabs and spaces in indentation";
1492 break;
Jeremy Hylton94988062000-06-20 19:10:44 +00001493 case E_OVERFLOW:
1494 msg = "expression too long";
1495 break;
Fred Drake85f36392000-07-11 17:53:00 +00001496 case E_DEDENT:
1497 errtype = PyExc_IndentationError;
1498 msg = "unindent does not match any outer indentation level";
1499 break;
1500 case E_TOODEEP:
1501 errtype = PyExc_IndentationError;
1502 msg = "too many levels of indentation";
1503 break;
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001504 case E_DECODE: {
1505 PyObject *type, *value, *tb;
1506 PyErr_Fetch(&type, &value, &tb);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001507 if (value != NULL) {
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001508 u = PyObject_Str(value);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001509 if (u != NULL) {
1510 msg = PyString_AsString(u);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001511 }
1512 }
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001513 if (msg == NULL)
1514 msg = "unknown decode error";
Neal Norwitzdb83eb32005-12-18 05:29:30 +00001515 Py_XDECREF(type);
1516 Py_XDECREF(value);
Neal Norwitz40d37812005-10-02 01:48:49 +00001517 Py_XDECREF(tb);
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001518 break;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001519 }
Martin v. Löwis4bf108d2005-03-03 11:45:45 +00001520 case E_LINECONT:
1521 msg = "unexpected character after line continuation character";
1522 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001523 default:
1524 fprintf(stderr, "error=%d\n", err->error);
1525 msg = "unknown parsing error";
1526 break;
1527 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001528 v = Py_BuildValue("(ziiz)", err->filename,
1529 err->lineno, err->offset, err->text);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001530 if (err->text != NULL) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001531 PyObject_FREE(err->text);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001532 err->text = NULL;
1533 }
1534 w = NULL;
1535 if (v != NULL)
1536 w = Py_BuildValue("(sO)", msg, v);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001537 Py_XDECREF(u);
Guido van Rossum41318302001-03-23 04:01:07 +00001538 Py_XDECREF(v);
Fred Drake85f36392000-07-11 17:53:00 +00001539 PyErr_SetObject(errtype, w);
Guido van Rossum82598051997-03-05 00:20:32 +00001540 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001541}
1542
1543/* Print fatal error message and abort */
1544
1545void
Tim Peters7c321a82002-07-09 02:57:01 +00001546Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001547{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00001548 fprintf(stderr, "Fatal Python error: %s\n", msg);
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001549#ifdef MS_WINDOWS
Guido van Rossum23c94461997-05-22 20:21:30 +00001550 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +00001551 OutputDebugString(msg);
1552 OutputDebugString("\n");
Guido van Rossum0ba35361998-08-13 13:33:16 +00001553#ifdef _DEBUG
1554 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00001555#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001556#endif /* MS_WINDOWS */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001557 abort();
1558}
1559
1560/* Clean up and exit */
1561
Guido van Rossuma110aa61994-08-29 12:50:44 +00001562#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00001563#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001564#endif
1565
Guido van Rossum2dcfc961998-10-01 16:01:57 +00001566#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001567static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00001568static int nexitfuncs = 0;
1569
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001570int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00001571{
1572 if (nexitfuncs >= NEXITFUNCS)
1573 return -1;
1574 exitfuncs[nexitfuncs++] = func;
1575 return 0;
1576}
1577
Guido van Rossumcc283f51997-08-05 02:22:03 +00001578static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001579call_sys_exitfunc(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001580{
Guido van Rossum82598051997-03-05 00:20:32 +00001581 PyObject *exitfunc = PySys_GetObject("exitfunc");
Guido van Rossum59bff391992-09-03 20:28:00 +00001582
1583 if (exitfunc) {
Fred Drake6a12d8d2001-03-23 17:34:02 +00001584 PyObject *res;
Guido van Rossum82598051997-03-05 00:20:32 +00001585 Py_INCREF(exitfunc);
1586 PySys_SetObject("exitfunc", (PyObject *)NULL);
1587 res = PyEval_CallObject(exitfunc, (PyObject *)NULL);
Guido van Rossum59bff391992-09-03 20:28:00 +00001588 if (res == NULL) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001589 if (!PyErr_ExceptionMatches(PyExc_SystemExit)) {
1590 PySys_WriteStderr("Error in sys.exitfunc:\n");
1591 }
Guido van Rossum82598051997-03-05 00:20:32 +00001592 PyErr_Print();
Guido van Rossum59bff391992-09-03 20:28:00 +00001593 }
Guido van Rossum82598051997-03-05 00:20:32 +00001594 Py_DECREF(exitfunc);
Guido van Rossum59bff391992-09-03 20:28:00 +00001595 }
1596
Guido van Rossum0829c751998-02-28 04:31:39 +00001597 if (Py_FlushLine())
1598 PyErr_Clear();
Guido van Rossumcc283f51997-08-05 02:22:03 +00001599}
Guido van Rossum1662dd51994-09-07 14:38:28 +00001600
Guido van Rossumcc283f51997-08-05 02:22:03 +00001601static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001602call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00001603{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001604 while (nexitfuncs > 0)
1605 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001606
1607 fflush(stdout);
1608 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001609}
1610
1611void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001612Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001613{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001614 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001615
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001616 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001617}
1618
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001619static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001620initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001621{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001622#ifdef SIGPIPE
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001623 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001624#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00001625#ifdef SIGXFZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001626 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00001627#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001628#ifdef SIGXFSZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001629 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001630#endif
Guido van Rossum82598051997-03-05 00:20:32 +00001631 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001632}
1633
Guido van Rossum7433b121997-02-14 19:45:36 +00001634
1635/*
1636 * The file descriptor fd is considered ``interactive'' if either
1637 * a) isatty(fd) is TRUE, or
1638 * b) the -i flag was given, and the filename associated with
1639 * the descriptor is NULL or "<stdin>" or "???".
1640 */
1641int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001642Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00001643{
1644 if (isatty((int)fileno(fp)))
1645 return 1;
1646 if (!Py_InteractiveFlag)
1647 return 0;
1648 return (filename == NULL) ||
1649 (strcmp(filename, "<stdin>") == 0) ||
1650 (strcmp(filename, "???") == 0);
1651}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001652
1653
Tim Petersd08e3822003-04-17 15:24:21 +00001654#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001655#if defined(WIN32) && defined(_MSC_VER)
1656
1657/* Stack checking for Microsoft C */
1658
1659#include <malloc.h>
1660#include <excpt.h>
1661
Fred Drakee8de31c2000-08-31 05:38:39 +00001662/*
1663 * Return non-zero when we run out of memory on the stack; zero otherwise.
1664 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001665int
Fred Drake399739f2000-08-31 05:52:44 +00001666PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001667{
1668 __try {
Tim Peters92e4dd82002-10-05 01:47:34 +00001669 /* alloca throws a stack overflow exception if there's
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001670 not enough space left on the stack */
Tim Peters92e4dd82002-10-05 01:47:34 +00001671 alloca(PYOS_STACK_MARGIN * sizeof(void*));
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001672 return 0;
1673 } __except (EXCEPTION_EXECUTE_HANDLER) {
1674 /* just ignore all errors */
1675 }
1676 return 1;
1677}
1678
1679#endif /* WIN32 && _MSC_VER */
1680
1681/* Alternate implementations can be added here... */
1682
1683#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00001684
1685
1686/* Wrappers around sigaction() or signal(). */
1687
1688PyOS_sighandler_t
1689PyOS_getsig(int sig)
1690{
1691#ifdef HAVE_SIGACTION
1692 struct sigaction context;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001693 if (sigaction(sig, NULL, &context) == -1)
1694 return SIG_ERR;
Guido van Rossum6f256182000-09-16 16:32:19 +00001695 return context.sa_handler;
1696#else
1697 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00001698/* Special signal handling for the secure CRT in Visual Studio 2005 */
1699#if defined(_MSC_VER) && _MSC_VER >= 1400
1700 switch (sig) {
1701 /* Only these signals are valid */
1702 case SIGINT:
1703 case SIGILL:
1704 case SIGFPE:
1705 case SIGSEGV:
1706 case SIGTERM:
1707 case SIGBREAK:
1708 case SIGABRT:
1709 break;
1710 /* Don't call signal() with other values or it will assert */
1711 default:
1712 return SIG_ERR;
1713 }
1714#endif /* _MSC_VER && _MSC_VER >= 1400 */
Guido van Rossum6f256182000-09-16 16:32:19 +00001715 handler = signal(sig, SIG_IGN);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001716 if (handler != SIG_ERR)
1717 signal(sig, handler);
Guido van Rossum6f256182000-09-16 16:32:19 +00001718 return handler;
1719#endif
1720}
1721
1722PyOS_sighandler_t
1723PyOS_setsig(int sig, PyOS_sighandler_t handler)
1724{
1725#ifdef HAVE_SIGACTION
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001726 struct sigaction context, ocontext;
Guido van Rossum6f256182000-09-16 16:32:19 +00001727 context.sa_handler = handler;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001728 sigemptyset(&context.sa_mask);
1729 context.sa_flags = 0;
1730 if (sigaction(sig, &context, &ocontext) == -1)
1731 return SIG_ERR;
1732 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001733#else
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001734 PyOS_sighandler_t oldhandler;
1735 oldhandler = signal(sig, handler);
1736#ifdef HAVE_SIGINTERRUPT
1737 siginterrupt(sig, 1);
1738#endif
1739 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001740#endif
1741}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001742
1743/* Deprecated C API functions still provided for binary compatiblity */
1744
1745#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001746PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001747PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
1748{
1749 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
1750}
1751
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001752#undef PyParser_SimpleParseString
1753PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001754PyParser_SimpleParseString(const char *str, int start)
1755{
1756 return PyParser_SimpleParseStringFlags(str, start, 0);
1757}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001758
1759#undef PyRun_AnyFile
1760PyAPI_FUNC(int)
1761PyRun_AnyFile(FILE *fp, const char *name)
1762{
1763 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
1764}
1765
1766#undef PyRun_AnyFileEx
1767PyAPI_FUNC(int)
1768PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
1769{
1770 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
1771}
1772
1773#undef PyRun_AnyFileFlags
1774PyAPI_FUNC(int)
1775PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
1776{
1777 return PyRun_AnyFileExFlags(fp, name, 0, flags);
1778}
1779
1780#undef PyRun_File
1781PyAPI_FUNC(PyObject *)
1782PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
1783{
1784 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
1785}
1786
1787#undef PyRun_FileEx
1788PyAPI_FUNC(PyObject *)
1789PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
1790{
1791 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
1792}
1793
1794#undef PyRun_FileFlags
1795PyAPI_FUNC(PyObject *)
1796PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
1797 PyCompilerFlags *flags)
1798{
1799 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
1800}
1801
1802#undef PyRun_SimpleFile
1803PyAPI_FUNC(int)
1804PyRun_SimpleFile(FILE *f, const char *p)
1805{
1806 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
1807}
1808
1809#undef PyRun_SimpleFileEx
1810PyAPI_FUNC(int)
1811PyRun_SimpleFileEx(FILE *f, const char *p, int c)
1812{
1813 return PyRun_SimpleFileExFlags(f, p, c, NULL);
1814}
1815
1816
1817#undef PyRun_String
1818PyAPI_FUNC(PyObject *)
1819PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
1820{
1821 return PyRun_StringFlags(str, s, g, l, NULL);
1822}
1823
1824#undef PyRun_SimpleString
1825PyAPI_FUNC(int)
1826PyRun_SimpleString(const char *s)
1827{
1828 return PyRun_SimpleStringFlags(s, NULL);
1829}
1830
1831#undef Py_CompileString
1832PyAPI_FUNC(PyObject *)
1833Py_CompileString(const char *str, const char *p, int s)
1834{
1835 return Py_CompileStringFlags(str, p, s, NULL);
1836}
1837
1838#undef PyRun_InteractiveOne
1839PyAPI_FUNC(int)
1840PyRun_InteractiveOne(FILE *f, const char *p)
1841{
1842 return PyRun_InteractiveOneFlags(f, p, NULL);
1843}
1844
1845#undef PyRun_InteractiveLoop
1846PyAPI_FUNC(int)
1847PyRun_InteractiveLoop(FILE *f, const char *p)
1848{
1849 return PyRun_InteractiveLoopFlags(f, p, NULL);
1850}
1851
1852#ifdef __cplusplus
1853}
1854#endif
1855