blob: 3a9e75e2373adf87f28f7edbc32ab8e059704c2c [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
Martin v. Löwis0e8bd7e2006-06-10 12:23:46 +000020#ifdef HAVE_SIGNAL_H
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000021#include <signal.h>
Martin v. Löwis0e8bd7e2006-06-10 12:23:46 +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
Tim Peters62e97f02006-03-28 21:44:32 +000035#define PRINT_TOTAL_REFS()
Neal Norwitz4281cef2006-03-04 19:58:13 +000036#else /* Py_REF_DEBUG */
Tim Peters62e97f02006-03-28 21:44:32 +000037#define PRINT_TOTAL_REFS() fprintf(stderr, \
38 "[%" PY_FORMAT_SIZE_T "d refs]\n", \
Armin Rigoe1709372006-04-12 17:06:05 +000039 _Py_GetRefTotal())
Neal Norwitz4281cef2006-03-04 19:58:13 +000040#endif
41
Anthony Baxterac6bd462006-04-13 02:06:09 +000042#ifdef __cplusplus
43extern "C" {
44#endif
45
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000046extern char *Py_GetPath(void);
Guido van Rossum1984f1e1992-08-04 12:41:02 +000047
Guido van Rossum82598051997-03-05 00:20:32 +000048extern grammar _PyParser_Grammar; /* From graminit.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000049
Guido van Rossumb73cc041993-11-01 16:28:59 +000050/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000051static void initmain(void);
52static void initsite(void);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000053static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
Neal Norwitzadb69fc2005-12-17 20:54:49 +000054 PyCompilerFlags *, PyArena *);
Martin v. Löwis95292d62002-12-11 14:04:59 +000055static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
Jeremy Hyltonbc320242001-03-22 02:47:58 +000056 PyCompilerFlags *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000057static void err_input(perrdetail *);
58static void initsigs(void);
59static void call_sys_exitfunc(void);
60static void call_ll_exitfuncs(void);
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000061extern void _PyUnicode_Init(void);
62extern void _PyUnicode_Fini(void);
Guido van Rossumc94044c2000-03-10 23:03:54 +000063
Mark Hammond8d98d2c2003-04-19 15:41:53 +000064#ifdef WITH_THREAD
65extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
66extern void _PyGILState_Fini(void);
67#endif /* WITH_THREAD */
68
Guido van Rossum82598051997-03-05 00:20:32 +000069int Py_DebugFlag; /* Needed by parser.c */
70int Py_VerboseFlag; /* Needed by import.c */
Guido van Rossum7433b121997-02-14 19:45:36 +000071int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Georg Brandl49aafc92007-03-07 00:34:46 +000072int Py_InspectFlag; /* Needed to determine whether to exit at SystemError */
Guido van Rossumdcc0c131997-08-29 22:32:42 +000073int Py_NoSiteFlag; /* Suppress 'import site' */
Barry Warsaw3ce09642000-05-02 19:18:59 +000074int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
Guido van Rossuma61691e1998-02-06 22:27:24 +000075int Py_FrozenFlag; /* Needed by getpath.c */
Guido van Rossumb16d1972000-05-01 17:55:15 +000076int Py_UnicodeFlag = 0; /* Needed by compile.c */
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +000077int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Tim Peters3caca232001-12-06 06:23:26 +000078/* _XXX Py_QnewFlag should go away in 2.3. It's true iff -Qnew is passed,
79 on the command line, and is used in 2.2 by ceval.c to make all "/" divisions
80 true divisions (which they will be in 2.3). */
81int _Py_QnewFlag = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +000082
Mark Hammonda43fd0c2003-02-19 00:33:33 +000083/* Reference to 'warnings' module, to avoid importing it
Mark Hammondedd07732003-07-15 23:03:55 +000084 on the fly when the import lock may be held. See 683658/771097
Mark Hammonda43fd0c2003-02-19 00:33:33 +000085*/
Mark Hammondedd07732003-07-15 23:03:55 +000086static PyObject *warnings_module = NULL;
87
88/* Returns a borrowed reference to the 'warnings' module, or NULL.
89 If the module is returned, it is guaranteed to have been obtained
90 without acquiring the import lock
91*/
Martin v. Löwisa2c17c52003-08-09 09:47:11 +000092PyObject *PyModule_GetWarningsModule(void)
Mark Hammondedd07732003-07-15 23:03:55 +000093{
94 PyObject *typ, *val, *tb;
95 PyObject *all_modules;
96 /* If we managed to get the module at init time, just use it */
97 if (warnings_module)
98 return warnings_module;
99 /* If it wasn't available at init time, it may be available
100 now in sys.modules (common scenario is frozen apps: import
101 at init time fails, but the frozen init code sets up sys.path
102 correctly, then does an implicit import of warnings for us
103 */
104 /* Save and restore any exceptions */
105 PyErr_Fetch(&typ, &val, &tb);
106
Mark Hammond5f4e8ca2003-07-16 01:54:38 +0000107 all_modules = PySys_GetObject("modules");
Mark Hammondedd07732003-07-15 23:03:55 +0000108 if (all_modules) {
109 warnings_module = PyDict_GetItemString(all_modules, "warnings");
110 /* We keep a ref in the global */
111 Py_XINCREF(warnings_module);
112 }
113 PyErr_Restore(typ, val, tb);
114 return warnings_module;
115}
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000116
Guido van Rossum25ce5661997-08-02 03:10:38 +0000117static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000118
Thomas Wouters7e474022000-07-16 12:04:32 +0000119/* API to access the initialized flag -- useful for esoteric use */
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000120
121int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000122Py_IsInitialized(void)
Guido van Rossume3c0d5e1997-08-22 04:20:13 +0000123{
124 return initialized;
125}
126
Guido van Rossum25ce5661997-08-02 03:10:38 +0000127/* Global initializations. Can be undone by Py_Finalize(). Don't
128 call this twice without an intervening Py_Finalize() call. When
129 initializations fail, a fatal error is issued and the function does
130 not return. On return, the first thread and interpreter state have
131 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000132
Guido van Rossum25ce5661997-08-02 03:10:38 +0000133 Locking: you must hold the interpreter lock while calling this.
134 (If the lock has not yet been initialized, that's equivalent to
135 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000136
Guido van Rossum25ce5661997-08-02 03:10:38 +0000137*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000138
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000139static int
140add_flag(int flag, const char *envs)
141{
142 int env = atoi(envs);
143 if (flag < env)
144 flag = env;
145 if (flag < 1)
146 flag = 1;
147 return flag;
148}
149
Guido van Rossuma027efa1997-05-05 20:56:21 +0000150void
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000151Py_InitializeEx(int install_sigs)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000152{
Guido van Rossuma027efa1997-05-05 20:56:21 +0000153 PyInterpreterState *interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000154 PyThreadState *tstate;
155 PyObject *bimod, *sysmod;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000156 char *p;
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000157#if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
158 char *codeset;
159 char *saved_locale;
160 PyObject *sys_stream, *sys_isatty;
161#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +0000162 extern void _Py_ReadyTypes(void);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000163
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000164 if (initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000165 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000166 initialized = 1;
Tim Petersd08e3822003-04-17 15:24:21 +0000167
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000168 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000169 Py_DebugFlag = add_flag(Py_DebugFlag, p);
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000170 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000171 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +0000172 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
Guido van Rossum9abaf4d2001-10-12 22:17:56 +0000173 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000174
Guido van Rossuma027efa1997-05-05 20:56:21 +0000175 interp = PyInterpreterState_New();
176 if (interp == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000177 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000178
Guido van Rossuma027efa1997-05-05 20:56:21 +0000179 tstate = PyThreadState_New(interp);
180 if (tstate == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000181 Py_FatalError("Py_Initialize: can't make first thread");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000182 (void) PyThreadState_Swap(tstate);
183
Guido van Rossum70d893a2001-08-16 08:21:42 +0000184 _Py_ReadyTypes();
Guido van Rossum528b7eb2001-08-07 17:24:28 +0000185
Neal Norwitzb2501f42002-12-31 03:42:13 +0000186 if (!_PyFrame_Init())
Neal Norwitzc91ed402002-12-30 22:29:22 +0000187 Py_FatalError("Py_Initialize: can't init frames");
188
Neal Norwitzb2501f42002-12-31 03:42:13 +0000189 if (!_PyInt_Init())
Neal Norwitzc91ed402002-12-30 22:29:22 +0000190 Py_FatalError("Py_Initialize: can't init ints");
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);
Neal Norwitz0f7dbf72006-08-12 03:17:41 +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);
Neal Norwitz0f7dbf72006-08-12 03:17:41 +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 Warsaw5821bc52001-08-13 23:04:56 +0000227 _PyImport_FixupExtension("exceptions", "exceptions");
Barry Warsawf242aa02000-05-25 23:09:49 +0000228
Barry Warsaw035574d1997-08-29 22:07:17 +0000229 /* phase 2 of builtins */
Barry Warsaw963b8711997-09-18 16:42:02 +0000230 _PyImport_FixupExtension("__builtin__", "__builtin__");
Barry Warsaw035574d1997-08-29 22:07:17 +0000231
Just van Rossum52e14d62002-12-30 22:08:05 +0000232 _PyImportHooks_Init();
233
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000234 if (install_sigs)
235 initsigs(); /* Signal handling stuff, including initintr() */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000236
237 initmain(); /* Module __main__ */
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000238 if (!Py_NoSiteFlag)
239 initsite(); /* Module site */
Just van Rossum5bfba3a2003-02-25 20:25:12 +0000240
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000241 /* auto-thread-state API, if available */
242#ifdef WITH_THREAD
243 _PyGILState_Init(interp, tstate);
244#endif /* WITH_THREAD */
245
Mark Hammondedd07732003-07-15 23:03:55 +0000246 warnings_module = PyImport_ImportModule("warnings");
247 if (!warnings_module)
248 PyErr_Clear();
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000249
250#if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
251 /* On Unix, set the file system encoding according to the
252 user's preference, if the CODESET names a well-known
253 Python codec, and Py_FileSystemDefaultEncoding isn't
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000254 initialized by other means. Also set the encoding of
255 stdin and stdout if these are terminals. */
256
Martin v. Löwisf56d0152003-11-13 07:43:21 +0000257 saved_locale = strdup(setlocale(LC_CTYPE, NULL));
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000258 setlocale(LC_CTYPE, "");
259 codeset = nl_langinfo(CODESET);
260 if (codeset && *codeset) {
261 PyObject *enc = PyCodec_Encoder(codeset);
262 if (enc) {
263 codeset = strdup(codeset);
264 Py_DECREF(enc);
265 } else {
266 codeset = NULL;
267 PyErr_Clear();
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000268 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000269 } else
270 codeset = NULL;
271 setlocale(LC_CTYPE, saved_locale);
Martin v. Löwisf56d0152003-11-13 07:43:21 +0000272 free(saved_locale);
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000273
274 if (codeset) {
Michael W. Hudson68debc92003-08-11 12:20:24 +0000275 sys_stream = PySys_GetObject("stdin");
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000276 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
277 if (!sys_isatty)
278 PyErr_Clear();
Thomas Woutersafea5292007-01-23 13:42:00 +0000279 if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
280 PyFile_Check(sys_stream)) {
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000281 if (!PyFile_SetEncoding(sys_stream, codeset))
282 Py_FatalError("Cannot set codeset of stdin");
283 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000284 Py_XDECREF(sys_isatty);
285
286 sys_stream = PySys_GetObject("stdout");
287 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
288 if (!sys_isatty)
289 PyErr_Clear();
Thomas Woutersafea5292007-01-23 13:42:00 +0000290 if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
291 PyFile_Check(sys_stream)) {
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000292 if (!PyFile_SetEncoding(sys_stream, codeset))
293 Py_FatalError("Cannot set codeset of stdout");
294 }
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000295 Py_XDECREF(sys_isatty);
296
Martin v. Löwisea62d252006-04-03 10:56:49 +0000297 sys_stream = PySys_GetObject("stderr");
298 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
299 if (!sys_isatty)
300 PyErr_Clear();
Thomas Woutersafea5292007-01-23 13:42:00 +0000301 if(sys_isatty && PyObject_IsTrue(sys_isatty) &&
302 PyFile_Check(sys_stream)) {
Martin v. Löwisea62d252006-04-03 10:56:49 +0000303 if (!PyFile_SetEncoding(sys_stream, codeset))
304 Py_FatalError("Cannot set codeset of stderr");
305 }
306 Py_XDECREF(sys_isatty);
307
Martin v. Löwisa2c17c52003-08-09 09:47:11 +0000308 if (!Py_FileSystemDefaultEncoding)
309 Py_FileSystemDefaultEncoding = codeset;
310 else
311 free(codeset);
Martin v. Löwis73d538b2003-03-05 15:13:47 +0000312 }
313#endif
Guido van Rossum25ce5661997-08-02 03:10:38 +0000314}
315
Martin v. Löwis336e85f2004-08-19 11:31:58 +0000316void
317Py_Initialize(void)
318{
319 Py_InitializeEx(1);
320}
321
322
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000323#ifdef COUNT_ALLOCS
Martin v. Löwis45294a92006-04-18 06:24:08 +0000324extern void dump_counts(FILE*);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000325#endif
326
Guido van Rossum25ce5661997-08-02 03:10:38 +0000327/* Undo the effect of Py_Initialize().
328
329 Beware: if multiple interpreter and/or thread states exist, these
330 are not wiped out; only the current thread and interpreter state
331 are deleted. But since everything else is deleted, those other
332 interpreter and thread states should no longer be used.
333
334 (XXX We should do better, e.g. wipe out all interpreters and
335 threads.)
336
337 Locking: as above.
338
339*/
340
341void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000342Py_Finalize(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000343{
344 PyInterpreterState *interp;
345 PyThreadState *tstate;
346
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000347 if (!initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000348 return;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000349
Tim Peters384fd102001-01-21 03:40:37 +0000350 /* The interpreter is still entirely intact at this point, and the
351 * exit funcs may be relying on that. In particular, if some thread
352 * or exit func is still waiting to do an import, the import machinery
353 * expects Py_IsInitialized() to return true. So don't say the
354 * interpreter is uninitialized until after the exit funcs have run.
355 * Note that Threading.py uses an exit func to do a join on all the
356 * threads created thru it, so this also protects pending imports in
357 * the threads created via Threading.
358 */
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000359 call_sys_exitfunc();
Tim Peters384fd102001-01-21 03:40:37 +0000360 initialized = 0;
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000361
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000362 /* Get current thread state and interpreter pointer */
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000363 tstate = PyThreadState_GET();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000364 interp = tstate->interp;
365
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000366 /* Disable signal handling */
367 PyOS_FiniInterrupts();
368
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000369 /* drop module references we saved */
Mark Hammondedd07732003-07-15 23:03:55 +0000370 Py_XDECREF(warnings_module);
371 warnings_module = NULL;
Mark Hammonda43fd0c2003-02-19 00:33:33 +0000372
Guido van Rossume13ddc92003-04-17 17:29:22 +0000373 /* Collect garbage. This may call finalizers; it's nice to call these
Tim Peters1d7323e2003-12-01 21:35:27 +0000374 * before all modules are destroyed.
375 * XXX If a __del__ or weakref callback is triggered here, and tries to
376 * XXX import a module, bad things can happen, because Python no
377 * XXX longer believes it's initialized.
378 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
379 * XXX is easy to provoke that way. I've also seen, e.g.,
380 * XXX Exception exceptions.ImportError: 'No module named sha'
381 * XXX in <function callback at 0x008F5718> ignored
382 * XXX but I'm unclear on exactly how that one happens. In any case,
383 * XXX I haven't seen a real-life report of either of these.
Neal Norwitz9589ee22006-03-04 19:01:22 +0000384 */
Guido van Rossume13ddc92003-04-17 17:29:22 +0000385 PyGC_Collect();
Martin v. Löwis45294a92006-04-18 06:24:08 +0000386#ifdef COUNT_ALLOCS
387 /* With COUNT_ALLOCS, it helps to run GC multiple times:
388 each collection might release some types from the type
389 list, so they become garbage. */
390 while (PyGC_Collect() > 0)
391 /* nothing */;
392#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000393
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000394 /* Destroy all modules */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000395 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000396
Guido van Rossume13ddc92003-04-17 17:29:22 +0000397 /* Collect final garbage. This disposes of cycles created by
Tim Peters1d7323e2003-12-01 21:35:27 +0000398 * new-style class definitions, for example.
399 * XXX This is disabled because it caused too many problems. If
400 * XXX a __del__ or weakref callback triggers here, Python code has
401 * XXX a hard time running, because even the sys module has been
402 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
403 * XXX One symptom is a sequence of information-free messages
404 * XXX coming from threads (if a __del__ or callback is invoked,
405 * XXX other threads can execute too, and any exception they encounter
406 * XXX triggers a comedy of errors as subsystem after subsystem
407 * XXX fails to find what it *expects* to find in sys to help report
408 * XXX the exception and consequent unexpected failures). I've also
409 * XXX seen segfaults then, after adding print statements to the
410 * XXX Python code getting called.
411 */
412#if 0
Guido van Rossume13ddc92003-04-17 17:29:22 +0000413 PyGC_Collect();
Tim Peters1d7323e2003-12-01 21:35:27 +0000414#endif
Guido van Rossume13ddc92003-04-17 17:29:22 +0000415
Guido van Rossum1707aad1997-12-08 23:43:45 +0000416 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
417 _PyImport_Fini();
418
419 /* Debugging stuff */
420#ifdef COUNT_ALLOCS
Martin v. Löwis45294a92006-04-18 06:24:08 +0000421 dump_counts(stdout);
Guido van Rossum1707aad1997-12-08 23:43:45 +0000422#endif
423
Tim Peters62e97f02006-03-28 21:44:32 +0000424 PRINT_TOTAL_REFS();
Guido van Rossum1707aad1997-12-08 23:43:45 +0000425
Tim Peters9cf25ce2003-04-17 15:21:01 +0000426#ifdef Py_TRACE_REFS
427 /* Display all objects still alive -- this can invoke arbitrary
428 * __repr__ overrides, so requires a mostly-intact interpreter.
429 * Alas, a lot of stuff may still be alive now that will be cleaned
430 * up later.
431 */
Tim Peters269b2a62003-04-17 19:52:29 +0000432 if (Py_GETENV("PYTHONDUMPREFS"))
Tim Peters9cf25ce2003-04-17 15:21:01 +0000433 _Py_PrintReferences(stderr);
Tim Peters9cf25ce2003-04-17 15:21:01 +0000434#endif /* Py_TRACE_REFS */
435
Mark Hammond6cb90292003-04-22 11:18:00 +0000436 /* Cleanup auto-thread-state */
437#ifdef WITH_THREAD
438 _PyGILState_Fini();
439#endif /* WITH_THREAD */
440
Guido van Rossumd922fa42003-04-15 14:10:09 +0000441 /* Clear interpreter state */
Barry Warsawf242aa02000-05-25 23:09:49 +0000442 PyInterpreterState_Clear(interp);
Guido van Rossumd922fa42003-04-15 14:10:09 +0000443
Anthony Baxter12b6f6c2005-03-29 13:36:16 +0000444 /* Now we decref the exception classes. After this point nothing
445 can raise an exception. That's okay, because each Fini() method
446 below has been checked to make sure no exceptions are ever
447 raised.
448 */
449
450 _PyExc_Fini();
451
Guido van Rossumd922fa42003-04-15 14:10:09 +0000452 /* Delete current thread */
Barry Warsawf242aa02000-05-25 23:09:49 +0000453 PyThreadState_Swap(NULL);
454 PyInterpreterState_Delete(interp);
455
Guido van Rossumd922fa42003-04-15 14:10:09 +0000456 /* Sundry finalizers */
Guido van Rossumcc283f51997-08-05 02:22:03 +0000457 PyMethod_Fini();
458 PyFrame_Fini();
459 PyCFunction_Fini();
460 PyTuple_Fini();
Raymond Hettingerfb09f0e2004-10-07 03:58:07 +0000461 PyList_Fini();
Raymond Hettingerd7946662005-08-01 21:39:29 +0000462 PySet_Fini();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000463 PyString_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000464 PyInt_Fini();
465 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);
Neal Norwitz0c6ae5b2006-08-21 20:16:24 +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);
Neal Norwitz0c6ae5b2006-08-21 20:16:24 +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
Neal Norwitz0c6ae5b2006-08-21 20:16:24 +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
Tim Peters5e9d6cf2006-05-28 10:41:29 +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);
Tim Peters62e97f02006-03-28 21:44:32 +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) ? \
Neal Norwitzca460d92006-09-06 06:28:06 +0000732 PyPARSE_DONT_IMPLY_DEDENT : 0)) : 0)
733
734#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) ? \
Thomas Wouters34aa7ba2006-02-28 19:02:24 +0000738 PyPARSE_DONT_IMPLY_DEDENT : 0) \
Neal Norwitz9589ee22006-03-04 19:01:22 +0000739 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
740 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
Neal Norwitzca460d92006-09-06 06:28:06 +0000741#endif
Neil Schemenauerc24ea082002-03-22 23:53:36 +0000742
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();
Neal Norwitzb59d08c2006-07-22 16:20:49 +0000769 if (arena == NULL) {
770 Py_XDECREF(v);
771 Py_XDECREF(w);
772 return -1;
773 }
Tim Peters5e9d6cf2006-05-28 10:41:29 +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 Rossum78a1ed31997-05-22 22:35:04 +0000801 if (Py_FlushLine())
802 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000803 return 0;
804}
805
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000806/* Check whether a file maybe a pyc file: Look at the extension,
807 the file type, and, if we may close it, at the first few bytes. */
808
809static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000810maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000811{
812 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
813 return 1;
814
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000815 /* Only look into the file if we are allowed to close it, since
816 it then should also be seekable. */
817 if (closeit) {
818 /* Read only two bytes of the magic. If the file was opened in
819 text mode, the bytes 3 and 4 of the magic (\r\n) might not
820 be read as they are on disk. */
821 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
822 unsigned char buf[2];
Tim Peters3e876562001-02-11 04:35:39 +0000823 /* Mess: In case of -x, the stream is NOT at its start now,
824 and ungetc() was used to push back the first newline,
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000825 which makes the current stream position formally undefined,
826 and a x-platform nightmare.
827 Unfortunately, we have no direct way to know whether -x
828 was specified. So we use a terrible hack: if the current
829 stream position is not 0, we assume -x was specified, and
830 give up. Bug 132850 on SourceForge spells out the
831 hopelessness of trying anything else (fseek and ftell
832 don't work predictably x-platform for text-mode files).
Tim Peters3e876562001-02-11 04:35:39 +0000833 */
Tim Peters3e876562001-02-11 04:35:39 +0000834 int ispyc = 0;
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000835 if (ftell(fp) == 0) {
836 if (fread(buf, 1, 2, fp) == 2 &&
Tim Petersd08e3822003-04-17 15:24:21 +0000837 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
Tim Peters6f5a4ef2001-02-17 22:02:34 +0000838 ispyc = 1;
839 rewind(fp);
840 }
Tim Peters3e876562001-02-11 04:35:39 +0000841 return ispyc;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000842 }
843 return 0;
Tim Petersd08e3822003-04-17 15:24:21 +0000844}
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000845
Guido van Rossum0df002c2000-08-27 19:21:52 +0000846int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000847PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000848 PyCompilerFlags *flags)
849{
Guido van Rossum82598051997-03-05 00:20:32 +0000850 PyObject *m, *d, *v;
Martin v. Löwis95292d62002-12-11 14:04:59 +0000851 const char *ext;
Georg Brandlaa2321b2007-03-07 00:40:28 +0000852 int set_file_name = 0, ret;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000853
Guido van Rossum82598051997-03-05 00:20:32 +0000854 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000855 if (m == NULL)
856 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000857 d = PyModule_GetDict(m);
Fred Drake8ed02042002-10-17 21:24:58 +0000858 if (PyDict_GetItemString(d, "__file__") == NULL) {
859 PyObject *f = PyString_FromString(filename);
860 if (f == NULL)
861 return -1;
862 if (PyDict_SetItemString(d, "__file__", f) < 0) {
863 Py_DECREF(f);
864 return -1;
865 }
Georg Brandlaa2321b2007-03-07 00:40:28 +0000866 set_file_name = 1;
Fred Drake8ed02042002-10-17 21:24:58 +0000867 Py_DECREF(f);
868 }
Guido van Rossumfdef2711994-09-14 13:31:04 +0000869 ext = filename + strlen(filename) - 4;
Martin v. Löwisbe4c0f52001-01-04 20:30:56 +0000870 if (maybe_pyc_file(fp, filename, ext, closeit)) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000871 /* Try to run a pyc file. First, re-open in binary */
Guido van Rossum0df002c2000-08-27 19:21:52 +0000872 if (closeit)
873 fclose(fp);
Fred Drake8ed02042002-10-17 21:24:58 +0000874 if ((fp = fopen(filename, "rb")) == NULL) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000875 fprintf(stderr, "python: Can't reopen .pyc file\n");
Georg Brandlaa2321b2007-03-07 00:40:28 +0000876 ret = -1;
877 goto done;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000878 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000879 /* Turn on optimization if a .pyo file is given */
880 if (strcmp(ext, ".pyo") == 0)
881 Py_OptimizeFlag = 1;
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000882 v = run_pyc_file(fp, filename, d, d, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000883 } else {
Tim Petersd08e3822003-04-17 15:24:21 +0000884 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
Jeremy Hyltonbc320242001-03-22 02:47:58 +0000885 closeit, flags);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000886 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000887 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000888 PyErr_Print();
Georg Brandlaa2321b2007-03-07 00:40:28 +0000889 ret = -1;
890 goto done;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000891 }
Guido van Rossum82598051997-03-05 00:20:32 +0000892 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000893 if (Py_FlushLine())
894 PyErr_Clear();
Georg Brandlaa2321b2007-03-07 00:40:28 +0000895 ret = 0;
896 done:
897 if (set_file_name && PyDict_DelItemString(d, "__file__"))
898 PyErr_Clear();
899 return ret;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000900}
901
902int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000903PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
Guido van Rossum393661d2001-08-31 17:40:15 +0000904{
Guido van Rossum82598051997-03-05 00:20:32 +0000905 PyObject *m, *d, *v;
906 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000907 if (m == NULL)
908 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000909 d = PyModule_GetDict(m);
Guido van Rossum393661d2001-08-31 17:40:15 +0000910 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000911 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000912 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000913 return -1;
914 }
Guido van Rossum82598051997-03-05 00:20:32 +0000915 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000916 if (Py_FlushLine())
917 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000918 return 0;
919}
920
Barry Warsaw035574d1997-08-29 22:07:17 +0000921static int
Martin v. Löwis95292d62002-12-11 14:04:59 +0000922parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
923 int *lineno, int *offset, const char **text)
Barry Warsaw035574d1997-08-29 22:07:17 +0000924{
925 long hold;
926 PyObject *v;
927
928 /* old style errors */
929 if (PyTuple_Check(err))
Neal Norwitz78293352002-04-01 01:41:20 +0000930 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
Neal Norwitz9589ee22006-03-04 19:01:22 +0000931 lineno, offset, text);
Barry Warsaw035574d1997-08-29 22:07:17 +0000932
933 /* new style errors. `err' is an instance */
934
935 if (! (v = PyObject_GetAttrString(err, "msg")))
936 goto finally;
937 *message = v;
938
939 if (!(v = PyObject_GetAttrString(err, "filename")))
940 goto finally;
941 if (v == Py_None)
942 *filename = NULL;
943 else if (! (*filename = PyString_AsString(v)))
944 goto finally;
945
946 Py_DECREF(v);
947 if (!(v = PyObject_GetAttrString(err, "lineno")))
948 goto finally;
949 hold = PyInt_AsLong(v);
950 Py_DECREF(v);
951 v = NULL;
952 if (hold < 0 && PyErr_Occurred())
953 goto finally;
954 *lineno = (int)hold;
955
956 if (!(v = PyObject_GetAttrString(err, "offset")))
957 goto finally;
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000958 if (v == Py_None) {
959 *offset = -1;
960 Py_DECREF(v);
961 v = NULL;
962 } else {
963 hold = PyInt_AsLong(v);
964 Py_DECREF(v);
965 v = NULL;
966 if (hold < 0 && PyErr_Occurred())
967 goto finally;
968 *offset = (int)hold;
969 }
Barry Warsaw035574d1997-08-29 22:07:17 +0000970
971 if (!(v = PyObject_GetAttrString(err, "text")))
972 goto finally;
973 if (v == Py_None)
974 *text = NULL;
975 else if (! (*text = PyString_AsString(v)))
976 goto finally;
977 Py_DECREF(v);
978 return 1;
979
980finally:
981 Py_XDECREF(v);
982 return 0;
983}
984
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000985void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000986PyErr_Print(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000987{
Guido van Rossuma61691e1998-02-06 22:27:24 +0000988 PyErr_PrintEx(1);
989}
990
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000991static void
Martin v. Löwis95292d62002-12-11 14:04:59 +0000992print_error_text(PyObject *f, int offset, const char *text)
Jeremy Hylton9f1b9932001-02-28 07:07:43 +0000993{
994 char *nl;
995 if (offset >= 0) {
996 if (offset > 0 && offset == (int)strlen(text))
997 offset--;
998 for (;;) {
999 nl = strchr(text, '\n');
1000 if (nl == NULL || nl-text >= offset)
1001 break;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001002 offset -= (int)(nl+1-text);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001003 text = nl+1;
1004 }
1005 while (*text == ' ' || *text == '\t') {
1006 text++;
1007 offset--;
1008 }
1009 }
1010 PyFile_WriteString(" ", f);
1011 PyFile_WriteString(text, f);
1012 if (*text == '\0' || text[strlen(text)-1] != '\n')
1013 PyFile_WriteString("\n", f);
1014 if (offset == -1)
1015 return;
1016 PyFile_WriteString(" ", f);
1017 offset--;
1018 while (offset > 0) {
1019 PyFile_WriteString(" ", f);
1020 offset--;
1021 }
1022 PyFile_WriteString("^\n", f);
1023}
1024
Guido van Rossum66e8e862001-03-23 17:54:43 +00001025static void
1026handle_system_exit(void)
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001027{
Neal Norwitz9589ee22006-03-04 19:01:22 +00001028 PyObject *exception, *value, *tb;
1029 int exitcode = 0;
Tim Peterscf615b52003-04-19 18:47:02 +00001030
Georg Brandl49aafc92007-03-07 00:34:46 +00001031 if (Py_InspectFlag)
1032 /* Don't exit if -i flag was given. This flag is set to 0
1033 * when entering interactive mode for inspecting. */
1034 return;
1035
Guido van Rossum66e8e862001-03-23 17:54:43 +00001036 PyErr_Fetch(&exception, &value, &tb);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001037 if (Py_FlushLine())
1038 PyErr_Clear();
1039 fflush(stdout);
1040 if (value == NULL || value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001041 goto done;
Brett Cannonbf364092006-03-01 04:25:17 +00001042 if (PyExceptionInstance_Check(value)) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001043 /* The error code should be in the `code' attribute. */
1044 PyObject *code = PyObject_GetAttrString(value, "code");
1045 if (code) {
1046 Py_DECREF(value);
1047 value = code;
1048 if (value == Py_None)
Tim Peterscf615b52003-04-19 18:47:02 +00001049 goto done;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001050 }
1051 /* If we failed to dig out the 'code' attribute,
1052 just let the else clause below print the error. */
1053 }
1054 if (PyInt_Check(value))
Tim Peterscf615b52003-04-19 18:47:02 +00001055 exitcode = (int)PyInt_AsLong(value);
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001056 else {
1057 PyObject_Print(value, stderr, Py_PRINT_RAW);
1058 PySys_WriteStderr("\n");
Tim Peterscf615b52003-04-19 18:47:02 +00001059 exitcode = 1;
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001060 }
Tim Peterscf615b52003-04-19 18:47:02 +00001061 done:
Neal Norwitz9589ee22006-03-04 19:01:22 +00001062 /* Restore and clear the exception info, in order to properly decref
1063 * the exception, value, and traceback. If we just exit instead,
1064 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1065 * some finalizers from running.
1066 */
Tim Peterscf615b52003-04-19 18:47:02 +00001067 PyErr_Restore(exception, value, tb);
1068 PyErr_Clear();
1069 Py_Exit(exitcode);
1070 /* NOTREACHED */
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001071}
1072
1073void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001074PyErr_PrintEx(int set_sys_last_vars)
Guido van Rossuma61691e1998-02-06 22:27:24 +00001075{
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001076 PyObject *exception, *v, *tb, *hook;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001077
1078 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1079 handle_system_exit();
1080 }
Guido van Rossum82598051997-03-05 00:20:32 +00001081 PyErr_Fetch(&exception, &v, &tb);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001082 if (exception == NULL)
1083 return;
Barry Warsaw035574d1997-08-29 22:07:17 +00001084 PyErr_NormalizeException(&exception, &v, &tb);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001085 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +00001086 return;
Guido van Rossum9d785502006-03-07 18:31:44 +00001087 /* Now we know v != NULL too */
Guido van Rossuma61691e1998-02-06 22:27:24 +00001088 if (set_sys_last_vars) {
1089 PySys_SetObject("last_type", exception);
1090 PySys_SetObject("last_value", v);
1091 PySys_SetObject("last_traceback", tb);
1092 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001093 hook = PySys_GetObject("excepthook");
1094 if (hook) {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00001095 PyObject *args = PyTuple_Pack(3,
Guido van Rossum9d785502006-03-07 18:31:44 +00001096 exception, v, tb ? tb : Py_None);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001097 PyObject *result = PyEval_CallObject(hook, args);
1098 if (result == NULL) {
1099 PyObject *exception2, *v2, *tb2;
Guido van Rossum66e8e862001-03-23 17:54:43 +00001100 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
1101 handle_system_exit();
1102 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001103 PyErr_Fetch(&exception2, &v2, &tb2);
1104 PyErr_NormalizeException(&exception2, &v2, &tb2);
Neal Norwitza5e4f222006-07-17 00:59:04 +00001105 /* It should not be possible for exception2 or v2
1106 to be NULL. However PyErr_Display() can't
1107 tolerate NULLs, so just be safe. */
1108 if (exception2 == NULL) {
1109 exception2 = Py_None;
1110 Py_INCREF(exception2);
1111 }
1112 if (v2 == NULL) {
1113 v2 = Py_None;
1114 Py_INCREF(v2);
1115 }
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001116 if (Py_FlushLine())
1117 PyErr_Clear();
1118 fflush(stdout);
1119 PySys_WriteStderr("Error in sys.excepthook:\n");
1120 PyErr_Display(exception2, v2, tb2);
1121 PySys_WriteStderr("\nOriginal exception was:\n");
1122 PyErr_Display(exception, v, tb);
Neal Norwitza5e4f222006-07-17 00:59:04 +00001123 Py_DECREF(exception2);
1124 Py_DECREF(v2);
Jeremy Hylton07028582001-12-07 15:35:35 +00001125 Py_XDECREF(tb2);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001126 }
1127 Py_XDECREF(result);
1128 Py_XDECREF(args);
1129 } else {
1130 PySys_WriteStderr("sys.excepthook is missing\n");
1131 PyErr_Display(exception, v, tb);
1132 }
1133 Py_XDECREF(exception);
1134 Py_XDECREF(v);
1135 Py_XDECREF(tb);
1136}
1137
Richard Jones7b9558d2006-05-27 12:29:24 +00001138void
1139PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001140{
1141 int err = 0;
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001142 PyObject *f = PySys_GetObject("stderr");
Armin Rigo5d2c6832004-03-22 20:16:58 +00001143 Py_INCREF(value);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001144 if (f == NULL)
1145 fprintf(stderr, "lost sys.stderr\n");
1146 else {
Guido van Rossum0829c751998-02-28 04:31:39 +00001147 if (Py_FlushLine())
1148 PyErr_Clear();
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001149 fflush(stdout);
Ka-Ping Yeeb5c51322001-03-23 02:46:52 +00001150 if (tb && tb != Py_None)
1151 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +00001152 if (err == 0 &&
Armin Rigo5d2c6832004-03-22 20:16:58 +00001153 PyObject_HasAttrString(value, "print_file_and_line"))
Barry Warsaw36b8f941997-08-26 18:09:48 +00001154 {
Guido van Rossum82598051997-03-05 00:20:32 +00001155 PyObject *message;
Martin v. Löwis95292d62002-12-11 14:04:59 +00001156 const char *filename, *text;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001157 int lineno, offset;
Armin Rigo5d2c6832004-03-22 20:16:58 +00001158 if (!parse_syntax_error(value, &message, &filename,
Barry Warsaw035574d1997-08-29 22:07:17 +00001159 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +00001160 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001161 else {
1162 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +00001163 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001164 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +00001165 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001166 else
Guido van Rossum82598051997-03-05 00:20:32 +00001167 PyFile_WriteString(filename, f);
1168 PyFile_WriteString("\", line ", f);
Jeremy Hylton518ab1c2001-11-28 20:42:20 +00001169 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +00001170 PyFile_WriteString(buf, f);
1171 PyFile_WriteString("\n", f);
Jeremy Hylton9f1b9932001-02-28 07:07:43 +00001172 if (text != NULL)
1173 print_error_text(f, offset, text);
Armin Rigo5d2c6832004-03-22 20:16:58 +00001174 Py_DECREF(value);
1175 value = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001176 /* Can't be bothered to check all those
1177 PyFile_WriteString() calls */
1178 if (PyErr_Occurred())
1179 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001180 }
1181 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001182 if (err) {
1183 /* Don't do anything else */
1184 }
Brett Cannonbf364092006-03-01 04:25:17 +00001185 else if (PyExceptionClass_Check(exception)) {
Richard Jones7b9558d2006-05-27 12:29:24 +00001186 PyObject* moduleName;
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001187 char* className = PyExceptionClass_Name(exception);
1188 if (className != NULL) {
1189 char *dot = strrchr(className, '.');
1190 if (dot != NULL)
1191 className = dot+1;
1192 }
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001193
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001194 moduleName = PyObject_GetAttrString(exception, "__module__");
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001195 if (moduleName == NULL)
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001196 err = PyFile_WriteString("<unknown>", f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001197 else {
1198 char* modstr = PyString_AsString(moduleName);
Tim Petersd08e3822003-04-17 15:24:21 +00001199 if (modstr && strcmp(modstr, "exceptions"))
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001200 {
1201 err = PyFile_WriteString(modstr, f);
1202 err += PyFile_WriteString(".", f);
1203 }
Richard Jones7b9558d2006-05-27 12:29:24 +00001204 Py_DECREF(moduleName);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001205 }
1206 if (err == 0) {
1207 if (className == NULL)
1208 err = PyFile_WriteString("<unknown>", f);
1209 else
Brett Cannonbf364092006-03-01 04:25:17 +00001210 err = PyFile_WriteString(className, f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +00001211 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001212 }
1213 else
1214 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
Brett Cannon2e63b732006-03-02 18:34:57 +00001215 if (err == 0 && (value != Py_None)) {
1216 PyObject *s = PyObject_Str(value);
1217 /* only print colon if the str() of the
1218 object is not the empty string
1219 */
1220 if (s == NULL)
1221 err = -1;
1222 else if (!PyString_Check(s) ||
1223 PyString_GET_SIZE(s) != 0)
1224 err = PyFile_WriteString(": ", f);
1225 if (err == 0)
1226 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
1227 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +00001228 }
Georg Brandl7b9c5552007-03-12 14:30:05 +00001229 /* try to write a newline in any case */
1230 err += PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001231 }
Armin Rigo5d2c6832004-03-22 20:16:58 +00001232 Py_DECREF(value);
Guido van Rossum78a1ed31997-05-22 22:35:04 +00001233 /* If an error happened here, don't show it.
1234 XXX This is wrong, but too many callers rely on this behavior. */
1235 if (err != 0)
1236 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001237}
1238
Guido van Rossum82598051997-03-05 00:20:32 +00001239PyObject *
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001240PyRun_StringFlags(const char *str, int start, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001241 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001242{
Neal Norwitze92fba02006-03-04 18:52:26 +00001243 PyObject *ret = NULL;
Neal Norwitzd12bd012006-07-21 07:59:47 +00001244 mod_ty mod;
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001245 PyArena *arena = PyArena_New();
Neal Norwitzd12bd012006-07-21 07:59:47 +00001246 if (arena == NULL)
1247 return NULL;
1248
1249 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
Neal Norwitze92fba02006-03-04 18:52:26 +00001250 if (mod != NULL)
1251 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001252 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001253 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001254}
1255
1256PyObject *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001257PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001258 PyObject *locals, int closeit, PyCompilerFlags *flags)
1259{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001260 PyObject *ret;
Neal Norwitzd12bd012006-07-21 07:59:47 +00001261 mod_ty mod;
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001262 PyArena *arena = PyArena_New();
Neal Norwitzd12bd012006-07-21 07:59:47 +00001263 if (arena == NULL)
1264 return NULL;
1265
1266 mod = PyParser_ASTFromFile(fp, filename, start, 0, 0,
1267 flags, NULL, arena);
Georg Brandl098cd692007-03-06 12:17:50 +00001268 if (closeit)
1269 fclose(fp);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001270 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001271 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001272 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001273 }
Neal Norwitze92fba02006-03-04 18:52:26 +00001274 ret = run_mod(mod, filename, globals, locals, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001275 PyArena_Free(arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001276 return ret;
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001277}
1278
Guido van Rossum82598051997-03-05 00:20:32 +00001279static PyObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001280run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001281 PyCompilerFlags *flags, PyArena *arena)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001282{
Guido van Rossum82598051997-03-05 00:20:32 +00001283 PyCodeObject *co;
1284 PyObject *v;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001285 co = PyAST_Compile(mod, filename, flags, arena);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001286 if (co == NULL)
1287 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +00001288 v = PyEval_EvalCode(co, globals, locals);
1289 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001290 return v;
1291}
1292
Guido van Rossum82598051997-03-05 00:20:32 +00001293static PyObject *
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001294run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001295 PyObject *locals, PyCompilerFlags *flags)
Guido van Rossumfdef2711994-09-14 13:31:04 +00001296{
Guido van Rossum82598051997-03-05 00:20:32 +00001297 PyCodeObject *co;
1298 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +00001299 long magic;
Fred Drakee8de31c2000-08-31 05:38:39 +00001300 long PyImport_GetMagicNumber(void);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001301
Guido van Rossum82598051997-03-05 00:20:32 +00001302 magic = PyMarshal_ReadLongFromFile(fp);
1303 if (magic != PyImport_GetMagicNumber()) {
1304 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001305 "Bad magic number in .pyc file");
1306 return NULL;
1307 }
Guido van Rossum82598051997-03-05 00:20:32 +00001308 (void) PyMarshal_ReadLongFromFile(fp);
Tim Petersd9b9ac82001-01-28 00:27:39 +00001309 v = PyMarshal_ReadLastObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001310 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +00001311 if (v == NULL || !PyCode_Check(v)) {
1312 Py_XDECREF(v);
1313 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +00001314 "Bad code object in .pyc file");
1315 return NULL;
1316 }
Guido van Rossum82598051997-03-05 00:20:32 +00001317 co = (PyCodeObject *)v;
1318 v = PyEval_EvalCode(co, globals, locals);
Jeremy Hyltonb857ba22001-08-10 21:41:33 +00001319 if (v && flags)
1320 flags->cf_flags |= (co->co_flags & PyCF_MASK);
Guido van Rossum82598051997-03-05 00:20:32 +00001321 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +00001322 return v;
1323}
1324
Guido van Rossum82598051997-03-05 00:20:32 +00001325PyObject *
Tim Petersd08e3822003-04-17 15:24:21 +00001326Py_CompileStringFlags(const char *str, const char *filename, int start,
Jeremy Hyltonbc320242001-03-22 02:47:58 +00001327 PyCompilerFlags *flags)
1328{
Guido van Rossum82598051997-03-05 00:20:32 +00001329 PyCodeObject *co;
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001330 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001331 PyArena *arena = PyArena_New();
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001332 if (arena == NULL)
1333 return NULL;
1334
1335 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001336 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001337 PyArena_Free(arena);
Guido van Rossum5b722181993-03-30 17:46:03 +00001338 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001339 }
Martin v. Löwis2b366e42006-02-26 22:12:35 +00001340 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
Martin v. Löwisbd260da2006-02-26 19:42:26 +00001341 PyObject *result = PyAST_mod2obj(mod);
1342 PyArena_Free(arena);
1343 return result;
1344 }
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001345 co = PyAST_Compile(mod, filename, flags, arena);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001346 PyArena_Free(arena);
Guido van Rossum82598051997-03-05 00:20:32 +00001347 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +00001348}
1349
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001350struct symtable *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001351Py_SymtableString(const char *str, const char *filename, int start)
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001352{
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001353 struct symtable *st;
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001354 mod_ty mod;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001355 PyArena *arena = PyArena_New();
Neal Norwitzb59d08c2006-07-22 16:20:49 +00001356 if (arena == NULL)
1357 return NULL;
1358
1359 mod = PyParser_ASTFromString(str, filename, start, NULL, arena);
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001360 if (mod == NULL) {
Neal Norwitz9589ee22006-03-04 19:01:22 +00001361 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001362 return NULL;
Neal Norwitz9589ee22006-03-04 19:01:22 +00001363 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001364 st = PySymtable_Build(mod, filename, 0);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001365 PyArena_Free(arena);
Jeremy Hylton4b38da62001-02-02 18:19:15 +00001366 return st;
1367}
1368
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001369/* Preferred access to parser is through AST. */
1370mod_ty
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001371PyParser_ASTFromString(const char *s, const char *filename, int start,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001372 PyCompilerFlags *flags, PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001373{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001374 mod_ty mod;
1375 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001376 node *n = PyParser_ParseStringFlagsFilename(s, filename,
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001377 &_PyParser_Grammar, start, &err,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001378 PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001379 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001380 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001381 PyNode_Free(n);
1382 return mod;
1383 }
1384 else {
1385 err_input(&err);
1386 return NULL;
1387 }
1388}
1389
1390mod_ty
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001391PyParser_ASTFromFile(FILE *fp, const char *filename, int start, char *ps1,
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001392 char *ps2, PyCompilerFlags *flags, int *errcode,
Neal Norwitz9589ee22006-03-04 19:01:22 +00001393 PyArena *arena)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001394{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001395 mod_ty mod;
1396 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001397 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
1398 start, ps1, ps2, &err, PARSER_FLAGS(flags));
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001399 if (n) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001400 mod = PyAST_FromNode(n, flags, filename, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001401 PyNode_Free(n);
1402 return mod;
1403 }
1404 else {
1405 err_input(&err);
1406 if (errcode)
1407 *errcode = err.error;
1408 return NULL;
1409 }
1410}
1411
Guido van Rossuma110aa61994-08-29 12:50:44 +00001412/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001413
Guido van Rossuma110aa61994-08-29 12:50:44 +00001414node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001415PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001416{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001417 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001418 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
1419 start, NULL, NULL, &err, flags);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001420 if (n == NULL)
1421 err_input(&err);
Tim Peters5e9d6cf2006-05-28 10:41:29 +00001422
Guido van Rossuma110aa61994-08-29 12:50:44 +00001423 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001424}
1425
Guido van Rossuma110aa61994-08-29 12:50:44 +00001426/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001427
Guido van Rossuma110aa61994-08-29 12:50:44 +00001428node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001429PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
Tim Petersfe2127d2001-07-16 05:37:24 +00001430{
Tim Petersfe2127d2001-07-16 05:37:24 +00001431 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001432 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
1433 start, &err, flags);
Tim Petersfe2127d2001-07-16 05:37:24 +00001434 if (n == NULL)
1435 err_input(&err);
1436 return n;
1437}
1438
1439node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001440PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
Thomas Heller6b17abf2002-07-09 09:23:27 +00001441 int start, int flags)
1442{
Thomas Heller6b17abf2002-07-09 09:23:27 +00001443 perrdetail err;
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001444 node *n = PyParser_ParseStringFlagsFilename(str, filename,
1445 &_PyParser_Grammar, start, &err, flags);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001446 if (n == NULL)
1447 err_input(&err);
1448 return n;
1449}
1450
1451node *
Martin v. Löwis95292d62002-12-11 14:04:59 +00001452PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
Thomas Heller6b17abf2002-07-09 09:23:27 +00001453{
Neal Norwitzadb69fc2005-12-17 20:54:49 +00001454 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
Thomas Heller6b17abf2002-07-09 09:23:27 +00001455}
1456
Guido van Rossum66ebd912003-04-17 16:02:26 +00001457/* May want to move a more generalized form of this to parsetok.c or
1458 even parser modules. */
1459
1460void
1461PyParser_SetError(perrdetail *err)
1462{
1463 err_input(err);
1464}
1465
Guido van Rossuma110aa61994-08-29 12:50:44 +00001466/* Set the error appropriate to the given input error code (see errcode.h) */
1467
1468static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001469err_input(perrdetail *err)
Guido van Rossuma110aa61994-08-29 12:50:44 +00001470{
Fred Drake85f36392000-07-11 17:53:00 +00001471 PyObject *v, *w, *errtype;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001472 PyObject* u = NULL;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001473 char *msg = NULL;
Fred Drake85f36392000-07-11 17:53:00 +00001474 errtype = PyExc_SyntaxError;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001475 switch (err->error) {
1476 case E_SYNTAX:
Fred Drake85f36392000-07-11 17:53:00 +00001477 errtype = PyExc_IndentationError;
1478 if (err->expected == INDENT)
1479 msg = "expected an indented block";
1480 else if (err->token == INDENT)
1481 msg = "unexpected indent";
1482 else if (err->token == DEDENT)
1483 msg = "unexpected unindent";
1484 else {
1485 errtype = PyExc_SyntaxError;
1486 msg = "invalid syntax";
1487 }
Guido van Rossuma110aa61994-08-29 12:50:44 +00001488 break;
1489 case E_TOKEN:
1490 msg = "invalid token";
Guido van Rossuma110aa61994-08-29 12:50:44 +00001491 break;
Skip Montanaro118ec702002-08-15 01:20:16 +00001492 case E_EOFS:
1493 msg = "EOF while scanning triple-quoted string";
1494 break;
1495 case E_EOLS:
1496 msg = "EOL while scanning single-quoted string";
1497 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001498 case E_INTR:
Michael W. Hudson30ea2f22004-07-07 17:44:12 +00001499 if (!PyErr_Occurred())
1500 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001501 return;
1502 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +00001503 PyErr_NoMemory();
Guido van Rossuma110aa61994-08-29 12:50:44 +00001504 return;
1505 case E_EOF:
1506 msg = "unexpected EOF while parsing";
1507 break;
Fred Drake85f36392000-07-11 17:53:00 +00001508 case E_TABSPACE:
1509 errtype = PyExc_TabError;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001510 msg = "inconsistent use of tabs and spaces in indentation";
1511 break;
Jeremy Hylton94988062000-06-20 19:10:44 +00001512 case E_OVERFLOW:
1513 msg = "expression too long";
1514 break;
Fred Drake85f36392000-07-11 17:53:00 +00001515 case E_DEDENT:
1516 errtype = PyExc_IndentationError;
1517 msg = "unindent does not match any outer indentation level";
1518 break;
1519 case E_TOODEEP:
1520 errtype = PyExc_IndentationError;
1521 msg = "too many levels of indentation";
1522 break;
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001523 case E_DECODE: {
1524 PyObject *type, *value, *tb;
1525 PyErr_Fetch(&type, &value, &tb);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001526 if (value != NULL) {
Martin v. Löwisd35edda2005-08-24 08:39:24 +00001527 u = PyObject_Str(value);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001528 if (u != NULL) {
1529 msg = PyString_AsString(u);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001530 }
1531 }
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001532 if (msg == NULL)
1533 msg = "unknown decode error";
Neal Norwitzdb83eb32005-12-18 05:29:30 +00001534 Py_XDECREF(type);
1535 Py_XDECREF(value);
Neal Norwitz40d37812005-10-02 01:48:49 +00001536 Py_XDECREF(tb);
Martin v. Löwisc2632a52004-07-21 05:35:02 +00001537 break;
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001538 }
Martin v. Löwis4bf108d2005-03-03 11:45:45 +00001539 case E_LINECONT:
1540 msg = "unexpected character after line continuation character";
1541 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001542 default:
1543 fprintf(stderr, "error=%d\n", err->error);
1544 msg = "unknown parsing error";
1545 break;
1546 }
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001547 v = Py_BuildValue("(ziiz)", err->filename,
1548 err->lineno, err->offset, err->text);
Neal Norwitz9589ee22006-03-04 19:01:22 +00001549 if (err->text != NULL) {
Tim Petersc9d78aa2006-03-26 23:27:58 +00001550 PyObject_FREE(err->text);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001551 err->text = NULL;
1552 }
1553 w = NULL;
1554 if (v != NULL)
1555 w = Py_BuildValue("(sO)", msg, v);
Martin v. Löwis00f1e3f2002-08-04 17:29:52 +00001556 Py_XDECREF(u);
Guido van Rossum41318302001-03-23 04:01:07 +00001557 Py_XDECREF(v);
Fred Drake85f36392000-07-11 17:53:00 +00001558 PyErr_SetObject(errtype, w);
Guido van Rossum82598051997-03-05 00:20:32 +00001559 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001560}
1561
1562/* Print fatal error message and abort */
1563
1564void
Tim Peters7c321a82002-07-09 02:57:01 +00001565Py_FatalError(const char *msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001566{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00001567 fprintf(stderr, "Fatal Python error: %s\n", msg);
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001568#ifdef MS_WINDOWS
Guido van Rossum23c94461997-05-22 20:21:30 +00001569 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +00001570 OutputDebugString(msg);
1571 OutputDebugString("\n");
Guido van Rossum0ba35361998-08-13 13:33:16 +00001572#ifdef _DEBUG
1573 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00001574#endif
Martin v. Löwis6238d2b2002-06-30 15:26:10 +00001575#endif /* MS_WINDOWS */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001576 abort();
1577}
1578
1579/* Clean up and exit */
1580
Guido van Rossuma110aa61994-08-29 12:50:44 +00001581#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00001582#include "pythread.h"
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001583#endif
1584
Guido van Rossum2dcfc961998-10-01 16:01:57 +00001585#define NEXITFUNCS 32
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001586static void (*exitfuncs[NEXITFUNCS])(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00001587static int nexitfuncs = 0;
1588
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001589int Py_AtExit(void (*func)(void))
Guido van Rossum1662dd51994-09-07 14:38:28 +00001590{
1591 if (nexitfuncs >= NEXITFUNCS)
1592 return -1;
1593 exitfuncs[nexitfuncs++] = func;
1594 return 0;
1595}
1596
Guido van Rossumcc283f51997-08-05 02:22:03 +00001597static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001598call_sys_exitfunc(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001599{
Guido van Rossum82598051997-03-05 00:20:32 +00001600 PyObject *exitfunc = PySys_GetObject("exitfunc");
Guido van Rossum59bff391992-09-03 20:28:00 +00001601
1602 if (exitfunc) {
Fred Drake6a12d8d2001-03-23 17:34:02 +00001603 PyObject *res;
Guido van Rossum82598051997-03-05 00:20:32 +00001604 Py_INCREF(exitfunc);
1605 PySys_SetObject("exitfunc", (PyObject *)NULL);
1606 res = PyEval_CallObject(exitfunc, (PyObject *)NULL);
Guido van Rossum59bff391992-09-03 20:28:00 +00001607 if (res == NULL) {
Ka-Ping Yee26fabb02001-03-23 15:36:41 +00001608 if (!PyErr_ExceptionMatches(PyExc_SystemExit)) {
1609 PySys_WriteStderr("Error in sys.exitfunc:\n");
1610 }
Guido van Rossum82598051997-03-05 00:20:32 +00001611 PyErr_Print();
Guido van Rossum59bff391992-09-03 20:28:00 +00001612 }
Guido van Rossum82598051997-03-05 00:20:32 +00001613 Py_DECREF(exitfunc);
Guido van Rossum59bff391992-09-03 20:28:00 +00001614 }
1615
Guido van Rossum0829c751998-02-28 04:31:39 +00001616 if (Py_FlushLine())
1617 PyErr_Clear();
Guido van Rossumcc283f51997-08-05 02:22:03 +00001618}
Guido van Rossum1662dd51994-09-07 14:38:28 +00001619
Guido van Rossumcc283f51997-08-05 02:22:03 +00001620static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001621call_ll_exitfuncs(void)
Guido van Rossumcc283f51997-08-05 02:22:03 +00001622{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001623 while (nexitfuncs > 0)
1624 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001625
1626 fflush(stdout);
1627 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001628}
1629
1630void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001631Py_Exit(int sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001632{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001633 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001634
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001635 exit(sts);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001636}
1637
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001638static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001639initsigs(void)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001640{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001641#ifdef SIGPIPE
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001642 PyOS_setsig(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001643#endif
Guido van Rossum70d893a2001-08-16 08:21:42 +00001644#ifdef SIGXFZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001645 PyOS_setsig(SIGXFZ, SIG_IGN);
Guido van Rossum70d893a2001-08-16 08:21:42 +00001646#endif
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001647#ifdef SIGXFSZ
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001648 PyOS_setsig(SIGXFSZ, SIG_IGN);
Jeremy Hylton1b0bf9b2002-04-23 20:31:01 +00001649#endif
Guido van Rossum82598051997-03-05 00:20:32 +00001650 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001651}
1652
Guido van Rossum7433b121997-02-14 19:45:36 +00001653
1654/*
1655 * The file descriptor fd is considered ``interactive'' if either
1656 * a) isatty(fd) is TRUE, or
1657 * b) the -i flag was given, and the filename associated with
1658 * the descriptor is NULL or "<stdin>" or "???".
1659 */
1660int
Martin v. Löwis95292d62002-12-11 14:04:59 +00001661Py_FdIsInteractive(FILE *fp, const char *filename)
Guido van Rossum7433b121997-02-14 19:45:36 +00001662{
1663 if (isatty((int)fileno(fp)))
1664 return 1;
1665 if (!Py_InteractiveFlag)
1666 return 0;
1667 return (filename == NULL) ||
1668 (strcmp(filename, "<stdin>") == 0) ||
1669 (strcmp(filename, "???") == 0);
1670}
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001671
1672
Tim Petersd08e3822003-04-17 15:24:21 +00001673#if defined(USE_STACKCHECK)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001674#if defined(WIN32) && defined(_MSC_VER)
1675
1676/* Stack checking for Microsoft C */
1677
1678#include <malloc.h>
1679#include <excpt.h>
1680
Fred Drakee8de31c2000-08-31 05:38:39 +00001681/*
1682 * Return non-zero when we run out of memory on the stack; zero otherwise.
1683 */
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001684int
Fred Drake399739f2000-08-31 05:52:44 +00001685PyOS_CheckStack(void)
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001686{
1687 __try {
Tim Peters92e4dd82002-10-05 01:47:34 +00001688 /* alloca throws a stack overflow exception if there's
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001689 not enough space left on the stack */
Tim Peters92e4dd82002-10-05 01:47:34 +00001690 alloca(PYOS_STACK_MARGIN * sizeof(void*));
Fredrik Lundh2f15b252000-08-27 19:15:31 +00001691 return 0;
1692 } __except (EXCEPTION_EXECUTE_HANDLER) {
1693 /* just ignore all errors */
1694 }
1695 return 1;
1696}
1697
1698#endif /* WIN32 && _MSC_VER */
1699
1700/* Alternate implementations can be added here... */
1701
1702#endif /* USE_STACKCHECK */
Guido van Rossum6f256182000-09-16 16:32:19 +00001703
1704
1705/* Wrappers around sigaction() or signal(). */
1706
1707PyOS_sighandler_t
1708PyOS_getsig(int sig)
1709{
1710#ifdef HAVE_SIGACTION
1711 struct sigaction context;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001712 if (sigaction(sig, NULL, &context) == -1)
1713 return SIG_ERR;
Guido van Rossum6f256182000-09-16 16:32:19 +00001714 return context.sa_handler;
1715#else
1716 PyOS_sighandler_t handler;
Martin v. Löwisb45b3152005-11-28 17:34:23 +00001717/* Special signal handling for the secure CRT in Visual Studio 2005 */
1718#if defined(_MSC_VER) && _MSC_VER >= 1400
1719 switch (sig) {
1720 /* Only these signals are valid */
1721 case SIGINT:
1722 case SIGILL:
1723 case SIGFPE:
1724 case SIGSEGV:
1725 case SIGTERM:
1726 case SIGBREAK:
1727 case SIGABRT:
1728 break;
1729 /* Don't call signal() with other values or it will assert */
1730 default:
1731 return SIG_ERR;
1732 }
1733#endif /* _MSC_VER && _MSC_VER >= 1400 */
Guido van Rossum6f256182000-09-16 16:32:19 +00001734 handler = signal(sig, SIG_IGN);
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001735 if (handler != SIG_ERR)
1736 signal(sig, handler);
Guido van Rossum6f256182000-09-16 16:32:19 +00001737 return handler;
1738#endif
1739}
1740
1741PyOS_sighandler_t
1742PyOS_setsig(int sig, PyOS_sighandler_t handler)
1743{
1744#ifdef HAVE_SIGACTION
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001745 struct sigaction context, ocontext;
Guido van Rossum6f256182000-09-16 16:32:19 +00001746 context.sa_handler = handler;
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001747 sigemptyset(&context.sa_mask);
1748 context.sa_flags = 0;
1749 if (sigaction(sig, &context, &ocontext) == -1)
1750 return SIG_ERR;
1751 return ocontext.sa_handler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001752#else
Anthony Baxter9ceaa722004-10-13 14:48:50 +00001753 PyOS_sighandler_t oldhandler;
1754 oldhandler = signal(sig, handler);
1755#ifdef HAVE_SIGINTERRUPT
1756 siginterrupt(sig, 1);
1757#endif
1758 return oldhandler;
Guido van Rossum6f256182000-09-16 16:32:19 +00001759#endif
1760}
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001761
1762/* Deprecated C API functions still provided for binary compatiblity */
1763
1764#undef PyParser_SimpleParseFile
Thomas Heller1b046642006-04-18 18:51:06 +00001765PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001766PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
1767{
1768 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
1769}
1770
Thomas Heller1b046642006-04-18 18:51:06 +00001771#undef PyParser_SimpleParseString
1772PyAPI_FUNC(node *)
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001773PyParser_SimpleParseString(const char *str, int start)
1774{
1775 return PyParser_SimpleParseStringFlags(str, start, 0);
1776}
Anthony Baxterac6bd462006-04-13 02:06:09 +00001777
Thomas Heller1b046642006-04-18 18:51:06 +00001778#undef PyRun_AnyFile
1779PyAPI_FUNC(int)
1780PyRun_AnyFile(FILE *fp, const char *name)
1781{
1782 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
1783}
1784
1785#undef PyRun_AnyFileEx
1786PyAPI_FUNC(int)
1787PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
1788{
1789 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
1790}
1791
1792#undef PyRun_AnyFileFlags
1793PyAPI_FUNC(int)
1794PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
1795{
1796 return PyRun_AnyFileExFlags(fp, name, 0, flags);
1797}
1798
1799#undef PyRun_File
1800PyAPI_FUNC(PyObject *)
1801PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
1802{
1803 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
1804}
1805
1806#undef PyRun_FileEx
1807PyAPI_FUNC(PyObject *)
1808PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
1809{
1810 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
1811}
1812
1813#undef PyRun_FileFlags
1814PyAPI_FUNC(PyObject *)
1815PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
1816 PyCompilerFlags *flags)
1817{
1818 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
1819}
1820
1821#undef PyRun_SimpleFile
1822PyAPI_FUNC(int)
1823PyRun_SimpleFile(FILE *f, const char *p)
1824{
1825 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
1826}
1827
1828#undef PyRun_SimpleFileEx
1829PyAPI_FUNC(int)
1830PyRun_SimpleFileEx(FILE *f, const char *p, int c)
1831{
1832 return PyRun_SimpleFileExFlags(f, p, c, NULL);
1833}
1834
1835
1836#undef PyRun_String
1837PyAPI_FUNC(PyObject *)
1838PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
1839{
1840 return PyRun_StringFlags(str, s, g, l, NULL);
1841}
1842
1843#undef PyRun_SimpleString
1844PyAPI_FUNC(int)
1845PyRun_SimpleString(const char *s)
1846{
1847 return PyRun_SimpleStringFlags(s, NULL);
1848}
1849
1850#undef Py_CompileString
1851PyAPI_FUNC(PyObject *)
1852Py_CompileString(const char *str, const char *p, int s)
1853{
1854 return Py_CompileStringFlags(str, p, s, NULL);
1855}
1856
1857#undef PyRun_InteractiveOne
1858PyAPI_FUNC(int)
1859PyRun_InteractiveOne(FILE *f, const char *p)
1860{
1861 return PyRun_InteractiveOneFlags(f, p, NULL);
1862}
1863
1864#undef PyRun_InteractiveLoop
1865PyAPI_FUNC(int)
1866PyRun_InteractiveLoop(FILE *f, const char *p)
1867{
1868 return PyRun_InteractiveLoopFlags(f, p, NULL);
1869}
1870
Anthony Baxterac6bd462006-04-13 02:06:09 +00001871#ifdef __cplusplus
1872}
1873#endif
1874