blob: eb93d47ebe5c5120a99a902f94869c677e4c2ae0 [file] [log] [blame]
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001/***********************************************************
Guido van Rossum6d023c91995-01-04 19:12:13 +00002Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
Guido van Rossum1984f1e1992-08-04 12:41:02 +00004
5 All Rights Reserved
6
Guido van Rossumd266eb41996-10-25 14:44:06 +00007Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
Guido van Rossum1984f1e1992-08-04 12:41:02 +00009provided that the above copyright notice appear in all copies and that
Guido van Rossumd266eb41996-10-25 14:44:06 +000010both that copyright notice and this permission notice appear in
Guido van Rossum1984f1e1992-08-04 12:41:02 +000011supporting documentation, and that the names of Stichting Mathematisch
Guido van Rossumd266eb41996-10-25 14:44:06 +000012Centrum or CWI or Corporation for National Research Initiatives or
13CNRI not be used in advertising or publicity pertaining to
14distribution of the software without specific, written prior
15permission.
Guido van Rossum1984f1e1992-08-04 12:41:02 +000016
Guido van Rossumd266eb41996-10-25 14:44:06 +000017While CWI is the initial source for this software, a modified version
18is made available by the Corporation for National Research Initiatives
19(CNRI) at the Internet address ftp://ftp.python.org.
20
21STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28PERFORMANCE OF THIS SOFTWARE.
Guido van Rossum1984f1e1992-08-04 12:41:02 +000029
30******************************************************************/
31
32/* Python interpreter top-level routines, including init/exit */
33
Guido van Rossum82598051997-03-05 00:20:32 +000034#include "Python.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000035
36#include "grammar.h"
37#include "node.h"
38#include "parsetok.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000039#include "errcode.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000040#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000041#include "eval.h"
Guido van Rossumfdef2711994-09-14 13:31:04 +000042#include "marshal.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000043
Guido van Rossum80bb9651996-12-05 23:27:02 +000044#ifdef HAVE_UNISTD_H
45#include <unistd.h>
46#endif
47
Guido van Rossuma110aa61994-08-29 12:50:44 +000048#ifdef HAVE_SIGNAL_H
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000049#include <signal.h>
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000050#endif
51
Guido van Rossum9b38a141996-09-11 23:12:24 +000052#ifdef MS_WIN32
Guido van Rossuma44823b1995-03-14 15:01:17 +000053#undef BYTE
54#include "windows.h"
55#endif
56
Guido van Rossum82598051997-03-05 00:20:32 +000057extern char *Py_GetPath();
Guido van Rossum1984f1e1992-08-04 12:41:02 +000058
Guido van Rossum82598051997-03-05 00:20:32 +000059extern grammar _PyParser_Grammar; /* From graminit.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000060
Guido van Rossumb73cc041993-11-01 16:28:59 +000061/* Forward */
Guido van Rossum82598051997-03-05 00:20:32 +000062static void initmain Py_PROTO((void));
Guido van Rossumdcc0c131997-08-29 22:32:42 +000063static void initsite Py_PROTO((void));
Guido van Rossum82598051997-03-05 00:20:32 +000064static PyObject *run_err_node Py_PROTO((node *n, char *filename,
65 PyObject *globals, PyObject *locals));
66static PyObject *run_node Py_PROTO((node *n, char *filename,
67 PyObject *globals, PyObject *locals));
68static PyObject *run_pyc_file Py_PROTO((FILE *fp, char *filename,
69 PyObject *globals, PyObject *locals));
70static void err_input Py_PROTO((perrdetail *));
71static void initsigs Py_PROTO((void));
Guido van Rossumcc283f51997-08-05 02:22:03 +000072static void call_sys_exitfunc Py_PROTO((void));
73static void call_ll_exitfuncs Py_PROTO((void));
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000074
Guido van Rossumbffd6832000-01-20 22:32:56 +000075#ifdef Py_TRACE_REFS
76int _Py_AskYesNo(char *prompt);
77#endif
78
Guido van Rossumc94044c2000-03-10 23:03:54 +000079extern void _PyUnicode_Init();
80extern void _PyUnicode_Fini();
81extern void _PyCodecRegistry_Init();
82extern void _PyCodecRegistry_Fini();
83
84
Guido van Rossum82598051997-03-05 00:20:32 +000085int Py_DebugFlag; /* Needed by parser.c */
86int Py_VerboseFlag; /* Needed by import.c */
Guido van Rossum7433b121997-02-14 19:45:36 +000087int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Guido van Rossumdcc0c131997-08-29 22:32:42 +000088int Py_NoSiteFlag; /* Suppress 'import site' */
Guido van Rossum999e5e91997-10-03 19:46:02 +000089int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c */
Guido van Rossuma61691e1998-02-06 22:27:24 +000090int Py_FrozenFlag; /* Needed by getpath.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000091
Guido van Rossum25ce5661997-08-02 03:10:38 +000092static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +000093
Guido van Rossume3c0d5e1997-08-22 04:20:13 +000094/* API to access the initialized flag -- useful for eroteric use */
95
96int
97Py_IsInitialized()
98{
99 return initialized;
100}
101
Guido van Rossum25ce5661997-08-02 03:10:38 +0000102/* Global initializations. Can be undone by Py_Finalize(). Don't
103 call this twice without an intervening Py_Finalize() call. When
104 initializations fail, a fatal error is issued and the function does
105 not return. On return, the first thread and interpreter state have
106 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000107
Guido van Rossum25ce5661997-08-02 03:10:38 +0000108 Locking: you must hold the interpreter lock while calling this.
109 (If the lock has not yet been initialized, that's equivalent to
110 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000111
Guido van Rossum25ce5661997-08-02 03:10:38 +0000112*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000113
114void
115Py_Initialize()
116{
Guido van Rossuma027efa1997-05-05 20:56:21 +0000117 PyInterpreterState *interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000118 PyThreadState *tstate;
119 PyObject *bimod, *sysmod;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000120 char *p;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000121
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000122 if (initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000123 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000124 initialized = 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000125
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000126 if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
127 Py_DebugFlag = 1;
128 if ((p = getenv("PYTHONVERBOSE")) && *p != '\0')
129 Py_VerboseFlag = 1;
Guido van Rossum562f5b11998-10-07 14:50:42 +0000130 if ((p = getenv("PYTHONOPTIMIZE")) && *p != '\0')
131 Py_OptimizeFlag = 1;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000132
Guido van Rossuma027efa1997-05-05 20:56:21 +0000133 interp = PyInterpreterState_New();
134 if (interp == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000135 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000136
Guido van Rossuma027efa1997-05-05 20:56:21 +0000137 tstate = PyThreadState_New(interp);
138 if (tstate == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000139 Py_FatalError("Py_Initialize: can't make first thread");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000140 (void) PyThreadState_Swap(tstate);
141
Guido van Rossum25ce5661997-08-02 03:10:38 +0000142 interp->modules = PyDict_New();
143 if (interp->modules == NULL)
144 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000145
Guido van Rossumc94044c2000-03-10 23:03:54 +0000146 /* Init codec registry */
147 _PyCodecRegistry_Init();
148
149 /* Init Unicode implementation; relies on the codec registry */
150 _PyUnicode_Init();
151
Barry Warsaw035574d1997-08-29 22:07:17 +0000152 bimod = _PyBuiltin_Init_1();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000153 if (bimod == NULL)
154 Py_FatalError("Py_Initialize: can't initialize __builtin__");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000155 interp->builtins = PyModule_GetDict(bimod);
156 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000157
158 sysmod = _PySys_Init();
159 if (sysmod == NULL)
160 Py_FatalError("Py_Initialize: can't initialize sys");
161 interp->sysdict = PyModule_GetDict(sysmod);
162 Py_INCREF(interp->sysdict);
163 _PyImport_FixupExtension("sys", "sys");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000164 PySys_SetPath(Py_GetPath());
Guido van Rossum25ce5661997-08-02 03:10:38 +0000165 PyDict_SetItemString(interp->sysdict, "modules",
166 interp->modules);
167
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000168 _PyImport_Init();
169
Barry Warsaw035574d1997-08-29 22:07:17 +0000170 /* phase 2 of builtins */
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000171 _PyBuiltin_Init_2(interp->builtins);
Barry Warsaw963b8711997-09-18 16:42:02 +0000172 _PyImport_FixupExtension("__builtin__", "__builtin__");
Barry Warsaw035574d1997-08-29 22:07:17 +0000173
Guido van Rossum25ce5661997-08-02 03:10:38 +0000174 initsigs(); /* Signal handling stuff, including initintr() */
175
176 initmain(); /* Module __main__ */
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000177 if (!Py_NoSiteFlag)
178 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000179}
180
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000181#ifdef COUNT_ALLOCS
182extern void dump_counts Py_PROTO((void));
183#endif
184
Guido van Rossum25ce5661997-08-02 03:10:38 +0000185/* Undo the effect of Py_Initialize().
186
187 Beware: if multiple interpreter and/or thread states exist, these
188 are not wiped out; only the current thread and interpreter state
189 are deleted. But since everything else is deleted, those other
190 interpreter and thread states should no longer be used.
191
192 (XXX We should do better, e.g. wipe out all interpreters and
193 threads.)
194
195 Locking: as above.
196
197*/
198
199void
200Py_Finalize()
201{
202 PyInterpreterState *interp;
203 PyThreadState *tstate;
204
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000205 if (!initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000206 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000207 initialized = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000208
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000209 call_sys_exitfunc();
210
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000211 /* Get current thread state and interpreter pointer */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000212 tstate = PyThreadState_Get();
213 interp = tstate->interp;
214
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000215 /* Disable signal handling */
216 PyOS_FiniInterrupts();
217
218 /* Destroy PyExc_MemoryErrorInst */
219 _PyBuiltin_Fini_1();
220
Guido van Rossumc94044c2000-03-10 23:03:54 +0000221 /* Cleanup Unicode implementation */
222 _PyUnicode_Fini();
223
224 /* Cleanup Codec registry */
225 _PyCodecRegistry_Fini();
226
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000227 /* Destroy all modules */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000228 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000229
Guido van Rossum1707aad1997-12-08 23:43:45 +0000230 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
231 _PyImport_Fini();
232
233 /* Debugging stuff */
234#ifdef COUNT_ALLOCS
235 dump_counts();
236#endif
237
238#ifdef Py_REF_DEBUG
239 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
240#endif
241
242#ifdef Py_TRACE_REFS
243 if (_Py_AskYesNo("Print left references?")) {
244 _Py_PrintReferences(stderr);
245 }
246#endif /* Py_TRACE_REFS */
247
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000248 /* Delete current thread */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000249 PyInterpreterState_Clear(interp);
250 PyThreadState_Swap(NULL);
251 PyInterpreterState_Delete(interp);
252
Barry Warsaw035574d1997-08-29 22:07:17 +0000253 /* Now we decref the exception classes. After this point nothing
254 can raise an exception. That's okay, because each Fini() method
255 below has been checked to make sure no exceptions are ever
256 raised.
257 */
258 _PyBuiltin_Fini_2();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000259 PyMethod_Fini();
260 PyFrame_Fini();
261 PyCFunction_Fini();
262 PyTuple_Fini();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000263 PyString_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000264 PyInt_Fini();
265 PyFloat_Fini();
266
267 /* XXX Still allocated:
268 - various static ad-hoc pointers to interned strings
269 - int and float free list blocks
270 - whatever various modules and libraries allocate
271 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000272
273 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000274
275 call_ll_exitfuncs();
276
Guido van Rossumcc283f51997-08-05 02:22:03 +0000277#ifdef Py_TRACE_REFS
Guido van Rossumcc283f51997-08-05 02:22:03 +0000278 _Py_ResetReferences();
279#endif /* Py_TRACE_REFS */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000280}
281
282/* Create and initialize a new interpreter and thread, and return the
283 new thread. This requires that Py_Initialize() has been called
284 first.
285
286 Unsuccessful initialization yields a NULL pointer. Note that *no*
287 exception information is available even in this case -- the
288 exception information is held in the thread, and there is no
289 thread.
290
291 Locking: as above.
292
293*/
294
295PyThreadState *
296Py_NewInterpreter()
297{
298 PyInterpreterState *interp;
299 PyThreadState *tstate, *save_tstate;
300 PyObject *bimod, *sysmod;
301
302 if (!initialized)
303 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
304
305 interp = PyInterpreterState_New();
306 if (interp == NULL)
307 return NULL;
308
309 tstate = PyThreadState_New(interp);
310 if (tstate == NULL) {
311 PyInterpreterState_Delete(interp);
312 return NULL;
313 }
314
315 save_tstate = PyThreadState_Swap(tstate);
316
317 /* XXX The following is lax in error checking */
318
319 interp->modules = PyDict_New();
320
321 bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
322 if (bimod != NULL) {
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000323 interp->builtins = PyModule_GetDict(bimod);
324 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000325 }
326 sysmod = _PyImport_FindExtension("sys", "sys");
327 if (bimod != NULL && sysmod != NULL) {
328 interp->sysdict = PyModule_GetDict(sysmod);
329 Py_INCREF(interp->sysdict);
330 PySys_SetPath(Py_GetPath());
331 PyDict_SetItemString(interp->sysdict, "modules",
332 interp->modules);
333 initmain();
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000334 if (!Py_NoSiteFlag)
335 initsite();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000336 }
337
338 if (!PyErr_Occurred())
339 return tstate;
340
341 /* Oops, it didn't work. Undo it all. */
342
343 PyErr_Print();
344 PyThreadState_Clear(tstate);
345 PyThreadState_Swap(save_tstate);
346 PyThreadState_Delete(tstate);
347 PyInterpreterState_Delete(interp);
348
349 return NULL;
350}
351
352/* Delete an interpreter and its last thread. This requires that the
353 given thread state is current, that the thread has no remaining
354 frames, and that it is its interpreter's only remaining thread.
355 It is a fatal error to violate these constraints.
356
357 (Py_Finalize() doesn't have these constraints -- it zaps
358 everything, regardless.)
359
360 Locking: as above.
361
362*/
363
364void
365Py_EndInterpreter(tstate)
366 PyThreadState *tstate;
367{
368 PyInterpreterState *interp = tstate->interp;
369
370 if (tstate != PyThreadState_Get())
371 Py_FatalError("Py_EndInterpreter: thread is not current");
372 if (tstate->frame != NULL)
373 Py_FatalError("Py_EndInterpreter: thread still has a frame");
374 if (tstate != interp->tstate_head || tstate->next != NULL)
375 Py_FatalError("Py_EndInterpreter: not the last thread");
376
377 PyImport_Cleanup();
378 PyInterpreterState_Clear(interp);
379 PyThreadState_Swap(NULL);
380 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000381}
382
383static char *progname = "python";
384
385void
386Py_SetProgramName(pn)
387 char *pn;
388{
389 if (pn && *pn)
390 progname = pn;
391}
392
393char *
394Py_GetProgramName()
395{
396 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000397}
398
Guido van Rossuma61691e1998-02-06 22:27:24 +0000399static char *default_home = NULL;
400
401void
402Py_SetPythonHome(home)
403 char *home;
404{
405 default_home = home;
406}
407
408char *
409Py_GetPythonHome()
410{
411 char *home = default_home;
412 if (home == NULL)
413 home = getenv("PYTHONHOME");
414 return home;
415}
416
Guido van Rossum6135a871995-01-09 17:53:26 +0000417/* Create __main__ module */
418
419static void
420initmain()
421{
Guido van Rossum82598051997-03-05 00:20:32 +0000422 PyObject *m, *d;
423 m = PyImport_AddModule("__main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000424 if (m == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000425 Py_FatalError("can't create __main__ module");
426 d = PyModule_GetDict(m);
427 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
Guido van Rossum858cb731997-11-19 16:15:37 +0000428 PyObject *bimod = PyImport_ImportModule("__builtin__");
429 if (bimod == NULL ||
430 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
Guido van Rossum82598051997-03-05 00:20:32 +0000431 Py_FatalError("can't add __builtins__ to __main__");
Barry Warsaw3d05b1a1999-01-29 21:30:22 +0000432 Py_DECREF(bimod);
Guido van Rossum6135a871995-01-09 17:53:26 +0000433 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000434}
435
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000436/* Import the site module (not into __main__ though) */
437
438static void
439initsite()
440{
441 PyObject *m, *f;
442 m = PyImport_ImportModule("site");
443 if (m == NULL) {
444 f = PySys_GetObject("stderr");
445 if (Py_VerboseFlag) {
446 PyFile_WriteString(
447 "'import site' failed; traceback:\n", f);
448 PyErr_Print();
449 }
450 else {
451 PyFile_WriteString(
452 "'import site' failed; use -v for traceback\n", f);
453 PyErr_Clear();
454 }
455 }
456 else {
457 Py_DECREF(m);
458 }
459}
460
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000461/* Parse input from a file and execute it */
462
463int
Guido van Rossum82598051997-03-05 00:20:32 +0000464PyRun_AnyFile(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000465 FILE *fp;
466 char *filename;
467{
468 if (filename == NULL)
469 filename = "???";
Guido van Rossum7433b121997-02-14 19:45:36 +0000470 if (Py_FdIsInteractive(fp, filename))
Guido van Rossum82598051997-03-05 00:20:32 +0000471 return PyRun_InteractiveLoop(fp, filename);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000472 else
Guido van Rossum82598051997-03-05 00:20:32 +0000473 return PyRun_SimpleFile(fp, filename);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000474}
475
476int
Guido van Rossum82598051997-03-05 00:20:32 +0000477PyRun_InteractiveLoop(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000478 FILE *fp;
479 char *filename;
480{
Guido van Rossum82598051997-03-05 00:20:32 +0000481 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000482 int ret;
Guido van Rossum82598051997-03-05 00:20:32 +0000483 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000484 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000485 PySys_SetObject("ps1", v = PyString_FromString(">>> "));
486 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000487 }
Guido van Rossum82598051997-03-05 00:20:32 +0000488 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000489 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000490 PySys_SetObject("ps2", v = PyString_FromString("... "));
491 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000492 }
493 for (;;) {
Guido van Rossum82598051997-03-05 00:20:32 +0000494 ret = PyRun_InteractiveOne(fp, filename);
Guido van Rossumaae0d321996-05-22 16:35:33 +0000495#ifdef Py_REF_DEBUG
Guido van Rossum6f9e4331995-03-29 16:57:48 +0000496 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000497#endif
498 if (ret == E_EOF)
499 return 0;
500 /*
501 if (ret == E_NOMEM)
502 return -1;
503 */
504 }
505}
506
507int
Guido van Rossum82598051997-03-05 00:20:32 +0000508PyRun_InteractiveOne(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000509 FILE *fp;
510 char *filename;
511{
Guido van Rossum82598051997-03-05 00:20:32 +0000512 PyObject *m, *d, *v, *w;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000513 node *n;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000514 perrdetail err;
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000515 char *ps1 = "", *ps2 = "";
Guido van Rossum82598051997-03-05 00:20:32 +0000516 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000517 if (v != NULL) {
518 v = PyObject_Str(v);
519 if (v == NULL)
520 PyErr_Clear();
521 else if (PyString_Check(v))
522 ps1 = PyString_AsString(v);
523 }
Guido van Rossum82598051997-03-05 00:20:32 +0000524 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000525 if (w != NULL) {
526 w = PyObject_Str(w);
527 if (w == NULL)
528 PyErr_Clear();
529 else if (PyString_Check(w))
530 ps2 = PyString_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000531 }
Guido van Rossum82598051997-03-05 00:20:32 +0000532 n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar,
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000533 Py_single_input, ps1, ps2, &err);
Guido van Rossum82598051997-03-05 00:20:32 +0000534 Py_XDECREF(v);
535 Py_XDECREF(w);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000536 if (n == NULL) {
537 if (err.error == E_EOF) {
538 if (err.text)
539 free(err.text);
540 return E_EOF;
541 }
542 err_input(&err);
Guido van Rossum82598051997-03-05 00:20:32 +0000543 PyErr_Print();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000544 return err.error;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000545 }
Guido van Rossum82598051997-03-05 00:20:32 +0000546 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000547 if (m == NULL)
548 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000549 d = PyModule_GetDict(m);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000550 v = run_node(n, filename, d, d);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000551 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000552 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000553 return -1;
554 }
Guido van Rossum82598051997-03-05 00:20:32 +0000555 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000556 if (Py_FlushLine())
557 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000558 return 0;
559}
560
561int
Guido van Rossum82598051997-03-05 00:20:32 +0000562PyRun_SimpleFile(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000563 FILE *fp;
564 char *filename;
565{
Guido van Rossum82598051997-03-05 00:20:32 +0000566 PyObject *m, *d, *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000567 char *ext;
568
Guido van Rossum82598051997-03-05 00:20:32 +0000569 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000570 if (m == NULL)
571 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000572 d = PyModule_GetDict(m);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000573 ext = filename + strlen(filename) - 4;
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000574 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0
Jack Jansenbd06e961995-02-13 11:44:56 +0000575#ifdef macintosh
576 /* On a mac, we also assume a pyc file for types 'PYC ' and 'APPL' */
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000577 || getfiletype(filename) == 'PYC '
578 || getfiletype(filename) == 'APPL'
Jack Jansenbd06e961995-02-13 11:44:56 +0000579#endif /* macintosh */
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000580 ) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000581 /* Try to run a pyc file. First, re-open in binary */
Jack Jansene00637b1994-12-14 12:58:37 +0000582 /* Don't close, done in main: fclose(fp); */
Guido van Rossumfdef2711994-09-14 13:31:04 +0000583 if( (fp = fopen(filename, "rb")) == NULL ) {
584 fprintf(stderr, "python: Can't reopen .pyc file\n");
585 return -1;
586 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000587 /* Turn on optimization if a .pyo file is given */
588 if (strcmp(ext, ".pyo") == 0)
589 Py_OptimizeFlag = 1;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000590 v = run_pyc_file(fp, filename, d, d);
591 } else {
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000592 v = PyRun_File(fp, filename, Py_file_input, d, d);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000593 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000594 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000595 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000596 return -1;
597 }
Guido van Rossum82598051997-03-05 00:20:32 +0000598 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000599 if (Py_FlushLine())
600 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000601 return 0;
602}
603
604int
Guido van Rossum82598051997-03-05 00:20:32 +0000605PyRun_SimpleString(command)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000606 char *command;
607{
Guido van Rossum82598051997-03-05 00:20:32 +0000608 PyObject *m, *d, *v;
609 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000610 if (m == NULL)
611 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000612 d = PyModule_GetDict(m);
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000613 v = PyRun_String(command, Py_file_input, d, d);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000614 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000615 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000616 return -1;
617 }
Guido van Rossum82598051997-03-05 00:20:32 +0000618 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000619 if (Py_FlushLine())
620 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000621 return 0;
622}
623
Barry Warsaw035574d1997-08-29 22:07:17 +0000624static int
625parse_syntax_error(err, message, filename, lineno, offset, text)
626 PyObject* err;
627 PyObject** message;
628 char** filename;
629 int* lineno;
630 int* offset;
631 char** text;
632{
633 long hold;
634 PyObject *v;
635
636 /* old style errors */
637 if (PyTuple_Check(err))
638 return PyArg_Parse(err, "(O(ziiz))", message, filename,
639 lineno, offset, text);
640
641 /* new style errors. `err' is an instance */
642
643 if (! (v = PyObject_GetAttrString(err, "msg")))
644 goto finally;
645 *message = v;
646
647 if (!(v = PyObject_GetAttrString(err, "filename")))
648 goto finally;
649 if (v == Py_None)
650 *filename = NULL;
651 else if (! (*filename = PyString_AsString(v)))
652 goto finally;
653
654 Py_DECREF(v);
655 if (!(v = PyObject_GetAttrString(err, "lineno")))
656 goto finally;
657 hold = PyInt_AsLong(v);
658 Py_DECREF(v);
659 v = NULL;
660 if (hold < 0 && PyErr_Occurred())
661 goto finally;
662 *lineno = (int)hold;
663
664 if (!(v = PyObject_GetAttrString(err, "offset")))
665 goto finally;
666 hold = PyInt_AsLong(v);
667 Py_DECREF(v);
668 v = NULL;
669 if (hold < 0 && PyErr_Occurred())
670 goto finally;
671 *offset = (int)hold;
672
673 if (!(v = PyObject_GetAttrString(err, "text")))
674 goto finally;
675 if (v == Py_None)
676 *text = NULL;
677 else if (! (*text = PyString_AsString(v)))
678 goto finally;
679 Py_DECREF(v);
680 return 1;
681
682finally:
683 Py_XDECREF(v);
684 return 0;
685}
686
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000687void
Guido van Rossum82598051997-03-05 00:20:32 +0000688PyErr_Print()
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000689{
Guido van Rossuma61691e1998-02-06 22:27:24 +0000690 PyErr_PrintEx(1);
691}
692
693void
694PyErr_PrintEx(set_sys_last_vars)
695 int set_sys_last_vars;
696{
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000697 int err = 0;
Guido van Rossum82598051997-03-05 00:20:32 +0000698 PyObject *exception, *v, *tb, *f;
699 PyErr_Fetch(&exception, &v, &tb);
Barry Warsaw035574d1997-08-29 22:07:17 +0000700 PyErr_NormalizeException(&exception, &v, &tb);
701
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000702 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +0000703 return;
Barry Warsaw035574d1997-08-29 22:07:17 +0000704
Barry Warsaw36b8f941997-08-26 18:09:48 +0000705 if (PyErr_GivenExceptionMatches(exception, PyExc_SystemExit)) {
Guido van Rossum0829c751998-02-28 04:31:39 +0000706 if (Py_FlushLine())
707 PyErr_Clear();
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000708 fflush(stdout);
Guido van Rossum82598051997-03-05 00:20:32 +0000709 if (v == NULL || v == Py_None)
710 Py_Exit(0);
Barry Warsaw035574d1997-08-29 22:07:17 +0000711 if (PyInstance_Check(v)) {
712 /* we expect the error code to be store in the
713 `code' attribute
714 */
715 PyObject *code = PyObject_GetAttrString(v, "code");
716 if (code) {
717 Py_DECREF(v);
718 v = code;
Guido van Rossumaa9606f1997-10-03 13:53:28 +0000719 if (v == Py_None)
720 Py_Exit(0);
Barry Warsaw035574d1997-08-29 22:07:17 +0000721 }
722 /* if we failed to dig out the "code" attribute,
723 then just let the else clause below print the
724 error
725 */
726 }
Guido van Rossum82598051997-03-05 00:20:32 +0000727 if (PyInt_Check(v))
728 Py_Exit((int)PyInt_AsLong(v));
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000729 else {
Guido van Rossum3165fe61992-09-25 21:59:05 +0000730 /* OK to use real stderr here */
Guido van Rossum82598051997-03-05 00:20:32 +0000731 PyObject_Print(v, stderr, Py_PRINT_RAW);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000732 fprintf(stderr, "\n");
Guido van Rossum82598051997-03-05 00:20:32 +0000733 Py_Exit(1);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000734 }
735 }
Guido van Rossuma61691e1998-02-06 22:27:24 +0000736 if (set_sys_last_vars) {
737 PySys_SetObject("last_type", exception);
738 PySys_SetObject("last_value", v);
739 PySys_SetObject("last_traceback", tb);
740 }
Guido van Rossum82598051997-03-05 00:20:32 +0000741 f = PySys_GetObject("stderr");
Guido van Rossum3165fe61992-09-25 21:59:05 +0000742 if (f == NULL)
743 fprintf(stderr, "lost sys.stderr\n");
744 else {
Guido van Rossum0829c751998-02-28 04:31:39 +0000745 if (Py_FlushLine())
746 PyErr_Clear();
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000747 fflush(stdout);
Guido van Rossum0829c751998-02-28 04:31:39 +0000748 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +0000749 if (err == 0 &&
750 PyErr_GivenExceptionMatches(exception, PyExc_SyntaxError))
751 {
Guido van Rossum82598051997-03-05 00:20:32 +0000752 PyObject *message;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000753 char *filename, *text;
754 int lineno, offset;
Barry Warsaw035574d1997-08-29 22:07:17 +0000755 if (!parse_syntax_error(v, &message, &filename,
756 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +0000757 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000758 else {
759 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +0000760 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000761 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000762 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000763 else
Guido van Rossum82598051997-03-05 00:20:32 +0000764 PyFile_WriteString(filename, f);
765 PyFile_WriteString("\", line ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000766 sprintf(buf, "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +0000767 PyFile_WriteString(buf, f);
768 PyFile_WriteString("\n", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000769 if (text != NULL) {
Guido van Rossum798199d1994-09-19 08:08:50 +0000770 char *nl;
771 if (offset > 0 &&
Guido van Rossum478e7181997-05-06 15:24:59 +0000772 offset == (int)strlen(text))
Guido van Rossum798199d1994-09-19 08:08:50 +0000773 offset--;
774 for (;;) {
775 nl = strchr(text, '\n');
776 if (nl == NULL ||
777 nl-text >= offset)
778 break;
779 offset -= (nl+1-text);
780 text = nl+1;
781 }
Guido van Rossuma110aa61994-08-29 12:50:44 +0000782 while (*text == ' ' || *text == '\t') {
783 text++;
784 offset--;
785 }
Guido van Rossum82598051997-03-05 00:20:32 +0000786 PyFile_WriteString(" ", f);
787 PyFile_WriteString(text, f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000788 if (*text == '\0' ||
789 text[strlen(text)-1] != '\n')
Guido van Rossum82598051997-03-05 00:20:32 +0000790 PyFile_WriteString("\n", f);
791 PyFile_WriteString(" ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000792 offset--;
793 while (offset > 0) {
Guido van Rossum82598051997-03-05 00:20:32 +0000794 PyFile_WriteString(" ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000795 offset--;
796 }
Guido van Rossum82598051997-03-05 00:20:32 +0000797 PyFile_WriteString("^\n", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000798 }
Guido van Rossum82598051997-03-05 00:20:32 +0000799 Py_INCREF(message);
800 Py_DECREF(v);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000801 v = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000802 /* Can't be bothered to check all those
803 PyFile_WriteString() calls */
804 if (PyErr_Occurred())
805 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000806 }
807 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000808 if (err) {
809 /* Don't do anything else */
810 }
811 else if (PyClass_Check(exception)) {
Barry Warsaw2f5f6a21997-09-16 21:42:03 +0000812 PyClassObject* exc = (PyClassObject*)exception;
813 PyObject* className = exc->cl_name;
814 PyObject* moduleName =
815 PyDict_GetItemString(exc->cl_dict, "__module__");
816
817 if (moduleName == NULL)
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000818 err = PyFile_WriteString("<unknown>", f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +0000819 else {
820 char* modstr = PyString_AsString(moduleName);
821 if (modstr && strcmp(modstr, "exceptions"))
822 {
823 err = PyFile_WriteString(modstr, f);
824 err += PyFile_WriteString(".", f);
825 }
826 }
827 if (err == 0) {
828 if (className == NULL)
829 err = PyFile_WriteString("<unknown>", f);
830 else
831 err = PyFile_WriteObject(className, f,
832 Py_PRINT_RAW);
833 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000834 }
835 else
836 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
837 if (err == 0) {
838 if (v != NULL && v != Py_None) {
Barry Warsaw035574d1997-08-29 22:07:17 +0000839 PyObject *s = PyObject_Str(v);
840 /* only print colon if the str() of the
841 object is not the empty string
842 */
Guido van Rossumd6bf45b1997-09-05 19:11:53 +0000843 if (s == NULL)
844 err = -1;
845 else if (!PyString_Check(s) ||
846 PyString_GET_SIZE(s) != 0)
Barry Warsaw035574d1997-08-29 22:07:17 +0000847 err = PyFile_WriteString(": ", f);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000848 if (err == 0)
Guido van Rossumd6bf45b1997-09-05 19:11:53 +0000849 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
850 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +0000851 }
Guido van Rossum262e1241995-02-07 15:30:45 +0000852 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000853 if (err == 0)
854 err = PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000855 }
Guido van Rossum82598051997-03-05 00:20:32 +0000856 Py_XDECREF(exception);
857 Py_XDECREF(v);
858 Py_XDECREF(tb);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000859 /* If an error happened here, don't show it.
860 XXX This is wrong, but too many callers rely on this behavior. */
861 if (err != 0)
862 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000863}
864
Guido van Rossum82598051997-03-05 00:20:32 +0000865PyObject *
866PyRun_String(str, start, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000867 char *str;
868 int start;
Guido van Rossum82598051997-03-05 00:20:32 +0000869 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000870{
Guido van Rossum82598051997-03-05 00:20:32 +0000871 return run_err_node(PyParser_SimpleParseString(str, start),
Guido van Rossuma110aa61994-08-29 12:50:44 +0000872 "<string>", globals, locals);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000873}
874
Guido van Rossum82598051997-03-05 00:20:32 +0000875PyObject *
876PyRun_File(fp, filename, start, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000877 FILE *fp;
878 char *filename;
879 int start;
Guido van Rossum82598051997-03-05 00:20:32 +0000880 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000881{
Guido van Rossum82598051997-03-05 00:20:32 +0000882 return run_err_node(PyParser_SimpleParseFile(fp, filename, start),
Guido van Rossuma110aa61994-08-29 12:50:44 +0000883 filename, globals, locals);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000884}
885
Guido van Rossum82598051997-03-05 00:20:32 +0000886static PyObject *
Guido van Rossuma110aa61994-08-29 12:50:44 +0000887run_err_node(n, filename, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000888 node *n;
889 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000890 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000891{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000892 if (n == NULL)
893 return NULL;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000894 return run_node(n, filename, globals, locals);
895}
896
Guido van Rossum82598051997-03-05 00:20:32 +0000897static PyObject *
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000898run_node(n, filename, globals, locals)
899 node *n;
900 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000901 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000902{
Guido van Rossum82598051997-03-05 00:20:32 +0000903 PyCodeObject *co;
904 PyObject *v;
905 co = PyNode_Compile(n, filename);
906 PyNode_Free(n);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000907 if (co == NULL)
908 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000909 v = PyEval_EvalCode(co, globals, locals);
910 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000911 return v;
912}
913
Guido van Rossum82598051997-03-05 00:20:32 +0000914static PyObject *
Guido van Rossumfdef2711994-09-14 13:31:04 +0000915run_pyc_file(fp, filename, globals, locals)
916 FILE *fp;
917 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000918 PyObject *globals, *locals;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000919{
Guido van Rossum82598051997-03-05 00:20:32 +0000920 PyCodeObject *co;
921 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000922 long magic;
Guido van Rossum82598051997-03-05 00:20:32 +0000923 long PyImport_GetMagicNumber();
Guido van Rossumfdef2711994-09-14 13:31:04 +0000924
Guido van Rossum82598051997-03-05 00:20:32 +0000925 magic = PyMarshal_ReadLongFromFile(fp);
926 if (magic != PyImport_GetMagicNumber()) {
927 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +0000928 "Bad magic number in .pyc file");
929 return NULL;
930 }
Guido van Rossum82598051997-03-05 00:20:32 +0000931 (void) PyMarshal_ReadLongFromFile(fp);
932 v = PyMarshal_ReadObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000933 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +0000934 if (v == NULL || !PyCode_Check(v)) {
935 Py_XDECREF(v);
936 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +0000937 "Bad code object in .pyc file");
938 return NULL;
939 }
Guido van Rossum82598051997-03-05 00:20:32 +0000940 co = (PyCodeObject *)v;
941 v = PyEval_EvalCode(co, globals, locals);
942 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000943 return v;
944}
945
Guido van Rossum82598051997-03-05 00:20:32 +0000946PyObject *
947Py_CompileString(str, filename, start)
Guido van Rossum5b722181993-03-30 17:46:03 +0000948 char *str;
949 char *filename;
950 int start;
951{
952 node *n;
Guido van Rossum82598051997-03-05 00:20:32 +0000953 PyCodeObject *co;
954 n = PyParser_SimpleParseString(str, start);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000955 if (n == NULL)
Guido van Rossum5b722181993-03-30 17:46:03 +0000956 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000957 co = PyNode_Compile(n, filename);
958 PyNode_Free(n);
959 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +0000960}
961
Guido van Rossuma110aa61994-08-29 12:50:44 +0000962/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000963
Guido van Rossuma110aa61994-08-29 12:50:44 +0000964node *
Guido van Rossum82598051997-03-05 00:20:32 +0000965PyParser_SimpleParseFile(fp, filename, start)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000966 FILE *fp;
967 char *filename;
968 int start;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000969{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000970 node *n;
971 perrdetail err;
Guido van Rossum82598051997-03-05 00:20:32 +0000972 n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar, start,
Guido van Rossuma110aa61994-08-29 12:50:44 +0000973 (char *)0, (char *)0, &err);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000974 if (n == NULL)
975 err_input(&err);
976 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000977}
978
Guido van Rossuma110aa61994-08-29 12:50:44 +0000979/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000980
Guido van Rossuma110aa61994-08-29 12:50:44 +0000981node *
Guido van Rossum82598051997-03-05 00:20:32 +0000982PyParser_SimpleParseString(str, start)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000983 char *str;
984 int start;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000985{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000986 node *n;
987 perrdetail err;
Guido van Rossum82598051997-03-05 00:20:32 +0000988 n = PyParser_ParseString(str, &_PyParser_Grammar, start, &err);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000989 if (n == NULL)
990 err_input(&err);
991 return n;
992}
993
994/* Set the error appropriate to the given input error code (see errcode.h) */
995
996static void
997err_input(err)
998 perrdetail *err;
999{
Guido van Rossum82598051997-03-05 00:20:32 +00001000 PyObject *v, *w;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001001 char *msg = NULL;
Guido van Rossum82598051997-03-05 00:20:32 +00001002 v = Py_BuildValue("(ziiz)", err->filename,
Guido van Rossuma110aa61994-08-29 12:50:44 +00001003 err->lineno, err->offset, err->text);
1004 if (err->text != NULL) {
1005 free(err->text);
1006 err->text = NULL;
1007 }
1008 switch (err->error) {
1009 case E_SYNTAX:
1010 msg = "invalid syntax";
1011 break;
1012 case E_TOKEN:
1013 msg = "invalid token";
Guido van Rossuma110aa61994-08-29 12:50:44 +00001014 break;
1015 case E_INTR:
Guido van Rossum82598051997-03-05 00:20:32 +00001016 PyErr_SetNone(PyExc_KeyboardInterrupt);
Barry Warsawc80baa31999-01-27 16:39:40 +00001017 Py_XDECREF(v);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001018 return;
1019 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +00001020 PyErr_NoMemory();
Barry Warsawc80baa31999-01-27 16:39:40 +00001021 Py_XDECREF(v);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001022 return;
1023 case E_EOF:
1024 msg = "unexpected EOF while parsing";
1025 break;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001026 case E_INDENT:
1027 msg = "inconsistent use of tabs and spaces in indentation";
1028 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001029 default:
1030 fprintf(stderr, "error=%d\n", err->error);
1031 msg = "unknown parsing error";
1032 break;
1033 }
Guido van Rossum82598051997-03-05 00:20:32 +00001034 w = Py_BuildValue("(sO)", msg, v);
1035 Py_XDECREF(v);
1036 PyErr_SetObject(PyExc_SyntaxError, w);
1037 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001038}
1039
1040/* Print fatal error message and abort */
1041
1042void
Guido van Rossum82598051997-03-05 00:20:32 +00001043Py_FatalError(msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001044 char *msg;
1045{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00001046 fprintf(stderr, "Fatal Python error: %s\n", msg);
Guido van Rossum8ae87c01995-01-26 00:40:38 +00001047#ifdef macintosh
1048 for (;;);
1049#endif
Guido van Rossum9b38a141996-09-11 23:12:24 +00001050#ifdef MS_WIN32
Guido van Rossum23c94461997-05-22 20:21:30 +00001051 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +00001052 OutputDebugString(msg);
1053 OutputDebugString("\n");
Guido van Rossum0ba35361998-08-13 13:33:16 +00001054#ifdef _DEBUG
1055 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00001056#endif
Guido van Rossum0ba35361998-08-13 13:33:16 +00001057#endif /* MS_WIN32 */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001058 abort();
1059}
1060
1061/* Clean up and exit */
1062
Guido van Rossuma110aa61994-08-29 12:50:44 +00001063#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00001064#include "pythread.h"
Guido van Rossum82598051997-03-05 00:20:32 +00001065int _PyThread_Started = 0; /* Set by threadmodule.c and maybe others */
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001066#endif
1067
Guido van Rossum2dcfc961998-10-01 16:01:57 +00001068#define NEXITFUNCS 32
Guido van Rossum1662dd51994-09-07 14:38:28 +00001069static void (*exitfuncs[NEXITFUNCS])();
1070static int nexitfuncs = 0;
1071
1072int Py_AtExit(func)
Guido van Rossum82598051997-03-05 00:20:32 +00001073 void (*func) Py_PROTO((void));
Guido van Rossum1662dd51994-09-07 14:38:28 +00001074{
1075 if (nexitfuncs >= NEXITFUNCS)
1076 return -1;
1077 exitfuncs[nexitfuncs++] = func;
1078 return 0;
1079}
1080
Guido van Rossumcc283f51997-08-05 02:22:03 +00001081static void
1082call_sys_exitfunc()
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001083{
Guido van Rossum82598051997-03-05 00:20:32 +00001084 PyObject *exitfunc = PySys_GetObject("exitfunc");
Guido van Rossum59bff391992-09-03 20:28:00 +00001085
1086 if (exitfunc) {
Guido van Rossumbf02fb21998-04-03 21:12:12 +00001087 PyObject *res, *f;
Guido van Rossum82598051997-03-05 00:20:32 +00001088 Py_INCREF(exitfunc);
1089 PySys_SetObject("exitfunc", (PyObject *)NULL);
Guido van Rossumbf02fb21998-04-03 21:12:12 +00001090 f = PySys_GetObject("stderr");
Guido van Rossum82598051997-03-05 00:20:32 +00001091 res = PyEval_CallObject(exitfunc, (PyObject *)NULL);
Guido van Rossum59bff391992-09-03 20:28:00 +00001092 if (res == NULL) {
Guido van Rossumbf02fb21998-04-03 21:12:12 +00001093 if (f)
1094 PyFile_WriteString("Error in sys.exitfunc:\n", f);
Guido van Rossum82598051997-03-05 00:20:32 +00001095 PyErr_Print();
Guido van Rossum59bff391992-09-03 20:28:00 +00001096 }
Guido van Rossum82598051997-03-05 00:20:32 +00001097 Py_DECREF(exitfunc);
Guido van Rossum59bff391992-09-03 20:28:00 +00001098 }
1099
Guido van Rossum0829c751998-02-28 04:31:39 +00001100 if (Py_FlushLine())
1101 PyErr_Clear();
Guido van Rossumcc283f51997-08-05 02:22:03 +00001102}
Guido van Rossum1662dd51994-09-07 14:38:28 +00001103
Guido van Rossumcc283f51997-08-05 02:22:03 +00001104static void
1105call_ll_exitfuncs()
1106{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001107 while (nexitfuncs > 0)
1108 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001109
1110 fflush(stdout);
1111 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001112}
1113
1114void
Guido van Rossum82598051997-03-05 00:20:32 +00001115Py_Exit(sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001116 int sts;
1117{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001118 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001119
Jack Jansen66a89771995-10-27 13:22:14 +00001120#ifdef macintosh
1121 PyMac_Exit(sts);
1122#else
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001123 exit(sts);
Jack Jansen66a89771995-10-27 13:22:14 +00001124#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001125}
1126
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001127static void
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001128initsigs()
1129{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001130#ifdef HAVE_SIGNAL_H
1131#ifdef SIGPIPE
1132 signal(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001133#endif
Guido van Rossuma110aa61994-08-29 12:50:44 +00001134#endif /* HAVE_SIGNAL_H */
Guido van Rossum82598051997-03-05 00:20:32 +00001135 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001136}
1137
Guido van Rossumaae0d321996-05-22 16:35:33 +00001138#ifdef Py_TRACE_REFS
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001139/* Ask a yes/no question */
1140
Guido van Rossum59bff391992-09-03 20:28:00 +00001141int
Guido van Rossum82598051997-03-05 00:20:32 +00001142_Py_AskYesNo(prompt)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001143 char *prompt;
1144{
1145 char buf[256];
1146
1147 printf("%s [ny] ", prompt);
1148 if (fgets(buf, sizeof buf, stdin) == NULL)
1149 return 0;
1150 return buf[0] == 'y' || buf[0] == 'Y';
1151}
1152#endif
1153
Guido van Rossuma110aa61994-08-29 12:50:44 +00001154#ifdef MPW
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001155
1156/* Check for file descriptor connected to interactive device.
1157 Pretend that stdin is always interactive, other files never. */
1158
1159int
1160isatty(fd)
1161 int fd;
1162{
1163 return fd == fileno(stdin);
1164}
1165
1166#endif
Guido van Rossum7433b121997-02-14 19:45:36 +00001167
1168/*
1169 * The file descriptor fd is considered ``interactive'' if either
1170 * a) isatty(fd) is TRUE, or
1171 * b) the -i flag was given, and the filename associated with
1172 * the descriptor is NULL or "<stdin>" or "???".
1173 */
1174int
1175Py_FdIsInteractive(fp, filename)
1176 FILE *fp;
1177 char *filename;
1178{
1179 if (isatty((int)fileno(fp)))
1180 return 1;
1181 if (!Py_InteractiveFlag)
1182 return 0;
1183 return (filename == NULL) ||
1184 (strcmp(filename, "<stdin>") == 0) ||
1185 (strcmp(filename, "???") == 0);
1186}