blob: ec1bc4292d0fdfddefb0f546228b5e75673dc994 [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 Rossum1984f1e1992-08-04 12:41:02 +0000798 return 0;
799}
800
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000801/* Check whether a file maybe a pyc file: Look at the extension,
802 the file type, and, if we may close it, at the first few bytes. */
803
804static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000805maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000806{
807 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
808 return 1;
809
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000810 /* Only look into the file if we are allowed to close it, since
811 it then should also be seekable. */
812 if (closeit) {
813 /* Read only two bytes of the magic. If the file was opened in
814 text mode, the bytes 3 and 4 of the magic (\r\n) might not
815 be read as they are on disk. */
816 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
817 unsigned char buf[2];
Tim Peters3e876562001-02-11 04:35:39 +0000818 /* Mess: In case of -x, the stream is NOT at its start now,
819 and ungetc() was used to push back the first newline,
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000820 which makes the current stream position formally undefined,
821 and a x-platform nightmare.
822 Unfortunately, we have no direct way to know whether -x
823 was specified. So we use a terrible hack: if the current
824 stream position is not 0, we assume -x was specified, and
825 give up. Bug 132850 on SourceForge spells out the
826 hopelessness of trying anything else (fseek and ftell
827 don't work predictably x-platform for text-mode files).
Tim Peters3e876562001-02-11 04:35:39 +0000828 */
Tim Peters3e876562001-02-11 04:35:39 +0000829 int ispyc = 0;
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000830 if (ftell(fp) == 0) {
831 if (fread(buf, 1, 2, fp) == 2 &&
Tim Petersd08e3822003-04-17 15:24:21 +0000832 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000833 ispyc = 1;
834 rewind(fp);
835 }
Tim Peters3e876562001-02-11 04:35:39 +0000836 return ispyc;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000837 }
838 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +0000839}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000840
Guido van Rossum0df002c2000-08-27 19:21:52 +0000841int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000842PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000843 PyCompilerFlags *flags)
844{
Guido van Rossum82598051997-03-05 00:20:32 +0000845 PyObject *m, *d, *v;
Martin v. Löwis95292d62002-12-11 14:04:59 +0000846 const char *ext;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000847
Guido van Rossum82598051997-03-05 00:20:32 +0000848 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000849 if (m == NULL)
850 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000851 d = PyModule_GetDict(m);
Fred Drake8ed02042002-10-17 21:24:58 +0000852 if (PyDict_GetItemString(d, "__file__") == NULL) {
853 PyObject *f = PyString_FromString(filename);
854 if (f == NULL)
855 return -1;
856 if (PyDict_SetItemString(d, "__file__", f) < 0) {
857 Py_DECREF(f);
858 return -1;
859 }
860 Py_DECREF(f);
861 }
Guido van Rossumfdef2711994-09-14 13:31:04 +0000862 ext = filename + strlen(filename) - 4;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000863 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000864 /* Try to run a pyc file. First, re-open in binary */
Guido van Rossum0df002c2000-08-27 19:21:52 +0000865 if (closeit)
866 fclose(fp);
Fred Drake8ed02042002-10-17 21:24:58 +0000867 if ((fp = fopen(filename, "rb")) == NULL) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000868 fprintf(stderr, "python: Can't reopen .pyc file\n");
869 return -1;
870 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000871 /* Turn on optimization if a .pyo file is given */
872 if (strcmp(ext, ".pyo") == 0)
873 Py_OptimizeFlag = 1;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000874 v = run_pyc_file(fp, filename, d, d, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000875 } else {
Tim Petersd08e3822003-04-17 15:24:21 +0000876 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000877 closeit, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000878 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000879 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000880 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000881 return -1;
882 }
Guido van Rossum82598051997-03-05 00:20:32 +0000883 Py_DECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000884 return 0;
885}
886
887int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000888PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +0000889{
Guido van Rossum82598051997-03-05 00:20:32 +0000890 PyObject *m, *d, *v;
891 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000892 if (m == NULL)
893 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000894 d = PyModule_GetDict(m);
Guido van Rossum393661d2001-08-31 17:40:15 +0000895 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000896 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000897 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000898 return -1;
899 }
Guido van Rossum82598051997-03-05 00:20:32 +0000900 Py_DECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000901 return 0;
902}
903
Barry Warsaw035574d1997-08-29 22:07:17 +0000904static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000905parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
906 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +0000907{
908 long hold;
909 PyObject *v;
910
911 /* old style errors */
912 if (PyTuple_Check(err))
Neal Norwitz78293352002-04-01 01:41:20 +0000913 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
Neal Norwitz9589ee22006-03-04 19:01:22 +0000914 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +0000915
916 /* new style errors. `err' is an instance */
917
918 if (! (v = PyObject_GetAttrString(err, "msg")))
919 goto finally;
920 *message = v;
921
922 if (!(v = PyObject_GetAttrString(err, "filename")))
923 goto finally;
924 if (v == Py_None)
925 *filename = NULL;
926 else if (! (*filename = PyString_AsString(v)))
927 goto finally;
928
929 Py_DECREF(v);
930 if (!(v = PyObject_GetAttrString(err, "lineno")))
931 goto finally;
932 hold = PyInt_AsLong(v);
933 Py_DECREF(v);
934 v = NULL;
935 if (hold < 0 && PyErr_Occurred())
936 goto finally;
937 *lineno = (int)hold;
938
939 if (!(v = PyObject_GetAttrString(err, "offset")))
940 goto finally;
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000941 if (v == Py_None) {
942 *offset = -1;
943 Py_DECREF(v);
944 v = NULL;
945 } else {
946 hold = PyInt_AsLong(v);
947 Py_DECREF(v);
948 v = NULL;
949 if (hold < 0 && PyErr_Occurred())
950 goto finally;
951 *offset = (int)hold;
952 }
Barry Warsaw035574d1997-08-29 22:07:17 +0000953
954 if (!(v = PyObject_GetAttrString(err, "text")))
955 goto finally;
956 if (v == Py_None)
957 *text = NULL;
958 else if (! (*text = PyString_AsString(v)))
959 goto finally;
960 Py_DECREF(v);
961 return 1;
962
963finally:
964 Py_XDECREF(v);
965 return 0;
966}
967
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000968void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000969PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000970{
Guido van Rossuma61691e1998-02-06 22:27:24 +0000971 PyErr_PrintEx(1);
972}
973
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000974static void
Martin v. Löwis95292d62002-12-11 14:04:59 +0000975print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000976{
977 char *nl;
978 if (offset >= 0) {
979 if (offset > 0 && offset == (int)strlen(text))
980 offset--;
981 for (;;) {
982 nl = strchr(text, '\n');
983 if (nl == NULL || nl-text >= offset)
984 break;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000985 offset -= (int)(nl+1-text);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000986 text = nl+1;
987 }
988 while (*text == ' ' || *text == '\t') {
989 text++;
990 offset--;
991 }
992 }
993 PyFile_WriteString(" ", f);
994 PyFile_WriteString(text, f);
995 if (*text == '\0' || text[strlen(text)-1] != '\n')
996 PyFile_WriteString("\n", f);
997 if (offset == -1)
998 return;
999 PyFile_WriteString(" ", f);
1000 offset--;
1001 while (offset > 0) {
1002 PyFile_WriteString(" ", f);
1003 offset--;
1004 }
1005 PyFile_WriteString("^\n", f);
1006}
1007
Guido van Rossum66e8e862001-03-23 17:54:43 +00001008static void
1009handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001010{
Neal Norwitz9589ee22006-03-04 19:01:22 +00001011 PyObject *exception, *value, *tb;
1012 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001013
Guido van Rossum66e8e862001-03-23 17:54:43 +00001014 PyErr_Fetch(&exception, &value, &tb);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001015 fflush(stdout);
1016 if (value == NULL || value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001017 goto done;
Brett Cannonbf364092006-03-01 04:25:17 +00001018 if (PyExceptionInstance_Check(value)) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001019 /* The error code should be in the `code' attribute. */
1020 PyObject *code = PyObject_GetAttrString(value, "code");
1021 if (code) {
1022 Py_DECREF(value);
1023 value = code;
1024 if (value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001025 goto done;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001026 }
1027 /* If we failed to dig out the 'code' attribute,
1028 just let the else clause below print the error. */
1029 }
1030 if (PyInt_Check(value))
Tim Peterscf615b52003-04-19 18:47:02 +00001031 exitcode = (int)PyInt_AsLong(value);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001032 else {
1033 PyObject_Print(value, stderr, Py_PRINT_RAW);
1034 PySys_WriteStderr("\n");
Tim Peterscf615b52003-04-19 18:47:02 +00001035 exitcode = 1;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001036 }
Tim Peterscf615b52003-04-19 18:47:02 +00001037 done:
Neal Norwitz9589ee22006-03-04 19:01:22 +00001038 /* Restore and clear the exception info, in order to properly decref
1039 * the exception, value, and traceback. If we just exit instead,
1040 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1041 * some finalizers from running.
1042 */
Tim Peterscf615b52003-04-19 18:47:02 +00001043 PyErr_Restore(exception, value, tb);
1044 PyErr_Clear();
1045 Py_Exit(exitcode);
1046 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001047}
1048
1049void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001050PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001051{
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001052 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001053
1054 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1055 handle_system_exit();
1056 }
Guido van Rossum82598051997-03-05 00:20:32 +00001057 PyErr_Fetch(&exception, &v, &tb);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001058 if (exception == NULL)
1059 return;
Barry Warsaw035574d1997-08-29 22:07:17 +00001060 PyErr_NormalizeException(&exception, &v, &tb);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001061 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +00001062 return;
Guido van Rossum9d785502006-03-07 18:31:44 +00001063 /* Now we know v != NULL too */
Guido van Rossuma61691e1998-02-06 22:27:24 +00001064 if (set_sys_last_vars) {
1065 PySys_SetObject("last_type", exception);
1066 PySys_SetObject("last_value", v);
1067 PySys_SetObject("last_traceback", tb);
1068 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001069 hook = PySys_GetObject("excepthook");
1070 if (hook) {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00001071 PyObject *args = PyTuple_Pack(3,
Guido van Rossum9d785502006-03-07 18:31:44 +00001072 exception, v, tb ? tb : Py_None);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001073 PyObject *result = PyEval_CallObject(hook, args);
1074 if (result == NULL) {
1075 PyObject *exception2, *v2, *tb2;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001076 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1077 handle_system_exit();
1078 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001079 PyErr_Fetch(&exception2, &v2, &tb2);
1080 PyErr_NormalizeException(&exception2, &v2, &tb2);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001081 /* It should not be possible for exception2 or v2
1082 to be NULL. However PyErr_Display() can't
1083 tolerate NULLs, so just be safe. */
1084 if (exception2 == NULL) {
1085 exception2 = Py_None;
1086 Py_INCREF(exception2);
1087 }
1088 if (v2 == NULL) {
1089 v2 = Py_None;
1090 Py_INCREF(v2);
1091 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001092 fflush(stdout);
1093 PySys_WriteStderr("Error in sys.excepthook:\n");
1094 PyErr_Display(exception2, v2, tb2);
1095 PySys_WriteStderr("\nOriginal exception was:\n");
1096 PyErr_Display(exception, v, tb);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001097 Py_DECREF(exception2);
1098 Py_DECREF(v2);
Jeremy Hylton07028582001-12-07 15:35:35 +00001099 Py_XDECREF(tb2);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001100 }
1101 Py_XDECREF(result);
1102 Py_XDECREF(args);
1103 } else {
1104 PySys_WriteStderr("sys.excepthook is missing\n");
1105 PyErr_Display(exception, v, tb);
1106 }
1107 Py_XDECREF(exception);
1108 Py_XDECREF(v);
1109 Py_XDECREF(tb);
1110}
1111
Thomas Wouters477c8d52006-05-27 19:21:47 +00001112void
1113PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001114{
1115 int err = 0;
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001116 PyObject *f = PySys_GetObject("stderr");
Armin Rigo5d2c6832004-03-22 20:16:58 +00001117 Py_INCREF(value);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001118 if (f == NULL)
1119 fprintf(stderr, "lost sys.stderr\n");
1120 else {
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001121 fflush(stdout);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001122 if (tb && tb != Py_None)
1123 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +00001124 if (err == 0 &&
Armin Rigo5d2c6832004-03-22 20:16:58 +00001125 PyObject_HasAttrString(value, "print_file_and_line"))
Barry Warsaw36b8f941997-08-26 18:09:48 +00001126 {
Guido van Rossum82598051997-03-05 00:20:32 +00001127 PyObject *message;
Martin v. Löwis95292d62002-12-11 14:04:59 +00001128 const char *filename, *text;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001129 int lineno, offset;
Armin Rigo5d2c6832004-03-22 20:16:58 +00001130 if (!parse_syntax_error(value, &message, &filename,
Barry Warsaw035574d1997-08-29 22:07:17 +00001131 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +00001132 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001133 else {
1134 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +00001135 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001136 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +00001137 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001138 else
Guido van Rossum82598051997-03-05 00:20:32 +00001139 PyFile_WriteString(filename, f);
1140 PyFile_WriteString("\", line ", f);
Jeremy Hylton518ab1c2001-11-28 20:42:20 +00001141 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +00001142 PyFile_WriteString(buf, f);
1143 PyFile_WriteString("\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001144 if (text != NULL)
1145 print_error_text(f, offset, text);
Armin Rigo5d2c6832004-03-22 20:16:58 +00001146 Py_DECREF(value);
1147 value = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001148 /* Can't be bothered to check all those
1149 PyFile_WriteString() calls */
1150 if (PyErr_Occurred())
1151 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001152 }
1153 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001154 if (err) {
1155 /* Don't do anything else */
1156 }
Brett Cannonbf364092006-03-01 04:25:17 +00001157 else if (PyExceptionClass_Check(exception)) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001158 PyObject* moduleName;
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001159 char* className = PyExceptionClass_Name(exception);
1160 if (className != NULL) {
1161 char *dot = strrchr(className, '.');
1162 if (dot != NULL)
1163 className = dot+1;
1164 }
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001165
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001166 moduleName = PyObject_GetAttrString(exception, "__module__");
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001167 if (moduleName == NULL)
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001168 err = PyFile_WriteString("<unknown>", f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001169 else {
1170 char* modstr = PyString_AsString(moduleName);
Tim Petersd08e3822003-04-17 15:24:21 +00001171 if (modstr && strcmp(modstr, "exceptions"))
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001172 {
1173 err = PyFile_WriteString(modstr, f);
1174 err += PyFile_WriteString(".", f);
1175 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001176 Py_DECREF(moduleName);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001177 }
1178 if (err == 0) {
1179 if (className == NULL)
1180 err = PyFile_WriteString("<unknown>", f);
1181 else
Brett Cannonbf364092006-03-01 04:25:17 +00001182 err = PyFile_WriteString(className, f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001183 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001184 }
1185 else
1186 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
Brett Cannon2e63b732006-03-02 18:34:57 +00001187 if (err == 0 && (value != Py_None)) {
1188 PyObject *s = PyObject_Str(value);
1189 /* only print colon if the str() of the
1190 object is not the empty string
1191 */
1192 if (s == NULL)
1193 err = -1;
1194 else if (!PyString_Check(s) ||
1195 PyString_GET_SIZE(s) != 0)
1196 err = PyFile_WriteString(": ", f);
1197 if (err == 0)
1198 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1199 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +00001200 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001201 if (err == 0)
1202 err = PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001203 }
Armin Rigo5d2c6832004-03-22 20:16:58 +00001204 Py_DECREF(value);
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001205 /* If an error happened here, don't show it.
1206 XXX This is wrong, but too many callers rely on this behavior. */
1207 if (err != 0)
1208 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001209}
1210
Guido van Rossum82598051997-03-05 00:20:32 +00001211PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001212PyRun_StringFlags(const char *str, int start, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001213 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001214{
Neal Norwitze92fba02006-03-04 18:52:26 +00001215 PyObject *ret = NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001216 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001217 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001218 if (arena == NULL)
1219 return NULL;
1220
1221 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
Neal Norwitze92fba02006-03-04 18:52:26 +00001222 if (mod != NULL)
1223 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001224 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001225 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001226}
1227
1228PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001229PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001230 PyObject *locals, int closeit, PyCompilerFlags *flags)
1231{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001232 PyObject *ret;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001233 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001234 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001235 if (arena == NULL)
1236 return NULL;
1237
1238 mod = PyParser_ASTFromFile(fp, filename, start, 0, 0,
1239 flags, NULL, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001240 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001241 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001242 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001243 }
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001244 if (closeit)
1245 fclose(fp);
Neal Norwitze92fba02006-03-04 18:52:26 +00001246 ret = run_mod(mod, filename, globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001247 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001248 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001249}
1250
Guido van Rossum82598051997-03-05 00:20:32 +00001251static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001252run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001253 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001254{
Guido van Rossum82598051997-03-05 00:20:32 +00001255 PyCodeObject *co;
1256 PyObject *v;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001257 co = PyAST_Compile(mod, filename, flags, arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001258 if (co == NULL)
1259 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +00001260 v = PyEval_EvalCode(co, globals, locals);
1261 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001262 return v;
1263}
1264
Guido van Rossum82598051997-03-05 00:20:32 +00001265static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001266run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001267 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001268{
Guido van Rossum82598051997-03-05 00:20:32 +00001269 PyCodeObject *co;
1270 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001271 long magic;
Fred Drakee8de31c2000-08-31 05:38:39 +00001272 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001273
Guido van Rossum82598051997-03-05 00:20:32 +00001274 magic = PyMarshal_ReadLongFromFile(fp);
1275 if (magic != PyImport_GetMagicNumber()) {
1276 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001277 "Bad magic number in .pyc file");
1278 return NULL;
1279 }
Guido van Rossum82598051997-03-05 00:20:32 +00001280 (void) PyMarshal_ReadLongFromFile(fp);
Tim Petersd9b9ac82001-01-28 00:27:39 +00001281 v = PyMarshal_ReadLastObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001282 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +00001283 if (v == NULL || !PyCode_Check(v)) {
1284 Py_XDECREF(v);
1285 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001286 "Bad code object in .pyc file");
1287 return NULL;
1288 }
Guido van Rossum82598051997-03-05 00:20:32 +00001289 co = (PyCodeObject *)v;
1290 v = PyEval_EvalCode(co, globals, locals);
Jeremy Hyltonb857ba22001-08-10 21:41:33 +00001291 if (v && flags)
1292 flags->cf_flags |= (co->co_flags & PyCF_MASK);
Guido van Rossum82598051997-03-05 00:20:32 +00001293 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001294 return v;
1295}
1296
Guido van Rossum82598051997-03-05 00:20:32 +00001297PyObject *
Tim Petersd08e3822003-04-17 15:24:21 +00001298Py_CompileStringFlags(const char *str, const char *filename, int start,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001299 PyCompilerFlags *flags)
1300{
Guido van Rossum82598051997-03-05 00:20:32 +00001301 PyCodeObject *co;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001302 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001303 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001304 if (arena == NULL)
1305 return NULL;
1306
1307 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001308 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001309 PyArena_Free(arena);
Guido van Rossum5b722181993-03-30 17:46:03 +00001310 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001311 }
Martin v. Löwis2b366e42006-02-26 22:12:35 +00001312 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001313 PyObject *result = PyAST_mod2obj(mod);
1314 PyArena_Free(arena);
1315 return result;
1316 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001317 co = PyAST_Compile(mod, filename, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001318 PyArena_Free(arena);
Guido van Rossum82598051997-03-05 00:20:32 +00001319 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001320}
1321
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001322struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001323Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001324{
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001325 struct symtable *st;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001326 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001327 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001328 if (arena == NULL)
1329 return NULL;
1330
1331 mod = PyParser_ASTFromString(str, filename, start, NULL, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001332 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001333 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001334 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001335 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001336 st = PySymtable_Build(mod, filename, 0);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001337 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001338 return st;
1339}
1340
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001341/* Preferred access to parser is through AST. */
1342mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001343PyParser_ASTFromString(const char *s, const char *filename, int start,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001344 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001345{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001346 mod_ty mod;
1347 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001348 node *n = PyParser_ParseStringFlagsFilename(s, filename,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001349 &_PyParser_Grammar, start, &err,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001350 PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001351 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001352 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001353 PyNode_Free(n);
1354 return mod;
1355 }
1356 else {
1357 err_input(&err);
1358 return NULL;
1359 }
1360}
1361
1362mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001363PyParser_ASTFromFile(FILE *fp, const char *filename, int start, char *ps1,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001364 char *ps2, PyCompilerFlags *flags, int *errcode,
Neal Norwitz9589ee22006-03-04 19:01:22 +00001365 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001366{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001367 mod_ty mod;
1368 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001369 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
1370 start, ps1, ps2, &err, PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001371 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001372 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001373 PyNode_Free(n);
1374 return mod;
1375 }
1376 else {
1377 err_input(&err);
1378 if (errcode)
1379 *errcode = err.error;
1380 return NULL;
1381 }
1382}
1383
Guido van Rossuma110aa61994-08-29 12:50:44 +00001384/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001385
Guido van Rossuma110aa61994-08-29 12:50:44 +00001386node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001387PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001388{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001389 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001390 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
1391 start, NULL, NULL, &err, flags);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001392 if (n == NULL)
1393 err_input(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001394
Guido van Rossuma110aa61994-08-29 12:50:44 +00001395 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001396}
1397
Guido van Rossuma110aa61994-08-29 12:50:44 +00001398/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001399
Guido van Rossuma110aa61994-08-29 12:50:44 +00001400node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001401PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001402{
Tim Petersfe2127d2001-07-16 05:37:24 +00001403 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001404 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1405 start, &err, flags);
Tim Petersfe2127d2001-07-16 05:37:24 +00001406 if (n == NULL)
1407 err_input(&err);
1408 return n;
1409}
1410
1411node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001412PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Thomas Heller6b17abf2002-07-09 09:23:27 +00001413 int start, int flags)
1414{
Thomas Heller6b17abf2002-07-09 09:23:27 +00001415 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001416 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1417 &_PyParser_Grammar, start, &err, flags);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001418 if (n == NULL)
1419 err_input(&err);
1420 return n;
1421}
1422
1423node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001424PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001425{
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001426 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001427}
1428
Guido van Rossum66ebd912003-04-17 16:02:26 +00001429/* May want to move a more generalized form of this to parsetok.c or
1430 even parser modules. */
1431
1432void
1433PyParser_SetError(perrdetail *err)
1434{
1435 err_input(err);
1436}
1437
Guido van Rossuma110aa61994-08-29 12:50:44 +00001438/* Set the error appropriate to the given input error code (see errcode.h) */
1439
1440static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001441err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00001442{
Fred Drake85f36392000-07-11 17:53:00 +00001443 PyObject *v, *w, *errtype;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001444 PyObject* u = NULL;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001445 char *msg = NULL;
Fred Drake85f36392000-07-11 17:53:00 +00001446 errtype = PyExc_SyntaxError;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001447 switch (err->error) {
1448 case E_SYNTAX:
Fred Drake85f36392000-07-11 17:53:00 +00001449 errtype = PyExc_IndentationError;
1450 if (err->expected == INDENT)
1451 msg = "expected an indented block";
1452 else if (err->token == INDENT)
1453 msg = "unexpected indent";
1454 else if (err->token == DEDENT)
1455 msg = "unexpected unindent";
1456 else {
1457 errtype = PyExc_SyntaxError;
1458 msg = "invalid syntax";
1459 }
Guido van Rossuma110aa61994-08-29 12:50:44 +00001460 break;
1461 case E_TOKEN:
1462 msg = "invalid token";
Guido van Rossuma110aa61994-08-29 12:50:44 +00001463 break;
Skip Montanaro118ec702002-08-15 01:20:16 +00001464 case E_EOFS:
1465 msg = "EOF while scanning triple-quoted string";
1466 break;
1467 case E_EOLS:
1468 msg = "EOL while scanning single-quoted string";
1469 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001470 case E_INTR:
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001471 if (!PyErr_Occurred())
1472 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001473 return;
1474 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +00001475 PyErr_NoMemory();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001476 return;
1477 case E_EOF:
1478 msg = "unexpected EOF while parsing";
1479 break;
Fred Drake85f36392000-07-11 17:53:00 +00001480 case E_TABSPACE:
1481 errtype = PyExc_TabError;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001482 msg = "inconsistent use of tabs and spaces in indentation";
1483 break;
Jeremy Hylton94988062000-06-20 19:10:44 +00001484 case E_OVERFLOW:
1485 msg = "expression too long";
1486 break;
Fred Drake85f36392000-07-11 17:53:00 +00001487 case E_DEDENT:
1488 errtype = PyExc_IndentationError;
1489 msg = "unindent does not match any outer indentation level";
1490 break;
1491 case E_TOODEEP:
1492 errtype = PyExc_IndentationError;
1493 msg = "too many levels of indentation";
1494 break;
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001495 case E_DECODE: {
1496 PyObject *type, *value, *tb;
1497 PyErr_Fetch(&type, &value, &tb);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001498 if (value != NULL) {
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001499 u = PyObject_Str(value);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001500 if (u != NULL) {
1501 msg = PyString_AsString(u);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001502 }
1503 }
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001504 if (msg == NULL)
1505 msg = "unknown decode error";
Neal Norwitzdb83eb32005-12-18 05:29:30 +00001506 Py_XDECREF(type);
1507 Py_XDECREF(value);
Neal Norwitz40d37812005-10-02 01:48:49 +00001508 Py_XDECREF(tb);
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001509 break;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001510 }
Martin v. Löwis4bf108d2005-03-03 11:45:45 +00001511 case E_LINECONT:
1512 msg = "unexpected character after line continuation character";
1513 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001514 default:
1515 fprintf(stderr, "error=%d\n", err->error);
1516 msg = "unknown parsing error";
1517 break;
1518 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001519 v = Py_BuildValue("(ziiz)", err->filename,
1520 err->lineno, err->offset, err->text);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001521 if (err->text != NULL) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001522 PyObject_FREE(err->text);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001523 err->text = NULL;
1524 }
1525 w = NULL;
1526 if (v != NULL)
1527 w = Py_BuildValue("(sO)", msg, v);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001528 Py_XDECREF(u);
Guido van Rossum41318302001-03-23 04:01:07 +00001529 Py_XDECREF(v);
Fred Drake85f36392000-07-11 17:53:00 +00001530 PyErr_SetObject(errtype, w);
Guido van Rossum82598051997-03-05 00:20:32 +00001531 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001532}
1533
1534/* Print fatal error message and abort */
1535
1536void
Tim Peters7c321a82002-07-09 02:57:01 +00001537Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001538{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00001539 fprintf(stderr, "Fatal Python error: %s\n", msg);
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001540#ifdef MS_WINDOWS
Guido van Rossum23c94461997-05-22 20:21:30 +00001541 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +00001542 OutputDebugString(msg);
1543 OutputDebugString("\n");
Guido van Rossum0ba35361998-08-13 13:33:16 +00001544#ifdef _DEBUG
1545 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00001546#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001547#endif /* MS_WINDOWS */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001548 abort();
1549}
1550
1551/* Clean up and exit */
1552
Guido van Rossuma110aa61994-08-29 12:50:44 +00001553#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00001554#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001555#endif
1556
Guido van Rossum2dcfc961998-10-01 16:01:57 +00001557#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001558static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00001559static int nexitfuncs = 0;
1560
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001561int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00001562{
1563 if (nexitfuncs >= NEXITFUNCS)
1564 return -1;
1565 exitfuncs[nexitfuncs++] = func;
1566 return 0;
1567}
1568
Guido van Rossumcc283f51997-08-05 02:22:03 +00001569static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001570call_sys_exitfunc(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001571{
Guido van Rossum82598051997-03-05 00:20:32 +00001572 PyObject *exitfunc = PySys_GetObject("exitfunc");
Guido van Rossum59bff391992-09-03 20:28:00 +00001573
1574 if (exitfunc) {
Fred Drake6a12d8d2001-03-23 17:34:02 +00001575 PyObject *res;
Guido van Rossum82598051997-03-05 00:20:32 +00001576 Py_INCREF(exitfunc);
1577 PySys_SetObject("exitfunc", (PyObject *)NULL);
1578 res = PyEval_CallObject(exitfunc, (PyObject *)NULL);
Guido van Rossum59bff391992-09-03 20:28:00 +00001579 if (res == NULL) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001580 if (!PyErr_ExceptionMatches(PyExc_SystemExit)) {
1581 PySys_WriteStderr("Error in sys.exitfunc:\n");
1582 }
Guido van Rossum82598051997-03-05 00:20:32 +00001583 PyErr_Print();
Guido van Rossum59bff391992-09-03 20:28:00 +00001584 }
Guido van Rossum82598051997-03-05 00:20:32 +00001585 Py_DECREF(exitfunc);
Guido van Rossum59bff391992-09-03 20:28:00 +00001586 }
1587
Guido van Rossumcc283f51997-08-05 02:22:03 +00001588}
Guido van Rossum1662dd51994-09-07 14:38:28 +00001589
Guido van Rossumcc283f51997-08-05 02:22:03 +00001590static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001591call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00001592{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001593 while (nexitfuncs > 0)
1594 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001595
1596 fflush(stdout);
1597 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001598}
1599
1600void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001601Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001602{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001603 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001604
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001605 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001606}
1607
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001608static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001609initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001610{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001611#ifdef SIGPIPE
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001612 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001613#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00001614#ifdef SIGXFZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001615 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00001616#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001617#ifdef SIGXFSZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001618 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001619#endif
Guido van Rossum82598051997-03-05 00:20:32 +00001620 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001621}
1622
Guido van Rossum7433b121997-02-14 19:45:36 +00001623
1624/*
1625 * The file descriptor fd is considered ``interactive'' if either
1626 * a) isatty(fd) is TRUE, or
1627 * b) the -i flag was given, and the filename associated with
1628 * the descriptor is NULL or "<stdin>" or "???".
1629 */
1630int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001631Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00001632{
1633 if (isatty((int)fileno(fp)))
1634 return 1;
1635 if (!Py_InteractiveFlag)
1636 return 0;
1637 return (filename == NULL) ||
1638 (strcmp(filename, "<stdin>") == 0) ||
1639 (strcmp(filename, "???") == 0);
1640}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001641
1642
Tim Petersd08e3822003-04-17 15:24:21 +00001643#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001644#if defined(WIN32) && defined(_MSC_VER)
1645
1646/* Stack checking for Microsoft C */
1647
1648#include <malloc.h>
1649#include <excpt.h>
1650
Fred Drakee8de31c2000-08-31 05:38:39 +00001651/*
1652 * Return non-zero when we run out of memory on the stack; zero otherwise.
1653 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001654int
Fred Drake399739f2000-08-31 05:52:44 +00001655PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001656{
1657 __try {
Tim Peters92e4dd82002-10-05 01:47:34 +00001658 /* alloca throws a stack overflow exception if there's
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001659 not enough space left on the stack */
Tim Peters92e4dd82002-10-05 01:47:34 +00001660 alloca(PYOS_STACK_MARGIN * sizeof(void*));
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001661 return 0;
1662 } __except (EXCEPTION_EXECUTE_HANDLER) {
1663 /* just ignore all errors */
1664 }
1665 return 1;
1666}
1667
1668#endif /* WIN32 && _MSC_VER */
1669
1670/* Alternate implementations can be added here... */
1671
1672#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00001673
1674
1675/* Wrappers around sigaction() or signal(). */
1676
1677PyOS_sighandler_t
1678PyOS_getsig(int sig)
1679{
1680#ifdef HAVE_SIGACTION
1681 struct sigaction context;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001682 if (sigaction(sig, NULL, &context) == -1)
1683 return SIG_ERR;
Guido van Rossum6f256182000-09-16 16:32:19 +00001684 return context.sa_handler;
1685#else
1686 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00001687/* Special signal handling for the secure CRT in Visual Studio 2005 */
1688#if defined(_MSC_VER) && _MSC_VER >= 1400
1689 switch (sig) {
1690 /* Only these signals are valid */
1691 case SIGINT:
1692 case SIGILL:
1693 case SIGFPE:
1694 case SIGSEGV:
1695 case SIGTERM:
1696 case SIGBREAK:
1697 case SIGABRT:
1698 break;
1699 /* Don't call signal() with other values or it will assert */
1700 default:
1701 return SIG_ERR;
1702 }
1703#endif /* _MSC_VER && _MSC_VER >= 1400 */
Guido van Rossum6f256182000-09-16 16:32:19 +00001704 handler = signal(sig, SIG_IGN);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001705 if (handler != SIG_ERR)
1706 signal(sig, handler);
Guido van Rossum6f256182000-09-16 16:32:19 +00001707 return handler;
1708#endif
1709}
1710
1711PyOS_sighandler_t
1712PyOS_setsig(int sig, PyOS_sighandler_t handler)
1713{
1714#ifdef HAVE_SIGACTION
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001715 struct sigaction context, ocontext;
Guido van Rossum6f256182000-09-16 16:32:19 +00001716 context.sa_handler = handler;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001717 sigemptyset(&context.sa_mask);
1718 context.sa_flags = 0;
1719 if (sigaction(sig, &context, &ocontext) == -1)
1720 return SIG_ERR;
1721 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001722#else
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001723 PyOS_sighandler_t oldhandler;
1724 oldhandler = signal(sig, handler);
1725#ifdef HAVE_SIGINTERRUPT
1726 siginterrupt(sig, 1);
1727#endif
1728 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001729#endif
1730}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001731
1732/* Deprecated C API functions still provided for binary compatiblity */
1733
1734#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001735PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001736PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
1737{
1738 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
1739}
1740
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001741#undef PyParser_SimpleParseString
1742PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001743PyParser_SimpleParseString(const char *str, int start)
1744{
1745 return PyParser_SimpleParseStringFlags(str, start, 0);
1746}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001747
1748#undef PyRun_AnyFile
1749PyAPI_FUNC(int)
1750PyRun_AnyFile(FILE *fp, const char *name)
1751{
1752 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
1753}
1754
1755#undef PyRun_AnyFileEx
1756PyAPI_FUNC(int)
1757PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
1758{
1759 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
1760}
1761
1762#undef PyRun_AnyFileFlags
1763PyAPI_FUNC(int)
1764PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
1765{
1766 return PyRun_AnyFileExFlags(fp, name, 0, flags);
1767}
1768
1769#undef PyRun_File
1770PyAPI_FUNC(PyObject *)
1771PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
1772{
1773 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
1774}
1775
1776#undef PyRun_FileEx
1777PyAPI_FUNC(PyObject *)
1778PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
1779{
1780 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
1781}
1782
1783#undef PyRun_FileFlags
1784PyAPI_FUNC(PyObject *)
1785PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
1786 PyCompilerFlags *flags)
1787{
1788 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
1789}
1790
1791#undef PyRun_SimpleFile
1792PyAPI_FUNC(int)
1793PyRun_SimpleFile(FILE *f, const char *p)
1794{
1795 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
1796}
1797
1798#undef PyRun_SimpleFileEx
1799PyAPI_FUNC(int)
1800PyRun_SimpleFileEx(FILE *f, const char *p, int c)
1801{
1802 return PyRun_SimpleFileExFlags(f, p, c, NULL);
1803}
1804
1805
1806#undef PyRun_String
1807PyAPI_FUNC(PyObject *)
1808PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
1809{
1810 return PyRun_StringFlags(str, s, g, l, NULL);
1811}
1812
1813#undef PyRun_SimpleString
1814PyAPI_FUNC(int)
1815PyRun_SimpleString(const char *s)
1816{
1817 return PyRun_SimpleStringFlags(s, NULL);
1818}
1819
1820#undef Py_CompileString
1821PyAPI_FUNC(PyObject *)
1822Py_CompileString(const char *str, const char *p, int s)
1823{
1824 return Py_CompileStringFlags(str, p, s, NULL);
1825}
1826
1827#undef PyRun_InteractiveOne
1828PyAPI_FUNC(int)
1829PyRun_InteractiveOne(FILE *f, const char *p)
1830{
1831 return PyRun_InteractiveOneFlags(f, p, NULL);
1832}
1833
1834#undef PyRun_InteractiveLoop
1835PyAPI_FUNC(int)
1836PyRun_InteractiveLoop(FILE *f, const char *p)
1837{
1838 return PyRun_InteractiveLoopFlags(f, p, NULL);
1839}
1840
1841#ifdef __cplusplus
1842}
1843#endif