blob: 3d16ba5b665876618a29eebe469a4ad81faaad09 [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 Rossumd8faa362007-04-27 19:54:29 +00007#undef Yield /* undefine macro conflicting with winbase.h */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00008#include "grammar.h"
9#include "node.h"
Fred Drake85f36392000-07-11 17:53:00 +000010#include "token.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000011#include "parsetok.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000012#include "errcode.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000013#include "code.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000014#include "compile.h"
Jeremy Hylton4b38da62001-02-02 18:19:15 +000015#include "symtable.h"
Neal Norwitzadb69fc2005-12-17 20:54:49 +000016#include "pyarena.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000017#include "ast.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000018#include "eval.h"
Guido van Rossumfdef2711994-09-14 13:31:04 +000019#include "marshal.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000020
Thomas Wouters0e3f5912006-08-11 14:57:12 +000021#ifdef HAVE_SIGNAL_H
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000022#include <signal.h>
Thomas Wouters0e3f5912006-08-11 14:57:12 +000023#endif
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000024
Martin v. Löwis73d538b2003-03-05 15:13:47 +000025#ifdef HAVE_LANGINFO_H
26#include <locale.h>
27#include <langinfo.h>
28#endif
29
Martin v. Löwis6238d2b2002-06-30 15:26:10 +000030#ifdef MS_WINDOWS
Guido van Rossuma44823b1995-03-14 15:01:17 +000031#undef BYTE
32#include "windows.h"
33#endif
34
Neal Norwitz4281cef2006-03-04 19:58:13 +000035#ifndef Py_REF_DEBUG
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000036#define PRINT_TOTAL_REFS()
Neal Norwitz4281cef2006-03-04 19:58:13 +000037#else /* Py_REF_DEBUG */
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000038#define PRINT_TOTAL_REFS() fprintf(stderr, \
39 "[%" PY_FORMAT_SIZE_T "d refs]\n", \
40 _Py_GetRefTotal())
41#endif
42
43#ifdef __cplusplus
44extern "C" {
Neal Norwitz4281cef2006-03-04 19:58:13 +000045#endif
46
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000047extern char *Py_GetPath(void);
Guido van Rossum1984f1e1992-08-04 12:41:02 +000048
Guido van Rossum82598051997-03-05 00:20:32 +000049extern grammar _PyParser_Grammar; /* From graminit.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000050
Guido van Rossumb73cc041993-11-01 16:28:59 +000051/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000052static void initmain(void);
53static void initsite(void);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000054static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
Neal Norwitzadb69fc2005-12-17 20:54:49 +000055 PyCompilerFlags *, PyArena *);
Martin v. Löwis95292d62002-12-11 14:04:59 +000056static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
Jeremy Hyltonbc320242001-03-22 02:47:58 +000057 PyCompilerFlags *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000058static void err_input(perrdetail *);
59static void initsigs(void);
Collin Winter670e6922007-03-21 02:57:17 +000060static void call_py_exitfuncs(void);
Tim Petersdbd9ba62000-07-09 03:09:57 +000061static void call_ll_exitfuncs(void);
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000062extern void _PyUnicode_Init(void);
63extern void _PyUnicode_Fini(void);
Guido van Rossumddefaf32007-01-14 03:31:43 +000064extern int _PyLong_Init(void);
65extern void PyLong_Fini(void);
Guido van Rossumc94044c2000-03-10 23:03:54 +000066
Mark Hammond8d98d2c2003-04-19 15:41:53 +000067#ifdef WITH_THREAD
68extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
69extern void _PyGILState_Fini(void);
70#endif /* WITH_THREAD */
71
Guido van Rossum82598051997-03-05 00:20:32 +000072int Py_DebugFlag; /* Needed by parser.c */
73int Py_VerboseFlag; /* Needed by import.c */
Guido van Rossum7433b121997-02-14 19:45:36 +000074int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Guido van Rossumd8faa362007-04-27 19:54:29 +000075int Py_InspectFlag; /* Needed to determine whether to exit at SystemError */
Guido van Rossumdcc0c131997-08-29 22:32:42 +000076int Py_NoSiteFlag; /* Suppress 'import site' */
Barry Warsaw3ce09642000-05-02 19:18:59 +000077int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
Guido van Rossuma61691e1998-02-06 22:27:24 +000078int Py_FrozenFlag; /* Needed by getpath.c */
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +000079int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000080
Mark Hammonda43fd0c2003-02-19 00:33:33 +000081/* Reference to 'warnings' module, to avoid importing it
Mark Hammondedd07732003-07-15 23:03:55 +000082 on the fly when the import lock may be held. See 683658/771097
Mark Hammonda43fd0c2003-02-19 00:33:33 +000083*/
Mark Hammondedd07732003-07-15 23:03:55 +000084static PyObject *warnings_module = NULL;
85
86/* Returns a borrowed reference to the 'warnings' module, or NULL.
87 If the module is returned, it is guaranteed to have been obtained
88 without acquiring the import lock
89*/
Martin v. Löwisa2c17c52003-08-09 09:47:11 +000090PyObject *PyModule_GetWarningsModule(void)
Mark Hammondedd07732003-07-15 23:03:55 +000091{
92 PyObject *typ, *val, *tb;
93 PyObject *all_modules;
94 /* If we managed to get the module at init time, just use it */
95 if (warnings_module)
96 return warnings_module;
97 /* If it wasn't available at init time, it may be available
98 now in sys.modules (common scenario is frozen apps: import
99 at init time fails, but the frozen init code sets up sys.path
100 correctly, then does an implicit import of warnings for us
101 */
102 /* Save and restore any exceptions */
103 PyErr_Fetch(&typ, &val, &tb);
104
Mark Hammond5f4e8ca2003-07-16 01:54:38 +0000105 all_modules = PySys_GetObject("modules");
Mark Hammondedd07732003-07-15 23:03:55 +0000106 if (all_modules) {
107 warnings_module = PyDict_GetItemString(all_modules, "warnings");
108 /* We keep a ref in the global */
109 Py_XINCREF(warnings_module);
110 }
111 PyErr_Restore(typ, val, tb);
112 return warnings_module;
113}
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000114
Guido van Rossum25ce5661997-08-02 03:10:38 +0000115static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000116
Thomas Wouters7e474022000-07-16 12:04:32 +0000117/* API to access the initialized flag -- useful for esoteric use */
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000118
119int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000120Py_IsInitialized(void)
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000121{
122 return initialized;
123}
124
Guido van Rossum25ce5661997-08-02 03:10:38 +0000125/* Global initializations. Can be undone by Py_Finalize(). Don't
126 call this twice without an intervening Py_Finalize() call. When
127 initializations fail, a fatal error is issued and the function does
128 not return. On return, the first thread and interpreter state have
129 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000130
Guido van Rossum25ce5661997-08-02 03:10:38 +0000131 Locking: you must hold the interpreter lock while calling this.
132 (If the lock has not yet been initialized, that's equivalent to
133 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000134
Guido van Rossum25ce5661997-08-02 03:10:38 +0000135*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000136
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000137static int
138add_flag(int flag, const char *envs)
139{
140 int env = atoi(envs);
141 if (flag < env)
142 flag = env;
143 if (flag < 1)
144 flag = 1;
145 return flag;
146}
147
Guido van Rossuma027efa1997-05-05 20:56:21 +0000148void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000149Py_InitializeEx(int install_sigs)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000150{
Guido van Rossuma027efa1997-05-05 20:56:21 +0000151 PyInterpreterState *interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000152 PyThreadState *tstate;
153 PyObject *bimod, *sysmod;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000154 char *p;
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000155#if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
156 char *codeset;
157 char *saved_locale;
158 PyObject *sys_stream, *sys_isatty;
159#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +0000160 extern void _Py_ReadyTypes(void);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000161
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000162 if (initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000163 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000164 initialized = 1;
Tim Petersd08e3822003-04-17 15:24:21 +0000165
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000166 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000167 Py_DebugFlag = add_flag(Py_DebugFlag, p);
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000168 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000169 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000170 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000171 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000172
Guido van Rossuma027efa1997-05-05 20:56:21 +0000173 interp = PyInterpreterState_New();
174 if (interp == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000175 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000176
Guido van Rossuma027efa1997-05-05 20:56:21 +0000177 tstate = PyThreadState_New(interp);
178 if (tstate == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000179 Py_FatalError("Py_Initialize: can't make first thread");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000180 (void) PyThreadState_Swap(tstate);
181
Guido van Rossum70d893a2001-08-16 08:21:42 +0000182 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000183
Neal Norwitzb2501f42002-12-31 03:42:13 +0000184 if (!_PyFrame_Init())
Neal Norwitzc91ed402002-12-30 22:29:22 +0000185 Py_FatalError("Py_Initialize: can't init frames");
186
Guido van Rossumddefaf32007-01-14 03:31:43 +0000187 if (!_PyLong_Init())
188 Py_FatalError("Py_Initialize: can't init longs");
Neal Norwitzc91ed402002-12-30 22:29:22 +0000189
Neal Norwitz6968b052007-02-27 19:02:19 +0000190 if (!PyBytes_Init())
191 Py_FatalError("Py_Initialize: can't init bytes");
192
Michael W. Hudsonba283e22005-05-27 15:23:20 +0000193 _PyFloat_Init();
194
Guido van Rossum25ce5661997-08-02 03:10:38 +0000195 interp->modules = PyDict_New();
196 if (interp->modules == NULL)
197 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossumd8faa362007-04-27 19:54:29 +0000198 interp->modules_reloading = PyDict_New();
199 if (interp->modules_reloading == NULL)
200 Py_FatalError("Py_Initialize: can't make modules_reloading dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000201
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000202#ifdef Py_USING_UNICODE
Guido van Rossumc94044c2000-03-10 23:03:54 +0000203 /* Init Unicode implementation; relies on the codec registry */
204 _PyUnicode_Init();
Martin v. Löwis339d0f72001-08-17 18:39:25 +0000205#endif
Guido van Rossumc94044c2000-03-10 23:03:54 +0000206
Barry Warsawf242aa02000-05-25 23:09:49 +0000207 bimod = _PyBuiltin_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000208 if (bimod == NULL)
209 Py_FatalError("Py_Initialize: can't initialize __builtin__");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000210 interp->builtins = PyModule_GetDict(bimod);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000211 if (interp->builtins == NULL)
212 Py_FatalError("Py_Initialize: can't initialize builtins dict");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000213 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000214
215 sysmod = _PySys_Init();
216 if (sysmod == NULL)
217 Py_FatalError("Py_Initialize: can't initialize sys");
218 interp->sysdict = PyModule_GetDict(sysmod);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000219 if (interp->sysdict == NULL)
220 Py_FatalError("Py_Initialize: can't initialize sys dict");
Guido van Rossum25ce5661997-08-02 03:10:38 +0000221 Py_INCREF(interp->sysdict);
222 _PyImport_FixupExtension("sys", "sys");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000223 PySys_SetPath(Py_GetPath());
Guido van Rossum25ce5661997-08-02 03:10:38 +0000224 PyDict_SetItemString(interp->sysdict, "modules",
225 interp->modules);
226
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000227 _PyImport_Init();
228
Barry Warsawf242aa02000-05-25 23:09:49 +0000229 /* initialize builtin exceptions */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000230 _PyExc_Init();
Barry Warsawf242aa02000-05-25 23:09:49 +0000231
Barry Warsaw035574d1997-08-29 22:07:17 +0000232 /* phase 2 of builtins */
Barry Warsaw963b8711997-09-18 16:42:02 +0000233 _PyImport_FixupExtension("__builtin__", "__builtin__");
Barry Warsaw035574d1997-08-29 22:07:17 +0000234
Just van Rossum52e14d62002-12-30 22:08:05 +0000235 _PyImportHooks_Init();
236
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000237 if (install_sigs)
238 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000239
240 initmain(); /* Module __main__ */
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000241 if (!Py_NoSiteFlag)
242 initsite(); /* Module site */
Just van Rossum5bfba3a2003-02-25 20:25:12 +0000243
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000244 /* auto-thread-state API, if available */
245#ifdef WITH_THREAD
246 _PyGILState_Init(interp, tstate);
247#endif /* WITH_THREAD */
248
Mark Hammondedd07732003-07-15 23:03:55 +0000249 warnings_module = PyImport_ImportModule("warnings");
250 if (!warnings_module)
251 PyErr_Clear();
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000252
253#if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
254 /* On Unix, set the file system encoding according to the
255 user's preference, if the CODESET names a well-known
256 Python codec, and Py_FileSystemDefaultEncoding isn't
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000257 initialized by other means. Also set the encoding of
258 stdin and stdout if these are terminals. */
259
Martin v. Löwisf56d0152003-11-13 07:43:21 +0000260 saved_locale = strdup(setlocale(LC_CTYPE, NULL));
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000261 setlocale(LC_CTYPE, "");
262 codeset = nl_langinfo(CODESET);
263 if (codeset && *codeset) {
264 PyObject *enc = PyCodec_Encoder(codeset);
265 if (enc) {
266 codeset = strdup(codeset);
267 Py_DECREF(enc);
268 } else {
269 codeset = NULL;
270 PyErr_Clear();
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000271 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000272 } else
273 codeset = NULL;
274 setlocale(LC_CTYPE, saved_locale);
Martin v. Löwisf56d0152003-11-13 07:43:21 +0000275 free(saved_locale);
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000276
277 if (codeset) {
Michael W. Hudson68debc92003-08-11 12:20:24 +0000278 sys_stream = PySys_GetObject("stdin");
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000279 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
280 if (!sys_isatty)
281 PyErr_Clear();
Thomas Woutersb2137042007-02-01 18:02:27 +0000282 if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
283 PyFile_Check(sys_stream)) {
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000284 if (!PyFile_SetEncoding(sys_stream, codeset))
285 Py_FatalError("Cannot set codeset of stdin");
286 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000287 Py_XDECREF(sys_isatty);
288
289 sys_stream = PySys_GetObject("stdout");
290 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
291 if (!sys_isatty)
292 PyErr_Clear();
Thomas Woutersb2137042007-02-01 18:02:27 +0000293 if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
294 PyFile_Check(sys_stream)) {
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000295 if (!PyFile_SetEncoding(sys_stream, codeset))
296 Py_FatalError("Cannot set codeset of stdout");
297 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000298 Py_XDECREF(sys_isatty);
299
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000300 sys_stream = PySys_GetObject("stderr");
301 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
302 if (!sys_isatty)
303 PyErr_Clear();
Thomas Woutersb2137042007-02-01 18:02:27 +0000304 if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
305 PyFile_Check(sys_stream)) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000306 if (!PyFile_SetEncoding(sys_stream, codeset))
307 Py_FatalError("Cannot set codeset of stderr");
308 }
309 Py_XDECREF(sys_isatty);
310
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000311 if (!Py_FileSystemDefaultEncoding)
312 Py_FileSystemDefaultEncoding = codeset;
313 else
314 free(codeset);
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000315 }
316#endif
Guido van Rossum25ce5661997-08-02 03:10:38 +0000317}
318
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000319void
320Py_Initialize(void)
321{
322 Py_InitializeEx(1);
323}
324
325
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000326#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000327extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000328#endif
329
Guido van Rossum25ce5661997-08-02 03:10:38 +0000330/* Undo the effect of Py_Initialize().
331
332 Beware: if multiple interpreter and/or thread states exist, these
333 are not wiped out; only the current thread and interpreter state
334 are deleted. But since everything else is deleted, those other
335 interpreter and thread states should no longer be used.
336
337 (XXX We should do better, e.g. wipe out all interpreters and
338 threads.)
339
340 Locking: as above.
341
342*/
343
344void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000345Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000346{
347 PyInterpreterState *interp;
348 PyThreadState *tstate;
349
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000350 if (!initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000351 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000352
Tim Peters384fd102001-01-21 03:40:37 +0000353 /* The interpreter is still entirely intact at this point, and the
354 * exit funcs may be relying on that. In particular, if some thread
355 * or exit func is still waiting to do an import, the import machinery
356 * expects Py_IsInitialized() to return true. So don't say the
357 * interpreter is uninitialized until after the exit funcs have run.
358 * Note that Threading.py uses an exit func to do a join on all the
359 * threads created thru it, so this also protects pending imports in
360 * the threads created via Threading.
361 */
Collin Winter670e6922007-03-21 02:57:17 +0000362 call_py_exitfuncs();
Tim Peters384fd102001-01-21 03:40:37 +0000363 initialized = 0;
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000364
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000365 /* Get current thread state and interpreter pointer */
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000366 tstate = PyThreadState_GET();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000367 interp = tstate->interp;
368
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000369 /* Disable signal handling */
370 PyOS_FiniInterrupts();
371
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000372 /* drop module references we saved */
Mark Hammondedd07732003-07-15 23:03:55 +0000373 Py_XDECREF(warnings_module);
374 warnings_module = NULL;
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000375
Guido van Rossume13ddc92003-04-17 17:29:22 +0000376 /* Collect garbage. This may call finalizers; it's nice to call these
Tim Peters1d7323e2003-12-01 21:35:27 +0000377 * before all modules are destroyed.
378 * XXX If a __del__ or weakref callback is triggered here, and tries to
379 * XXX import a module, bad things can happen, because Python no
380 * XXX longer believes it's initialized.
381 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
382 * XXX is easy to provoke that way. I've also seen, e.g.,
383 * XXX Exception exceptions.ImportError: 'No module named sha'
384 * XXX in <function callback at 0x008F5718> ignored
385 * XXX but I'm unclear on exactly how that one happens. In any case,
386 * XXX I haven't seen a real-life report of either of these.
Neal Norwitz9589ee22006-03-04 19:01:22 +0000387 */
Guido van Rossume13ddc92003-04-17 17:29:22 +0000388 PyGC_Collect();
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000389#ifdef COUNT_ALLOCS
390 /* With COUNT_ALLOCS, it helps to run GC multiple times:
391 each collection might release some types from the type
392 list, so they become garbage. */
393 while (PyGC_Collect() > 0)
394 /* nothing */;
395#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000396
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000397 /* Destroy all modules */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000398 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000399
Guido van Rossume13ddc92003-04-17 17:29:22 +0000400 /* Collect final garbage. This disposes of cycles created by
Tim Peters1d7323e2003-12-01 21:35:27 +0000401 * new-style class definitions, for example.
402 * XXX This is disabled because it caused too many problems. If
403 * XXX a __del__ or weakref callback triggers here, Python code has
404 * XXX a hard time running, because even the sys module has been
405 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
406 * XXX One symptom is a sequence of information-free messages
407 * XXX coming from threads (if a __del__ or callback is invoked,
408 * XXX other threads can execute too, and any exception they encounter
409 * XXX triggers a comedy of errors as subsystem after subsystem
410 * XXX fails to find what it *expects* to find in sys to help report
411 * XXX the exception and consequent unexpected failures). I've also
412 * XXX seen segfaults then, after adding print statements to the
413 * XXX Python code getting called.
414 */
415#if 0
Guido van Rossume13ddc92003-04-17 17:29:22 +0000416 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000417#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000418
Guido van Rossum1707aad1997-12-08 23:43:45 +0000419 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
420 _PyImport_Fini();
421
422 /* Debugging stuff */
423#ifdef COUNT_ALLOCS
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000424 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000425#endif
426
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000427 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000428
Tim Peters9cf25ce2003-04-17 15:21:01 +0000429#ifdef Py_TRACE_REFS
430 /* Display all objects still alive -- this can invoke arbitrary
431 * __repr__ overrides, so requires a mostly-intact interpreter.
432 * Alas, a lot of stuff may still be alive now that will be cleaned
433 * up later.
434 */
Tim Peters269b2a62003-04-17 19:52:29 +0000435 if (Py_GETENV("PYTHONDUMPREFS"))
Tim Peters9cf25ce2003-04-17 15:21:01 +0000436 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000437#endif /* Py_TRACE_REFS */
438
Mark Hammond6cb90292003-04-22 11:18:00 +0000439 /* Cleanup auto-thread-state */
440#ifdef WITH_THREAD
441 _PyGILState_Fini();
442#endif /* WITH_THREAD */
443
Guido van Rossumd922fa42003-04-15 14:10:09 +0000444 /* Clear interpreter state */
Barry Warsawf242aa02000-05-25 23:09:49 +0000445 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000446
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000447 /* Now we decref the exception classes. After this point nothing
448 can raise an exception. That's okay, because each Fini() method
449 below has been checked to make sure no exceptions are ever
450 raised.
451 */
452
453 _PyExc_Fini();
454
Guido van Rossumd922fa42003-04-15 14:10:09 +0000455 /* Delete current thread */
Barry Warsawf242aa02000-05-25 23:09:49 +0000456 PyThreadState_Swap(NULL);
457 PyInterpreterState_Delete(interp);
458
Guido van Rossumd922fa42003-04-15 14:10:09 +0000459 /* Sundry finalizers */
Guido van Rossumcc283f51997-08-05 02:22:03 +0000460 PyMethod_Fini();
461 PyFrame_Fini();
462 PyCFunction_Fini();
463 PyTuple_Fini();
Raymond Hettingerfb09f0e2004-10-07 03:58:07 +0000464 PyList_Fini();
Raymond Hettingerd7946662005-08-01 21:39:29 +0000465 PySet_Fini();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000466 PyString_Fini();
Neal Norwitz6968b052007-02-27 19:02:19 +0000467 PyBytes_Fini();
Guido van Rossumddefaf32007-01-14 03:31:43 +0000468 PyLong_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000469 PyFloat_Fini();
470
Marc-André Lemburg95de5c12002-04-08 08:19:36 +0000471#ifdef Py_USING_UNICODE
472 /* Cleanup Unicode implementation */
473 _PyUnicode_Fini();
474#endif
475
Guido van Rossumcc283f51997-08-05 02:22:03 +0000476 /* XXX Still allocated:
477 - various static ad-hoc pointers to interned strings
478 - int and float free list blocks
479 - whatever various modules and libraries allocate
480 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000481
482 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000483
Tim Peters269b2a62003-04-17 19:52:29 +0000484#ifdef Py_TRACE_REFS
485 /* Display addresses (& refcnts) of all objects still alive.
486 * An address can be used to find the repr of the object, printed
487 * above by _Py_PrintReferences.
488 */
489 if (Py_GETENV("PYTHONDUMPREFS"))
490 _Py_PrintReferenceAddresses(stderr);
491#endif /* Py_TRACE_REFS */
Tim Peters0e871182002-04-13 08:29:14 +0000492#ifdef PYMALLOC_DEBUG
493 if (Py_GETENV("PYTHONMALLOCSTATS"))
494 _PyObject_DebugMallocStats();
495#endif
496
Guido van Rossumcc283f51997-08-05 02:22:03 +0000497 call_ll_exitfuncs();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000498}
499
500/* Create and initialize a new interpreter and thread, and return the
501 new thread. This requires that Py_Initialize() has been called
502 first.
503
504 Unsuccessful initialization yields a NULL pointer. Note that *no*
505 exception information is available even in this case -- the
506 exception information is held in the thread, and there is no
507 thread.
508
509 Locking: as above.
510
511*/
512
513PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000514Py_NewInterpreter(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000515{
516 PyInterpreterState *interp;
517 PyThreadState *tstate, *save_tstate;
518 PyObject *bimod, *sysmod;
519
520 if (!initialized)
521 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
522
523 interp = PyInterpreterState_New();
524 if (interp == NULL)
525 return NULL;
526
527 tstate = PyThreadState_New(interp);
528 if (tstate == NULL) {
529 PyInterpreterState_Delete(interp);
530 return NULL;
531 }
532
533 save_tstate = PyThreadState_Swap(tstate);
534
535 /* XXX The following is lax in error checking */
536
537 interp->modules = PyDict_New();
Guido van Rossumd8faa362007-04-27 19:54:29 +0000538 interp->modules_reloading = PyDict_New();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000539
540 bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
541 if (bimod != NULL) {
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000542 interp->builtins = PyModule_GetDict(bimod);
Thomas Wouters89f507f2006-12-13 04:49:30 +0000543 if (interp->builtins == NULL)
544 goto handle_error;
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000545 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000546 }
547 sysmod = _PyImport_FindExtension("sys", "sys");
548 if (bimod != NULL && sysmod != NULL) {
549 interp->sysdict = PyModule_GetDict(sysmod);
Thomas Wouters89f507f2006-12-13 04:49:30 +0000550 if (interp->sysdict == NULL)
551 goto handle_error;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000552 Py_INCREF(interp->sysdict);
553 PySys_SetPath(Py_GetPath());
554 PyDict_SetItemString(interp->sysdict, "modules",
555 interp->modules);
Martin v. Löwisd7ceb222003-01-22 09:00:38 +0000556 _PyImportHooks_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000557 initmain();
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000558 if (!Py_NoSiteFlag)
559 initsite();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000560 }
561
562 if (!PyErr_Occurred())
563 return tstate;
564
Thomas Wouters89f507f2006-12-13 04:49:30 +0000565handle_error:
Guido van Rossum25ce5661997-08-02 03:10:38 +0000566 /* Oops, it didn't work. Undo it all. */
567
568 PyErr_Print();
569 PyThreadState_Clear(tstate);
570 PyThreadState_Swap(save_tstate);
571 PyThreadState_Delete(tstate);
572 PyInterpreterState_Delete(interp);
573
574 return NULL;
575}
576
577/* Delete an interpreter and its last thread. This requires that the
578 given thread state is current, that the thread has no remaining
579 frames, and that it is its interpreter's only remaining thread.
580 It is a fatal error to violate these constraints.
581
582 (Py_Finalize() doesn't have these constraints -- it zaps
583 everything, regardless.)
584
585 Locking: as above.
586
587*/
588
589void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000590Py_EndInterpreter(PyThreadState *tstate)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000591{
592 PyInterpreterState *interp = tstate->interp;
593
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000594 if (tstate != PyThreadState_GET())
Guido van Rossum25ce5661997-08-02 03:10:38 +0000595 Py_FatalError("Py_EndInterpreter: thread is not current");
596 if (tstate->frame != NULL)
597 Py_FatalError("Py_EndInterpreter: thread still has a frame");
598 if (tstate != interp->tstate_head || tstate->next != NULL)
599 Py_FatalError("Py_EndInterpreter: not the last thread");
600
601 PyImport_Cleanup();
602 PyInterpreterState_Clear(interp);
603 PyThreadState_Swap(NULL);
604 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000605}
606
607static char *progname = "python";
608
609void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000610Py_SetProgramName(char *pn)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000611{
612 if (pn && *pn)
613 progname = pn;
614}
615
616char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000617Py_GetProgramName(void)
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000618{
619 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000620}
621
Guido van Rossuma61691e1998-02-06 22:27:24 +0000622static char *default_home = NULL;
623
624void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000625Py_SetPythonHome(char *home)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000626{
627 default_home = home;
628}
629
630char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000631Py_GetPythonHome(void)
Guido van Rossuma61691e1998-02-06 22:27:24 +0000632{
633 char *home = default_home;
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000634 if (home == NULL && !Py_IgnoreEnvironmentFlag)
635 home = Py_GETENV("PYTHONHOME");
Guido van Rossuma61691e1998-02-06 22:27:24 +0000636 return home;
637}
638
Guido van Rossum6135a871995-01-09 17:53:26 +0000639/* Create __main__ module */
640
641static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000642initmain(void)
Guido van Rossum6135a871995-01-09 17:53:26 +0000643{
Guido van Rossum82598051997-03-05 00:20:32 +0000644 PyObject *m, *d;
645 m = PyImport_AddModule("__main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000646 if (m == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000647 Py_FatalError("can't create __main__ module");
648 d = PyModule_GetDict(m);
649 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
Guido van Rossum858cb731997-11-19 16:15:37 +0000650 PyObject *bimod = PyImport_ImportModule("__builtin__");
651 if (bimod == NULL ||
652 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
Guido van Rossum82598051997-03-05 00:20:32 +0000653 Py_FatalError("can't add __builtins__ to __main__");
Barry Warsaw3d05b1a1999-01-29 21:30:22 +0000654 Py_DECREF(bimod);
Guido van Rossum6135a871995-01-09 17:53:26 +0000655 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000656}
657
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000658/* Import the site module (not into __main__ though) */
659
660static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000661initsite(void)
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000662{
663 PyObject *m, *f;
664 m = PyImport_ImportModule("site");
665 if (m == NULL) {
666 f = PySys_GetObject("stderr");
667 if (Py_VerboseFlag) {
668 PyFile_WriteString(
669 "'import site' failed; traceback:\n", f);
670 PyErr_Print();
671 }
672 else {
673 PyFile_WriteString(
674 "'import site' failed; use -v for traceback\n", f);
675 PyErr_Clear();
676 }
677 }
678 else {
679 Py_DECREF(m);
680 }
681}
682
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000683/* Parse input from a file and execute it */
684
685int
Thomas Wouters4d70c3d2006-06-08 14:42:34 +0000686PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000687 PyCompilerFlags *flags)
688{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000689 if (filename == NULL)
690 filename = "???";
Guido van Rossum0df002c2000-08-27 19:21:52 +0000691 if (Py_FdIsInteractive(fp, filename)) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000692 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
Guido van Rossum0df002c2000-08-27 19:21:52 +0000693 if (closeit)
694 fclose(fp);
695 return err;
696 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000697 else
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000698 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000699}
700
701int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000702PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000703{
Guido van Rossum82598051997-03-05 00:20:32 +0000704 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000705 int ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000706 PyCompilerFlags local_flags;
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000707
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000708 if (flags == NULL) {
709 flags = &local_flags;
Tim Peters5ba58662001-07-16 02:29:45 +0000710 local_flags.cf_flags = 0;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000711 }
Guido van Rossum82598051997-03-05 00:20:32 +0000712 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000713 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000714 PySys_SetObject("ps1", v = PyString_FromString(">>> "));
715 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000716 }
Guido van Rossum82598051997-03-05 00:20:32 +0000717 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000718 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000719 PySys_SetObject("ps2", v = PyString_FromString("... "));
720 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000721 }
722 for (;;) {
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000723 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000724 PRINT_TOTAL_REFS();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000725 if (ret == E_EOF)
726 return 0;
727 /*
728 if (ret == E_NOMEM)
729 return -1;
730 */
731 }
732}
733
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000734/* compute parser flags based on compiler flags */
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000735#define PARSER_FLAGS(flags) \
Thomas Wouters34aa7ba2006-02-28 19:02:24 +0000736 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
Guido van Rossum45aecf42006-03-15 04:58:47 +0000737 PyPARSE_DONT_IMPLY_DEDENT : 0)) : 0)
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000738
Thomas Wouters89f507f2006-12-13 04:49:30 +0000739#if 0
740/* Keep an example of flags with future keyword support. */
741#define PARSER_FLAGS(flags) \
742 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
743 PyPARSE_DONT_IMPLY_DEDENT : 0) \
744 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
745 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
746#endif
747
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000748int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000749PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
Jeremy Hylton9f324e92001-03-01 22:59:14 +0000750{
Guido van Rossum82598051997-03-05 00:20:32 +0000751 PyObject *m, *d, *v, *w;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000752 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +0000753 PyArena *arena;
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000754 char *ps1 = "", *ps2 = "";
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000755 int errcode = 0;
Tim Petersfe2127d2001-07-16 05:37:24 +0000756
Guido van Rossum82598051997-03-05 00:20:32 +0000757 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000758 if (v != NULL) {
759 v = PyObject_Str(v);
760 if (v == NULL)
761 PyErr_Clear();
762 else if (PyString_Check(v))
763 ps1 = PyString_AsString(v);
764 }
Guido van Rossum82598051997-03-05 00:20:32 +0000765 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000766 if (w != NULL) {
767 w = PyObject_Str(w);
768 if (w == NULL)
769 PyErr_Clear();
770 else if (PyString_Check(w))
771 ps2 = PyString_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000772 }
Neal Norwitz9589ee22006-03-04 19:01:22 +0000773 arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000774 if (arena == NULL) {
775 Py_XDECREF(v);
776 Py_XDECREF(w);
777 return -1;
778 }
Thomas Wouters4d70c3d2006-06-08 14:42:34 +0000779 mod = PyParser_ASTFromFile(fp, filename,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000780 Py_single_input, ps1, ps2,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000781 flags, &errcode, arena);
Guido van Rossum82598051997-03-05 00:20:32 +0000782 Py_XDECREF(v);
783 Py_XDECREF(w);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000784 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000785 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000786 if (errcode == E_EOF) {
787 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000788 return E_EOF;
789 }
Guido van Rossum82598051997-03-05 00:20:32 +0000790 PyErr_Print();
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000791 return -1;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000792 }
Guido van Rossum82598051997-03-05 00:20:32 +0000793 m = PyImport_AddModule("__main__");
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000794 if (m == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +0000795 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000796 return -1;
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000797 }
Guido van Rossum82598051997-03-05 00:20:32 +0000798 d = PyModule_GetDict(m);
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000799 v = run_mod(mod, filename, d, d, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +0000800 PyArena_Free(arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000801 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000802 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000803 return -1;
804 }
Guido van Rossum82598051997-03-05 00:20:32 +0000805 Py_DECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000806 return 0;
807}
808
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000809/* Check whether a file maybe a pyc file: Look at the extension,
810 the file type, and, if we may close it, at the first few bytes. */
811
812static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000813maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000814{
815 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
816 return 1;
817
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000818 /* Only look into the file if we are allowed to close it, since
819 it then should also be seekable. */
820 if (closeit) {
821 /* Read only two bytes of the magic. If the file was opened in
822 text mode, the bytes 3 and 4 of the magic (\r\n) might not
823 be read as they are on disk. */
824 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
825 unsigned char buf[2];
Tim Peters3e876562001-02-11 04:35:39 +0000826 /* Mess: In case of -x, the stream is NOT at its start now,
827 and ungetc() was used to push back the first newline,
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000828 which makes the current stream position formally undefined,
829 and a x-platform nightmare.
830 Unfortunately, we have no direct way to know whether -x
831 was specified. So we use a terrible hack: if the current
832 stream position is not 0, we assume -x was specified, and
833 give up. Bug 132850 on SourceForge spells out the
834 hopelessness of trying anything else (fseek and ftell
835 don't work predictably x-platform for text-mode files).
Tim Peters3e876562001-02-11 04:35:39 +0000836 */
Tim Peters3e876562001-02-11 04:35:39 +0000837 int ispyc = 0;
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000838 if (ftell(fp) == 0) {
839 if (fread(buf, 1, 2, fp) == 2 &&
Tim Petersd08e3822003-04-17 15:24:21 +0000840 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000841 ispyc = 1;
842 rewind(fp);
843 }
Tim Peters3e876562001-02-11 04:35:39 +0000844 return ispyc;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000845 }
846 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +0000847}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000848
Guido van Rossum0df002c2000-08-27 19:21:52 +0000849int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000850PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000851 PyCompilerFlags *flags)
852{
Guido van Rossum82598051997-03-05 00:20:32 +0000853 PyObject *m, *d, *v;
Martin v. Löwis95292d62002-12-11 14:04:59 +0000854 const char *ext;
Guido van Rossumd8faa362007-04-27 19:54:29 +0000855 int set_file_name = 0, ret;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000856
Guido van Rossum82598051997-03-05 00:20:32 +0000857 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000858 if (m == NULL)
859 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000860 d = PyModule_GetDict(m);
Fred Drake8ed02042002-10-17 21:24:58 +0000861 if (PyDict_GetItemString(d, "__file__") == NULL) {
862 PyObject *f = PyString_FromString(filename);
863 if (f == NULL)
864 return -1;
865 if (PyDict_SetItemString(d, "__file__", f) < 0) {
866 Py_DECREF(f);
867 return -1;
868 }
Guido van Rossumd8faa362007-04-27 19:54:29 +0000869 set_file_name = 1;
Fred Drake8ed02042002-10-17 21:24:58 +0000870 Py_DECREF(f);
871 }
Guido van Rossumfdef2711994-09-14 13:31:04 +0000872 ext = filename + strlen(filename) - 4;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000873 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000874 /* Try to run a pyc file. First, re-open in binary */
Guido van Rossum0df002c2000-08-27 19:21:52 +0000875 if (closeit)
876 fclose(fp);
Fred Drake8ed02042002-10-17 21:24:58 +0000877 if ((fp = fopen(filename, "rb")) == NULL) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000878 fprintf(stderr, "python: Can't reopen .pyc file\n");
Guido van Rossumd8faa362007-04-27 19:54:29 +0000879 ret = -1;
880 goto done;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000881 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000882 /* Turn on optimization if a .pyo file is given */
883 if (strcmp(ext, ".pyo") == 0)
884 Py_OptimizeFlag = 1;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000885 v = run_pyc_file(fp, filename, d, d, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000886 } else {
Tim Petersd08e3822003-04-17 15:24:21 +0000887 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000888 closeit, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000889 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000890 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000891 PyErr_Print();
Guido van Rossumd8faa362007-04-27 19:54:29 +0000892 ret = -1;
893 goto done;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000894 }
Guido van Rossum82598051997-03-05 00:20:32 +0000895 Py_DECREF(v);
Guido van Rossumd8faa362007-04-27 19:54:29 +0000896 ret = 0;
897 done:
898 if (set_file_name && PyDict_DelItemString(d, "__file__"))
899 PyErr_Clear();
900 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000901}
902
903int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000904PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +0000905{
Guido van Rossum82598051997-03-05 00:20:32 +0000906 PyObject *m, *d, *v;
907 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000908 if (m == NULL)
909 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000910 d = PyModule_GetDict(m);
Guido van Rossum393661d2001-08-31 17:40:15 +0000911 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000912 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000913 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000914 return -1;
915 }
Guido van Rossum82598051997-03-05 00:20:32 +0000916 Py_DECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000917 return 0;
918}
919
Barry Warsaw035574d1997-08-29 22:07:17 +0000920static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000921parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
922 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +0000923{
924 long hold;
925 PyObject *v;
926
927 /* old style errors */
928 if (PyTuple_Check(err))
Neal Norwitz78293352002-04-01 01:41:20 +0000929 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
Neal Norwitz9589ee22006-03-04 19:01:22 +0000930 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +0000931
932 /* new style errors. `err' is an instance */
933
934 if (! (v = PyObject_GetAttrString(err, "msg")))
935 goto finally;
936 *message = v;
937
938 if (!(v = PyObject_GetAttrString(err, "filename")))
939 goto finally;
940 if (v == Py_None)
941 *filename = NULL;
942 else if (! (*filename = PyString_AsString(v)))
943 goto finally;
944
945 Py_DECREF(v);
946 if (!(v = PyObject_GetAttrString(err, "lineno")))
947 goto finally;
948 hold = PyInt_AsLong(v);
949 Py_DECREF(v);
950 v = NULL;
951 if (hold < 0 && PyErr_Occurred())
952 goto finally;
953 *lineno = (int)hold;
954
955 if (!(v = PyObject_GetAttrString(err, "offset")))
956 goto finally;
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000957 if (v == Py_None) {
958 *offset = -1;
959 Py_DECREF(v);
960 v = NULL;
961 } else {
962 hold = PyInt_AsLong(v);
963 Py_DECREF(v);
964 v = NULL;
965 if (hold < 0 && PyErr_Occurred())
966 goto finally;
967 *offset = (int)hold;
968 }
Barry Warsaw035574d1997-08-29 22:07:17 +0000969
970 if (!(v = PyObject_GetAttrString(err, "text")))
971 goto finally;
972 if (v == Py_None)
973 *text = NULL;
974 else if (! (*text = PyString_AsString(v)))
975 goto finally;
976 Py_DECREF(v);
977 return 1;
978
979finally:
980 Py_XDECREF(v);
981 return 0;
982}
983
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000984void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000985PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000986{
Guido van Rossuma61691e1998-02-06 22:27:24 +0000987 PyErr_PrintEx(1);
988}
989
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000990static void
Martin v. Löwis95292d62002-12-11 14:04:59 +0000991print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000992{
993 char *nl;
994 if (offset >= 0) {
995 if (offset > 0 && offset == (int)strlen(text))
996 offset--;
997 for (;;) {
998 nl = strchr(text, '\n');
999 if (nl == NULL || nl-text >= offset)
1000 break;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001001 offset -= (int)(nl+1-text);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001002 text = nl+1;
1003 }
1004 while (*text == ' ' || *text == '\t') {
1005 text++;
1006 offset--;
1007 }
1008 }
1009 PyFile_WriteString(" ", f);
1010 PyFile_WriteString(text, f);
1011 if (*text == '\0' || text[strlen(text)-1] != '\n')
1012 PyFile_WriteString("\n", f);
1013 if (offset == -1)
1014 return;
1015 PyFile_WriteString(" ", f);
1016 offset--;
1017 while (offset > 0) {
1018 PyFile_WriteString(" ", f);
1019 offset--;
1020 }
1021 PyFile_WriteString("^\n", f);
1022}
1023
Guido van Rossum66e8e862001-03-23 17:54:43 +00001024static void
1025handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001026{
Neal Norwitz9589ee22006-03-04 19:01:22 +00001027 PyObject *exception, *value, *tb;
1028 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001029
Guido van Rossumd8faa362007-04-27 19:54:29 +00001030 if (Py_InspectFlag)
1031 /* Don't exit if -i flag was given. This flag is set to 0
1032 * when entering interactive mode for inspecting. */
1033 return;
1034
Guido van Rossum66e8e862001-03-23 17:54:43 +00001035 PyErr_Fetch(&exception, &value, &tb);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001036 fflush(stdout);
1037 if (value == NULL || value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001038 goto done;
Brett Cannonbf364092006-03-01 04:25:17 +00001039 if (PyExceptionInstance_Check(value)) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001040 /* The error code should be in the `code' attribute. */
1041 PyObject *code = PyObject_GetAttrString(value, "code");
1042 if (code) {
1043 Py_DECREF(value);
1044 value = code;
1045 if (value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001046 goto done;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001047 }
1048 /* If we failed to dig out the 'code' attribute,
1049 just let the else clause below print the error. */
1050 }
1051 if (PyInt_Check(value))
Tim Peterscf615b52003-04-19 18:47:02 +00001052 exitcode = (int)PyInt_AsLong(value);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001053 else {
1054 PyObject_Print(value, stderr, Py_PRINT_RAW);
1055 PySys_WriteStderr("\n");
Tim Peterscf615b52003-04-19 18:47:02 +00001056 exitcode = 1;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001057 }
Tim Peterscf615b52003-04-19 18:47:02 +00001058 done:
Neal Norwitz9589ee22006-03-04 19:01:22 +00001059 /* Restore and clear the exception info, in order to properly decref
1060 * the exception, value, and traceback. If we just exit instead,
1061 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1062 * some finalizers from running.
1063 */
Tim Peterscf615b52003-04-19 18:47:02 +00001064 PyErr_Restore(exception, value, tb);
1065 PyErr_Clear();
1066 Py_Exit(exitcode);
1067 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001068}
1069
1070void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001071PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001072{
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001073 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001074
1075 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1076 handle_system_exit();
1077 }
Guido van Rossum82598051997-03-05 00:20:32 +00001078 PyErr_Fetch(&exception, &v, &tb);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001079 if (exception == NULL)
1080 return;
Barry Warsaw035574d1997-08-29 22:07:17 +00001081 PyErr_NormalizeException(&exception, &v, &tb);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001082 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +00001083 return;
Guido van Rossum9d785502006-03-07 18:31:44 +00001084 /* Now we know v != NULL too */
Guido van Rossuma61691e1998-02-06 22:27:24 +00001085 if (set_sys_last_vars) {
1086 PySys_SetObject("last_type", exception);
1087 PySys_SetObject("last_value", v);
1088 PySys_SetObject("last_traceback", tb);
1089 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001090 hook = PySys_GetObject("excepthook");
1091 if (hook) {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00001092 PyObject *args = PyTuple_Pack(3,
Guido van Rossum9d785502006-03-07 18:31:44 +00001093 exception, v, tb ? tb : Py_None);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001094 PyObject *result = PyEval_CallObject(hook, args);
1095 if (result == NULL) {
1096 PyObject *exception2, *v2, *tb2;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001097 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1098 handle_system_exit();
1099 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001100 PyErr_Fetch(&exception2, &v2, &tb2);
1101 PyErr_NormalizeException(&exception2, &v2, &tb2);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001102 /* It should not be possible for exception2 or v2
1103 to be NULL. However PyErr_Display() can't
1104 tolerate NULLs, so just be safe. */
1105 if (exception2 == NULL) {
1106 exception2 = Py_None;
1107 Py_INCREF(exception2);
1108 }
1109 if (v2 == NULL) {
1110 v2 = Py_None;
1111 Py_INCREF(v2);
1112 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001113 fflush(stdout);
1114 PySys_WriteStderr("Error in sys.excepthook:\n");
1115 PyErr_Display(exception2, v2, tb2);
1116 PySys_WriteStderr("\nOriginal exception was:\n");
1117 PyErr_Display(exception, v, tb);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001118 Py_DECREF(exception2);
1119 Py_DECREF(v2);
Jeremy Hylton07028582001-12-07 15:35:35 +00001120 Py_XDECREF(tb2);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001121 }
1122 Py_XDECREF(result);
1123 Py_XDECREF(args);
1124 } else {
1125 PySys_WriteStderr("sys.excepthook is missing\n");
1126 PyErr_Display(exception, v, tb);
1127 }
1128 Py_XDECREF(exception);
1129 Py_XDECREF(v);
1130 Py_XDECREF(tb);
1131}
1132
Thomas Wouters477c8d52006-05-27 19:21:47 +00001133void
1134PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001135{
1136 int err = 0;
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001137 PyObject *f = PySys_GetObject("stderr");
Armin Rigo5d2c6832004-03-22 20:16:58 +00001138 Py_INCREF(value);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001139 if (f == NULL)
1140 fprintf(stderr, "lost sys.stderr\n");
1141 else {
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001142 fflush(stdout);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001143 if (tb && tb != Py_None)
1144 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +00001145 if (err == 0 &&
Armin Rigo5d2c6832004-03-22 20:16:58 +00001146 PyObject_HasAttrString(value, "print_file_and_line"))
Barry Warsaw36b8f941997-08-26 18:09:48 +00001147 {
Guido van Rossum82598051997-03-05 00:20:32 +00001148 PyObject *message;
Martin v. Löwis95292d62002-12-11 14:04:59 +00001149 const char *filename, *text;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001150 int lineno, offset;
Armin Rigo5d2c6832004-03-22 20:16:58 +00001151 if (!parse_syntax_error(value, &message, &filename,
Barry Warsaw035574d1997-08-29 22:07:17 +00001152 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +00001153 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001154 else {
1155 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +00001156 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001157 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +00001158 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001159 else
Guido van Rossum82598051997-03-05 00:20:32 +00001160 PyFile_WriteString(filename, f);
1161 PyFile_WriteString("\", line ", f);
Jeremy Hylton518ab1c2001-11-28 20:42:20 +00001162 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +00001163 PyFile_WriteString(buf, f);
1164 PyFile_WriteString("\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001165 if (text != NULL)
1166 print_error_text(f, offset, text);
Armin Rigo5d2c6832004-03-22 20:16:58 +00001167 Py_DECREF(value);
1168 value = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001169 /* Can't be bothered to check all those
1170 PyFile_WriteString() calls */
1171 if (PyErr_Occurred())
1172 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001173 }
1174 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001175 if (err) {
1176 /* Don't do anything else */
1177 }
Brett Cannonbf364092006-03-01 04:25:17 +00001178 else if (PyExceptionClass_Check(exception)) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001179 PyObject* moduleName;
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001180 char* className = PyExceptionClass_Name(exception);
1181 if (className != NULL) {
1182 char *dot = strrchr(className, '.');
1183 if (dot != NULL)
1184 className = dot+1;
1185 }
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001186
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001187 moduleName = PyObject_GetAttrString(exception, "__module__");
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001188 if (moduleName == NULL)
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001189 err = PyFile_WriteString("<unknown>", f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001190 else {
1191 char* modstr = PyString_AsString(moduleName);
Neal Norwitz2633c692007-02-26 22:22:47 +00001192 if (modstr && strcmp(modstr, "__builtin__"))
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001193 {
1194 err = PyFile_WriteString(modstr, f);
1195 err += PyFile_WriteString(".", f);
1196 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001197 Py_DECREF(moduleName);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001198 }
1199 if (err == 0) {
1200 if (className == NULL)
1201 err = PyFile_WriteString("<unknown>", f);
1202 else
Brett Cannonbf364092006-03-01 04:25:17 +00001203 err = PyFile_WriteString(className, f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001204 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001205 }
1206 else
1207 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
Brett Cannon2e63b732006-03-02 18:34:57 +00001208 if (err == 0 && (value != Py_None)) {
1209 PyObject *s = PyObject_Str(value);
1210 /* only print colon if the str() of the
1211 object is not the empty string
1212 */
1213 if (s == NULL)
1214 err = -1;
1215 else if (!PyString_Check(s) ||
1216 PyString_GET_SIZE(s) != 0)
1217 err = PyFile_WriteString(": ", f);
1218 if (err == 0)
1219 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1220 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +00001221 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00001222 /* try to write a newline in any case */
1223 err += PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001224 }
Armin Rigo5d2c6832004-03-22 20:16:58 +00001225 Py_DECREF(value);
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001226 /* If an error happened here, don't show it.
1227 XXX This is wrong, but too many callers rely on this behavior. */
1228 if (err != 0)
1229 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001230}
1231
Guido van Rossum82598051997-03-05 00:20:32 +00001232PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001233PyRun_StringFlags(const char *str, int start, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001234 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001235{
Neal Norwitze92fba02006-03-04 18:52:26 +00001236 PyObject *ret = NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001237 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001238 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001239 if (arena == NULL)
1240 return NULL;
1241
1242 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
Neal Norwitze92fba02006-03-04 18:52:26 +00001243 if (mod != NULL)
1244 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001245 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001246 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001247}
1248
1249PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001250PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001251 PyObject *locals, int closeit, PyCompilerFlags *flags)
1252{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001253 PyObject *ret;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001254 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001255 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001256 if (arena == NULL)
1257 return NULL;
1258
1259 mod = PyParser_ASTFromFile(fp, filename, start, 0, 0,
1260 flags, NULL, arena);
Guido van Rossumd8faa362007-04-27 19:54:29 +00001261 if (closeit)
1262 fclose(fp);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001263 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001264 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001265 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001266 }
Neal Norwitze92fba02006-03-04 18:52:26 +00001267 ret = run_mod(mod, filename, globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001268 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001269 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001270}
1271
Guido van Rossum82598051997-03-05 00:20:32 +00001272static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001273run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001274 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001275{
Guido van Rossum82598051997-03-05 00:20:32 +00001276 PyCodeObject *co;
1277 PyObject *v;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001278 co = PyAST_Compile(mod, filename, flags, arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001279 if (co == NULL)
1280 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +00001281 v = PyEval_EvalCode(co, globals, locals);
1282 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001283 return v;
1284}
1285
Guido van Rossum82598051997-03-05 00:20:32 +00001286static PyObject *
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001287run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001288 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001289{
Guido van Rossum82598051997-03-05 00:20:32 +00001290 PyCodeObject *co;
1291 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001292 long magic;
Fred Drakee8de31c2000-08-31 05:38:39 +00001293 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001294
Guido van Rossum82598051997-03-05 00:20:32 +00001295 magic = PyMarshal_ReadLongFromFile(fp);
1296 if (magic != PyImport_GetMagicNumber()) {
1297 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001298 "Bad magic number in .pyc file");
1299 return NULL;
1300 }
Guido van Rossum82598051997-03-05 00:20:32 +00001301 (void) PyMarshal_ReadLongFromFile(fp);
Tim Petersd9b9ac82001-01-28 00:27:39 +00001302 v = PyMarshal_ReadLastObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001303 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +00001304 if (v == NULL || !PyCode_Check(v)) {
1305 Py_XDECREF(v);
1306 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001307 "Bad code object in .pyc file");
1308 return NULL;
1309 }
Guido van Rossum82598051997-03-05 00:20:32 +00001310 co = (PyCodeObject *)v;
1311 v = PyEval_EvalCode(co, globals, locals);
Jeremy Hyltonb857ba22001-08-10 21:41:33 +00001312 if (v && flags)
1313 flags->cf_flags |= (co->co_flags & PyCF_MASK);
Guido van Rossum82598051997-03-05 00:20:32 +00001314 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001315 return v;
1316}
1317
Guido van Rossum82598051997-03-05 00:20:32 +00001318PyObject *
Tim Petersd08e3822003-04-17 15:24:21 +00001319Py_CompileStringFlags(const char *str, const char *filename, int start,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001320 PyCompilerFlags *flags)
1321{
Guido van Rossum82598051997-03-05 00:20:32 +00001322 PyCodeObject *co;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001323 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001324 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001325 if (arena == NULL)
1326 return NULL;
1327
1328 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001329 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001330 PyArena_Free(arena);
Guido van Rossum5b722181993-03-30 17:46:03 +00001331 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001332 }
Martin v. Löwis2b366e42006-02-26 22:12:35 +00001333 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001334 PyObject *result = PyAST_mod2obj(mod);
1335 PyArena_Free(arena);
1336 return result;
1337 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001338 co = PyAST_Compile(mod, filename, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001339 PyArena_Free(arena);
Guido van Rossum82598051997-03-05 00:20:32 +00001340 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001341}
1342
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001343struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001344Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001345{
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001346 struct symtable *st;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001347 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001348 PyArena *arena = PyArena_New();
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001349 if (arena == NULL)
1350 return NULL;
1351
1352 mod = PyParser_ASTFromString(str, filename, start, NULL, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001353 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001354 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001355 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001356 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001357 st = PySymtable_Build(mod, filename, 0);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001358 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001359 return st;
1360}
1361
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001362/* Preferred access to parser is through AST. */
1363mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001364PyParser_ASTFromString(const char *s, const char *filename, int start,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001365 PyCompilerFlags *flags, 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_ParseStringFlagsFilename(s, filename,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001370 &_PyParser_Grammar, start, &err,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001371 PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001372 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001373 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001374 PyNode_Free(n);
1375 return mod;
1376 }
1377 else {
1378 err_input(&err);
1379 return NULL;
1380 }
1381}
1382
1383mod_ty
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001384PyParser_ASTFromFile(FILE *fp, const char *filename, int start, char *ps1,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001385 char *ps2, PyCompilerFlags *flags, int *errcode,
Neal Norwitz9589ee22006-03-04 19:01:22 +00001386 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001387{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001388 mod_ty mod;
1389 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001390 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
1391 start, ps1, ps2, &err, PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001392 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001393 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001394 PyNode_Free(n);
1395 return mod;
1396 }
1397 else {
1398 err_input(&err);
1399 if (errcode)
1400 *errcode = err.error;
1401 return NULL;
1402 }
1403}
1404
Guido van Rossuma110aa61994-08-29 12:50:44 +00001405/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001406
Guido van Rossuma110aa61994-08-29 12:50:44 +00001407node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001408PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001409{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001410 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001411 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
1412 start, NULL, NULL, &err, flags);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001413 if (n == NULL)
1414 err_input(&err);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001415
Guido van Rossuma110aa61994-08-29 12:50:44 +00001416 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001417}
1418
Guido van Rossuma110aa61994-08-29 12:50:44 +00001419/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001420
Guido van Rossuma110aa61994-08-29 12:50:44 +00001421node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001422PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001423{
Tim Petersfe2127d2001-07-16 05:37:24 +00001424 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001425 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1426 start, &err, flags);
Tim Petersfe2127d2001-07-16 05:37:24 +00001427 if (n == NULL)
1428 err_input(&err);
1429 return n;
1430}
1431
1432node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001433PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Thomas Heller6b17abf2002-07-09 09:23:27 +00001434 int start, int flags)
1435{
Thomas Heller6b17abf2002-07-09 09:23:27 +00001436 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001437 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1438 &_PyParser_Grammar, start, &err, flags);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001439 if (n == NULL)
1440 err_input(&err);
1441 return n;
1442}
1443
1444node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001445PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001446{
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001447 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001448}
1449
Guido van Rossum66ebd912003-04-17 16:02:26 +00001450/* May want to move a more generalized form of this to parsetok.c or
1451 even parser modules. */
1452
1453void
1454PyParser_SetError(perrdetail *err)
1455{
1456 err_input(err);
1457}
1458
Guido van Rossuma110aa61994-08-29 12:50:44 +00001459/* Set the error appropriate to the given input error code (see errcode.h) */
1460
1461static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001462err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00001463{
Fred Drake85f36392000-07-11 17:53:00 +00001464 PyObject *v, *w, *errtype;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001465 PyObject* u = NULL;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001466 char *msg = NULL;
Fred Drake85f36392000-07-11 17:53:00 +00001467 errtype = PyExc_SyntaxError;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001468 switch (err->error) {
1469 case E_SYNTAX:
Fred Drake85f36392000-07-11 17:53:00 +00001470 errtype = PyExc_IndentationError;
1471 if (err->expected == INDENT)
1472 msg = "expected an indented block";
1473 else if (err->token == INDENT)
1474 msg = "unexpected indent";
1475 else if (err->token == DEDENT)
1476 msg = "unexpected unindent";
1477 else {
1478 errtype = PyExc_SyntaxError;
1479 msg = "invalid syntax";
1480 }
Guido van Rossuma110aa61994-08-29 12:50:44 +00001481 break;
1482 case E_TOKEN:
1483 msg = "invalid token";
Guido van Rossuma110aa61994-08-29 12:50:44 +00001484 break;
Skip Montanaro118ec702002-08-15 01:20:16 +00001485 case E_EOFS:
1486 msg = "EOF while scanning triple-quoted string";
1487 break;
1488 case E_EOLS:
1489 msg = "EOL while scanning single-quoted string";
1490 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001491 case E_INTR:
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001492 if (!PyErr_Occurred())
1493 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001494 return;
1495 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +00001496 PyErr_NoMemory();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001497 return;
1498 case E_EOF:
1499 msg = "unexpected EOF while parsing";
1500 break;
Fred Drake85f36392000-07-11 17:53:00 +00001501 case E_TABSPACE:
1502 errtype = PyExc_TabError;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001503 msg = "inconsistent use of tabs and spaces in indentation";
1504 break;
Jeremy Hylton94988062000-06-20 19:10:44 +00001505 case E_OVERFLOW:
1506 msg = "expression too long";
1507 break;
Fred Drake85f36392000-07-11 17:53:00 +00001508 case E_DEDENT:
1509 errtype = PyExc_IndentationError;
1510 msg = "unindent does not match any outer indentation level";
1511 break;
1512 case E_TOODEEP:
1513 errtype = PyExc_IndentationError;
1514 msg = "too many levels of indentation";
1515 break;
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001516 case E_DECODE: {
1517 PyObject *type, *value, *tb;
1518 PyErr_Fetch(&type, &value, &tb);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001519 if (value != NULL) {
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001520 u = PyObject_Str(value);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001521 if (u != NULL) {
1522 msg = PyString_AsString(u);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001523 }
1524 }
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001525 if (msg == NULL)
1526 msg = "unknown decode error";
Neal Norwitzdb83eb32005-12-18 05:29:30 +00001527 Py_XDECREF(type);
1528 Py_XDECREF(value);
Neal Norwitz40d37812005-10-02 01:48:49 +00001529 Py_XDECREF(tb);
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001530 break;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001531 }
Martin v. Löwis4bf108d2005-03-03 11:45:45 +00001532 case E_LINECONT:
1533 msg = "unexpected character after line continuation character";
1534 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001535 default:
1536 fprintf(stderr, "error=%d\n", err->error);
1537 msg = "unknown parsing error";
1538 break;
1539 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001540 v = Py_BuildValue("(ziiz)", err->filename,
1541 err->lineno, err->offset, err->text);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001542 if (err->text != NULL) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001543 PyObject_FREE(err->text);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001544 err->text = NULL;
1545 }
1546 w = NULL;
1547 if (v != NULL)
1548 w = Py_BuildValue("(sO)", msg, v);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001549 Py_XDECREF(u);
Guido van Rossum41318302001-03-23 04:01:07 +00001550 Py_XDECREF(v);
Fred Drake85f36392000-07-11 17:53:00 +00001551 PyErr_SetObject(errtype, w);
Guido van Rossum82598051997-03-05 00:20:32 +00001552 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001553}
1554
1555/* Print fatal error message and abort */
1556
1557void
Tim Peters7c321a82002-07-09 02:57:01 +00001558Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001559{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00001560 fprintf(stderr, "Fatal Python error: %s\n", msg);
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001561#ifdef MS_WINDOWS
Guido van Rossum23c94461997-05-22 20:21:30 +00001562 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +00001563 OutputDebugString(msg);
1564 OutputDebugString("\n");
Guido van Rossum0ba35361998-08-13 13:33:16 +00001565#ifdef _DEBUG
1566 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00001567#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001568#endif /* MS_WINDOWS */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001569 abort();
1570}
1571
1572/* Clean up and exit */
1573
Guido van Rossuma110aa61994-08-29 12:50:44 +00001574#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00001575#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001576#endif
1577
Collin Winter670e6922007-03-21 02:57:17 +00001578static void (*pyexitfunc)(void) = NULL;
1579/* For the atexit module. */
1580void _Py_PyAtExit(void (*func)(void))
1581{
1582 pyexitfunc = func;
1583}
1584
1585static void
1586call_py_exitfuncs(void)
1587{
1588 if (pyexitfunc == NULL)
1589 return;
1590
1591 (*pyexitfunc)();
1592 PyErr_Clear();
1593}
1594
Guido van Rossum2dcfc961998-10-01 16:01:57 +00001595#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001596static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00001597static int nexitfuncs = 0;
1598
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001599int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00001600{
1601 if (nexitfuncs >= NEXITFUNCS)
1602 return -1;
1603 exitfuncs[nexitfuncs++] = func;
1604 return 0;
1605}
1606
Guido van Rossumcc283f51997-08-05 02:22:03 +00001607static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001608call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00001609{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001610 while (nexitfuncs > 0)
1611 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001612
1613 fflush(stdout);
1614 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001615}
1616
1617void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001618Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001619{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001620 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001621
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001622 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001623}
1624
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001625static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001626initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001627{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001628#ifdef SIGPIPE
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001629 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001630#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00001631#ifdef SIGXFZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001632 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00001633#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001634#ifdef SIGXFSZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001635 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001636#endif
Guido van Rossum82598051997-03-05 00:20:32 +00001637 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001638}
1639
Guido van Rossum7433b121997-02-14 19:45:36 +00001640
1641/*
1642 * The file descriptor fd is considered ``interactive'' if either
1643 * a) isatty(fd) is TRUE, or
1644 * b) the -i flag was given, and the filename associated with
1645 * the descriptor is NULL or "<stdin>" or "???".
1646 */
1647int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001648Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00001649{
1650 if (isatty((int)fileno(fp)))
1651 return 1;
1652 if (!Py_InteractiveFlag)
1653 return 0;
1654 return (filename == NULL) ||
1655 (strcmp(filename, "<stdin>") == 0) ||
1656 (strcmp(filename, "???") == 0);
1657}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001658
1659
Tim Petersd08e3822003-04-17 15:24:21 +00001660#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001661#if defined(WIN32) && defined(_MSC_VER)
1662
1663/* Stack checking for Microsoft C */
1664
1665#include <malloc.h>
1666#include <excpt.h>
1667
Fred Drakee8de31c2000-08-31 05:38:39 +00001668/*
1669 * Return non-zero when we run out of memory on the stack; zero otherwise.
1670 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001671int
Fred Drake399739f2000-08-31 05:52:44 +00001672PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001673{
1674 __try {
Tim Peters92e4dd82002-10-05 01:47:34 +00001675 /* alloca throws a stack overflow exception if there's
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001676 not enough space left on the stack */
Tim Peters92e4dd82002-10-05 01:47:34 +00001677 alloca(PYOS_STACK_MARGIN * sizeof(void*));
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001678 return 0;
1679 } __except (EXCEPTION_EXECUTE_HANDLER) {
1680 /* just ignore all errors */
1681 }
1682 return 1;
1683}
1684
1685#endif /* WIN32 && _MSC_VER */
1686
1687/* Alternate implementations can be added here... */
1688
1689#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00001690
1691
1692/* Wrappers around sigaction() or signal(). */
1693
1694PyOS_sighandler_t
1695PyOS_getsig(int sig)
1696{
1697#ifdef HAVE_SIGACTION
1698 struct sigaction context;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001699 if (sigaction(sig, NULL, &context) == -1)
1700 return SIG_ERR;
Guido van Rossum6f256182000-09-16 16:32:19 +00001701 return context.sa_handler;
1702#else
1703 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00001704/* Special signal handling for the secure CRT in Visual Studio 2005 */
1705#if defined(_MSC_VER) && _MSC_VER >= 1400
1706 switch (sig) {
1707 /* Only these signals are valid */
1708 case SIGINT:
1709 case SIGILL:
1710 case SIGFPE:
1711 case SIGSEGV:
1712 case SIGTERM:
1713 case SIGBREAK:
1714 case SIGABRT:
1715 break;
1716 /* Don't call signal() with other values or it will assert */
1717 default:
1718 return SIG_ERR;
1719 }
1720#endif /* _MSC_VER && _MSC_VER >= 1400 */
Guido van Rossum6f256182000-09-16 16:32:19 +00001721 handler = signal(sig, SIG_IGN);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001722 if (handler != SIG_ERR)
1723 signal(sig, handler);
Guido van Rossum6f256182000-09-16 16:32:19 +00001724 return handler;
1725#endif
1726}
1727
1728PyOS_sighandler_t
1729PyOS_setsig(int sig, PyOS_sighandler_t handler)
1730{
1731#ifdef HAVE_SIGACTION
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001732 struct sigaction context, ocontext;
Guido van Rossum6f256182000-09-16 16:32:19 +00001733 context.sa_handler = handler;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001734 sigemptyset(&context.sa_mask);
1735 context.sa_flags = 0;
1736 if (sigaction(sig, &context, &ocontext) == -1)
1737 return SIG_ERR;
1738 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001739#else
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001740 PyOS_sighandler_t oldhandler;
1741 oldhandler = signal(sig, handler);
1742#ifdef HAVE_SIGINTERRUPT
1743 siginterrupt(sig, 1);
1744#endif
1745 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001746#endif
1747}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001748
1749/* Deprecated C API functions still provided for binary compatiblity */
1750
1751#undef PyParser_SimpleParseFile
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001752PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001753PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
1754{
1755 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
1756}
1757
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001758#undef PyParser_SimpleParseString
1759PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001760PyParser_SimpleParseString(const char *str, int start)
1761{
1762 return PyParser_SimpleParseStringFlags(str, start, 0);
1763}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001764
1765#undef PyRun_AnyFile
1766PyAPI_FUNC(int)
1767PyRun_AnyFile(FILE *fp, const char *name)
1768{
1769 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
1770}
1771
1772#undef PyRun_AnyFileEx
1773PyAPI_FUNC(int)
1774PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
1775{
1776 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
1777}
1778
1779#undef PyRun_AnyFileFlags
1780PyAPI_FUNC(int)
1781PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
1782{
1783 return PyRun_AnyFileExFlags(fp, name, 0, flags);
1784}
1785
1786#undef PyRun_File
1787PyAPI_FUNC(PyObject *)
1788PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
1789{
1790 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
1791}
1792
1793#undef PyRun_FileEx
1794PyAPI_FUNC(PyObject *)
1795PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
1796{
1797 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
1798}
1799
1800#undef PyRun_FileFlags
1801PyAPI_FUNC(PyObject *)
1802PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
1803 PyCompilerFlags *flags)
1804{
1805 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
1806}
1807
1808#undef PyRun_SimpleFile
1809PyAPI_FUNC(int)
1810PyRun_SimpleFile(FILE *f, const char *p)
1811{
1812 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
1813}
1814
1815#undef PyRun_SimpleFileEx
1816PyAPI_FUNC(int)
1817PyRun_SimpleFileEx(FILE *f, const char *p, int c)
1818{
1819 return PyRun_SimpleFileExFlags(f, p, c, NULL);
1820}
1821
1822
1823#undef PyRun_String
1824PyAPI_FUNC(PyObject *)
1825PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
1826{
1827 return PyRun_StringFlags(str, s, g, l, NULL);
1828}
1829
1830#undef PyRun_SimpleString
1831PyAPI_FUNC(int)
1832PyRun_SimpleString(const char *s)
1833{
1834 return PyRun_SimpleStringFlags(s, NULL);
1835}
1836
1837#undef Py_CompileString
1838PyAPI_FUNC(PyObject *)
1839Py_CompileString(const char *str, const char *p, int s)
1840{
1841 return Py_CompileStringFlags(str, p, s, NULL);
1842}
1843
1844#undef PyRun_InteractiveOne
1845PyAPI_FUNC(int)
1846PyRun_InteractiveOne(FILE *f, const char *p)
1847{
1848 return PyRun_InteractiveOneFlags(f, p, NULL);
1849}
1850
1851#undef PyRun_InteractiveLoop
1852PyAPI_FUNC(int)
1853PyRun_InteractiveLoop(FILE *f, const char *p)
1854{
1855 return PyRun_InteractiveLoopFlags(f, p, NULL);
1856}
1857
1858#ifdef __cplusplus
1859}
1860#endif