blob: 9cc80724f83693735f87bb84485d3e50066423f1 [file] [log] [blame]
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001/***********************************************************
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00002Copyright (c) 2000, BeOpen.com.
3Copyright (c) 1995-2000, Corporation for National Research Initiatives.
4Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
5All rights reserved.
Guido van Rossum1984f1e1992-08-04 12:41:02 +00006
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00007See the file "Misc/COPYRIGHT" for information on usage and
8redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossum1984f1e1992-08-04 12:41:02 +00009******************************************************************/
10
11/* Python interpreter top-level routines, including init/exit */
12
Guido van Rossum82598051997-03-05 00:20:32 +000013#include "Python.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000014
15#include "grammar.h"
16#include "node.h"
Fred Drake85f36392000-07-11 17:53:00 +000017#include "token.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000018#include "parsetok.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000019#include "errcode.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000020#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000021#include "eval.h"
Guido van Rossumfdef2711994-09-14 13:31:04 +000022#include "marshal.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000023
Guido van Rossum80bb9651996-12-05 23:27:02 +000024#ifdef HAVE_UNISTD_H
25#include <unistd.h>
26#endif
27
Guido van Rossuma110aa61994-08-29 12:50:44 +000028#ifdef HAVE_SIGNAL_H
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000029#include <signal.h>
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000030#endif
31
Guido van Rossum9b38a141996-09-11 23:12:24 +000032#ifdef MS_WIN32
Guido van Rossuma44823b1995-03-14 15:01:17 +000033#undef BYTE
34#include "windows.h"
35#endif
36
Guido van Rossum82598051997-03-05 00:20:32 +000037extern char *Py_GetPath();
Guido van Rossum1984f1e1992-08-04 12:41:02 +000038
Guido van Rossum82598051997-03-05 00:20:32 +000039extern grammar _PyParser_Grammar; /* From graminit.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000040
Guido van Rossumb73cc041993-11-01 16:28:59 +000041/* Forward */
Tim Petersdbd9ba62000-07-09 03:09:57 +000042static void initmain(void);
43static void initsite(void);
44static PyObject *run_err_node(node *n, char *filename,
45 PyObject *globals, PyObject *locals);
46static PyObject *run_node(node *n, char *filename,
47 PyObject *globals, PyObject *locals);
48static PyObject *run_pyc_file(FILE *fp, char *filename,
49 PyObject *globals, PyObject *locals);
50static void err_input(perrdetail *);
51static void initsigs(void);
52static void call_sys_exitfunc(void);
53static void call_ll_exitfuncs(void);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000054
Guido van Rossumbffd6832000-01-20 22:32:56 +000055#ifdef Py_TRACE_REFS
56int _Py_AskYesNo(char *prompt);
57#endif
58
Guido van Rossumc94044c2000-03-10 23:03:54 +000059extern void _PyUnicode_Init();
60extern void _PyUnicode_Fini();
61extern void _PyCodecRegistry_Init();
62extern void _PyCodecRegistry_Fini();
63
64
Guido van Rossum82598051997-03-05 00:20:32 +000065int Py_DebugFlag; /* Needed by parser.c */
66int Py_VerboseFlag; /* Needed by import.c */
Guido van Rossum7433b121997-02-14 19:45:36 +000067int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Guido van Rossumdcc0c131997-08-29 22:32:42 +000068int Py_NoSiteFlag; /* Suppress 'import site' */
Barry Warsaw3ce09642000-05-02 19:18:59 +000069int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
Guido van Rossuma61691e1998-02-06 22:27:24 +000070int Py_FrozenFlag; /* Needed by getpath.c */
Guido van Rossumb16d1972000-05-01 17:55:15 +000071int Py_UnicodeFlag = 0; /* Needed by compile.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000072
Guido van Rossum25ce5661997-08-02 03:10:38 +000073static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +000074
Guido van Rossume3c0d5e1997-08-22 04:20:13 +000075/* API to access the initialized flag -- useful for eroteric use */
76
77int
78Py_IsInitialized()
79{
80 return initialized;
81}
82
Guido van Rossum25ce5661997-08-02 03:10:38 +000083/* Global initializations. Can be undone by Py_Finalize(). Don't
84 call this twice without an intervening Py_Finalize() call. When
85 initializations fail, a fatal error is issued and the function does
86 not return. On return, the first thread and interpreter state have
87 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +000088
Guido van Rossum25ce5661997-08-02 03:10:38 +000089 Locking: you must hold the interpreter lock while calling this.
90 (If the lock has not yet been initialized, that's equivalent to
91 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000092
Guido van Rossum25ce5661997-08-02 03:10:38 +000093*/
Guido van Rossuma027efa1997-05-05 20:56:21 +000094
95void
96Py_Initialize()
97{
Guido van Rossuma027efa1997-05-05 20:56:21 +000098 PyInterpreterState *interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +000099 PyThreadState *tstate;
100 PyObject *bimod, *sysmod;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000101 char *p;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000102
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000103 if (initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000104 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000105 initialized = 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000106
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000107 if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
108 Py_DebugFlag = 1;
109 if ((p = getenv("PYTHONVERBOSE")) && *p != '\0')
110 Py_VerboseFlag = 1;
Guido van Rossum562f5b11998-10-07 14:50:42 +0000111 if ((p = getenv("PYTHONOPTIMIZE")) && *p != '\0')
112 Py_OptimizeFlag = 1;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000113
Guido van Rossuma027efa1997-05-05 20:56:21 +0000114 interp = PyInterpreterState_New();
115 if (interp == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000116 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000117
Guido van Rossuma027efa1997-05-05 20:56:21 +0000118 tstate = PyThreadState_New(interp);
119 if (tstate == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000120 Py_FatalError("Py_Initialize: can't make first thread");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000121 (void) PyThreadState_Swap(tstate);
122
Guido van Rossum25ce5661997-08-02 03:10:38 +0000123 interp->modules = PyDict_New();
124 if (interp->modules == NULL)
125 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000126
Guido van Rossumc94044c2000-03-10 23:03:54 +0000127 /* Init codec registry */
128 _PyCodecRegistry_Init();
129
130 /* Init Unicode implementation; relies on the codec registry */
131 _PyUnicode_Init();
132
Jeremy Hylton4a3dd2d2000-04-14 19:13:24 +0000133 _PyCompareState_Key = PyString_InternFromString("cmp_state");
134
Barry Warsawf242aa02000-05-25 23:09:49 +0000135 bimod = _PyBuiltin_Init();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000136 if (bimod == NULL)
137 Py_FatalError("Py_Initialize: can't initialize __builtin__");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000138 interp->builtins = PyModule_GetDict(bimod);
139 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000140
141 sysmod = _PySys_Init();
142 if (sysmod == NULL)
143 Py_FatalError("Py_Initialize: can't initialize sys");
144 interp->sysdict = PyModule_GetDict(sysmod);
145 Py_INCREF(interp->sysdict);
146 _PyImport_FixupExtension("sys", "sys");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000147 PySys_SetPath(Py_GetPath());
Guido van Rossum25ce5661997-08-02 03:10:38 +0000148 PyDict_SetItemString(interp->sysdict, "modules",
149 interp->modules);
150
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000151 _PyImport_Init();
152
Barry Warsawf242aa02000-05-25 23:09:49 +0000153 /* initialize builtin exceptions */
154 init_exceptions();
155
Barry Warsaw035574d1997-08-29 22:07:17 +0000156 /* phase 2 of builtins */
Barry Warsaw963b8711997-09-18 16:42:02 +0000157 _PyImport_FixupExtension("__builtin__", "__builtin__");
Barry Warsaw035574d1997-08-29 22:07:17 +0000158
Guido van Rossum25ce5661997-08-02 03:10:38 +0000159 initsigs(); /* Signal handling stuff, including initintr() */
160
161 initmain(); /* Module __main__ */
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000162 if (!Py_NoSiteFlag)
163 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000164}
165
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000166#ifdef COUNT_ALLOCS
Tim Petersdbd9ba62000-07-09 03:09:57 +0000167extern void dump_counts(void);
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000168#endif
169
Guido van Rossum25ce5661997-08-02 03:10:38 +0000170/* Undo the effect of Py_Initialize().
171
172 Beware: if multiple interpreter and/or thread states exist, these
173 are not wiped out; only the current thread and interpreter state
174 are deleted. But since everything else is deleted, those other
175 interpreter and thread states should no longer be used.
176
177 (XXX We should do better, e.g. wipe out all interpreters and
178 threads.)
179
180 Locking: as above.
181
182*/
183
184void
185Py_Finalize()
186{
187 PyInterpreterState *interp;
188 PyThreadState *tstate;
189
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000190 if (!initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000191 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000192 initialized = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000193
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000194 call_sys_exitfunc();
195
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000196 /* Get current thread state and interpreter pointer */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000197 tstate = PyThreadState_Get();
198 interp = tstate->interp;
199
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000200 /* Disable signal handling */
201 PyOS_FiniInterrupts();
202
Guido van Rossumc94044c2000-03-10 23:03:54 +0000203 /* Cleanup Unicode implementation */
204 _PyUnicode_Fini();
205
206 /* Cleanup Codec registry */
207 _PyCodecRegistry_Fini();
208
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000209 /* Destroy all modules */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000210 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000211
Guido van Rossum1707aad1997-12-08 23:43:45 +0000212 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
213 _PyImport_Fini();
214
215 /* Debugging stuff */
216#ifdef COUNT_ALLOCS
217 dump_counts();
218#endif
219
220#ifdef Py_REF_DEBUG
221 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
222#endif
223
224#ifdef Py_TRACE_REFS
Guido van Rossumeca47842000-04-27 23:44:15 +0000225 if (
226#ifdef MS_WINDOWS /* Only ask on Windows if env var set */
227 getenv("PYTHONDUMPREFS") &&
228#endif /* MS_WINDOWS */
229 _Py_AskYesNo("Print left references?")) {
Guido van Rossum1707aad1997-12-08 23:43:45 +0000230 _Py_PrintReferences(stderr);
231 }
232#endif /* Py_TRACE_REFS */
233
Barry Warsaw035574d1997-08-29 22:07:17 +0000234 /* Now we decref the exception classes. After this point nothing
235 can raise an exception. That's okay, because each Fini() method
236 below has been checked to make sure no exceptions are ever
237 raised.
238 */
Barry Warsawf242aa02000-05-25 23:09:49 +0000239 fini_exceptions();
240
241 /* Delete current thread */
242 PyInterpreterState_Clear(interp);
243 PyThreadState_Swap(NULL);
244 PyInterpreterState_Delete(interp);
245
Guido van Rossumcc283f51997-08-05 02:22:03 +0000246 PyMethod_Fini();
247 PyFrame_Fini();
248 PyCFunction_Fini();
249 PyTuple_Fini();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000250 PyString_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000251 PyInt_Fini();
252 PyFloat_Fini();
253
254 /* XXX Still allocated:
255 - various static ad-hoc pointers to interned strings
256 - int and float free list blocks
257 - whatever various modules and libraries allocate
258 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000259
260 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000261
262 call_ll_exitfuncs();
263
Guido van Rossumcc283f51997-08-05 02:22:03 +0000264#ifdef Py_TRACE_REFS
Guido van Rossumcc283f51997-08-05 02:22:03 +0000265 _Py_ResetReferences();
266#endif /* Py_TRACE_REFS */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000267}
268
269/* Create and initialize a new interpreter and thread, and return the
270 new thread. This requires that Py_Initialize() has been called
271 first.
272
273 Unsuccessful initialization yields a NULL pointer. Note that *no*
274 exception information is available even in this case -- the
275 exception information is held in the thread, and there is no
276 thread.
277
278 Locking: as above.
279
280*/
281
282PyThreadState *
283Py_NewInterpreter()
284{
285 PyInterpreterState *interp;
286 PyThreadState *tstate, *save_tstate;
287 PyObject *bimod, *sysmod;
288
289 if (!initialized)
290 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
291
292 interp = PyInterpreterState_New();
293 if (interp == NULL)
294 return NULL;
295
296 tstate = PyThreadState_New(interp);
297 if (tstate == NULL) {
298 PyInterpreterState_Delete(interp);
299 return NULL;
300 }
301
302 save_tstate = PyThreadState_Swap(tstate);
303
304 /* XXX The following is lax in error checking */
305
306 interp->modules = PyDict_New();
307
308 bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
309 if (bimod != NULL) {
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000310 interp->builtins = PyModule_GetDict(bimod);
311 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000312 }
313 sysmod = _PyImport_FindExtension("sys", "sys");
314 if (bimod != NULL && sysmod != NULL) {
315 interp->sysdict = PyModule_GetDict(sysmod);
316 Py_INCREF(interp->sysdict);
317 PySys_SetPath(Py_GetPath());
318 PyDict_SetItemString(interp->sysdict, "modules",
319 interp->modules);
320 initmain();
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000321 if (!Py_NoSiteFlag)
322 initsite();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000323 }
324
325 if (!PyErr_Occurred())
326 return tstate;
327
328 /* Oops, it didn't work. Undo it all. */
329
330 PyErr_Print();
331 PyThreadState_Clear(tstate);
332 PyThreadState_Swap(save_tstate);
333 PyThreadState_Delete(tstate);
334 PyInterpreterState_Delete(interp);
335
336 return NULL;
337}
338
339/* Delete an interpreter and its last thread. This requires that the
340 given thread state is current, that the thread has no remaining
341 frames, and that it is its interpreter's only remaining thread.
342 It is a fatal error to violate these constraints.
343
344 (Py_Finalize() doesn't have these constraints -- it zaps
345 everything, regardless.)
346
347 Locking: as above.
348
349*/
350
351void
352Py_EndInterpreter(tstate)
353 PyThreadState *tstate;
354{
355 PyInterpreterState *interp = tstate->interp;
356
357 if (tstate != PyThreadState_Get())
358 Py_FatalError("Py_EndInterpreter: thread is not current");
359 if (tstate->frame != NULL)
360 Py_FatalError("Py_EndInterpreter: thread still has a frame");
361 if (tstate != interp->tstate_head || tstate->next != NULL)
362 Py_FatalError("Py_EndInterpreter: not the last thread");
363
364 PyImport_Cleanup();
365 PyInterpreterState_Clear(interp);
366 PyThreadState_Swap(NULL);
367 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000368}
369
370static char *progname = "python";
371
372void
373Py_SetProgramName(pn)
374 char *pn;
375{
376 if (pn && *pn)
377 progname = pn;
378}
379
380char *
381Py_GetProgramName()
382{
383 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000384}
385
Guido van Rossuma61691e1998-02-06 22:27:24 +0000386static char *default_home = NULL;
387
388void
389Py_SetPythonHome(home)
390 char *home;
391{
392 default_home = home;
393}
394
395char *
396Py_GetPythonHome()
397{
398 char *home = default_home;
399 if (home == NULL)
400 home = getenv("PYTHONHOME");
401 return home;
402}
403
Guido van Rossum6135a871995-01-09 17:53:26 +0000404/* Create __main__ module */
405
406static void
407initmain()
408{
Guido van Rossum82598051997-03-05 00:20:32 +0000409 PyObject *m, *d;
410 m = PyImport_AddModule("__main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000411 if (m == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000412 Py_FatalError("can't create __main__ module");
413 d = PyModule_GetDict(m);
414 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
Guido van Rossum858cb731997-11-19 16:15:37 +0000415 PyObject *bimod = PyImport_ImportModule("__builtin__");
416 if (bimod == NULL ||
417 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
Guido van Rossum82598051997-03-05 00:20:32 +0000418 Py_FatalError("can't add __builtins__ to __main__");
Barry Warsaw3d05b1a1999-01-29 21:30:22 +0000419 Py_DECREF(bimod);
Guido van Rossum6135a871995-01-09 17:53:26 +0000420 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000421}
422
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000423/* Import the site module (not into __main__ though) */
424
425static void
426initsite()
427{
428 PyObject *m, *f;
429 m = PyImport_ImportModule("site");
430 if (m == NULL) {
431 f = PySys_GetObject("stderr");
432 if (Py_VerboseFlag) {
433 PyFile_WriteString(
434 "'import site' failed; traceback:\n", f);
435 PyErr_Print();
436 }
437 else {
438 PyFile_WriteString(
439 "'import site' failed; use -v for traceback\n", f);
440 PyErr_Clear();
441 }
442 }
443 else {
444 Py_DECREF(m);
445 }
446}
447
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000448/* Parse input from a file and execute it */
449
450int
Guido van Rossum82598051997-03-05 00:20:32 +0000451PyRun_AnyFile(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000452 FILE *fp;
453 char *filename;
454{
455 if (filename == NULL)
456 filename = "???";
Guido van Rossum7433b121997-02-14 19:45:36 +0000457 if (Py_FdIsInteractive(fp, filename))
Guido van Rossum82598051997-03-05 00:20:32 +0000458 return PyRun_InteractiveLoop(fp, filename);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000459 else
Guido van Rossum82598051997-03-05 00:20:32 +0000460 return PyRun_SimpleFile(fp, filename);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000461}
462
463int
Guido van Rossum82598051997-03-05 00:20:32 +0000464PyRun_InteractiveLoop(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000465 FILE *fp;
466 char *filename;
467{
Guido van Rossum82598051997-03-05 00:20:32 +0000468 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000469 int ret;
Guido van Rossum82598051997-03-05 00:20:32 +0000470 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000471 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000472 PySys_SetObject("ps1", v = PyString_FromString(">>> "));
473 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000474 }
Guido van Rossum82598051997-03-05 00:20:32 +0000475 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000476 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000477 PySys_SetObject("ps2", v = PyString_FromString("... "));
478 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000479 }
480 for (;;) {
Guido van Rossum82598051997-03-05 00:20:32 +0000481 ret = PyRun_InteractiveOne(fp, filename);
Guido van Rossumaae0d321996-05-22 16:35:33 +0000482#ifdef Py_REF_DEBUG
Guido van Rossum6f9e4331995-03-29 16:57:48 +0000483 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000484#endif
485 if (ret == E_EOF)
486 return 0;
487 /*
488 if (ret == E_NOMEM)
489 return -1;
490 */
491 }
492}
493
494int
Guido van Rossum82598051997-03-05 00:20:32 +0000495PyRun_InteractiveOne(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000496 FILE *fp;
497 char *filename;
498{
Guido van Rossum82598051997-03-05 00:20:32 +0000499 PyObject *m, *d, *v, *w;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000500 node *n;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000501 perrdetail err;
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000502 char *ps1 = "", *ps2 = "";
Guido van Rossum82598051997-03-05 00:20:32 +0000503 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000504 if (v != NULL) {
505 v = PyObject_Str(v);
506 if (v == NULL)
507 PyErr_Clear();
508 else if (PyString_Check(v))
509 ps1 = PyString_AsString(v);
510 }
Guido van Rossum82598051997-03-05 00:20:32 +0000511 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000512 if (w != NULL) {
513 w = PyObject_Str(w);
514 if (w == NULL)
515 PyErr_Clear();
516 else if (PyString_Check(w))
517 ps2 = PyString_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000518 }
Guido van Rossum82598051997-03-05 00:20:32 +0000519 n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar,
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000520 Py_single_input, ps1, ps2, &err);
Guido van Rossum82598051997-03-05 00:20:32 +0000521 Py_XDECREF(v);
522 Py_XDECREF(w);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000523 if (n == NULL) {
524 if (err.error == E_EOF) {
525 if (err.text)
Guido van Rossumb18618d2000-05-03 23:44:39 +0000526 PyMem_DEL(err.text);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000527 return E_EOF;
528 }
529 err_input(&err);
Guido van Rossum82598051997-03-05 00:20:32 +0000530 PyErr_Print();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000531 return err.error;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000532 }
Guido van Rossum82598051997-03-05 00:20:32 +0000533 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000534 if (m == NULL)
535 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000536 d = PyModule_GetDict(m);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000537 v = run_node(n, filename, d, d);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000538 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000539 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000540 return -1;
541 }
Guido van Rossum82598051997-03-05 00:20:32 +0000542 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000543 if (Py_FlushLine())
544 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000545 return 0;
546}
547
548int
Guido van Rossum82598051997-03-05 00:20:32 +0000549PyRun_SimpleFile(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000550 FILE *fp;
551 char *filename;
552{
Guido van Rossum82598051997-03-05 00:20:32 +0000553 PyObject *m, *d, *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000554 char *ext;
555
Guido van Rossum82598051997-03-05 00:20:32 +0000556 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000557 if (m == NULL)
558 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000559 d = PyModule_GetDict(m);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000560 ext = filename + strlen(filename) - 4;
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000561 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0
Jack Jansenbd06e961995-02-13 11:44:56 +0000562#ifdef macintosh
563 /* On a mac, we also assume a pyc file for types 'PYC ' and 'APPL' */
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000564 || getfiletype(filename) == 'PYC '
565 || getfiletype(filename) == 'APPL'
Jack Jansenbd06e961995-02-13 11:44:56 +0000566#endif /* macintosh */
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000567 ) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000568 /* Try to run a pyc file. First, re-open in binary */
Jack Jansene00637b1994-12-14 12:58:37 +0000569 /* Don't close, done in main: fclose(fp); */
Guido van Rossumfdef2711994-09-14 13:31:04 +0000570 if( (fp = fopen(filename, "rb")) == NULL ) {
571 fprintf(stderr, "python: Can't reopen .pyc file\n");
572 return -1;
573 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000574 /* Turn on optimization if a .pyo file is given */
575 if (strcmp(ext, ".pyo") == 0)
576 Py_OptimizeFlag = 1;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000577 v = run_pyc_file(fp, filename, d, d);
578 } else {
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000579 v = PyRun_File(fp, filename, Py_file_input, d, d);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000580 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000581 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000582 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000583 return -1;
584 }
Guido van Rossum82598051997-03-05 00:20:32 +0000585 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000586 if (Py_FlushLine())
587 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000588 return 0;
589}
590
591int
Guido van Rossum82598051997-03-05 00:20:32 +0000592PyRun_SimpleString(command)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000593 char *command;
594{
Guido van Rossum82598051997-03-05 00:20:32 +0000595 PyObject *m, *d, *v;
596 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000597 if (m == NULL)
598 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000599 d = PyModule_GetDict(m);
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000600 v = PyRun_String(command, Py_file_input, d, d);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000601 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000602 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000603 return -1;
604 }
Guido van Rossum82598051997-03-05 00:20:32 +0000605 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000606 if (Py_FlushLine())
607 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000608 return 0;
609}
610
Barry Warsaw035574d1997-08-29 22:07:17 +0000611static int
612parse_syntax_error(err, message, filename, lineno, offset, text)
613 PyObject* err;
614 PyObject** message;
615 char** filename;
616 int* lineno;
617 int* offset;
618 char** text;
619{
620 long hold;
621 PyObject *v;
622
623 /* old style errors */
624 if (PyTuple_Check(err))
625 return PyArg_Parse(err, "(O(ziiz))", message, filename,
626 lineno, offset, text);
627
628 /* new style errors. `err' is an instance */
629
630 if (! (v = PyObject_GetAttrString(err, "msg")))
631 goto finally;
632 *message = v;
633
634 if (!(v = PyObject_GetAttrString(err, "filename")))
635 goto finally;
636 if (v == Py_None)
637 *filename = NULL;
638 else if (! (*filename = PyString_AsString(v)))
639 goto finally;
640
641 Py_DECREF(v);
642 if (!(v = PyObject_GetAttrString(err, "lineno")))
643 goto finally;
644 hold = PyInt_AsLong(v);
645 Py_DECREF(v);
646 v = NULL;
647 if (hold < 0 && PyErr_Occurred())
648 goto finally;
649 *lineno = (int)hold;
650
651 if (!(v = PyObject_GetAttrString(err, "offset")))
652 goto finally;
653 hold = PyInt_AsLong(v);
654 Py_DECREF(v);
655 v = NULL;
656 if (hold < 0 && PyErr_Occurred())
657 goto finally;
658 *offset = (int)hold;
659
660 if (!(v = PyObject_GetAttrString(err, "text")))
661 goto finally;
662 if (v == Py_None)
663 *text = NULL;
664 else if (! (*text = PyString_AsString(v)))
665 goto finally;
666 Py_DECREF(v);
667 return 1;
668
669finally:
670 Py_XDECREF(v);
671 return 0;
672}
673
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000674void
Guido van Rossum82598051997-03-05 00:20:32 +0000675PyErr_Print()
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000676{
Guido van Rossuma61691e1998-02-06 22:27:24 +0000677 PyErr_PrintEx(1);
678}
679
680void
681PyErr_PrintEx(set_sys_last_vars)
682 int set_sys_last_vars;
683{
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000684 int err = 0;
Guido van Rossum82598051997-03-05 00:20:32 +0000685 PyObject *exception, *v, *tb, *f;
686 PyErr_Fetch(&exception, &v, &tb);
Barry Warsaw035574d1997-08-29 22:07:17 +0000687 PyErr_NormalizeException(&exception, &v, &tb);
688
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000689 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +0000690 return;
Barry Warsaw035574d1997-08-29 22:07:17 +0000691
Barry Warsaw36b8f941997-08-26 18:09:48 +0000692 if (PyErr_GivenExceptionMatches(exception, PyExc_SystemExit)) {
Guido van Rossum0829c751998-02-28 04:31:39 +0000693 if (Py_FlushLine())
694 PyErr_Clear();
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000695 fflush(stdout);
Guido van Rossum82598051997-03-05 00:20:32 +0000696 if (v == NULL || v == Py_None)
697 Py_Exit(0);
Barry Warsaw035574d1997-08-29 22:07:17 +0000698 if (PyInstance_Check(v)) {
699 /* we expect the error code to be store in the
700 `code' attribute
701 */
702 PyObject *code = PyObject_GetAttrString(v, "code");
703 if (code) {
704 Py_DECREF(v);
705 v = code;
Guido van Rossumaa9606f1997-10-03 13:53:28 +0000706 if (v == Py_None)
707 Py_Exit(0);
Barry Warsaw035574d1997-08-29 22:07:17 +0000708 }
709 /* if we failed to dig out the "code" attribute,
710 then just let the else clause below print the
711 error
712 */
713 }
Guido van Rossum82598051997-03-05 00:20:32 +0000714 if (PyInt_Check(v))
715 Py_Exit((int)PyInt_AsLong(v));
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000716 else {
Guido van Rossum3165fe61992-09-25 21:59:05 +0000717 /* OK to use real stderr here */
Guido van Rossum82598051997-03-05 00:20:32 +0000718 PyObject_Print(v, stderr, Py_PRINT_RAW);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000719 fprintf(stderr, "\n");
Guido van Rossum82598051997-03-05 00:20:32 +0000720 Py_Exit(1);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000721 }
722 }
Guido van Rossuma61691e1998-02-06 22:27:24 +0000723 if (set_sys_last_vars) {
724 PySys_SetObject("last_type", exception);
725 PySys_SetObject("last_value", v);
726 PySys_SetObject("last_traceback", tb);
727 }
Guido van Rossum82598051997-03-05 00:20:32 +0000728 f = PySys_GetObject("stderr");
Guido van Rossum3165fe61992-09-25 21:59:05 +0000729 if (f == NULL)
730 fprintf(stderr, "lost sys.stderr\n");
731 else {
Guido van Rossum0829c751998-02-28 04:31:39 +0000732 if (Py_FlushLine())
733 PyErr_Clear();
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000734 fflush(stdout);
Guido van Rossum0829c751998-02-28 04:31:39 +0000735 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +0000736 if (err == 0 &&
737 PyErr_GivenExceptionMatches(exception, PyExc_SyntaxError))
738 {
Guido van Rossum82598051997-03-05 00:20:32 +0000739 PyObject *message;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000740 char *filename, *text;
741 int lineno, offset;
Barry Warsaw035574d1997-08-29 22:07:17 +0000742 if (!parse_syntax_error(v, &message, &filename,
743 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +0000744 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000745 else {
746 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +0000747 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000748 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000749 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000750 else
Guido van Rossum82598051997-03-05 00:20:32 +0000751 PyFile_WriteString(filename, f);
752 PyFile_WriteString("\", line ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000753 sprintf(buf, "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +0000754 PyFile_WriteString(buf, f);
755 PyFile_WriteString("\n", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000756 if (text != NULL) {
Guido van Rossum798199d1994-09-19 08:08:50 +0000757 char *nl;
758 if (offset > 0 &&
Guido van Rossum478e7181997-05-06 15:24:59 +0000759 offset == (int)strlen(text))
Guido van Rossum798199d1994-09-19 08:08:50 +0000760 offset--;
761 for (;;) {
762 nl = strchr(text, '\n');
763 if (nl == NULL ||
764 nl-text >= offset)
765 break;
766 offset -= (nl+1-text);
767 text = nl+1;
768 }
Guido van Rossuma110aa61994-08-29 12:50:44 +0000769 while (*text == ' ' || *text == '\t') {
770 text++;
771 offset--;
772 }
Guido van Rossum82598051997-03-05 00:20:32 +0000773 PyFile_WriteString(" ", f);
774 PyFile_WriteString(text, f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000775 if (*text == '\0' ||
776 text[strlen(text)-1] != '\n')
Guido van Rossum82598051997-03-05 00:20:32 +0000777 PyFile_WriteString("\n", f);
778 PyFile_WriteString(" ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000779 offset--;
780 while (offset > 0) {
Guido van Rossum82598051997-03-05 00:20:32 +0000781 PyFile_WriteString(" ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000782 offset--;
783 }
Guido van Rossum82598051997-03-05 00:20:32 +0000784 PyFile_WriteString("^\n", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000785 }
Guido van Rossum82598051997-03-05 00:20:32 +0000786 Py_INCREF(message);
787 Py_DECREF(v);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000788 v = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000789 /* Can't be bothered to check all those
790 PyFile_WriteString() calls */
791 if (PyErr_Occurred())
792 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000793 }
794 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000795 if (err) {
796 /* Don't do anything else */
797 }
798 else if (PyClass_Check(exception)) {
Barry Warsaw2f5f6a21997-09-16 21:42:03 +0000799 PyClassObject* exc = (PyClassObject*)exception;
800 PyObject* className = exc->cl_name;
801 PyObject* moduleName =
802 PyDict_GetItemString(exc->cl_dict, "__module__");
803
804 if (moduleName == NULL)
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000805 err = PyFile_WriteString("<unknown>", f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +0000806 else {
807 char* modstr = PyString_AsString(moduleName);
808 if (modstr && strcmp(modstr, "exceptions"))
809 {
810 err = PyFile_WriteString(modstr, f);
811 err += PyFile_WriteString(".", f);
812 }
813 }
814 if (err == 0) {
815 if (className == NULL)
816 err = PyFile_WriteString("<unknown>", f);
817 else
818 err = PyFile_WriteObject(className, f,
819 Py_PRINT_RAW);
820 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000821 }
822 else
823 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
824 if (err == 0) {
825 if (v != NULL && v != Py_None) {
Barry Warsaw035574d1997-08-29 22:07:17 +0000826 PyObject *s = PyObject_Str(v);
827 /* only print colon if the str() of the
828 object is not the empty string
829 */
Guido van Rossumd6bf45b1997-09-05 19:11:53 +0000830 if (s == NULL)
831 err = -1;
832 else if (!PyString_Check(s) ||
833 PyString_GET_SIZE(s) != 0)
Barry Warsaw035574d1997-08-29 22:07:17 +0000834 err = PyFile_WriteString(": ", f);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000835 if (err == 0)
Guido van Rossumd6bf45b1997-09-05 19:11:53 +0000836 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
837 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +0000838 }
Guido van Rossum262e1241995-02-07 15:30:45 +0000839 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000840 if (err == 0)
841 err = PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000842 }
Guido van Rossum82598051997-03-05 00:20:32 +0000843 Py_XDECREF(exception);
844 Py_XDECREF(v);
845 Py_XDECREF(tb);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000846 /* If an error happened here, don't show it.
847 XXX This is wrong, but too many callers rely on this behavior. */
848 if (err != 0)
849 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000850}
851
Guido van Rossum82598051997-03-05 00:20:32 +0000852PyObject *
853PyRun_String(str, start, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000854 char *str;
855 int start;
Guido van Rossum82598051997-03-05 00:20:32 +0000856 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000857{
Guido van Rossum82598051997-03-05 00:20:32 +0000858 return run_err_node(PyParser_SimpleParseString(str, start),
Guido van Rossuma110aa61994-08-29 12:50:44 +0000859 "<string>", globals, locals);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000860}
861
Guido van Rossum82598051997-03-05 00:20:32 +0000862PyObject *
863PyRun_File(fp, filename, start, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000864 FILE *fp;
865 char *filename;
866 int start;
Guido van Rossum82598051997-03-05 00:20:32 +0000867 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000868{
Guido van Rossum82598051997-03-05 00:20:32 +0000869 return run_err_node(PyParser_SimpleParseFile(fp, filename, start),
Guido van Rossuma110aa61994-08-29 12:50:44 +0000870 filename, globals, locals);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000871}
872
Guido van Rossum82598051997-03-05 00:20:32 +0000873static PyObject *
Guido van Rossuma110aa61994-08-29 12:50:44 +0000874run_err_node(n, filename, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000875 node *n;
876 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000877 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000878{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000879 if (n == NULL)
880 return NULL;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000881 return run_node(n, filename, globals, locals);
882}
883
Guido van Rossum82598051997-03-05 00:20:32 +0000884static PyObject *
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000885run_node(n, filename, globals, locals)
886 node *n;
887 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000888 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000889{
Guido van Rossum82598051997-03-05 00:20:32 +0000890 PyCodeObject *co;
891 PyObject *v;
892 co = PyNode_Compile(n, filename);
893 PyNode_Free(n);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000894 if (co == NULL)
895 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000896 v = PyEval_EvalCode(co, globals, locals);
897 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000898 return v;
899}
900
Guido van Rossum82598051997-03-05 00:20:32 +0000901static PyObject *
Guido van Rossumfdef2711994-09-14 13:31:04 +0000902run_pyc_file(fp, filename, globals, locals)
903 FILE *fp;
904 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000905 PyObject *globals, *locals;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000906{
Guido van Rossum82598051997-03-05 00:20:32 +0000907 PyCodeObject *co;
908 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000909 long magic;
Guido van Rossum82598051997-03-05 00:20:32 +0000910 long PyImport_GetMagicNumber();
Guido van Rossumfdef2711994-09-14 13:31:04 +0000911
Guido van Rossum82598051997-03-05 00:20:32 +0000912 magic = PyMarshal_ReadLongFromFile(fp);
913 if (magic != PyImport_GetMagicNumber()) {
914 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +0000915 "Bad magic number in .pyc file");
916 return NULL;
917 }
Guido van Rossum82598051997-03-05 00:20:32 +0000918 (void) PyMarshal_ReadLongFromFile(fp);
919 v = PyMarshal_ReadObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000920 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +0000921 if (v == NULL || !PyCode_Check(v)) {
922 Py_XDECREF(v);
923 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +0000924 "Bad code object in .pyc file");
925 return NULL;
926 }
Guido van Rossum82598051997-03-05 00:20:32 +0000927 co = (PyCodeObject *)v;
928 v = PyEval_EvalCode(co, globals, locals);
929 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000930 return v;
931}
932
Guido van Rossum82598051997-03-05 00:20:32 +0000933PyObject *
934Py_CompileString(str, filename, start)
Guido van Rossum5b722181993-03-30 17:46:03 +0000935 char *str;
936 char *filename;
937 int start;
938{
939 node *n;
Guido van Rossum82598051997-03-05 00:20:32 +0000940 PyCodeObject *co;
941 n = PyParser_SimpleParseString(str, start);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000942 if (n == NULL)
Guido van Rossum5b722181993-03-30 17:46:03 +0000943 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000944 co = PyNode_Compile(n, filename);
945 PyNode_Free(n);
946 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +0000947}
948
Guido van Rossuma110aa61994-08-29 12:50:44 +0000949/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000950
Guido van Rossuma110aa61994-08-29 12:50:44 +0000951node *
Guido van Rossum82598051997-03-05 00:20:32 +0000952PyParser_SimpleParseFile(fp, filename, start)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000953 FILE *fp;
954 char *filename;
955 int start;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000956{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000957 node *n;
958 perrdetail err;
Guido van Rossum82598051997-03-05 00:20:32 +0000959 n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar, start,
Guido van Rossuma110aa61994-08-29 12:50:44 +0000960 (char *)0, (char *)0, &err);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000961 if (n == NULL)
962 err_input(&err);
963 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000964}
965
Guido van Rossuma110aa61994-08-29 12:50:44 +0000966/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000967
Guido van Rossuma110aa61994-08-29 12:50:44 +0000968node *
Guido van Rossum82598051997-03-05 00:20:32 +0000969PyParser_SimpleParseString(str, start)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000970 char *str;
971 int start;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000972{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000973 node *n;
974 perrdetail err;
Guido van Rossum82598051997-03-05 00:20:32 +0000975 n = PyParser_ParseString(str, &_PyParser_Grammar, start, &err);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000976 if (n == NULL)
977 err_input(&err);
978 return n;
979}
980
981/* Set the error appropriate to the given input error code (see errcode.h) */
982
983static void
984err_input(err)
985 perrdetail *err;
986{
Fred Drake85f36392000-07-11 17:53:00 +0000987 PyObject *v, *w, *errtype;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000988 char *msg = NULL;
Fred Drake85f36392000-07-11 17:53:00 +0000989 errtype = PyExc_SyntaxError;
Guido van Rossum82598051997-03-05 00:20:32 +0000990 v = Py_BuildValue("(ziiz)", err->filename,
Guido van Rossuma110aa61994-08-29 12:50:44 +0000991 err->lineno, err->offset, err->text);
992 if (err->text != NULL) {
Guido van Rossumb18618d2000-05-03 23:44:39 +0000993 PyMem_DEL(err->text);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000994 err->text = NULL;
995 }
996 switch (err->error) {
997 case E_SYNTAX:
Fred Drake85f36392000-07-11 17:53:00 +0000998 errtype = PyExc_IndentationError;
999 if (err->expected == INDENT)
1000 msg = "expected an indented block";
1001 else if (err->token == INDENT)
1002 msg = "unexpected indent";
1003 else if (err->token == DEDENT)
1004 msg = "unexpected unindent";
1005 else {
1006 errtype = PyExc_SyntaxError;
1007 msg = "invalid syntax";
1008 }
Guido van Rossuma110aa61994-08-29 12:50:44 +00001009 break;
1010 case E_TOKEN:
1011 msg = "invalid token";
Guido van Rossuma110aa61994-08-29 12:50:44 +00001012 break;
1013 case E_INTR:
Guido van Rossum82598051997-03-05 00:20:32 +00001014 PyErr_SetNone(PyExc_KeyboardInterrupt);
Barry Warsawc80baa31999-01-27 16:39:40 +00001015 Py_XDECREF(v);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001016 return;
1017 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +00001018 PyErr_NoMemory();
Barry Warsawc80baa31999-01-27 16:39:40 +00001019 Py_XDECREF(v);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001020 return;
1021 case E_EOF:
1022 msg = "unexpected EOF while parsing";
1023 break;
Fred Drake85f36392000-07-11 17:53:00 +00001024 case E_TABSPACE:
1025 errtype = PyExc_TabError;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001026 msg = "inconsistent use of tabs and spaces in indentation";
1027 break;
Jeremy Hylton94988062000-06-20 19:10:44 +00001028 case E_OVERFLOW:
1029 msg = "expression too long";
1030 break;
Fred Drake85f36392000-07-11 17:53:00 +00001031 case E_DEDENT:
1032 errtype = PyExc_IndentationError;
1033 msg = "unindent does not match any outer indentation level";
1034 break;
1035 case E_TOODEEP:
1036 errtype = PyExc_IndentationError;
1037 msg = "too many levels of indentation";
1038 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001039 default:
1040 fprintf(stderr, "error=%d\n", err->error);
1041 msg = "unknown parsing error";
1042 break;
1043 }
Guido van Rossum82598051997-03-05 00:20:32 +00001044 w = Py_BuildValue("(sO)", msg, v);
1045 Py_XDECREF(v);
Fred Drake85f36392000-07-11 17:53:00 +00001046 PyErr_SetObject(errtype, w);
Guido van Rossum82598051997-03-05 00:20:32 +00001047 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001048}
1049
1050/* Print fatal error message and abort */
1051
1052void
Guido van Rossum82598051997-03-05 00:20:32 +00001053Py_FatalError(msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001054 char *msg;
1055{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00001056 fprintf(stderr, "Fatal Python error: %s\n", msg);
Guido van Rossum8ae87c01995-01-26 00:40:38 +00001057#ifdef macintosh
1058 for (;;);
1059#endif
Guido van Rossum9b38a141996-09-11 23:12:24 +00001060#ifdef MS_WIN32
Guido van Rossum23c94461997-05-22 20:21:30 +00001061 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +00001062 OutputDebugString(msg);
1063 OutputDebugString("\n");
Guido van Rossum0ba35361998-08-13 13:33:16 +00001064#ifdef _DEBUG
1065 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00001066#endif
Guido van Rossum0ba35361998-08-13 13:33:16 +00001067#endif /* MS_WIN32 */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001068 abort();
1069}
1070
1071/* Clean up and exit */
1072
Guido van Rossuma110aa61994-08-29 12:50:44 +00001073#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00001074#include "pythread.h"
Guido van Rossum82598051997-03-05 00:20:32 +00001075int _PyThread_Started = 0; /* Set by threadmodule.c and maybe others */
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001076#endif
1077
Guido van Rossum2dcfc961998-10-01 16:01:57 +00001078#define NEXITFUNCS 32
Guido van Rossum1662dd51994-09-07 14:38:28 +00001079static void (*exitfuncs[NEXITFUNCS])();
1080static int nexitfuncs = 0;
1081
1082int Py_AtExit(func)
Tim Petersdbd9ba62000-07-09 03:09:57 +00001083 void (*func)(void);
Guido van Rossum1662dd51994-09-07 14:38:28 +00001084{
1085 if (nexitfuncs >= NEXITFUNCS)
1086 return -1;
1087 exitfuncs[nexitfuncs++] = func;
1088 return 0;
1089}
1090
Guido van Rossumcc283f51997-08-05 02:22:03 +00001091static void
1092call_sys_exitfunc()
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001093{
Guido van Rossum82598051997-03-05 00:20:32 +00001094 PyObject *exitfunc = PySys_GetObject("exitfunc");
Guido van Rossum59bff391992-09-03 20:28:00 +00001095
1096 if (exitfunc) {
Guido van Rossumbf02fb21998-04-03 21:12:12 +00001097 PyObject *res, *f;
Guido van Rossum82598051997-03-05 00:20:32 +00001098 Py_INCREF(exitfunc);
1099 PySys_SetObject("exitfunc", (PyObject *)NULL);
Guido van Rossumbf02fb21998-04-03 21:12:12 +00001100 f = PySys_GetObject("stderr");
Guido van Rossum82598051997-03-05 00:20:32 +00001101 res = PyEval_CallObject(exitfunc, (PyObject *)NULL);
Guido van Rossum59bff391992-09-03 20:28:00 +00001102 if (res == NULL) {
Guido van Rossumbf02fb21998-04-03 21:12:12 +00001103 if (f)
1104 PyFile_WriteString("Error in sys.exitfunc:\n", f);
Guido van Rossum82598051997-03-05 00:20:32 +00001105 PyErr_Print();
Guido van Rossum59bff391992-09-03 20:28:00 +00001106 }
Guido van Rossum82598051997-03-05 00:20:32 +00001107 Py_DECREF(exitfunc);
Guido van Rossum59bff391992-09-03 20:28:00 +00001108 }
1109
Guido van Rossum0829c751998-02-28 04:31:39 +00001110 if (Py_FlushLine())
1111 PyErr_Clear();
Guido van Rossumcc283f51997-08-05 02:22:03 +00001112}
Guido van Rossum1662dd51994-09-07 14:38:28 +00001113
Guido van Rossumcc283f51997-08-05 02:22:03 +00001114static void
1115call_ll_exitfuncs()
1116{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001117 while (nexitfuncs > 0)
1118 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001119
1120 fflush(stdout);
1121 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001122}
1123
1124void
Guido van Rossum82598051997-03-05 00:20:32 +00001125Py_Exit(sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001126 int sts;
1127{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001128 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001129
Jack Jansen66a89771995-10-27 13:22:14 +00001130#ifdef macintosh
1131 PyMac_Exit(sts);
1132#else
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001133 exit(sts);
Jack Jansen66a89771995-10-27 13:22:14 +00001134#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001135}
1136
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001137static void
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001138initsigs()
1139{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001140#ifdef HAVE_SIGNAL_H
1141#ifdef SIGPIPE
1142 signal(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001143#endif
Guido van Rossuma110aa61994-08-29 12:50:44 +00001144#endif /* HAVE_SIGNAL_H */
Guido van Rossum82598051997-03-05 00:20:32 +00001145 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001146}
1147
Guido van Rossumaae0d321996-05-22 16:35:33 +00001148#ifdef Py_TRACE_REFS
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001149/* Ask a yes/no question */
1150
Guido van Rossum59bff391992-09-03 20:28:00 +00001151int
Guido van Rossum82598051997-03-05 00:20:32 +00001152_Py_AskYesNo(prompt)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001153 char *prompt;
1154{
1155 char buf[256];
1156
1157 printf("%s [ny] ", prompt);
1158 if (fgets(buf, sizeof buf, stdin) == NULL)
1159 return 0;
1160 return buf[0] == 'y' || buf[0] == 'Y';
1161}
1162#endif
1163
Guido van Rossuma110aa61994-08-29 12:50:44 +00001164#ifdef MPW
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001165
1166/* Check for file descriptor connected to interactive device.
1167 Pretend that stdin is always interactive, other files never. */
1168
1169int
1170isatty(fd)
1171 int fd;
1172{
1173 return fd == fileno(stdin);
1174}
1175
1176#endif
Guido van Rossum7433b121997-02-14 19:45:36 +00001177
1178/*
1179 * The file descriptor fd is considered ``interactive'' if either
1180 * a) isatty(fd) is TRUE, or
1181 * b) the -i flag was given, and the filename associated with
1182 * the descriptor is NULL or "<stdin>" or "???".
1183 */
1184int
1185Py_FdIsInteractive(fp, filename)
1186 FILE *fp;
1187 char *filename;
1188{
1189 if (isatty((int)fileno(fp)))
1190 return 1;
1191 if (!Py_InteractiveFlag)
1192 return 0;
1193 return (filename == NULL) ||
1194 (strcmp(filename, "<stdin>") == 0) ||
1195 (strcmp(filename, "???") == 0);
1196}