blob: 0ae15fafa268f706447d04b65af9c979a1680398 [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
Jeremy Hylton4a3dd2d2000-04-14 19:13:24 +0000152 _PyCompareState_Key = PyString_InternFromString("cmp_state");
153
Barry Warsaw035574d1997-08-29 22:07:17 +0000154 bimod = _PyBuiltin_Init_1();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000155 if (bimod == NULL)
156 Py_FatalError("Py_Initialize: can't initialize __builtin__");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000157 interp->builtins = PyModule_GetDict(bimod);
158 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000159
160 sysmod = _PySys_Init();
161 if (sysmod == NULL)
162 Py_FatalError("Py_Initialize: can't initialize sys");
163 interp->sysdict = PyModule_GetDict(sysmod);
164 Py_INCREF(interp->sysdict);
165 _PyImport_FixupExtension("sys", "sys");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000166 PySys_SetPath(Py_GetPath());
Guido van Rossum25ce5661997-08-02 03:10:38 +0000167 PyDict_SetItemString(interp->sysdict, "modules",
168 interp->modules);
169
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000170 _PyImport_Init();
171
Barry Warsaw035574d1997-08-29 22:07:17 +0000172 /* phase 2 of builtins */
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000173 _PyBuiltin_Init_2(interp->builtins);
Barry Warsaw963b8711997-09-18 16:42:02 +0000174 _PyImport_FixupExtension("__builtin__", "__builtin__");
Barry Warsaw035574d1997-08-29 22:07:17 +0000175
Guido van Rossum25ce5661997-08-02 03:10:38 +0000176 initsigs(); /* Signal handling stuff, including initintr() */
177
178 initmain(); /* Module __main__ */
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000179 if (!Py_NoSiteFlag)
180 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000181}
182
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000183#ifdef COUNT_ALLOCS
184extern void dump_counts Py_PROTO((void));
185#endif
186
Guido van Rossum25ce5661997-08-02 03:10:38 +0000187/* Undo the effect of Py_Initialize().
188
189 Beware: if multiple interpreter and/or thread states exist, these
190 are not wiped out; only the current thread and interpreter state
191 are deleted. But since everything else is deleted, those other
192 interpreter and thread states should no longer be used.
193
194 (XXX We should do better, e.g. wipe out all interpreters and
195 threads.)
196
197 Locking: as above.
198
199*/
200
201void
202Py_Finalize()
203{
204 PyInterpreterState *interp;
205 PyThreadState *tstate;
206
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000207 if (!initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000208 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000209 initialized = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000210
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000211 call_sys_exitfunc();
212
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000213 /* Get current thread state and interpreter pointer */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000214 tstate = PyThreadState_Get();
215 interp = tstate->interp;
216
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000217 /* Disable signal handling */
218 PyOS_FiniInterrupts();
219
220 /* Destroy PyExc_MemoryErrorInst */
221 _PyBuiltin_Fini_1();
222
Guido van Rossumc94044c2000-03-10 23:03:54 +0000223 /* Cleanup Unicode implementation */
224 _PyUnicode_Fini();
225
226 /* Cleanup Codec registry */
227 _PyCodecRegistry_Fini();
228
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000229 /* Destroy all modules */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000230 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000231
Guido van Rossum1707aad1997-12-08 23:43:45 +0000232 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
233 _PyImport_Fini();
234
235 /* Debugging stuff */
236#ifdef COUNT_ALLOCS
237 dump_counts();
238#endif
239
240#ifdef Py_REF_DEBUG
241 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
242#endif
243
244#ifdef Py_TRACE_REFS
245 if (_Py_AskYesNo("Print left references?")) {
246 _Py_PrintReferences(stderr);
247 }
248#endif /* Py_TRACE_REFS */
249
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000250 /* Delete current thread */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000251 PyInterpreterState_Clear(interp);
252 PyThreadState_Swap(NULL);
253 PyInterpreterState_Delete(interp);
254
Barry Warsaw035574d1997-08-29 22:07:17 +0000255 /* Now we decref the exception classes. After this point nothing
256 can raise an exception. That's okay, because each Fini() method
257 below has been checked to make sure no exceptions are ever
258 raised.
259 */
260 _PyBuiltin_Fini_2();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000261 PyMethod_Fini();
262 PyFrame_Fini();
263 PyCFunction_Fini();
264 PyTuple_Fini();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000265 PyString_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000266 PyInt_Fini();
267 PyFloat_Fini();
268
269 /* XXX Still allocated:
270 - various static ad-hoc pointers to interned strings
271 - int and float free list blocks
272 - whatever various modules and libraries allocate
273 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000274
275 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000276
277 call_ll_exitfuncs();
278
Guido van Rossumcc283f51997-08-05 02:22:03 +0000279#ifdef Py_TRACE_REFS
Guido van Rossumcc283f51997-08-05 02:22:03 +0000280 _Py_ResetReferences();
281#endif /* Py_TRACE_REFS */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000282}
283
284/* Create and initialize a new interpreter and thread, and return the
285 new thread. This requires that Py_Initialize() has been called
286 first.
287
288 Unsuccessful initialization yields a NULL pointer. Note that *no*
289 exception information is available even in this case -- the
290 exception information is held in the thread, and there is no
291 thread.
292
293 Locking: as above.
294
295*/
296
297PyThreadState *
298Py_NewInterpreter()
299{
300 PyInterpreterState *interp;
301 PyThreadState *tstate, *save_tstate;
302 PyObject *bimod, *sysmod;
303
304 if (!initialized)
305 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
306
307 interp = PyInterpreterState_New();
308 if (interp == NULL)
309 return NULL;
310
311 tstate = PyThreadState_New(interp);
312 if (tstate == NULL) {
313 PyInterpreterState_Delete(interp);
314 return NULL;
315 }
316
317 save_tstate = PyThreadState_Swap(tstate);
318
319 /* XXX The following is lax in error checking */
320
321 interp->modules = PyDict_New();
322
323 bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
324 if (bimod != NULL) {
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000325 interp->builtins = PyModule_GetDict(bimod);
326 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000327 }
328 sysmod = _PyImport_FindExtension("sys", "sys");
329 if (bimod != NULL && sysmod != NULL) {
330 interp->sysdict = PyModule_GetDict(sysmod);
331 Py_INCREF(interp->sysdict);
332 PySys_SetPath(Py_GetPath());
333 PyDict_SetItemString(interp->sysdict, "modules",
334 interp->modules);
335 initmain();
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000336 if (!Py_NoSiteFlag)
337 initsite();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000338 }
339
340 if (!PyErr_Occurred())
341 return tstate;
342
343 /* Oops, it didn't work. Undo it all. */
344
345 PyErr_Print();
346 PyThreadState_Clear(tstate);
347 PyThreadState_Swap(save_tstate);
348 PyThreadState_Delete(tstate);
349 PyInterpreterState_Delete(interp);
350
351 return NULL;
352}
353
354/* Delete an interpreter and its last thread. This requires that the
355 given thread state is current, that the thread has no remaining
356 frames, and that it is its interpreter's only remaining thread.
357 It is a fatal error to violate these constraints.
358
359 (Py_Finalize() doesn't have these constraints -- it zaps
360 everything, regardless.)
361
362 Locking: as above.
363
364*/
365
366void
367Py_EndInterpreter(tstate)
368 PyThreadState *tstate;
369{
370 PyInterpreterState *interp = tstate->interp;
371
372 if (tstate != PyThreadState_Get())
373 Py_FatalError("Py_EndInterpreter: thread is not current");
374 if (tstate->frame != NULL)
375 Py_FatalError("Py_EndInterpreter: thread still has a frame");
376 if (tstate != interp->tstate_head || tstate->next != NULL)
377 Py_FatalError("Py_EndInterpreter: not the last thread");
378
379 PyImport_Cleanup();
380 PyInterpreterState_Clear(interp);
381 PyThreadState_Swap(NULL);
382 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000383}
384
385static char *progname = "python";
386
387void
388Py_SetProgramName(pn)
389 char *pn;
390{
391 if (pn && *pn)
392 progname = pn;
393}
394
395char *
396Py_GetProgramName()
397{
398 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000399}
400
Guido van Rossuma61691e1998-02-06 22:27:24 +0000401static char *default_home = NULL;
402
403void
404Py_SetPythonHome(home)
405 char *home;
406{
407 default_home = home;
408}
409
410char *
411Py_GetPythonHome()
412{
413 char *home = default_home;
414 if (home == NULL)
415 home = getenv("PYTHONHOME");
416 return home;
417}
418
Guido van Rossum6135a871995-01-09 17:53:26 +0000419/* Create __main__ module */
420
421static void
422initmain()
423{
Guido van Rossum82598051997-03-05 00:20:32 +0000424 PyObject *m, *d;
425 m = PyImport_AddModule("__main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000426 if (m == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000427 Py_FatalError("can't create __main__ module");
428 d = PyModule_GetDict(m);
429 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
Guido van Rossum858cb731997-11-19 16:15:37 +0000430 PyObject *bimod = PyImport_ImportModule("__builtin__");
431 if (bimod == NULL ||
432 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
Guido van Rossum82598051997-03-05 00:20:32 +0000433 Py_FatalError("can't add __builtins__ to __main__");
Barry Warsaw3d05b1a1999-01-29 21:30:22 +0000434 Py_DECREF(bimod);
Guido van Rossum6135a871995-01-09 17:53:26 +0000435 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000436}
437
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000438/* Import the site module (not into __main__ though) */
439
440static void
441initsite()
442{
443 PyObject *m, *f;
444 m = PyImport_ImportModule("site");
445 if (m == NULL) {
446 f = PySys_GetObject("stderr");
447 if (Py_VerboseFlag) {
448 PyFile_WriteString(
449 "'import site' failed; traceback:\n", f);
450 PyErr_Print();
451 }
452 else {
453 PyFile_WriteString(
454 "'import site' failed; use -v for traceback\n", f);
455 PyErr_Clear();
456 }
457 }
458 else {
459 Py_DECREF(m);
460 }
461}
462
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000463/* Parse input from a file and execute it */
464
465int
Guido van Rossum82598051997-03-05 00:20:32 +0000466PyRun_AnyFile(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000467 FILE *fp;
468 char *filename;
469{
470 if (filename == NULL)
471 filename = "???";
Guido van Rossum7433b121997-02-14 19:45:36 +0000472 if (Py_FdIsInteractive(fp, filename))
Guido van Rossum82598051997-03-05 00:20:32 +0000473 return PyRun_InteractiveLoop(fp, filename);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000474 else
Guido van Rossum82598051997-03-05 00:20:32 +0000475 return PyRun_SimpleFile(fp, filename);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000476}
477
478int
Guido van Rossum82598051997-03-05 00:20:32 +0000479PyRun_InteractiveLoop(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000480 FILE *fp;
481 char *filename;
482{
Guido van Rossum82598051997-03-05 00:20:32 +0000483 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000484 int ret;
Guido van Rossum82598051997-03-05 00:20:32 +0000485 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000486 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000487 PySys_SetObject("ps1", v = PyString_FromString(">>> "));
488 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000489 }
Guido van Rossum82598051997-03-05 00:20:32 +0000490 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000491 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000492 PySys_SetObject("ps2", v = PyString_FromString("... "));
493 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000494 }
495 for (;;) {
Guido van Rossum82598051997-03-05 00:20:32 +0000496 ret = PyRun_InteractiveOne(fp, filename);
Guido van Rossumaae0d321996-05-22 16:35:33 +0000497#ifdef Py_REF_DEBUG
Guido van Rossum6f9e4331995-03-29 16:57:48 +0000498 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000499#endif
500 if (ret == E_EOF)
501 return 0;
502 /*
503 if (ret == E_NOMEM)
504 return -1;
505 */
506 }
507}
508
509int
Guido van Rossum82598051997-03-05 00:20:32 +0000510PyRun_InteractiveOne(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000511 FILE *fp;
512 char *filename;
513{
Guido van Rossum82598051997-03-05 00:20:32 +0000514 PyObject *m, *d, *v, *w;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000515 node *n;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000516 perrdetail err;
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000517 char *ps1 = "", *ps2 = "";
Guido van Rossum82598051997-03-05 00:20:32 +0000518 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000519 if (v != NULL) {
520 v = PyObject_Str(v);
521 if (v == NULL)
522 PyErr_Clear();
523 else if (PyString_Check(v))
524 ps1 = PyString_AsString(v);
525 }
Guido van Rossum82598051997-03-05 00:20:32 +0000526 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000527 if (w != NULL) {
528 w = PyObject_Str(w);
529 if (w == NULL)
530 PyErr_Clear();
531 else if (PyString_Check(w))
532 ps2 = PyString_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000533 }
Guido van Rossum82598051997-03-05 00:20:32 +0000534 n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar,
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000535 Py_single_input, ps1, ps2, &err);
Guido van Rossum82598051997-03-05 00:20:32 +0000536 Py_XDECREF(v);
537 Py_XDECREF(w);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000538 if (n == NULL) {
539 if (err.error == E_EOF) {
540 if (err.text)
541 free(err.text);
542 return E_EOF;
543 }
544 err_input(&err);
Guido van Rossum82598051997-03-05 00:20:32 +0000545 PyErr_Print();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000546 return err.error;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000547 }
Guido van Rossum82598051997-03-05 00:20:32 +0000548 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000549 if (m == NULL)
550 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000551 d = PyModule_GetDict(m);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000552 v = run_node(n, filename, d, d);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000553 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000554 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000555 return -1;
556 }
Guido van Rossum82598051997-03-05 00:20:32 +0000557 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000558 if (Py_FlushLine())
559 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000560 return 0;
561}
562
563int
Guido van Rossum82598051997-03-05 00:20:32 +0000564PyRun_SimpleFile(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000565 FILE *fp;
566 char *filename;
567{
Guido van Rossum82598051997-03-05 00:20:32 +0000568 PyObject *m, *d, *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000569 char *ext;
570
Guido van Rossum82598051997-03-05 00:20:32 +0000571 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000572 if (m == NULL)
573 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000574 d = PyModule_GetDict(m);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000575 ext = filename + strlen(filename) - 4;
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000576 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0
Jack Jansenbd06e961995-02-13 11:44:56 +0000577#ifdef macintosh
578 /* On a mac, we also assume a pyc file for types 'PYC ' and 'APPL' */
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000579 || getfiletype(filename) == 'PYC '
580 || getfiletype(filename) == 'APPL'
Jack Jansenbd06e961995-02-13 11:44:56 +0000581#endif /* macintosh */
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000582 ) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000583 /* Try to run a pyc file. First, re-open in binary */
Jack Jansene00637b1994-12-14 12:58:37 +0000584 /* Don't close, done in main: fclose(fp); */
Guido van Rossumfdef2711994-09-14 13:31:04 +0000585 if( (fp = fopen(filename, "rb")) == NULL ) {
586 fprintf(stderr, "python: Can't reopen .pyc file\n");
587 return -1;
588 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000589 /* Turn on optimization if a .pyo file is given */
590 if (strcmp(ext, ".pyo") == 0)
591 Py_OptimizeFlag = 1;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000592 v = run_pyc_file(fp, filename, d, d);
593 } else {
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000594 v = PyRun_File(fp, filename, Py_file_input, d, d);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000595 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000596 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000597 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000598 return -1;
599 }
Guido van Rossum82598051997-03-05 00:20:32 +0000600 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000601 if (Py_FlushLine())
602 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000603 return 0;
604}
605
606int
Guido van Rossum82598051997-03-05 00:20:32 +0000607PyRun_SimpleString(command)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000608 char *command;
609{
Guido van Rossum82598051997-03-05 00:20:32 +0000610 PyObject *m, *d, *v;
611 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000612 if (m == NULL)
613 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000614 d = PyModule_GetDict(m);
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000615 v = PyRun_String(command, Py_file_input, d, d);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000616 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000617 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000618 return -1;
619 }
Guido van Rossum82598051997-03-05 00:20:32 +0000620 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000621 if (Py_FlushLine())
622 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000623 return 0;
624}
625
Barry Warsaw035574d1997-08-29 22:07:17 +0000626static int
627parse_syntax_error(err, message, filename, lineno, offset, text)
628 PyObject* err;
629 PyObject** message;
630 char** filename;
631 int* lineno;
632 int* offset;
633 char** text;
634{
635 long hold;
636 PyObject *v;
637
638 /* old style errors */
639 if (PyTuple_Check(err))
640 return PyArg_Parse(err, "(O(ziiz))", message, filename,
641 lineno, offset, text);
642
643 /* new style errors. `err' is an instance */
644
645 if (! (v = PyObject_GetAttrString(err, "msg")))
646 goto finally;
647 *message = v;
648
649 if (!(v = PyObject_GetAttrString(err, "filename")))
650 goto finally;
651 if (v == Py_None)
652 *filename = NULL;
653 else if (! (*filename = PyString_AsString(v)))
654 goto finally;
655
656 Py_DECREF(v);
657 if (!(v = PyObject_GetAttrString(err, "lineno")))
658 goto finally;
659 hold = PyInt_AsLong(v);
660 Py_DECREF(v);
661 v = NULL;
662 if (hold < 0 && PyErr_Occurred())
663 goto finally;
664 *lineno = (int)hold;
665
666 if (!(v = PyObject_GetAttrString(err, "offset")))
667 goto finally;
668 hold = PyInt_AsLong(v);
669 Py_DECREF(v);
670 v = NULL;
671 if (hold < 0 && PyErr_Occurred())
672 goto finally;
673 *offset = (int)hold;
674
675 if (!(v = PyObject_GetAttrString(err, "text")))
676 goto finally;
677 if (v == Py_None)
678 *text = NULL;
679 else if (! (*text = PyString_AsString(v)))
680 goto finally;
681 Py_DECREF(v);
682 return 1;
683
684finally:
685 Py_XDECREF(v);
686 return 0;
687}
688
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000689void
Guido van Rossum82598051997-03-05 00:20:32 +0000690PyErr_Print()
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000691{
Guido van Rossuma61691e1998-02-06 22:27:24 +0000692 PyErr_PrintEx(1);
693}
694
695void
696PyErr_PrintEx(set_sys_last_vars)
697 int set_sys_last_vars;
698{
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000699 int err = 0;
Guido van Rossum82598051997-03-05 00:20:32 +0000700 PyObject *exception, *v, *tb, *f;
701 PyErr_Fetch(&exception, &v, &tb);
Barry Warsaw035574d1997-08-29 22:07:17 +0000702 PyErr_NormalizeException(&exception, &v, &tb);
703
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000704 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +0000705 return;
Barry Warsaw035574d1997-08-29 22:07:17 +0000706
Barry Warsaw36b8f941997-08-26 18:09:48 +0000707 if (PyErr_GivenExceptionMatches(exception, PyExc_SystemExit)) {
Guido van Rossum0829c751998-02-28 04:31:39 +0000708 if (Py_FlushLine())
709 PyErr_Clear();
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000710 fflush(stdout);
Guido van Rossum82598051997-03-05 00:20:32 +0000711 if (v == NULL || v == Py_None)
712 Py_Exit(0);
Barry Warsaw035574d1997-08-29 22:07:17 +0000713 if (PyInstance_Check(v)) {
714 /* we expect the error code to be store in the
715 `code' attribute
716 */
717 PyObject *code = PyObject_GetAttrString(v, "code");
718 if (code) {
719 Py_DECREF(v);
720 v = code;
Guido van Rossumaa9606f1997-10-03 13:53:28 +0000721 if (v == Py_None)
722 Py_Exit(0);
Barry Warsaw035574d1997-08-29 22:07:17 +0000723 }
724 /* if we failed to dig out the "code" attribute,
725 then just let the else clause below print the
726 error
727 */
728 }
Guido van Rossum82598051997-03-05 00:20:32 +0000729 if (PyInt_Check(v))
730 Py_Exit((int)PyInt_AsLong(v));
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000731 else {
Guido van Rossum3165fe61992-09-25 21:59:05 +0000732 /* OK to use real stderr here */
Guido van Rossum82598051997-03-05 00:20:32 +0000733 PyObject_Print(v, stderr, Py_PRINT_RAW);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000734 fprintf(stderr, "\n");
Guido van Rossum82598051997-03-05 00:20:32 +0000735 Py_Exit(1);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000736 }
737 }
Guido van Rossuma61691e1998-02-06 22:27:24 +0000738 if (set_sys_last_vars) {
739 PySys_SetObject("last_type", exception);
740 PySys_SetObject("last_value", v);
741 PySys_SetObject("last_traceback", tb);
742 }
Guido van Rossum82598051997-03-05 00:20:32 +0000743 f = PySys_GetObject("stderr");
Guido van Rossum3165fe61992-09-25 21:59:05 +0000744 if (f == NULL)
745 fprintf(stderr, "lost sys.stderr\n");
746 else {
Guido van Rossum0829c751998-02-28 04:31:39 +0000747 if (Py_FlushLine())
748 PyErr_Clear();
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000749 fflush(stdout);
Guido van Rossum0829c751998-02-28 04:31:39 +0000750 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +0000751 if (err == 0 &&
752 PyErr_GivenExceptionMatches(exception, PyExc_SyntaxError))
753 {
Guido van Rossum82598051997-03-05 00:20:32 +0000754 PyObject *message;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000755 char *filename, *text;
756 int lineno, offset;
Barry Warsaw035574d1997-08-29 22:07:17 +0000757 if (!parse_syntax_error(v, &message, &filename,
758 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +0000759 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000760 else {
761 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +0000762 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000763 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000764 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000765 else
Guido van Rossum82598051997-03-05 00:20:32 +0000766 PyFile_WriteString(filename, f);
767 PyFile_WriteString("\", line ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000768 sprintf(buf, "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +0000769 PyFile_WriteString(buf, f);
770 PyFile_WriteString("\n", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000771 if (text != NULL) {
Guido van Rossum798199d1994-09-19 08:08:50 +0000772 char *nl;
773 if (offset > 0 &&
Guido van Rossum478e7181997-05-06 15:24:59 +0000774 offset == (int)strlen(text))
Guido van Rossum798199d1994-09-19 08:08:50 +0000775 offset--;
776 for (;;) {
777 nl = strchr(text, '\n');
778 if (nl == NULL ||
779 nl-text >= offset)
780 break;
781 offset -= (nl+1-text);
782 text = nl+1;
783 }
Guido van Rossuma110aa61994-08-29 12:50:44 +0000784 while (*text == ' ' || *text == '\t') {
785 text++;
786 offset--;
787 }
Guido van Rossum82598051997-03-05 00:20:32 +0000788 PyFile_WriteString(" ", f);
789 PyFile_WriteString(text, f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000790 if (*text == '\0' ||
791 text[strlen(text)-1] != '\n')
Guido van Rossum82598051997-03-05 00:20:32 +0000792 PyFile_WriteString("\n", f);
793 PyFile_WriteString(" ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000794 offset--;
795 while (offset > 0) {
Guido van Rossum82598051997-03-05 00:20:32 +0000796 PyFile_WriteString(" ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000797 offset--;
798 }
Guido van Rossum82598051997-03-05 00:20:32 +0000799 PyFile_WriteString("^\n", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000800 }
Guido van Rossum82598051997-03-05 00:20:32 +0000801 Py_INCREF(message);
802 Py_DECREF(v);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000803 v = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000804 /* Can't be bothered to check all those
805 PyFile_WriteString() calls */
806 if (PyErr_Occurred())
807 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000808 }
809 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000810 if (err) {
811 /* Don't do anything else */
812 }
813 else if (PyClass_Check(exception)) {
Barry Warsaw2f5f6a21997-09-16 21:42:03 +0000814 PyClassObject* exc = (PyClassObject*)exception;
815 PyObject* className = exc->cl_name;
816 PyObject* moduleName =
817 PyDict_GetItemString(exc->cl_dict, "__module__");
818
819 if (moduleName == NULL)
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000820 err = PyFile_WriteString("<unknown>", f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +0000821 else {
822 char* modstr = PyString_AsString(moduleName);
823 if (modstr && strcmp(modstr, "exceptions"))
824 {
825 err = PyFile_WriteString(modstr, f);
826 err += PyFile_WriteString(".", f);
827 }
828 }
829 if (err == 0) {
830 if (className == NULL)
831 err = PyFile_WriteString("<unknown>", f);
832 else
833 err = PyFile_WriteObject(className, f,
834 Py_PRINT_RAW);
835 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000836 }
837 else
838 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
839 if (err == 0) {
840 if (v != NULL && v != Py_None) {
Barry Warsaw035574d1997-08-29 22:07:17 +0000841 PyObject *s = PyObject_Str(v);
842 /* only print colon if the str() of the
843 object is not the empty string
844 */
Guido van Rossumd6bf45b1997-09-05 19:11:53 +0000845 if (s == NULL)
846 err = -1;
847 else if (!PyString_Check(s) ||
848 PyString_GET_SIZE(s) != 0)
Barry Warsaw035574d1997-08-29 22:07:17 +0000849 err = PyFile_WriteString(": ", f);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000850 if (err == 0)
Guido van Rossumd6bf45b1997-09-05 19:11:53 +0000851 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
852 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +0000853 }
Guido van Rossum262e1241995-02-07 15:30:45 +0000854 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000855 if (err == 0)
856 err = PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000857 }
Guido van Rossum82598051997-03-05 00:20:32 +0000858 Py_XDECREF(exception);
859 Py_XDECREF(v);
860 Py_XDECREF(tb);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000861 /* If an error happened here, don't show it.
862 XXX This is wrong, but too many callers rely on this behavior. */
863 if (err != 0)
864 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000865}
866
Guido van Rossum82598051997-03-05 00:20:32 +0000867PyObject *
868PyRun_String(str, start, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000869 char *str;
870 int start;
Guido van Rossum82598051997-03-05 00:20:32 +0000871 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000872{
Guido van Rossum82598051997-03-05 00:20:32 +0000873 return run_err_node(PyParser_SimpleParseString(str, start),
Guido van Rossuma110aa61994-08-29 12:50:44 +0000874 "<string>", globals, locals);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000875}
876
Guido van Rossum82598051997-03-05 00:20:32 +0000877PyObject *
878PyRun_File(fp, filename, start, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000879 FILE *fp;
880 char *filename;
881 int start;
Guido van Rossum82598051997-03-05 00:20:32 +0000882 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000883{
Guido van Rossum82598051997-03-05 00:20:32 +0000884 return run_err_node(PyParser_SimpleParseFile(fp, filename, start),
Guido van Rossuma110aa61994-08-29 12:50:44 +0000885 filename, globals, locals);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000886}
887
Guido van Rossum82598051997-03-05 00:20:32 +0000888static PyObject *
Guido van Rossuma110aa61994-08-29 12:50:44 +0000889run_err_node(n, filename, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000890 node *n;
891 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000892 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000893{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000894 if (n == NULL)
895 return NULL;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000896 return run_node(n, filename, globals, locals);
897}
898
Guido van Rossum82598051997-03-05 00:20:32 +0000899static PyObject *
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000900run_node(n, filename, globals, locals)
901 node *n;
902 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000903 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000904{
Guido van Rossum82598051997-03-05 00:20:32 +0000905 PyCodeObject *co;
906 PyObject *v;
907 co = PyNode_Compile(n, filename);
908 PyNode_Free(n);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000909 if (co == NULL)
910 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000911 v = PyEval_EvalCode(co, globals, locals);
912 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000913 return v;
914}
915
Guido van Rossum82598051997-03-05 00:20:32 +0000916static PyObject *
Guido van Rossumfdef2711994-09-14 13:31:04 +0000917run_pyc_file(fp, filename, globals, locals)
918 FILE *fp;
919 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000920 PyObject *globals, *locals;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000921{
Guido van Rossum82598051997-03-05 00:20:32 +0000922 PyCodeObject *co;
923 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000924 long magic;
Guido van Rossum82598051997-03-05 00:20:32 +0000925 long PyImport_GetMagicNumber();
Guido van Rossumfdef2711994-09-14 13:31:04 +0000926
Guido van Rossum82598051997-03-05 00:20:32 +0000927 magic = PyMarshal_ReadLongFromFile(fp);
928 if (magic != PyImport_GetMagicNumber()) {
929 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +0000930 "Bad magic number in .pyc file");
931 return NULL;
932 }
Guido van Rossum82598051997-03-05 00:20:32 +0000933 (void) PyMarshal_ReadLongFromFile(fp);
934 v = PyMarshal_ReadObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000935 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +0000936 if (v == NULL || !PyCode_Check(v)) {
937 Py_XDECREF(v);
938 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +0000939 "Bad code object in .pyc file");
940 return NULL;
941 }
Guido van Rossum82598051997-03-05 00:20:32 +0000942 co = (PyCodeObject *)v;
943 v = PyEval_EvalCode(co, globals, locals);
944 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000945 return v;
946}
947
Guido van Rossum82598051997-03-05 00:20:32 +0000948PyObject *
949Py_CompileString(str, filename, start)
Guido van Rossum5b722181993-03-30 17:46:03 +0000950 char *str;
951 char *filename;
952 int start;
953{
954 node *n;
Guido van Rossum82598051997-03-05 00:20:32 +0000955 PyCodeObject *co;
956 n = PyParser_SimpleParseString(str, start);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000957 if (n == NULL)
Guido van Rossum5b722181993-03-30 17:46:03 +0000958 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000959 co = PyNode_Compile(n, filename);
960 PyNode_Free(n);
961 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +0000962}
963
Guido van Rossuma110aa61994-08-29 12:50:44 +0000964/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000965
Guido van Rossuma110aa61994-08-29 12:50:44 +0000966node *
Guido van Rossum82598051997-03-05 00:20:32 +0000967PyParser_SimpleParseFile(fp, filename, start)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000968 FILE *fp;
969 char *filename;
970 int start;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000971{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000972 node *n;
973 perrdetail err;
Guido van Rossum82598051997-03-05 00:20:32 +0000974 n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar, start,
Guido van Rossuma110aa61994-08-29 12:50:44 +0000975 (char *)0, (char *)0, &err);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000976 if (n == NULL)
977 err_input(&err);
978 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000979}
980
Guido van Rossuma110aa61994-08-29 12:50:44 +0000981/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000982
Guido van Rossuma110aa61994-08-29 12:50:44 +0000983node *
Guido van Rossum82598051997-03-05 00:20:32 +0000984PyParser_SimpleParseString(str, start)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000985 char *str;
986 int start;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000987{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000988 node *n;
989 perrdetail err;
Guido van Rossum82598051997-03-05 00:20:32 +0000990 n = PyParser_ParseString(str, &_PyParser_Grammar, start, &err);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000991 if (n == NULL)
992 err_input(&err);
993 return n;
994}
995
996/* Set the error appropriate to the given input error code (see errcode.h) */
997
998static void
999err_input(err)
1000 perrdetail *err;
1001{
Guido van Rossum82598051997-03-05 00:20:32 +00001002 PyObject *v, *w;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001003 char *msg = NULL;
Guido van Rossum82598051997-03-05 00:20:32 +00001004 v = Py_BuildValue("(ziiz)", err->filename,
Guido van Rossuma110aa61994-08-29 12:50:44 +00001005 err->lineno, err->offset, err->text);
1006 if (err->text != NULL) {
1007 free(err->text);
1008 err->text = NULL;
1009 }
1010 switch (err->error) {
1011 case E_SYNTAX:
1012 msg = "invalid syntax";
1013 break;
1014 case E_TOKEN:
1015 msg = "invalid token";
Guido van Rossuma110aa61994-08-29 12:50:44 +00001016 break;
1017 case E_INTR:
Guido van Rossum82598051997-03-05 00:20:32 +00001018 PyErr_SetNone(PyExc_KeyboardInterrupt);
Barry Warsawc80baa31999-01-27 16:39:40 +00001019 Py_XDECREF(v);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001020 return;
1021 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +00001022 PyErr_NoMemory();
Barry Warsawc80baa31999-01-27 16:39:40 +00001023 Py_XDECREF(v);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001024 return;
1025 case E_EOF:
1026 msg = "unexpected EOF while parsing";
1027 break;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001028 case E_INDENT:
1029 msg = "inconsistent use of tabs and spaces in indentation";
1030 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001031 default:
1032 fprintf(stderr, "error=%d\n", err->error);
1033 msg = "unknown parsing error";
1034 break;
1035 }
Guido van Rossum82598051997-03-05 00:20:32 +00001036 w = Py_BuildValue("(sO)", msg, v);
1037 Py_XDECREF(v);
1038 PyErr_SetObject(PyExc_SyntaxError, w);
1039 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001040}
1041
1042/* Print fatal error message and abort */
1043
1044void
Guido van Rossum82598051997-03-05 00:20:32 +00001045Py_FatalError(msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001046 char *msg;
1047{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00001048 fprintf(stderr, "Fatal Python error: %s\n", msg);
Guido van Rossum8ae87c01995-01-26 00:40:38 +00001049#ifdef macintosh
1050 for (;;);
1051#endif
Guido van Rossum9b38a141996-09-11 23:12:24 +00001052#ifdef MS_WIN32
Guido van Rossum23c94461997-05-22 20:21:30 +00001053 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +00001054 OutputDebugString(msg);
1055 OutputDebugString("\n");
Guido van Rossum0ba35361998-08-13 13:33:16 +00001056#ifdef _DEBUG
1057 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00001058#endif
Guido van Rossum0ba35361998-08-13 13:33:16 +00001059#endif /* MS_WIN32 */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001060 abort();
1061}
1062
1063/* Clean up and exit */
1064
Guido van Rossuma110aa61994-08-29 12:50:44 +00001065#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00001066#include "pythread.h"
Guido van Rossum82598051997-03-05 00:20:32 +00001067int _PyThread_Started = 0; /* Set by threadmodule.c and maybe others */
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001068#endif
1069
Guido van Rossum2dcfc961998-10-01 16:01:57 +00001070#define NEXITFUNCS 32
Guido van Rossum1662dd51994-09-07 14:38:28 +00001071static void (*exitfuncs[NEXITFUNCS])();
1072static int nexitfuncs = 0;
1073
1074int Py_AtExit(func)
Guido van Rossum82598051997-03-05 00:20:32 +00001075 void (*func) Py_PROTO((void));
Guido van Rossum1662dd51994-09-07 14:38:28 +00001076{
1077 if (nexitfuncs >= NEXITFUNCS)
1078 return -1;
1079 exitfuncs[nexitfuncs++] = func;
1080 return 0;
1081}
1082
Guido van Rossumcc283f51997-08-05 02:22:03 +00001083static void
1084call_sys_exitfunc()
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001085{
Guido van Rossum82598051997-03-05 00:20:32 +00001086 PyObject *exitfunc = PySys_GetObject("exitfunc");
Guido van Rossum59bff391992-09-03 20:28:00 +00001087
1088 if (exitfunc) {
Guido van Rossumbf02fb21998-04-03 21:12:12 +00001089 PyObject *res, *f;
Guido van Rossum82598051997-03-05 00:20:32 +00001090 Py_INCREF(exitfunc);
1091 PySys_SetObject("exitfunc", (PyObject *)NULL);
Guido van Rossumbf02fb21998-04-03 21:12:12 +00001092 f = PySys_GetObject("stderr");
Guido van Rossum82598051997-03-05 00:20:32 +00001093 res = PyEval_CallObject(exitfunc, (PyObject *)NULL);
Guido van Rossum59bff391992-09-03 20:28:00 +00001094 if (res == NULL) {
Guido van Rossumbf02fb21998-04-03 21:12:12 +00001095 if (f)
1096 PyFile_WriteString("Error in sys.exitfunc:\n", f);
Guido van Rossum82598051997-03-05 00:20:32 +00001097 PyErr_Print();
Guido van Rossum59bff391992-09-03 20:28:00 +00001098 }
Guido van Rossum82598051997-03-05 00:20:32 +00001099 Py_DECREF(exitfunc);
Guido van Rossum59bff391992-09-03 20:28:00 +00001100 }
1101
Guido van Rossum0829c751998-02-28 04:31:39 +00001102 if (Py_FlushLine())
1103 PyErr_Clear();
Guido van Rossumcc283f51997-08-05 02:22:03 +00001104}
Guido van Rossum1662dd51994-09-07 14:38:28 +00001105
Guido van Rossumcc283f51997-08-05 02:22:03 +00001106static void
1107call_ll_exitfuncs()
1108{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001109 while (nexitfuncs > 0)
1110 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001111
1112 fflush(stdout);
1113 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001114}
1115
1116void
Guido van Rossum82598051997-03-05 00:20:32 +00001117Py_Exit(sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001118 int sts;
1119{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001120 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001121
Jack Jansen66a89771995-10-27 13:22:14 +00001122#ifdef macintosh
1123 PyMac_Exit(sts);
1124#else
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001125 exit(sts);
Jack Jansen66a89771995-10-27 13:22:14 +00001126#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001127}
1128
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001129static void
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001130initsigs()
1131{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001132#ifdef HAVE_SIGNAL_H
1133#ifdef SIGPIPE
1134 signal(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001135#endif
Guido van Rossuma110aa61994-08-29 12:50:44 +00001136#endif /* HAVE_SIGNAL_H */
Guido van Rossum82598051997-03-05 00:20:32 +00001137 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001138}
1139
Guido van Rossumaae0d321996-05-22 16:35:33 +00001140#ifdef Py_TRACE_REFS
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001141/* Ask a yes/no question */
1142
Guido van Rossum59bff391992-09-03 20:28:00 +00001143int
Guido van Rossum82598051997-03-05 00:20:32 +00001144_Py_AskYesNo(prompt)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001145 char *prompt;
1146{
1147 char buf[256];
1148
1149 printf("%s [ny] ", prompt);
1150 if (fgets(buf, sizeof buf, stdin) == NULL)
1151 return 0;
1152 return buf[0] == 'y' || buf[0] == 'Y';
1153}
1154#endif
1155
Guido van Rossuma110aa61994-08-29 12:50:44 +00001156#ifdef MPW
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001157
1158/* Check for file descriptor connected to interactive device.
1159 Pretend that stdin is always interactive, other files never. */
1160
1161int
1162isatty(fd)
1163 int fd;
1164{
1165 return fd == fileno(stdin);
1166}
1167
1168#endif
Guido van Rossum7433b121997-02-14 19:45:36 +00001169
1170/*
1171 * The file descriptor fd is considered ``interactive'' if either
1172 * a) isatty(fd) is TRUE, or
1173 * b) the -i flag was given, and the filename associated with
1174 * the descriptor is NULL or "<stdin>" or "???".
1175 */
1176int
1177Py_FdIsInteractive(fp, filename)
1178 FILE *fp;
1179 char *filename;
1180{
1181 if (isatty((int)fileno(fp)))
1182 return 1;
1183 if (!Py_InteractiveFlag)
1184 return 0;
1185 return (filename == NULL) ||
1186 (strcmp(filename, "<stdin>") == 0) ||
1187 (strcmp(filename, "???") == 0);
1188}