blob: 31c83299f25b9215230b9ed39aae27d6ce427878 [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);
Collin Winter670e6922007-03-21 02:57:17 +000059static void call_py_exitfuncs(void);
Tim Petersdbd9ba62000-07-09 03:09:57 +000060static 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
Neal Norwitz6968b052007-02-27 19:02:19 +0000189 if (!PyBytes_Init())
190 Py_FatalError("Py_Initialize: can't init bytes");
191
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000192 _PyFloat_Init();
193
Guido van Rossum25ce5661997-08-02 03:10:38 +0000194 interp->modules = PyDict_New();
195 if (interp->modules == NULL)
196 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000197
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000198#ifdef Py_USING_UNICODE
Guido van Rossumc94044c2000-03-10 23:03:54 +0000199 /* Init Unicode implementation; relies on the codec registry */
200 _PyUnicode_Init();
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000201#endif
Guido van Rossumc94044c2000-03-10 23:03:54 +0000202
Barry Warsawf242aa02000-05-25 23:09:49 +0000203 bimod = _PyBuiltin_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000204 if (bimod == NULL)
205 Py_FatalError("Py_Initialize: can't initialize __builtin__");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000206 interp->builtins = PyModule_GetDict(bimod);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000207 if (interp->builtins == NULL)
208 Py_FatalError("Py_Initialize: can't initialize builtins dict");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000209 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000210
211 sysmod = _PySys_Init();
212 if (sysmod == NULL)
213 Py_FatalError("Py_Initialize: can't initialize sys");
214 interp->sysdict = PyModule_GetDict(sysmod);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000215 if (interp->sysdict == NULL)
216 Py_FatalError("Py_Initialize: can't initialize sys dict");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000217 Py_INCREF(interp->sysdict);
218 _PyImport_FixupExtension("sys", "sys");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000219 PySys_SetPath(Py_GetPath());
Guido van Rossum25ce5661997-08-02 03:10:38 +0000220 PyDict_SetItemString(interp->sysdict, "modules",
221 interp->modules);
222
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000223 _PyImport_Init();
224
Barry Warsawf242aa02000-05-25 23:09:49 +0000225 /* initialize builtin exceptions */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000226 _PyExc_Init();
Barry Warsawf242aa02000-05-25 23:09:49 +0000227
Barry Warsaw035574d1997-08-29 22:07:17 +0000228 /* phase 2 of builtins */
Barry Warsaw963b8711997-09-18 16:42:02 +0000229 _PyImport_FixupExtension("__builtin__", "__builtin__");
Barry Warsaw035574d1997-08-29 22:07:17 +0000230
Just van Rossum52e14d62002-12-30 22:08:05 +0000231 _PyImportHooks_Init();
232
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000233 if (install_sigs)
234 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000235
236 initmain(); /* Module __main__ */
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000237 if (!Py_NoSiteFlag)
238 initsite(); /* Module site */
Just van Rossum5bfba3a2003-02-25 20:25:12 +0000239
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000240 /* auto-thread-state API, if available */
241#ifdef WITH_THREAD
242 _PyGILState_Init(interp, tstate);
243#endif /* WITH_THREAD */
244
Mark Hammondedd07732003-07-15 23:03:55 +0000245 warnings_module = PyImport_ImportModule("warnings");
246 if (!warnings_module)
247 PyErr_Clear();
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000248
249#if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
250 /* On Unix, set the file system encoding according to the
251 user's preference, if the CODESET names a well-known
252 Python codec, and Py_FileSystemDefaultEncoding isn't
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000253 initialized by other means. Also set the encoding of
254 stdin and stdout if these are terminals. */
255
Martin v. Löwisf56d0152003-11-13 07:43:21 +0000256 saved_locale = strdup(setlocale(LC_CTYPE, NULL));
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000257 setlocale(LC_CTYPE, "");
258 codeset = nl_langinfo(CODESET);
259 if (codeset && *codeset) {
260 PyObject *enc = PyCodec_Encoder(codeset);
261 if (enc) {
262 codeset = strdup(codeset);
263 Py_DECREF(enc);
264 } else {
265 codeset = NULL;
266 PyErr_Clear();
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000267 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000268 } else
269 codeset = NULL;
270 setlocale(LC_CTYPE, saved_locale);
Martin v. Löwisf56d0152003-11-13 07:43:21 +0000271 free(saved_locale);
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000272
273 if (codeset) {
Michael W. Hudson68debc92003-08-11 12:20:24 +0000274 sys_stream = PySys_GetObject("stdin");
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000275 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
276 if (!sys_isatty)
277 PyErr_Clear();
Thomas Woutersb2137042007-02-01 18:02:27 +0000278 if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
279 PyFile_Check(sys_stream)) {
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000280 if (!PyFile_SetEncoding(sys_stream, codeset))
281 Py_FatalError("Cannot set codeset of stdin");
282 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000283 Py_XDECREF(sys_isatty);
284
285 sys_stream = PySys_GetObject("stdout");
286 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
287 if (!sys_isatty)
288 PyErr_Clear();
Thomas Woutersb2137042007-02-01 18:02:27 +0000289 if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
290 PyFile_Check(sys_stream)) {
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000291 if (!PyFile_SetEncoding(sys_stream, codeset))
292 Py_FatalError("Cannot set codeset of stdout");
293 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000294 Py_XDECREF(sys_isatty);
295
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000296 sys_stream = PySys_GetObject("stderr");
297 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
298 if (!sys_isatty)
299 PyErr_Clear();
Thomas Woutersb2137042007-02-01 18:02:27 +0000300 if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
301 PyFile_Check(sys_stream)) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000302 if (!PyFile_SetEncoding(sys_stream, codeset))
303 Py_FatalError("Cannot set codeset of stderr");
304 }
305 Py_XDECREF(sys_isatty);
306
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000307 if (!Py_FileSystemDefaultEncoding)
308 Py_FileSystemDefaultEncoding = codeset;
309 else
310 free(codeset);
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000311 }
312#endif
Guido van Rossum25ce5661997-08-02 03:10:38 +0000313}
314
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000315void
316Py_Initialize(void)
317{
318 Py_InitializeEx(1);
319}
320
321
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000322#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000323extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000324#endif
325
Guido van Rossum25ce5661997-08-02 03:10:38 +0000326/* Undo the effect of Py_Initialize().
327
328 Beware: if multiple interpreter and/or thread states exist, these
329 are not wiped out; only the current thread and interpreter state
330 are deleted. But since everything else is deleted, those other
331 interpreter and thread states should no longer be used.
332
333 (XXX We should do better, e.g. wipe out all interpreters and
334 threads.)
335
336 Locking: as above.
337
338*/
339
340void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000341Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000342{
343 PyInterpreterState *interp;
344 PyThreadState *tstate;
345
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000346 if (!initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000347 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000348
Tim Peters384fd102001-01-21 03:40:37 +0000349 /* The interpreter is still entirely intact at this point, and the
350 * exit funcs may be relying on that. In particular, if some thread
351 * or exit func is still waiting to do an import, the import machinery
352 * expects Py_IsInitialized() to return true. So don't say the
353 * interpreter is uninitialized until after the exit funcs have run.
354 * Note that Threading.py uses an exit func to do a join on all the
355 * threads created thru it, so this also protects pending imports in
356 * the threads created via Threading.
357 */
Collin Winter670e6922007-03-21 02:57:17 +0000358 call_py_exitfuncs();
Tim Peters384fd102001-01-21 03:40:37 +0000359 initialized = 0;
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000360
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000361 /* Get current thread state and interpreter pointer */
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000362 tstate = PyThreadState_GET();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000363 interp = tstate->interp;
364
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000365 /* Disable signal handling */
366 PyOS_FiniInterrupts();
367
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000368 /* drop module references we saved */
Mark Hammondedd07732003-07-15 23:03:55 +0000369 Py_XDECREF(warnings_module);
370 warnings_module = NULL;
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000371
Guido van Rossume13ddc92003-04-17 17:29:22 +0000372 /* Collect garbage. This may call finalizers; it's nice to call these
Tim Peters1d7323e2003-12-01 21:35:27 +0000373 * before all modules are destroyed.
374 * XXX If a __del__ or weakref callback is triggered here, and tries to
375 * XXX import a module, bad things can happen, because Python no
376 * XXX longer believes it's initialized.
377 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
378 * XXX is easy to provoke that way. I've also seen, e.g.,
379 * XXX Exception exceptions.ImportError: 'No module named sha'
380 * XXX in <function callback at 0x008F5718> ignored
381 * XXX but I'm unclear on exactly how that one happens. In any case,
382 * XXX I haven't seen a real-life report of either of these.
Neal Norwitz9589ee22006-03-04 19:01:22 +0000383 */
Guido van Rossume13ddc92003-04-17 17:29:22 +0000384 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000385#ifdef COUNT_ALLOCS
386 /* With COUNT_ALLOCS, it helps to run GC multiple times:
387 each collection might release some types from the type
388 list, so they become garbage. */
389 while (PyGC_Collect() > 0)
390 /* nothing */;
391#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000392
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000393 /* Destroy all modules */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000394 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000395
Guido van Rossume13ddc92003-04-17 17:29:22 +0000396 /* Collect final garbage. This disposes of cycles created by
Tim Peters1d7323e2003-12-01 21:35:27 +0000397 * new-style class definitions, for example.
398 * XXX This is disabled because it caused too many problems. If
399 * XXX a __del__ or weakref callback triggers here, Python code has
400 * XXX a hard time running, because even the sys module has been
401 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
402 * XXX One symptom is a sequence of information-free messages
403 * XXX coming from threads (if a __del__ or callback is invoked,
404 * XXX other threads can execute too, and any exception they encounter
405 * XXX triggers a comedy of errors as subsystem after subsystem
406 * XXX fails to find what it *expects* to find in sys to help report
407 * XXX the exception and consequent unexpected failures). I've also
408 * XXX seen segfaults then, after adding print statements to the
409 * XXX Python code getting called.
410 */
411#if 0
Guido van Rossume13ddc92003-04-17 17:29:22 +0000412 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000413#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000414
Guido van Rossum1707aad1997-12-08 23:43:45 +0000415 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
416 _PyImport_Fini();
417
418 /* Debugging stuff */
419#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000420 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000421#endif
422
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000423 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000424
Tim Peters9cf25ce2003-04-17 15:21:01 +0000425#ifdef Py_TRACE_REFS
426 /* Display all objects still alive -- this can invoke arbitrary
427 * __repr__ overrides, so requires a mostly-intact interpreter.
428 * Alas, a lot of stuff may still be alive now that will be cleaned
429 * up later.
430 */
Tim Peters269b2a62003-04-17 19:52:29 +0000431 if (Py_GETENV("PYTHONDUMPREFS"))
Tim Peters9cf25ce2003-04-17 15:21:01 +0000432 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000433#endif /* Py_TRACE_REFS */
434
Mark Hammond6cb90292003-04-22 11:18:00 +0000435 /* Cleanup auto-thread-state */
436#ifdef WITH_THREAD
437 _PyGILState_Fini();
438#endif /* WITH_THREAD */
439
Guido van Rossumd922fa42003-04-15 14:10:09 +0000440 /* Clear interpreter state */
Barry Warsawf242aa02000-05-25 23:09:49 +0000441 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000442
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000443 /* Now we decref the exception classes. After this point nothing
444 can raise an exception. That's okay, because each Fini() method
445 below has been checked to make sure no exceptions are ever
446 raised.
447 */
448
449 _PyExc_Fini();
450
Guido van Rossumd922fa42003-04-15 14:10:09 +0000451 /* Delete current thread */
Barry Warsawf242aa02000-05-25 23:09:49 +0000452 PyThreadState_Swap(NULL);
453 PyInterpreterState_Delete(interp);
454
Guido van Rossumd922fa42003-04-15 14:10:09 +0000455 /* Sundry finalizers */
Guido van Rossumcc283f51997-08-05 02:22:03 +0000456 PyMethod_Fini();
457 PyFrame_Fini();
458 PyCFunction_Fini();
459 PyTuple_Fini();
Raymond Hettingerfb09f0e2004-10-07 03:58:07 +0000460 PyList_Fini();
Raymond Hettingerd7946662005-08-01 21:39:29 +0000461 PySet_Fini();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000462 PyString_Fini();
Neal Norwitz6968b052007-02-27 19:02:19 +0000463 PyBytes_Fini();
Guido van Rossumddefaf32007-01-14 03:31:43 +0000464 PyLong_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000465 PyFloat_Fini();
466
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000467#ifdef Py_USING_UNICODE
468 /* Cleanup Unicode implementation */
469 _PyUnicode_Fini();
470#endif
471
Guido van Rossumcc283f51997-08-05 02:22:03 +0000472 /* XXX Still allocated:
473 - various static ad-hoc pointers to interned strings
474 - int and float free list blocks
475 - whatever various modules and libraries allocate
476 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000477
478 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000479
Tim Peters269b2a62003-04-17 19:52:29 +0000480#ifdef Py_TRACE_REFS
481 /* Display addresses (& refcnts) of all objects still alive.
482 * An address can be used to find the repr of the object, printed
483 * above by _Py_PrintReferences.
484 */
485 if (Py_GETENV("PYTHONDUMPREFS"))
486 _Py_PrintReferenceAddresses(stderr);
487#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000488#ifdef PYMALLOC_DEBUG
489 if (Py_GETENV("PYTHONMALLOCSTATS"))
490 _PyObject_DebugMallocStats();
491#endif
492
Guido van Rossumcc283f51997-08-05 02:22:03 +0000493 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000494}
495
496/* Create and initialize a new interpreter and thread, and return the
497 new thread. This requires that Py_Initialize() has been called
498 first.
499
500 Unsuccessful initialization yields a NULL pointer. Note that *no*
501 exception information is available even in this case -- the
502 exception information is held in the thread, and there is no
503 thread.
504
505 Locking: as above.
506
507*/
508
509PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000510Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000511{
512 PyInterpreterState *interp;
513 PyThreadState *tstate, *save_tstate;
514 PyObject *bimod, *sysmod;
515
516 if (!initialized)
517 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
518
519 interp = PyInterpreterState_New();
520 if (interp == NULL)
521 return NULL;
522
523 tstate = PyThreadState_New(interp);
524 if (tstate == NULL) {
525 PyInterpreterState_Delete(interp);
526 return NULL;
527 }
528
529 save_tstate = PyThreadState_Swap(tstate);
530
531 /* XXX The following is lax in error checking */
532
533 interp->modules = PyDict_New();
534
535 bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
536 if (bimod != NULL) {
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000537 interp->builtins = PyModule_GetDict(bimod);
Thomas Wouters89f507f2006-12-13 04:49:30 +0000538 if (interp->builtins == NULL)
539 goto handle_error;
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000540 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000541 }
542 sysmod = _PyImport_FindExtension("sys", "sys");
543 if (bimod != NULL && sysmod != NULL) {
544 interp->sysdict = PyModule_GetDict(sysmod);
Thomas Wouters89f507f2006-12-13 04:49:30 +0000545 if (interp->sysdict == NULL)
546 goto handle_error;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000547 Py_INCREF(interp->sysdict);
548 PySys_SetPath(Py_GetPath());
549 PyDict_SetItemString(interp->sysdict, "modules",
550 interp->modules);
Martin v. Löwisd7ceb222003-01-22 09:00:38 +0000551 _PyImportHooks_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000552 initmain();
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000553 if (!Py_NoSiteFlag)
554 initsite();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000555 }
556
557 if (!PyErr_Occurred())
558 return tstate;
559
Thomas Wouters89f507f2006-12-13 04:49:30 +0000560handle_error:
Guido van Rossum25ce5661997-08-02 03:10:38 +0000561 /* Oops, it didn't work. Undo it all. */
562
563 PyErr_Print();
564 PyThreadState_Clear(tstate);
565 PyThreadState_Swap(save_tstate);
566 PyThreadState_Delete(tstate);
567 PyInterpreterState_Delete(interp);
568
569 return NULL;
570}
571
572/* Delete an interpreter and its last thread. This requires that the
573 given thread state is current, that the thread has no remaining
574 frames, and that it is its interpreter's only remaining thread.
575 It is a fatal error to violate these constraints.
576
577 (Py_Finalize() doesn't have these constraints -- it zaps
578 everything, regardless.)
579
580 Locking: as above.
581
582*/
583
584void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000585Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000586{
587 PyInterpreterState *interp = tstate->interp;
588
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000589 if (tstate != PyThreadState_GET())
Guido van Rossum25ce5661997-08-02 03:10:38 +0000590 Py_FatalError("Py_EndInterpreter: thread is not current");
591 if (tstate->frame != NULL)
592 Py_FatalError("Py_EndInterpreter: thread still has a frame");
593 if (tstate != interp->tstate_head || tstate->next != NULL)
594 Py_FatalError("Py_EndInterpreter: not the last thread");
595
596 PyImport_Cleanup();
597 PyInterpreterState_Clear(interp);
598 PyThreadState_Swap(NULL);
599 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000600}
601
602static char *progname = "python";
603
604void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000605Py_SetProgramName(char *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000606{
607 if (pn && *pn)
608 progname = pn;
609}
610
611char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000612Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000613{
614 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000615}
616
Guido van Rossuma61691e1998-02-06 22:27:24 +0000617static char *default_home = NULL;
618
619void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000620Py_SetPythonHome(char *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000621{
622 default_home = home;
623}
624
625char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000626Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000627{
628 char *home = default_home;
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000629 if (home == NULL && !Py_IgnoreEnvironmentFlag)
630 home = Py_GETENV("PYTHONHOME");
Guido van Rossuma61691e1998-02-06 22:27:24 +0000631 return home;
632}
633
Guido van Rossum6135a871995-01-09 17:53:26 +0000634/* Create __main__ module */
635
636static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000637initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000638{
Guido van Rossum82598051997-03-05 00:20:32 +0000639 PyObject *m, *d;
640 m = PyImport_AddModule("__main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000641 if (m == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000642 Py_FatalError("can't create __main__ module");
643 d = PyModule_GetDict(m);
644 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
Guido van Rossum858cb731997-11-19 16:15:37 +0000645 PyObject *bimod = PyImport_ImportModule("__builtin__");
646 if (bimod == NULL ||
647 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
Guido van Rossum82598051997-03-05 00:20:32 +0000648 Py_FatalError("can't add __builtins__ to __main__");
Barry Warsaw3d05b1a1999-01-29 21:30:22 +0000649 Py_DECREF(bimod);
Guido van Rossum6135a871995-01-09 17:53:26 +0000650 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000651}
652
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000653/* Import the site module (not into __main__ though) */
654
655static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000656initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000657{
658 PyObject *m, *f;
659 m = PyImport_ImportModule("site");
660 if (m == NULL) {
661 f = PySys_GetObject("stderr");
662 if (Py_VerboseFlag) {
663 PyFile_WriteString(
664 "'import site' failed; traceback:\n", f);
665 PyErr_Print();
666 }
667 else {
668 PyFile_WriteString(
669 "'import site' failed; use -v for traceback\n", f);
670 PyErr_Clear();
671 }
672 }
673 else {
674 Py_DECREF(m);
675 }
676}
677
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000678/* Parse input from a file and execute it */
679
680int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +0000681PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000682 PyCompilerFlags *flags)
683{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000684 if (filename == NULL)
685 filename = "???";
Guido van Rossum0df002c2000-08-27 19:21:52 +0000686 if (Py_FdIsInteractive(fp, filename)) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000687 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
Guido van Rossum0df002c2000-08-27 19:21:52 +0000688 if (closeit)
689 fclose(fp);
690 return err;
691 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000692 else
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000693 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000694}
695
696int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000697PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000698{
Guido van Rossum82598051997-03-05 00:20:32 +0000699 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000700 int ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000701 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000702
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000703 if (flags == NULL) {
704 flags = &local_flags;
Tim Peters5ba58662001-07-16 02:29:45 +0000705 local_flags.cf_flags = 0;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000706 }
Guido van Rossum82598051997-03-05 00:20:32 +0000707 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000708 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000709 PySys_SetObject("ps1", v = PyString_FromString(">>> "));
710 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000711 }
Guido van Rossum82598051997-03-05 00:20:32 +0000712 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000713 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000714 PySys_SetObject("ps2", v = PyString_FromString("... "));
715 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000716 }
717 for (;;) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000718 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000719 PRINT_TOTAL_REFS();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000720 if (ret == E_EOF)
721 return 0;
722 /*
723 if (ret == E_NOMEM)
724 return -1;
725 */
726 }
727}
728
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000729/* compute parser flags based on compiler flags */
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000730#define PARSER_FLAGS(flags) \
Thomas Wouters34aa7ba2006-02-28 19:02:24 +0000731 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
Guido van Rossum45aecf42006-03-15 04:58:47 +0000732 PyPARSE_DONT_IMPLY_DEDENT : 0)) : 0)
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000733
Thomas Wouters89f507f2006-12-13 04:49:30 +0000734#if 0
735/* Keep an example of flags with future keyword support. */
736#define PARSER_FLAGS(flags) \
737 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
738 PyPARSE_DONT_IMPLY_DEDENT : 0) \
739 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
740 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
741#endif
742
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000743int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000744PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000745{
Guido van Rossum82598051997-03-05 00:20:32 +0000746 PyObject *m, *d, *v, *w;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000747 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +0000748 PyArena *arena;
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000749 char *ps1 = "", *ps2 = "";
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000750 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +0000751
Guido van Rossum82598051997-03-05 00:20:32 +0000752 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000753 if (v != NULL) {
754 v = PyObject_Str(v);
755 if (v == NULL)
756 PyErr_Clear();
757 else if (PyString_Check(v))
758 ps1 = PyString_AsString(v);
759 }
Guido van Rossum82598051997-03-05 00:20:32 +0000760 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000761 if (w != NULL) {
762 w = PyObject_Str(w);
763 if (w == NULL)
764 PyErr_Clear();
765 else if (PyString_Check(w))
766 ps2 = PyString_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000767 }
Neal Norwitz9589ee22006-03-04 19:01:22 +0000768 arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000769 if (arena == NULL) {
770 Py_XDECREF(v);
771 Py_XDECREF(w);
772 return -1;
773 }
Thomas Wouters4d70c3d2006-06-08 14:42:34 +0000774 mod = PyParser_ASTFromFile(fp, filename,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000775 Py_single_input, ps1, ps2,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000776 flags, &errcode, arena);
Guido van Rossum82598051997-03-05 00:20:32 +0000777 Py_XDECREF(v);
778 Py_XDECREF(w);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000779 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000780 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000781 if (errcode == E_EOF) {
782 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000783 return E_EOF;
784 }
Guido van Rossum82598051997-03-05 00:20:32 +0000785 PyErr_Print();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000786 return -1;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000787 }
Guido van Rossum82598051997-03-05 00:20:32 +0000788 m = PyImport_AddModule("__main__");
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000789 if (m == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000790 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000791 return -1;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000792 }
Guido van Rossum82598051997-03-05 00:20:32 +0000793 d = PyModule_GetDict(m);
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000794 v = run_mod(mod, filename, d, d, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +0000795 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000796 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000797 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000798 return -1;
799 }
Guido van Rossum82598051997-03-05 00:20:32 +0000800 Py_DECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000801 return 0;
802}
803
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000804/* Check whether a file maybe a pyc file: Look at the extension,
805 the file type, and, if we may close it, at the first few bytes. */
806
807static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000808maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000809{
810 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
811 return 1;
812
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000813 /* Only look into the file if we are allowed to close it, since
814 it then should also be seekable. */
815 if (closeit) {
816 /* Read only two bytes of the magic. If the file was opened in
817 text mode, the bytes 3 and 4 of the magic (\r\n) might not
818 be read as they are on disk. */
819 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
820 unsigned char buf[2];
Tim Peters3e876562001-02-11 04:35:39 +0000821 /* Mess: In case of -x, the stream is NOT at its start now,
822 and ungetc() was used to push back the first newline,
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000823 which makes the current stream position formally undefined,
824 and a x-platform nightmare.
825 Unfortunately, we have no direct way to know whether -x
826 was specified. So we use a terrible hack: if the current
827 stream position is not 0, we assume -x was specified, and
828 give up. Bug 132850 on SourceForge spells out the
829 hopelessness of trying anything else (fseek and ftell
830 don't work predictably x-platform for text-mode files).
Tim Peters3e876562001-02-11 04:35:39 +0000831 */
Tim Peters3e876562001-02-11 04:35:39 +0000832 int ispyc = 0;
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000833 if (ftell(fp) == 0) {
834 if (fread(buf, 1, 2, fp) == 2 &&
Tim Petersd08e3822003-04-17 15:24:21 +0000835 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000836 ispyc = 1;
837 rewind(fp);
838 }
Tim Peters3e876562001-02-11 04:35:39 +0000839 return ispyc;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000840 }
841 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +0000842}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000843
Guido van Rossum0df002c2000-08-27 19:21:52 +0000844int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000845PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000846 PyCompilerFlags *flags)
847{
Guido van Rossum82598051997-03-05 00:20:32 +0000848 PyObject *m, *d, *v;
Martin v. Löwis95292d62002-12-11 14:04:59 +0000849 const char *ext;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000850
Guido van Rossum82598051997-03-05 00:20:32 +0000851 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000852 if (m == NULL)
853 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000854 d = PyModule_GetDict(m);
Fred Drake8ed02042002-10-17 21:24:58 +0000855 if (PyDict_GetItemString(d, "__file__") == NULL) {
856 PyObject *f = PyString_FromString(filename);
857 if (f == NULL)
858 return -1;
859 if (PyDict_SetItemString(d, "__file__", f) < 0) {
860 Py_DECREF(f);
861 return -1;
862 }
863 Py_DECREF(f);
864 }
Guido van Rossumfdef2711994-09-14 13:31:04 +0000865 ext = filename + strlen(filename) - 4;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000866 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000867 /* Try to run a pyc file. First, re-open in binary */
Guido van Rossum0df002c2000-08-27 19:21:52 +0000868 if (closeit)
869 fclose(fp);
Fred Drake8ed02042002-10-17 21:24:58 +0000870 if ((fp = fopen(filename, "rb")) == NULL) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000871 fprintf(stderr, "python: Can't reopen .pyc file\n");
872 return -1;
873 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000874 /* Turn on optimization if a .pyo file is given */
875 if (strcmp(ext, ".pyo") == 0)
876 Py_OptimizeFlag = 1;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000877 v = run_pyc_file(fp, filename, d, d, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000878 } else {
Tim Petersd08e3822003-04-17 15:24:21 +0000879 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000880 closeit, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000881 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000882 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000883 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000884 return -1;
885 }
Guido van Rossum82598051997-03-05 00:20:32 +0000886 Py_DECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000887 return 0;
888}
889
890int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000891PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +0000892{
Guido van Rossum82598051997-03-05 00:20:32 +0000893 PyObject *m, *d, *v;
894 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000895 if (m == NULL)
896 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000897 d = PyModule_GetDict(m);
Guido van Rossum393661d2001-08-31 17:40:15 +0000898 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000899 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000900 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000901 return -1;
902 }
Guido van Rossum82598051997-03-05 00:20:32 +0000903 Py_DECREF(v);
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 fflush(stdout);
1019 if (value == NULL || value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001020 goto done;
Brett Cannonbf364092006-03-01 04:25:17 +00001021 if (PyExceptionInstance_Check(value)) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001022 /* The error code should be in the `code' attribute. */
1023 PyObject *code = PyObject_GetAttrString(value, "code");
1024 if (code) {
1025 Py_DECREF(value);
1026 value = code;
1027 if (value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001028 goto done;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001029 }
1030 /* If we failed to dig out the 'code' attribute,
1031 just let the else clause below print the error. */
1032 }
1033 if (PyInt_Check(value))
Tim Peterscf615b52003-04-19 18:47:02 +00001034 exitcode = (int)PyInt_AsLong(value);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001035 else {
1036 PyObject_Print(value, stderr, Py_PRINT_RAW);
1037 PySys_WriteStderr("\n");
Tim Peterscf615b52003-04-19 18:47:02 +00001038 exitcode = 1;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001039 }
Tim Peterscf615b52003-04-19 18:47:02 +00001040 done:
Neal Norwitz9589ee22006-03-04 19:01:22 +00001041 /* Restore and clear the exception info, in order to properly decref
1042 * the exception, value, and traceback. If we just exit instead,
1043 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1044 * some finalizers from running.
1045 */
Tim Peterscf615b52003-04-19 18:47:02 +00001046 PyErr_Restore(exception, value, tb);
1047 PyErr_Clear();
1048 Py_Exit(exitcode);
1049 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001050}
1051
1052void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001053PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001054{
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001055 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001056
1057 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1058 handle_system_exit();
1059 }
Guido van Rossum82598051997-03-05 00:20:32 +00001060 PyErr_Fetch(&exception, &v, &tb);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001061 if (exception == NULL)
1062 return;
Barry Warsaw035574d1997-08-29 22:07:17 +00001063 PyErr_NormalizeException(&exception, &v, &tb);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001064 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +00001065 return;
Guido van Rossum9d785502006-03-07 18:31:44 +00001066 /* Now we know v != NULL too */
Guido van Rossuma61691e1998-02-06 22:27:24 +00001067 if (set_sys_last_vars) {
1068 PySys_SetObject("last_type", exception);
1069 PySys_SetObject("last_value", v);
1070 PySys_SetObject("last_traceback", tb);
1071 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001072 hook = PySys_GetObject("excepthook");
1073 if (hook) {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00001074 PyObject *args = PyTuple_Pack(3,
Guido van Rossum9d785502006-03-07 18:31:44 +00001075 exception, v, tb ? tb : Py_None);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001076 PyObject *result = PyEval_CallObject(hook, args);
1077 if (result == NULL) {
1078 PyObject *exception2, *v2, *tb2;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001079 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1080 handle_system_exit();
1081 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001082 PyErr_Fetch(&exception2, &v2, &tb2);
1083 PyErr_NormalizeException(&exception2, &v2, &tb2);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001084 /* It should not be possible for exception2 or v2
1085 to be NULL. However PyErr_Display() can't
1086 tolerate NULLs, so just be safe. */
1087 if (exception2 == NULL) {
1088 exception2 = Py_None;
1089 Py_INCREF(exception2);
1090 }
1091 if (v2 == NULL) {
1092 v2 = Py_None;
1093 Py_INCREF(v2);
1094 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001095 fflush(stdout);
1096 PySys_WriteStderr("Error in sys.excepthook:\n");
1097 PyErr_Display(exception2, v2, tb2);
1098 PySys_WriteStderr("\nOriginal exception was:\n");
1099 PyErr_Display(exception, v, tb);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001100 Py_DECREF(exception2);
1101 Py_DECREF(v2);
Jeremy Hylton07028582001-12-07 15:35:35 +00001102 Py_XDECREF(tb2);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001103 }
1104 Py_XDECREF(result);
1105 Py_XDECREF(args);
1106 } else {
1107 PySys_WriteStderr("sys.excepthook is missing\n");
1108 PyErr_Display(exception, v, tb);
1109 }
1110 Py_XDECREF(exception);
1111 Py_XDECREF(v);
1112 Py_XDECREF(tb);
1113}
1114
Thomas Wouters477c8d52006-05-27 19:21:47 +00001115void
1116PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001117{
1118 int err = 0;
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001119 PyObject *f = PySys_GetObject("stderr");
Armin Rigo5d2c6832004-03-22 20:16:58 +00001120 Py_INCREF(value);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001121 if (f == NULL)
1122 fprintf(stderr, "lost sys.stderr\n");
1123 else {
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001124 fflush(stdout);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001125 if (tb && tb != Py_None)
1126 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +00001127 if (err == 0 &&
Armin Rigo5d2c6832004-03-22 20:16:58 +00001128 PyObject_HasAttrString(value, "print_file_and_line"))
Barry Warsaw36b8f941997-08-26 18:09:48 +00001129 {
Guido van Rossum82598051997-03-05 00:20:32 +00001130 PyObject *message;
Martin v. Löwis95292d62002-12-11 14:04:59 +00001131 const char *filename, *text;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001132 int lineno, offset;
Armin Rigo5d2c6832004-03-22 20:16:58 +00001133 if (!parse_syntax_error(value, &message, &filename,
Barry Warsaw035574d1997-08-29 22:07:17 +00001134 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +00001135 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001136 else {
1137 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +00001138 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001139 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +00001140 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001141 else
Guido van Rossum82598051997-03-05 00:20:32 +00001142 PyFile_WriteString(filename, f);
1143 PyFile_WriteString("\", line ", f);
Jeremy Hylton518ab1c2001-11-28 20:42:20 +00001144 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +00001145 PyFile_WriteString(buf, f);
1146 PyFile_WriteString("\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001147 if (text != NULL)
1148 print_error_text(f, offset, text);
Armin Rigo5d2c6832004-03-22 20:16:58 +00001149 Py_DECREF(value);
1150 value = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001151 /* Can't be bothered to check all those
1152 PyFile_WriteString() calls */
1153 if (PyErr_Occurred())
1154 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001155 }
1156 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001157 if (err) {
1158 /* Don't do anything else */
1159 }
Brett Cannonbf364092006-03-01 04:25:17 +00001160 else if (PyExceptionClass_Check(exception)) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001161 PyObject* moduleName;
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001162 char* className = PyExceptionClass_Name(exception);
1163 if (className != NULL) {
1164 char *dot = strrchr(className, '.');
1165 if (dot != NULL)
1166 className = dot+1;
1167 }
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001168
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001169 moduleName = PyObject_GetAttrString(exception, "__module__");
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001170 if (moduleName == NULL)
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001171 err = PyFile_WriteString("<unknown>", f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001172 else {
1173 char* modstr = PyString_AsString(moduleName);
Neal Norwitz2633c692007-02-26 22:22:47 +00001174 if (modstr && strcmp(modstr, "__builtin__"))
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001175 {
1176 err = PyFile_WriteString(modstr, f);
1177 err += PyFile_WriteString(".", f);
1178 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001179 Py_DECREF(moduleName);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001180 }
1181 if (err == 0) {
1182 if (className == NULL)
1183 err = PyFile_WriteString("<unknown>", f);
1184 else
Brett Cannonbf364092006-03-01 04:25:17 +00001185 err = PyFile_WriteString(className, f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001186 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001187 }
1188 else
1189 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
Brett Cannon2e63b732006-03-02 18:34:57 +00001190 if (err == 0 && (value != Py_None)) {
1191 PyObject *s = PyObject_Str(value);
1192 /* only print colon if the str() of the
1193 object is not the empty string
1194 */
1195 if (s == NULL)
1196 err = -1;
1197 else if (!PyString_Check(s) ||
1198 PyString_GET_SIZE(s) != 0)
1199 err = PyFile_WriteString(": ", f);
1200 if (err == 0)
1201 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1202 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +00001203 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001204 if (err == 0)
1205 err = PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001206 }
Armin Rigo5d2c6832004-03-22 20:16:58 +00001207 Py_DECREF(value);
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001208 /* If an error happened here, don't show it.
1209 XXX This is wrong, but too many callers rely on this behavior. */
1210 if (err != 0)
1211 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001212}
1213
Guido van Rossum82598051997-03-05 00:20:32 +00001214PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001215PyRun_StringFlags(const char *str, int start, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001216 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001217{
Neal Norwitze92fba02006-03-04 18:52:26 +00001218 PyObject *ret = NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001219 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001220 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001221 if (arena == NULL)
1222 return NULL;
1223
1224 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
Neal Norwitze92fba02006-03-04 18:52:26 +00001225 if (mod != NULL)
1226 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001227 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001228 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001229}
1230
1231PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001232PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001233 PyObject *locals, int closeit, PyCompilerFlags *flags)
1234{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001235 PyObject *ret;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001236 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001237 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001238 if (arena == NULL)
1239 return NULL;
1240
1241 mod = PyParser_ASTFromFile(fp, filename, start, 0, 0,
1242 flags, NULL, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001243 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001244 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001245 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001246 }
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001247 if (closeit)
1248 fclose(fp);
Neal Norwitze92fba02006-03-04 18:52:26 +00001249 ret = run_mod(mod, filename, globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001250 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001251 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001252}
1253
Guido van Rossum82598051997-03-05 00:20:32 +00001254static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001255run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001256 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001257{
Guido van Rossum82598051997-03-05 00:20:32 +00001258 PyCodeObject *co;
1259 PyObject *v;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001260 co = PyAST_Compile(mod, filename, flags, arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001261 if (co == NULL)
1262 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +00001263 v = PyEval_EvalCode(co, globals, locals);
1264 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001265 return v;
1266}
1267
Guido van Rossum82598051997-03-05 00:20:32 +00001268static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001269run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001270 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001271{
Guido van Rossum82598051997-03-05 00:20:32 +00001272 PyCodeObject *co;
1273 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001274 long magic;
Fred Drakee8de31c2000-08-31 05:38:39 +00001275 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001276
Guido van Rossum82598051997-03-05 00:20:32 +00001277 magic = PyMarshal_ReadLongFromFile(fp);
1278 if (magic != PyImport_GetMagicNumber()) {
1279 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001280 "Bad magic number in .pyc file");
1281 return NULL;
1282 }
Guido van Rossum82598051997-03-05 00:20:32 +00001283 (void) PyMarshal_ReadLongFromFile(fp);
Tim Petersd9b9ac82001-01-28 00:27:39 +00001284 v = PyMarshal_ReadLastObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001285 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +00001286 if (v == NULL || !PyCode_Check(v)) {
1287 Py_XDECREF(v);
1288 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001289 "Bad code object in .pyc file");
1290 return NULL;
1291 }
Guido van Rossum82598051997-03-05 00:20:32 +00001292 co = (PyCodeObject *)v;
1293 v = PyEval_EvalCode(co, globals, locals);
Jeremy Hyltonb857ba22001-08-10 21:41:33 +00001294 if (v && flags)
1295 flags->cf_flags |= (co->co_flags & PyCF_MASK);
Guido van Rossum82598051997-03-05 00:20:32 +00001296 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001297 return v;
1298}
1299
Guido van Rossum82598051997-03-05 00:20:32 +00001300PyObject *
Tim Petersd08e3822003-04-17 15:24:21 +00001301Py_CompileStringFlags(const char *str, const char *filename, int start,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001302 PyCompilerFlags *flags)
1303{
Guido van Rossum82598051997-03-05 00:20:32 +00001304 PyCodeObject *co;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001305 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001306 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001307 if (arena == NULL)
1308 return NULL;
1309
1310 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001311 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001312 PyArena_Free(arena);
Guido van Rossum5b722181993-03-30 17:46:03 +00001313 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001314 }
Martin v. Löwis2b366e42006-02-26 22:12:35 +00001315 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001316 PyObject *result = PyAST_mod2obj(mod);
1317 PyArena_Free(arena);
1318 return result;
1319 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001320 co = PyAST_Compile(mod, filename, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001321 PyArena_Free(arena);
Guido van Rossum82598051997-03-05 00:20:32 +00001322 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001323}
1324
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001325struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001326Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001327{
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001328 struct symtable *st;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001329 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001330 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001331 if (arena == NULL)
1332 return NULL;
1333
1334 mod = PyParser_ASTFromString(str, filename, start, NULL, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001335 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001336 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001337 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001338 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001339 st = PySymtable_Build(mod, filename, 0);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001340 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001341 return st;
1342}
1343
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001344/* Preferred access to parser is through AST. */
1345mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001346PyParser_ASTFromString(const char *s, const char *filename, int start,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001347 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001348{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001349 mod_ty mod;
1350 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001351 node *n = PyParser_ParseStringFlagsFilename(s, filename,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001352 &_PyParser_Grammar, start, &err,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001353 PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001354 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001355 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001356 PyNode_Free(n);
1357 return mod;
1358 }
1359 else {
1360 err_input(&err);
1361 return NULL;
1362 }
1363}
1364
1365mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001366PyParser_ASTFromFile(FILE *fp, const char *filename, int start, char *ps1,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001367 char *ps2, PyCompilerFlags *flags, int *errcode,
Neal Norwitz9589ee22006-03-04 19:01:22 +00001368 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001369{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001370 mod_ty mod;
1371 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001372 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
1373 start, ps1, ps2, &err, PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001374 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001375 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001376 PyNode_Free(n);
1377 return mod;
1378 }
1379 else {
1380 err_input(&err);
1381 if (errcode)
1382 *errcode = err.error;
1383 return NULL;
1384 }
1385}
1386
Guido van Rossuma110aa61994-08-29 12:50:44 +00001387/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001388
Guido van Rossuma110aa61994-08-29 12:50:44 +00001389node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001390PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001391{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001392 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001393 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
1394 start, NULL, NULL, &err, flags);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001395 if (n == NULL)
1396 err_input(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001397
Guido van Rossuma110aa61994-08-29 12:50:44 +00001398 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001399}
1400
Guido van Rossuma110aa61994-08-29 12:50:44 +00001401/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001402
Guido van Rossuma110aa61994-08-29 12:50:44 +00001403node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001404PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001405{
Tim Petersfe2127d2001-07-16 05:37:24 +00001406 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001407 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1408 start, &err, flags);
Tim Petersfe2127d2001-07-16 05:37:24 +00001409 if (n == NULL)
1410 err_input(&err);
1411 return n;
1412}
1413
1414node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001415PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Thomas Heller6b17abf2002-07-09 09:23:27 +00001416 int start, int flags)
1417{
Thomas Heller6b17abf2002-07-09 09:23:27 +00001418 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001419 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1420 &_PyParser_Grammar, start, &err, flags);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001421 if (n == NULL)
1422 err_input(&err);
1423 return n;
1424}
1425
1426node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001427PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001428{
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001429 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001430}
1431
Guido van Rossum66ebd912003-04-17 16:02:26 +00001432/* May want to move a more generalized form of this to parsetok.c or
1433 even parser modules. */
1434
1435void
1436PyParser_SetError(perrdetail *err)
1437{
1438 err_input(err);
1439}
1440
Guido van Rossuma110aa61994-08-29 12:50:44 +00001441/* Set the error appropriate to the given input error code (see errcode.h) */
1442
1443static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001444err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00001445{
Fred Drake85f36392000-07-11 17:53:00 +00001446 PyObject *v, *w, *errtype;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001447 PyObject* u = NULL;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001448 char *msg = NULL;
Fred Drake85f36392000-07-11 17:53:00 +00001449 errtype = PyExc_SyntaxError;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001450 switch (err->error) {
1451 case E_SYNTAX:
Fred Drake85f36392000-07-11 17:53:00 +00001452 errtype = PyExc_IndentationError;
1453 if (err->expected == INDENT)
1454 msg = "expected an indented block";
1455 else if (err->token == INDENT)
1456 msg = "unexpected indent";
1457 else if (err->token == DEDENT)
1458 msg = "unexpected unindent";
1459 else {
1460 errtype = PyExc_SyntaxError;
1461 msg = "invalid syntax";
1462 }
Guido van Rossuma110aa61994-08-29 12:50:44 +00001463 break;
1464 case E_TOKEN:
1465 msg = "invalid token";
Guido van Rossuma110aa61994-08-29 12:50:44 +00001466 break;
Skip Montanaro118ec702002-08-15 01:20:16 +00001467 case E_EOFS:
1468 msg = "EOF while scanning triple-quoted string";
1469 break;
1470 case E_EOLS:
1471 msg = "EOL while scanning single-quoted string";
1472 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001473 case E_INTR:
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001474 if (!PyErr_Occurred())
1475 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001476 return;
1477 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +00001478 PyErr_NoMemory();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001479 return;
1480 case E_EOF:
1481 msg = "unexpected EOF while parsing";
1482 break;
Fred Drake85f36392000-07-11 17:53:00 +00001483 case E_TABSPACE:
1484 errtype = PyExc_TabError;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001485 msg = "inconsistent use of tabs and spaces in indentation";
1486 break;
Jeremy Hylton94988062000-06-20 19:10:44 +00001487 case E_OVERFLOW:
1488 msg = "expression too long";
1489 break;
Fred Drake85f36392000-07-11 17:53:00 +00001490 case E_DEDENT:
1491 errtype = PyExc_IndentationError;
1492 msg = "unindent does not match any outer indentation level";
1493 break;
1494 case E_TOODEEP:
1495 errtype = PyExc_IndentationError;
1496 msg = "too many levels of indentation";
1497 break;
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001498 case E_DECODE: {
1499 PyObject *type, *value, *tb;
1500 PyErr_Fetch(&type, &value, &tb);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001501 if (value != NULL) {
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001502 u = PyObject_Str(value);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001503 if (u != NULL) {
1504 msg = PyString_AsString(u);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001505 }
1506 }
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001507 if (msg == NULL)
1508 msg = "unknown decode error";
Neal Norwitzdb83eb32005-12-18 05:29:30 +00001509 Py_XDECREF(type);
1510 Py_XDECREF(value);
Neal Norwitz40d37812005-10-02 01:48:49 +00001511 Py_XDECREF(tb);
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001512 break;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001513 }
Martin v. Löwis4bf108d2005-03-03 11:45:45 +00001514 case E_LINECONT:
1515 msg = "unexpected character after line continuation character";
1516 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001517 default:
1518 fprintf(stderr, "error=%d\n", err->error);
1519 msg = "unknown parsing error";
1520 break;
1521 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001522 v = Py_BuildValue("(ziiz)", err->filename,
1523 err->lineno, err->offset, err->text);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001524 if (err->text != NULL) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001525 PyObject_FREE(err->text);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001526 err->text = NULL;
1527 }
1528 w = NULL;
1529 if (v != NULL)
1530 w = Py_BuildValue("(sO)", msg, v);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001531 Py_XDECREF(u);
Guido van Rossum41318302001-03-23 04:01:07 +00001532 Py_XDECREF(v);
Fred Drake85f36392000-07-11 17:53:00 +00001533 PyErr_SetObject(errtype, w);
Guido van Rossum82598051997-03-05 00:20:32 +00001534 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001535}
1536
1537/* Print fatal error message and abort */
1538
1539void
Tim Peters7c321a82002-07-09 02:57:01 +00001540Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001541{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00001542 fprintf(stderr, "Fatal Python error: %s\n", msg);
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001543#ifdef MS_WINDOWS
Guido van Rossum23c94461997-05-22 20:21:30 +00001544 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +00001545 OutputDebugString(msg);
1546 OutputDebugString("\n");
Guido van Rossum0ba35361998-08-13 13:33:16 +00001547#ifdef _DEBUG
1548 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00001549#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001550#endif /* MS_WINDOWS */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001551 abort();
1552}
1553
1554/* Clean up and exit */
1555
Guido van Rossuma110aa61994-08-29 12:50:44 +00001556#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00001557#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001558#endif
1559
Collin Winter670e6922007-03-21 02:57:17 +00001560static void (*pyexitfunc)(void) = NULL;
1561/* For the atexit module. */
1562void _Py_PyAtExit(void (*func)(void))
1563{
1564 pyexitfunc = func;
1565}
1566
1567static void
1568call_py_exitfuncs(void)
1569{
1570 if (pyexitfunc == NULL)
1571 return;
1572
1573 (*pyexitfunc)();
1574 PyErr_Clear();
1575}
1576
Guido van Rossum2dcfc961998-10-01 16:01:57 +00001577#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001578static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00001579static int nexitfuncs = 0;
1580
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001581int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00001582{
1583 if (nexitfuncs >= NEXITFUNCS)
1584 return -1;
1585 exitfuncs[nexitfuncs++] = func;
1586 return 0;
1587}
1588
Guido van Rossumcc283f51997-08-05 02:22:03 +00001589static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001590call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00001591{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001592 while (nexitfuncs > 0)
1593 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001594
1595 fflush(stdout);
1596 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001597}
1598
1599void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001600Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001601{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001602 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001603
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001604 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001605}
1606
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001607static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001608initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001609{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001610#ifdef SIGPIPE
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001611 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001612#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00001613#ifdef SIGXFZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001614 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00001615#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001616#ifdef SIGXFSZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001617 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001618#endif
Guido van Rossum82598051997-03-05 00:20:32 +00001619 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001620}
1621
Guido van Rossum7433b121997-02-14 19:45:36 +00001622
1623/*
1624 * The file descriptor fd is considered ``interactive'' if either
1625 * a) isatty(fd) is TRUE, or
1626 * b) the -i flag was given, and the filename associated with
1627 * the descriptor is NULL or "<stdin>" or "???".
1628 */
1629int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001630Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00001631{
1632 if (isatty((int)fileno(fp)))
1633 return 1;
1634 if (!Py_InteractiveFlag)
1635 return 0;
1636 return (filename == NULL) ||
1637 (strcmp(filename, "<stdin>") == 0) ||
1638 (strcmp(filename, "???") == 0);
1639}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001640
1641
Tim Petersd08e3822003-04-17 15:24:21 +00001642#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001643#if defined(WIN32) && defined(_MSC_VER)
1644
1645/* Stack checking for Microsoft C */
1646
1647#include <malloc.h>
1648#include <excpt.h>
1649
Fred Drakee8de31c2000-08-31 05:38:39 +00001650/*
1651 * Return non-zero when we run out of memory on the stack; zero otherwise.
1652 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001653int
Fred Drake399739f2000-08-31 05:52:44 +00001654PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001655{
1656 __try {
Tim Peters92e4dd82002-10-05 01:47:34 +00001657 /* alloca throws a stack overflow exception if there's
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001658 not enough space left on the stack */
Tim Peters92e4dd82002-10-05 01:47:34 +00001659 alloca(PYOS_STACK_MARGIN * sizeof(void*));
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001660 return 0;
1661 } __except (EXCEPTION_EXECUTE_HANDLER) {
1662 /* just ignore all errors */
1663 }
1664 return 1;
1665}
1666
1667#endif /* WIN32 && _MSC_VER */
1668
1669/* Alternate implementations can be added here... */
1670
1671#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00001672
1673
1674/* Wrappers around sigaction() or signal(). */
1675
1676PyOS_sighandler_t
1677PyOS_getsig(int sig)
1678{
1679#ifdef HAVE_SIGACTION
1680 struct sigaction context;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001681 if (sigaction(sig, NULL, &context) == -1)
1682 return SIG_ERR;
Guido van Rossum6f256182000-09-16 16:32:19 +00001683 return context.sa_handler;
1684#else
1685 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00001686/* Special signal handling for the secure CRT in Visual Studio 2005 */
1687#if defined(_MSC_VER) && _MSC_VER >= 1400
1688 switch (sig) {
1689 /* Only these signals are valid */
1690 case SIGINT:
1691 case SIGILL:
1692 case SIGFPE:
1693 case SIGSEGV:
1694 case SIGTERM:
1695 case SIGBREAK:
1696 case SIGABRT:
1697 break;
1698 /* Don't call signal() with other values or it will assert */
1699 default:
1700 return SIG_ERR;
1701 }
1702#endif /* _MSC_VER && _MSC_VER >= 1400 */
Guido van Rossum6f256182000-09-16 16:32:19 +00001703 handler = signal(sig, SIG_IGN);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001704 if (handler != SIG_ERR)
1705 signal(sig, handler);
Guido van Rossum6f256182000-09-16 16:32:19 +00001706 return handler;
1707#endif
1708}
1709
1710PyOS_sighandler_t
1711PyOS_setsig(int sig, PyOS_sighandler_t handler)
1712{
1713#ifdef HAVE_SIGACTION
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001714 struct sigaction context, ocontext;
Guido van Rossum6f256182000-09-16 16:32:19 +00001715 context.sa_handler = handler;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001716 sigemptyset(&context.sa_mask);
1717 context.sa_flags = 0;
1718 if (sigaction(sig, &context, &ocontext) == -1)
1719 return SIG_ERR;
1720 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001721#else
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001722 PyOS_sighandler_t oldhandler;
1723 oldhandler = signal(sig, handler);
1724#ifdef HAVE_SIGINTERRUPT
1725 siginterrupt(sig, 1);
1726#endif
1727 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001728#endif
1729}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001730
1731/* Deprecated C API functions still provided for binary compatiblity */
1732
1733#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001734PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001735PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
1736{
1737 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
1738}
1739
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001740#undef PyParser_SimpleParseString
1741PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001742PyParser_SimpleParseString(const char *str, int start)
1743{
1744 return PyParser_SimpleParseStringFlags(str, start, 0);
1745}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001746
1747#undef PyRun_AnyFile
1748PyAPI_FUNC(int)
1749PyRun_AnyFile(FILE *fp, const char *name)
1750{
1751 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
1752}
1753
1754#undef PyRun_AnyFileEx
1755PyAPI_FUNC(int)
1756PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
1757{
1758 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
1759}
1760
1761#undef PyRun_AnyFileFlags
1762PyAPI_FUNC(int)
1763PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
1764{
1765 return PyRun_AnyFileExFlags(fp, name, 0, flags);
1766}
1767
1768#undef PyRun_File
1769PyAPI_FUNC(PyObject *)
1770PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
1771{
1772 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
1773}
1774
1775#undef PyRun_FileEx
1776PyAPI_FUNC(PyObject *)
1777PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
1778{
1779 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
1780}
1781
1782#undef PyRun_FileFlags
1783PyAPI_FUNC(PyObject *)
1784PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
1785 PyCompilerFlags *flags)
1786{
1787 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
1788}
1789
1790#undef PyRun_SimpleFile
1791PyAPI_FUNC(int)
1792PyRun_SimpleFile(FILE *f, const char *p)
1793{
1794 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
1795}
1796
1797#undef PyRun_SimpleFileEx
1798PyAPI_FUNC(int)
1799PyRun_SimpleFileEx(FILE *f, const char *p, int c)
1800{
1801 return PyRun_SimpleFileExFlags(f, p, c, NULL);
1802}
1803
1804
1805#undef PyRun_String
1806PyAPI_FUNC(PyObject *)
1807PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
1808{
1809 return PyRun_StringFlags(str, s, g, l, NULL);
1810}
1811
1812#undef PyRun_SimpleString
1813PyAPI_FUNC(int)
1814PyRun_SimpleString(const char *s)
1815{
1816 return PyRun_SimpleStringFlags(s, NULL);
1817}
1818
1819#undef Py_CompileString
1820PyAPI_FUNC(PyObject *)
1821Py_CompileString(const char *str, const char *p, int s)
1822{
1823 return Py_CompileStringFlags(str, p, s, NULL);
1824}
1825
1826#undef PyRun_InteractiveOne
1827PyAPI_FUNC(int)
1828PyRun_InteractiveOne(FILE *f, const char *p)
1829{
1830 return PyRun_InteractiveOneFlags(f, p, NULL);
1831}
1832
1833#undef PyRun_InteractiveLoop
1834PyAPI_FUNC(int)
1835PyRun_InteractiveLoop(FILE *f, const char *p)
1836{
1837 return PyRun_InteractiveLoopFlags(f, p, NULL);
1838}
1839
1840#ifdef __cplusplus
1841}
1842#endif