blob: cb6230a94eb1cab281cd5e6146c9a245da5b5cbc [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 Rossum82598051997-03-05 00:20:32 +000075int Py_DebugFlag; /* Needed by parser.c */
76int Py_VerboseFlag; /* Needed by import.c */
Guido van Rossum7433b121997-02-14 19:45:36 +000077int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Guido van Rossumdcc0c131997-08-29 22:32:42 +000078int Py_NoSiteFlag; /* Suppress 'import site' */
Guido van Rossum999e5e91997-10-03 19:46:02 +000079int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c */
Guido van Rossuma61691e1998-02-06 22:27:24 +000080int Py_FrozenFlag; /* Needed by getpath.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000081
Guido van Rossum25ce5661997-08-02 03:10:38 +000082static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +000083
Guido van Rossume3c0d5e1997-08-22 04:20:13 +000084/* API to access the initialized flag -- useful for eroteric use */
85
86int
87Py_IsInitialized()
88{
89 return initialized;
90}
91
Guido van Rossum25ce5661997-08-02 03:10:38 +000092/* Global initializations. Can be undone by Py_Finalize(). Don't
93 call this twice without an intervening Py_Finalize() call. When
94 initializations fail, a fatal error is issued and the function does
95 not return. On return, the first thread and interpreter state have
96 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +000097
Guido van Rossum25ce5661997-08-02 03:10:38 +000098 Locking: you must hold the interpreter lock while calling this.
99 (If the lock has not yet been initialized, that's equivalent to
100 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000101
Guido van Rossum25ce5661997-08-02 03:10:38 +0000102*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000103
104void
105Py_Initialize()
106{
Guido van Rossuma027efa1997-05-05 20:56:21 +0000107 PyInterpreterState *interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000108 PyThreadState *tstate;
109 PyObject *bimod, *sysmod;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000110 char *p;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000111
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000112 if (initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000113 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000114 initialized = 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000115
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000116 if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
117 Py_DebugFlag = 1;
118 if ((p = getenv("PYTHONVERBOSE")) && *p != '\0')
119 Py_VerboseFlag = 1;
Guido van Rossum562f5b11998-10-07 14:50:42 +0000120 if ((p = getenv("PYTHONOPTIMIZE")) && *p != '\0')
121 Py_OptimizeFlag = 1;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000122
Guido van Rossuma027efa1997-05-05 20:56:21 +0000123 interp = PyInterpreterState_New();
124 if (interp == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000125 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000126
Guido van Rossuma027efa1997-05-05 20:56:21 +0000127 tstate = PyThreadState_New(interp);
128 if (tstate == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000129 Py_FatalError("Py_Initialize: can't make first thread");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000130 (void) PyThreadState_Swap(tstate);
131
Guido van Rossum25ce5661997-08-02 03:10:38 +0000132 interp->modules = PyDict_New();
133 if (interp->modules == NULL)
134 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000135
Barry Warsaw035574d1997-08-29 22:07:17 +0000136 bimod = _PyBuiltin_Init_1();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000137 if (bimod == NULL)
138 Py_FatalError("Py_Initialize: can't initialize __builtin__");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000139 interp->builtins = PyModule_GetDict(bimod);
140 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000141
142 sysmod = _PySys_Init();
143 if (sysmod == NULL)
144 Py_FatalError("Py_Initialize: can't initialize sys");
145 interp->sysdict = PyModule_GetDict(sysmod);
146 Py_INCREF(interp->sysdict);
147 _PyImport_FixupExtension("sys", "sys");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000148 PySys_SetPath(Py_GetPath());
Guido van Rossum25ce5661997-08-02 03:10:38 +0000149 PyDict_SetItemString(interp->sysdict, "modules",
150 interp->modules);
151
Barry Warsaw035574d1997-08-29 22:07:17 +0000152 /* phase 2 of builtins */
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000153 _PyBuiltin_Init_2(interp->builtins);
Barry Warsaw963b8711997-09-18 16:42:02 +0000154 _PyImport_FixupExtension("__builtin__", "__builtin__");
Barry Warsaw035574d1997-08-29 22:07:17 +0000155
Guido van Rossum25ce5661997-08-02 03:10:38 +0000156 _PyImport_Init();
157
158 initsigs(); /* Signal handling stuff, including initintr() */
159
160 initmain(); /* Module __main__ */
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000161 if (!Py_NoSiteFlag)
162 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000163}
164
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000165#ifdef COUNT_ALLOCS
166extern void dump_counts Py_PROTO((void));
167#endif
168
Guido van Rossum25ce5661997-08-02 03:10:38 +0000169/* Undo the effect of Py_Initialize().
170
171 Beware: if multiple interpreter and/or thread states exist, these
172 are not wiped out; only the current thread and interpreter state
173 are deleted. But since everything else is deleted, those other
174 interpreter and thread states should no longer be used.
175
176 (XXX We should do better, e.g. wipe out all interpreters and
177 threads.)
178
179 Locking: as above.
180
181*/
182
183void
184Py_Finalize()
185{
186 PyInterpreterState *interp;
187 PyThreadState *tstate;
188
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000189 if (!initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000190 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000191 initialized = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000192
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000193 call_sys_exitfunc();
194
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000195 /* Get current thread state and interpreter pointer */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000196 tstate = PyThreadState_Get();
197 interp = tstate->interp;
198
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000199 /* Disable signal handling */
200 PyOS_FiniInterrupts();
201
202 /* Destroy PyExc_MemoryErrorInst */
203 _PyBuiltin_Fini_1();
204
205 /* Destroy all modules */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000206 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000207
Guido van Rossum1707aad1997-12-08 23:43:45 +0000208 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
209 _PyImport_Fini();
210
211 /* Debugging stuff */
212#ifdef COUNT_ALLOCS
213 dump_counts();
214#endif
215
216#ifdef Py_REF_DEBUG
217 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
218#endif
219
220#ifdef Py_TRACE_REFS
221 if (_Py_AskYesNo("Print left references?")) {
222 _Py_PrintReferences(stderr);
223 }
224#endif /* Py_TRACE_REFS */
225
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000226 /* Delete current thread */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000227 PyInterpreterState_Clear(interp);
228 PyThreadState_Swap(NULL);
229 PyInterpreterState_Delete(interp);
230
Barry Warsaw035574d1997-08-29 22:07:17 +0000231 /* Now we decref the exception classes. After this point nothing
232 can raise an exception. That's okay, because each Fini() method
233 below has been checked to make sure no exceptions are ever
234 raised.
235 */
236 _PyBuiltin_Fini_2();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000237 PyMethod_Fini();
238 PyFrame_Fini();
239 PyCFunction_Fini();
240 PyTuple_Fini();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000241 PyString_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000242 PyInt_Fini();
243 PyFloat_Fini();
244
245 /* XXX Still allocated:
246 - various static ad-hoc pointers to interned strings
247 - int and float free list blocks
248 - whatever various modules and libraries allocate
249 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000250
251 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000252
253 call_ll_exitfuncs();
254
Guido van Rossumcc283f51997-08-05 02:22:03 +0000255#ifdef Py_TRACE_REFS
Guido van Rossumcc283f51997-08-05 02:22:03 +0000256 _Py_ResetReferences();
257#endif /* Py_TRACE_REFS */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000258}
259
260/* Create and initialize a new interpreter and thread, and return the
261 new thread. This requires that Py_Initialize() has been called
262 first.
263
264 Unsuccessful initialization yields a NULL pointer. Note that *no*
265 exception information is available even in this case -- the
266 exception information is held in the thread, and there is no
267 thread.
268
269 Locking: as above.
270
271*/
272
273PyThreadState *
274Py_NewInterpreter()
275{
276 PyInterpreterState *interp;
277 PyThreadState *tstate, *save_tstate;
278 PyObject *bimod, *sysmod;
279
280 if (!initialized)
281 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
282
283 interp = PyInterpreterState_New();
284 if (interp == NULL)
285 return NULL;
286
287 tstate = PyThreadState_New(interp);
288 if (tstate == NULL) {
289 PyInterpreterState_Delete(interp);
290 return NULL;
291 }
292
293 save_tstate = PyThreadState_Swap(tstate);
294
295 /* XXX The following is lax in error checking */
296
297 interp->modules = PyDict_New();
298
299 bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
300 if (bimod != NULL) {
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000301 interp->builtins = PyModule_GetDict(bimod);
302 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000303 }
304 sysmod = _PyImport_FindExtension("sys", "sys");
305 if (bimod != NULL && sysmod != NULL) {
306 interp->sysdict = PyModule_GetDict(sysmod);
307 Py_INCREF(interp->sysdict);
308 PySys_SetPath(Py_GetPath());
309 PyDict_SetItemString(interp->sysdict, "modules",
310 interp->modules);
311 initmain();
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000312 if (!Py_NoSiteFlag)
313 initsite();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000314 }
315
316 if (!PyErr_Occurred())
317 return tstate;
318
319 /* Oops, it didn't work. Undo it all. */
320
321 PyErr_Print();
322 PyThreadState_Clear(tstate);
323 PyThreadState_Swap(save_tstate);
324 PyThreadState_Delete(tstate);
325 PyInterpreterState_Delete(interp);
326
327 return NULL;
328}
329
330/* Delete an interpreter and its last thread. This requires that the
331 given thread state is current, that the thread has no remaining
332 frames, and that it is its interpreter's only remaining thread.
333 It is a fatal error to violate these constraints.
334
335 (Py_Finalize() doesn't have these constraints -- it zaps
336 everything, regardless.)
337
338 Locking: as above.
339
340*/
341
342void
343Py_EndInterpreter(tstate)
344 PyThreadState *tstate;
345{
346 PyInterpreterState *interp = tstate->interp;
347
348 if (tstate != PyThreadState_Get())
349 Py_FatalError("Py_EndInterpreter: thread is not current");
350 if (tstate->frame != NULL)
351 Py_FatalError("Py_EndInterpreter: thread still has a frame");
352 if (tstate != interp->tstate_head || tstate->next != NULL)
353 Py_FatalError("Py_EndInterpreter: not the last thread");
354
355 PyImport_Cleanup();
356 PyInterpreterState_Clear(interp);
357 PyThreadState_Swap(NULL);
358 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000359}
360
361static char *progname = "python";
362
363void
364Py_SetProgramName(pn)
365 char *pn;
366{
367 if (pn && *pn)
368 progname = pn;
369}
370
371char *
372Py_GetProgramName()
373{
374 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000375}
376
Guido van Rossuma61691e1998-02-06 22:27:24 +0000377static char *default_home = NULL;
378
379void
380Py_SetPythonHome(home)
381 char *home;
382{
383 default_home = home;
384}
385
386char *
387Py_GetPythonHome()
388{
389 char *home = default_home;
390 if (home == NULL)
391 home = getenv("PYTHONHOME");
392 return home;
393}
394
Guido van Rossum6135a871995-01-09 17:53:26 +0000395/* Create __main__ module */
396
397static void
398initmain()
399{
Guido van Rossum82598051997-03-05 00:20:32 +0000400 PyObject *m, *d;
401 m = PyImport_AddModule("__main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000402 if (m == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000403 Py_FatalError("can't create __main__ module");
404 d = PyModule_GetDict(m);
405 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
Guido van Rossum858cb731997-11-19 16:15:37 +0000406 PyObject *bimod = PyImport_ImportModule("__builtin__");
407 if (bimod == NULL ||
408 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
Guido van Rossum82598051997-03-05 00:20:32 +0000409 Py_FatalError("can't add __builtins__ to __main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000410 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000411}
412
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000413/* Import the site module (not into __main__ though) */
414
415static void
416initsite()
417{
418 PyObject *m, *f;
419 m = PyImport_ImportModule("site");
420 if (m == NULL) {
421 f = PySys_GetObject("stderr");
422 if (Py_VerboseFlag) {
423 PyFile_WriteString(
424 "'import site' failed; traceback:\n", f);
425 PyErr_Print();
426 }
427 else {
428 PyFile_WriteString(
429 "'import site' failed; use -v for traceback\n", f);
430 PyErr_Clear();
431 }
432 }
433 else {
434 Py_DECREF(m);
435 }
436}
437
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000438/* Parse input from a file and execute it */
439
440int
Guido van Rossum82598051997-03-05 00:20:32 +0000441PyRun_AnyFile(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000442 FILE *fp;
443 char *filename;
444{
445 if (filename == NULL)
446 filename = "???";
Guido van Rossum7433b121997-02-14 19:45:36 +0000447 if (Py_FdIsInteractive(fp, filename))
Guido van Rossum82598051997-03-05 00:20:32 +0000448 return PyRun_InteractiveLoop(fp, filename);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000449 else
Guido van Rossum82598051997-03-05 00:20:32 +0000450 return PyRun_SimpleFile(fp, filename);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000451}
452
453int
Guido van Rossum82598051997-03-05 00:20:32 +0000454PyRun_InteractiveLoop(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000455 FILE *fp;
456 char *filename;
457{
Guido van Rossum82598051997-03-05 00:20:32 +0000458 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000459 int ret;
Guido van Rossum82598051997-03-05 00:20:32 +0000460 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000461 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000462 PySys_SetObject("ps1", v = PyString_FromString(">>> "));
463 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000464 }
Guido van Rossum82598051997-03-05 00:20:32 +0000465 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000466 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000467 PySys_SetObject("ps2", v = PyString_FromString("... "));
468 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000469 }
470 for (;;) {
Guido van Rossum82598051997-03-05 00:20:32 +0000471 ret = PyRun_InteractiveOne(fp, filename);
Guido van Rossumaae0d321996-05-22 16:35:33 +0000472#ifdef Py_REF_DEBUG
Guido van Rossum6f9e4331995-03-29 16:57:48 +0000473 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000474#endif
475 if (ret == E_EOF)
476 return 0;
477 /*
478 if (ret == E_NOMEM)
479 return -1;
480 */
481 }
482}
483
484int
Guido van Rossum82598051997-03-05 00:20:32 +0000485PyRun_InteractiveOne(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000486 FILE *fp;
487 char *filename;
488{
Guido van Rossum82598051997-03-05 00:20:32 +0000489 PyObject *m, *d, *v, *w;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000490 node *n;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000491 perrdetail err;
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000492 char *ps1 = "", *ps2 = "";
Guido van Rossum82598051997-03-05 00:20:32 +0000493 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000494 if (v != NULL) {
495 v = PyObject_Str(v);
496 if (v == NULL)
497 PyErr_Clear();
498 else if (PyString_Check(v))
499 ps1 = PyString_AsString(v);
500 }
Guido van Rossum82598051997-03-05 00:20:32 +0000501 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000502 if (w != NULL) {
503 w = PyObject_Str(w);
504 if (w == NULL)
505 PyErr_Clear();
506 else if (PyString_Check(w))
507 ps2 = PyString_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000508 }
Guido van Rossum82598051997-03-05 00:20:32 +0000509 n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar,
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000510 Py_single_input, ps1, ps2, &err);
Guido van Rossum82598051997-03-05 00:20:32 +0000511 Py_XDECREF(v);
512 Py_XDECREF(w);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000513 if (n == NULL) {
514 if (err.error == E_EOF) {
515 if (err.text)
516 free(err.text);
517 return E_EOF;
518 }
519 err_input(&err);
Guido van Rossum82598051997-03-05 00:20:32 +0000520 PyErr_Print();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000521 return err.error;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000522 }
Guido van Rossum82598051997-03-05 00:20:32 +0000523 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000524 if (m == NULL)
525 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000526 d = PyModule_GetDict(m);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000527 v = run_node(n, filename, d, d);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000528 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000529 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000530 return -1;
531 }
Guido van Rossum82598051997-03-05 00:20:32 +0000532 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000533 if (Py_FlushLine())
534 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000535 return 0;
536}
537
538int
Guido van Rossum82598051997-03-05 00:20:32 +0000539PyRun_SimpleFile(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000540 FILE *fp;
541 char *filename;
542{
Guido van Rossum82598051997-03-05 00:20:32 +0000543 PyObject *m, *d, *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000544 char *ext;
545
Guido van Rossum82598051997-03-05 00:20:32 +0000546 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000547 if (m == NULL)
548 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000549 d = PyModule_GetDict(m);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000550 ext = filename + strlen(filename) - 4;
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000551 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0
Jack Jansenbd06e961995-02-13 11:44:56 +0000552#ifdef macintosh
553 /* On a mac, we also assume a pyc file for types 'PYC ' and 'APPL' */
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000554 || getfiletype(filename) == 'PYC '
555 || getfiletype(filename) == 'APPL'
Jack Jansenbd06e961995-02-13 11:44:56 +0000556#endif /* macintosh */
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000557 ) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000558 /* Try to run a pyc file. First, re-open in binary */
Jack Jansene00637b1994-12-14 12:58:37 +0000559 /* Don't close, done in main: fclose(fp); */
Guido van Rossumfdef2711994-09-14 13:31:04 +0000560 if( (fp = fopen(filename, "rb")) == NULL ) {
561 fprintf(stderr, "python: Can't reopen .pyc file\n");
562 return -1;
563 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000564 /* Turn on optimization if a .pyo file is given */
565 if (strcmp(ext, ".pyo") == 0)
566 Py_OptimizeFlag = 1;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000567 v = run_pyc_file(fp, filename, d, d);
568 } else {
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000569 v = PyRun_File(fp, filename, Py_file_input, d, d);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000570 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000571 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000572 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000573 return -1;
574 }
Guido van Rossum82598051997-03-05 00:20:32 +0000575 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000576 if (Py_FlushLine())
577 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000578 return 0;
579}
580
581int
Guido van Rossum82598051997-03-05 00:20:32 +0000582PyRun_SimpleString(command)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000583 char *command;
584{
Guido van Rossum82598051997-03-05 00:20:32 +0000585 PyObject *m, *d, *v;
586 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000587 if (m == NULL)
588 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000589 d = PyModule_GetDict(m);
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000590 v = PyRun_String(command, Py_file_input, d, d);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000591 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000592 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000593 return -1;
594 }
Guido van Rossum82598051997-03-05 00:20:32 +0000595 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000596 if (Py_FlushLine())
597 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000598 return 0;
599}
600
Barry Warsaw035574d1997-08-29 22:07:17 +0000601static int
602parse_syntax_error(err, message, filename, lineno, offset, text)
603 PyObject* err;
604 PyObject** message;
605 char** filename;
606 int* lineno;
607 int* offset;
608 char** text;
609{
610 long hold;
611 PyObject *v;
612
613 /* old style errors */
614 if (PyTuple_Check(err))
615 return PyArg_Parse(err, "(O(ziiz))", message, filename,
616 lineno, offset, text);
617
618 /* new style errors. `err' is an instance */
619
620 if (! (v = PyObject_GetAttrString(err, "msg")))
621 goto finally;
622 *message = v;
623
624 if (!(v = PyObject_GetAttrString(err, "filename")))
625 goto finally;
626 if (v == Py_None)
627 *filename = NULL;
628 else if (! (*filename = PyString_AsString(v)))
629 goto finally;
630
631 Py_DECREF(v);
632 if (!(v = PyObject_GetAttrString(err, "lineno")))
633 goto finally;
634 hold = PyInt_AsLong(v);
635 Py_DECREF(v);
636 v = NULL;
637 if (hold < 0 && PyErr_Occurred())
638 goto finally;
639 *lineno = (int)hold;
640
641 if (!(v = PyObject_GetAttrString(err, "offset")))
642 goto finally;
643 hold = PyInt_AsLong(v);
644 Py_DECREF(v);
645 v = NULL;
646 if (hold < 0 && PyErr_Occurred())
647 goto finally;
648 *offset = (int)hold;
649
650 if (!(v = PyObject_GetAttrString(err, "text")))
651 goto finally;
652 if (v == Py_None)
653 *text = NULL;
654 else if (! (*text = PyString_AsString(v)))
655 goto finally;
656 Py_DECREF(v);
657 return 1;
658
659finally:
660 Py_XDECREF(v);
661 return 0;
662}
663
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000664void
Guido van Rossum82598051997-03-05 00:20:32 +0000665PyErr_Print()
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000666{
Guido van Rossuma61691e1998-02-06 22:27:24 +0000667 PyErr_PrintEx(1);
668}
669
670void
671PyErr_PrintEx(set_sys_last_vars)
672 int set_sys_last_vars;
673{
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000674 int err = 0;
Guido van Rossum82598051997-03-05 00:20:32 +0000675 PyObject *exception, *v, *tb, *f;
676 PyErr_Fetch(&exception, &v, &tb);
Barry Warsaw035574d1997-08-29 22:07:17 +0000677 PyErr_NormalizeException(&exception, &v, &tb);
678
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000679 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +0000680 return;
Barry Warsaw035574d1997-08-29 22:07:17 +0000681
Barry Warsaw36b8f941997-08-26 18:09:48 +0000682 if (PyErr_GivenExceptionMatches(exception, PyExc_SystemExit)) {
Guido van Rossum0829c751998-02-28 04:31:39 +0000683 if (Py_FlushLine())
684 PyErr_Clear();
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000685 fflush(stdout);
Guido van Rossum82598051997-03-05 00:20:32 +0000686 if (v == NULL || v == Py_None)
687 Py_Exit(0);
Barry Warsaw035574d1997-08-29 22:07:17 +0000688 if (PyInstance_Check(v)) {
689 /* we expect the error code to be store in the
690 `code' attribute
691 */
692 PyObject *code = PyObject_GetAttrString(v, "code");
693 if (code) {
694 Py_DECREF(v);
695 v = code;
Guido van Rossumaa9606f1997-10-03 13:53:28 +0000696 if (v == Py_None)
697 Py_Exit(0);
Barry Warsaw035574d1997-08-29 22:07:17 +0000698 }
699 /* if we failed to dig out the "code" attribute,
700 then just let the else clause below print the
701 error
702 */
703 }
Guido van Rossum82598051997-03-05 00:20:32 +0000704 if (PyInt_Check(v))
705 Py_Exit((int)PyInt_AsLong(v));
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000706 else {
Guido van Rossum3165fe61992-09-25 21:59:05 +0000707 /* OK to use real stderr here */
Guido van Rossum82598051997-03-05 00:20:32 +0000708 PyObject_Print(v, stderr, Py_PRINT_RAW);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000709 fprintf(stderr, "\n");
Guido van Rossum82598051997-03-05 00:20:32 +0000710 Py_Exit(1);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000711 }
712 }
Guido van Rossuma61691e1998-02-06 22:27:24 +0000713 if (set_sys_last_vars) {
714 PySys_SetObject("last_type", exception);
715 PySys_SetObject("last_value", v);
716 PySys_SetObject("last_traceback", tb);
717 }
Guido van Rossum82598051997-03-05 00:20:32 +0000718 f = PySys_GetObject("stderr");
Guido van Rossum3165fe61992-09-25 21:59:05 +0000719 if (f == NULL)
720 fprintf(stderr, "lost sys.stderr\n");
721 else {
Guido van Rossum0829c751998-02-28 04:31:39 +0000722 if (Py_FlushLine())
723 PyErr_Clear();
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000724 fflush(stdout);
Guido van Rossum0829c751998-02-28 04:31:39 +0000725 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +0000726 if (err == 0 &&
727 PyErr_GivenExceptionMatches(exception, PyExc_SyntaxError))
728 {
Guido van Rossum82598051997-03-05 00:20:32 +0000729 PyObject *message;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000730 char *filename, *text;
731 int lineno, offset;
Barry Warsaw035574d1997-08-29 22:07:17 +0000732 if (!parse_syntax_error(v, &message, &filename,
733 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +0000734 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000735 else {
736 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +0000737 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000738 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000739 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000740 else
Guido van Rossum82598051997-03-05 00:20:32 +0000741 PyFile_WriteString(filename, f);
742 PyFile_WriteString("\", line ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000743 sprintf(buf, "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +0000744 PyFile_WriteString(buf, f);
745 PyFile_WriteString("\n", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000746 if (text != NULL) {
Guido van Rossum798199d1994-09-19 08:08:50 +0000747 char *nl;
748 if (offset > 0 &&
Guido van Rossum478e7181997-05-06 15:24:59 +0000749 offset == (int)strlen(text))
Guido van Rossum798199d1994-09-19 08:08:50 +0000750 offset--;
751 for (;;) {
752 nl = strchr(text, '\n');
753 if (nl == NULL ||
754 nl-text >= offset)
755 break;
756 offset -= (nl+1-text);
757 text = nl+1;
758 }
Guido van Rossuma110aa61994-08-29 12:50:44 +0000759 while (*text == ' ' || *text == '\t') {
760 text++;
761 offset--;
762 }
Guido van Rossum82598051997-03-05 00:20:32 +0000763 PyFile_WriteString(" ", f);
764 PyFile_WriteString(text, f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000765 if (*text == '\0' ||
766 text[strlen(text)-1] != '\n')
Guido van Rossum82598051997-03-05 00:20:32 +0000767 PyFile_WriteString("\n", f);
768 PyFile_WriteString(" ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000769 offset--;
770 while (offset > 0) {
Guido van Rossum82598051997-03-05 00:20:32 +0000771 PyFile_WriteString(" ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000772 offset--;
773 }
Guido van Rossum82598051997-03-05 00:20:32 +0000774 PyFile_WriteString("^\n", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000775 }
Guido van Rossum82598051997-03-05 00:20:32 +0000776 Py_INCREF(message);
777 Py_DECREF(v);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000778 v = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000779 /* Can't be bothered to check all those
780 PyFile_WriteString() calls */
781 if (PyErr_Occurred())
782 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000783 }
784 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000785 if (err) {
786 /* Don't do anything else */
787 }
788 else if (PyClass_Check(exception)) {
Barry Warsaw2f5f6a21997-09-16 21:42:03 +0000789 PyClassObject* exc = (PyClassObject*)exception;
790 PyObject* className = exc->cl_name;
791 PyObject* moduleName =
792 PyDict_GetItemString(exc->cl_dict, "__module__");
793
794 if (moduleName == NULL)
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000795 err = PyFile_WriteString("<unknown>", f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +0000796 else {
797 char* modstr = PyString_AsString(moduleName);
798 if (modstr && strcmp(modstr, "exceptions"))
799 {
800 err = PyFile_WriteString(modstr, f);
801 err += PyFile_WriteString(".", f);
802 }
803 }
804 if (err == 0) {
805 if (className == NULL)
806 err = PyFile_WriteString("<unknown>", f);
807 else
808 err = PyFile_WriteObject(className, f,
809 Py_PRINT_RAW);
810 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000811 }
812 else
813 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
814 if (err == 0) {
815 if (v != NULL && v != Py_None) {
Barry Warsaw035574d1997-08-29 22:07:17 +0000816 PyObject *s = PyObject_Str(v);
817 /* only print colon if the str() of the
818 object is not the empty string
819 */
Guido van Rossumd6bf45b1997-09-05 19:11:53 +0000820 if (s == NULL)
821 err = -1;
822 else if (!PyString_Check(s) ||
823 PyString_GET_SIZE(s) != 0)
Barry Warsaw035574d1997-08-29 22:07:17 +0000824 err = PyFile_WriteString(": ", f);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000825 if (err == 0)
Guido van Rossumd6bf45b1997-09-05 19:11:53 +0000826 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
827 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +0000828 }
Guido van Rossum262e1241995-02-07 15:30:45 +0000829 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000830 if (err == 0)
831 err = PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000832 }
Guido van Rossum82598051997-03-05 00:20:32 +0000833 Py_XDECREF(exception);
834 Py_XDECREF(v);
835 Py_XDECREF(tb);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000836 /* If an error happened here, don't show it.
837 XXX This is wrong, but too many callers rely on this behavior. */
838 if (err != 0)
839 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000840}
841
Guido van Rossum82598051997-03-05 00:20:32 +0000842PyObject *
843PyRun_String(str, start, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000844 char *str;
845 int start;
Guido van Rossum82598051997-03-05 00:20:32 +0000846 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000847{
Guido van Rossum82598051997-03-05 00:20:32 +0000848 return run_err_node(PyParser_SimpleParseString(str, start),
Guido van Rossuma110aa61994-08-29 12:50:44 +0000849 "<string>", globals, locals);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000850}
851
Guido van Rossum82598051997-03-05 00:20:32 +0000852PyObject *
853PyRun_File(fp, filename, start, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000854 FILE *fp;
855 char *filename;
856 int start;
Guido van Rossum82598051997-03-05 00:20:32 +0000857 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000858{
Guido van Rossum82598051997-03-05 00:20:32 +0000859 return run_err_node(PyParser_SimpleParseFile(fp, filename, start),
Guido van Rossuma110aa61994-08-29 12:50:44 +0000860 filename, globals, locals);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000861}
862
Guido van Rossum82598051997-03-05 00:20:32 +0000863static PyObject *
Guido van Rossuma110aa61994-08-29 12:50:44 +0000864run_err_node(n, filename, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000865 node *n;
866 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000867 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000868{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000869 if (n == NULL)
870 return NULL;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000871 return run_node(n, filename, globals, locals);
872}
873
Guido van Rossum82598051997-03-05 00:20:32 +0000874static PyObject *
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000875run_node(n, filename, globals, locals)
876 node *n;
877 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000878 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000879{
Guido van Rossum82598051997-03-05 00:20:32 +0000880 PyCodeObject *co;
881 PyObject *v;
882 co = PyNode_Compile(n, filename);
883 PyNode_Free(n);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000884 if (co == NULL)
885 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000886 v = PyEval_EvalCode(co, globals, locals);
887 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000888 return v;
889}
890
Guido van Rossum82598051997-03-05 00:20:32 +0000891static PyObject *
Guido van Rossumfdef2711994-09-14 13:31:04 +0000892run_pyc_file(fp, filename, globals, locals)
893 FILE *fp;
894 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000895 PyObject *globals, *locals;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000896{
Guido van Rossum82598051997-03-05 00:20:32 +0000897 PyCodeObject *co;
898 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000899 long magic;
Guido van Rossum82598051997-03-05 00:20:32 +0000900 long PyImport_GetMagicNumber();
Guido van Rossumfdef2711994-09-14 13:31:04 +0000901
Guido van Rossum82598051997-03-05 00:20:32 +0000902 magic = PyMarshal_ReadLongFromFile(fp);
903 if (magic != PyImport_GetMagicNumber()) {
904 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +0000905 "Bad magic number in .pyc file");
906 return NULL;
907 }
Guido van Rossum82598051997-03-05 00:20:32 +0000908 (void) PyMarshal_ReadLongFromFile(fp);
909 v = PyMarshal_ReadObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000910 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +0000911 if (v == NULL || !PyCode_Check(v)) {
912 Py_XDECREF(v);
913 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +0000914 "Bad code object in .pyc file");
915 return NULL;
916 }
Guido van Rossum82598051997-03-05 00:20:32 +0000917 co = (PyCodeObject *)v;
918 v = PyEval_EvalCode(co, globals, locals);
919 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000920 return v;
921}
922
Guido van Rossum82598051997-03-05 00:20:32 +0000923PyObject *
924Py_CompileString(str, filename, start)
Guido van Rossum5b722181993-03-30 17:46:03 +0000925 char *str;
926 char *filename;
927 int start;
928{
929 node *n;
Guido van Rossum82598051997-03-05 00:20:32 +0000930 PyCodeObject *co;
931 n = PyParser_SimpleParseString(str, start);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000932 if (n == NULL)
Guido van Rossum5b722181993-03-30 17:46:03 +0000933 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000934 co = PyNode_Compile(n, filename);
935 PyNode_Free(n);
936 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +0000937}
938
Guido van Rossuma110aa61994-08-29 12:50:44 +0000939/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000940
Guido van Rossuma110aa61994-08-29 12:50:44 +0000941node *
Guido van Rossum82598051997-03-05 00:20:32 +0000942PyParser_SimpleParseFile(fp, filename, start)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000943 FILE *fp;
944 char *filename;
945 int start;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000946{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000947 node *n;
948 perrdetail err;
Guido van Rossum82598051997-03-05 00:20:32 +0000949 n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar, start,
Guido van Rossuma110aa61994-08-29 12:50:44 +0000950 (char *)0, (char *)0, &err);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000951 if (n == NULL)
952 err_input(&err);
953 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000954}
955
Guido van Rossuma110aa61994-08-29 12:50:44 +0000956/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000957
Guido van Rossuma110aa61994-08-29 12:50:44 +0000958node *
Guido van Rossum82598051997-03-05 00:20:32 +0000959PyParser_SimpleParseString(str, start)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000960 char *str;
961 int start;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000962{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000963 node *n;
964 perrdetail err;
Guido van Rossum82598051997-03-05 00:20:32 +0000965 n = PyParser_ParseString(str, &_PyParser_Grammar, start, &err);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000966 if (n == NULL)
967 err_input(&err);
968 return n;
969}
970
971/* Set the error appropriate to the given input error code (see errcode.h) */
972
973static void
974err_input(err)
975 perrdetail *err;
976{
Guido van Rossum82598051997-03-05 00:20:32 +0000977 PyObject *v, *w;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000978 char *msg = NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000979 v = Py_BuildValue("(ziiz)", err->filename,
Guido van Rossuma110aa61994-08-29 12:50:44 +0000980 err->lineno, err->offset, err->text);
981 if (err->text != NULL) {
982 free(err->text);
983 err->text = NULL;
984 }
985 switch (err->error) {
986 case E_SYNTAX:
987 msg = "invalid syntax";
988 break;
989 case E_TOKEN:
990 msg = "invalid token";
991
992 break;
993 case E_INTR:
Guido van Rossum82598051997-03-05 00:20:32 +0000994 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000995 return;
996 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +0000997 PyErr_NoMemory();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000998 return;
999 case E_EOF:
1000 msg = "unexpected EOF while parsing";
1001 break;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001002 case E_INDENT:
1003 msg = "inconsistent use of tabs and spaces in indentation";
1004 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001005 default:
1006 fprintf(stderr, "error=%d\n", err->error);
1007 msg = "unknown parsing error";
1008 break;
1009 }
Guido van Rossum82598051997-03-05 00:20:32 +00001010 w = Py_BuildValue("(sO)", msg, v);
1011 Py_XDECREF(v);
1012 PyErr_SetObject(PyExc_SyntaxError, w);
1013 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001014}
1015
1016/* Print fatal error message and abort */
1017
1018void
Guido van Rossum82598051997-03-05 00:20:32 +00001019Py_FatalError(msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001020 char *msg;
1021{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00001022 fprintf(stderr, "Fatal Python error: %s\n", msg);
Guido van Rossum8ae87c01995-01-26 00:40:38 +00001023#ifdef macintosh
1024 for (;;);
1025#endif
Guido van Rossum9b38a141996-09-11 23:12:24 +00001026#ifdef MS_WIN32
Guido van Rossum23c94461997-05-22 20:21:30 +00001027 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +00001028 OutputDebugString(msg);
1029 OutputDebugString("\n");
Guido van Rossum0ba35361998-08-13 13:33:16 +00001030#ifdef _DEBUG
1031 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00001032#endif
Guido van Rossum0ba35361998-08-13 13:33:16 +00001033#endif /* MS_WIN32 */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001034 abort();
1035}
1036
1037/* Clean up and exit */
1038
Guido van Rossuma110aa61994-08-29 12:50:44 +00001039#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00001040#include "pythread.h"
Guido van Rossum82598051997-03-05 00:20:32 +00001041int _PyThread_Started = 0; /* Set by threadmodule.c and maybe others */
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001042#endif
1043
Guido van Rossum2dcfc961998-10-01 16:01:57 +00001044#define NEXITFUNCS 32
Guido van Rossum1662dd51994-09-07 14:38:28 +00001045static void (*exitfuncs[NEXITFUNCS])();
1046static int nexitfuncs = 0;
1047
1048int Py_AtExit(func)
Guido van Rossum82598051997-03-05 00:20:32 +00001049 void (*func) Py_PROTO((void));
Guido van Rossum1662dd51994-09-07 14:38:28 +00001050{
1051 if (nexitfuncs >= NEXITFUNCS)
1052 return -1;
1053 exitfuncs[nexitfuncs++] = func;
1054 return 0;
1055}
1056
Guido van Rossumcc283f51997-08-05 02:22:03 +00001057static void
1058call_sys_exitfunc()
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001059{
Guido van Rossum82598051997-03-05 00:20:32 +00001060 PyObject *exitfunc = PySys_GetObject("exitfunc");
Guido van Rossum59bff391992-09-03 20:28:00 +00001061
1062 if (exitfunc) {
Guido van Rossumbf02fb21998-04-03 21:12:12 +00001063 PyObject *res, *f;
Guido van Rossum82598051997-03-05 00:20:32 +00001064 Py_INCREF(exitfunc);
1065 PySys_SetObject("exitfunc", (PyObject *)NULL);
Guido van Rossumbf02fb21998-04-03 21:12:12 +00001066 f = PySys_GetObject("stderr");
Guido van Rossum82598051997-03-05 00:20:32 +00001067 res = PyEval_CallObject(exitfunc, (PyObject *)NULL);
Guido van Rossum59bff391992-09-03 20:28:00 +00001068 if (res == NULL) {
Guido van Rossumbf02fb21998-04-03 21:12:12 +00001069 if (f)
1070 PyFile_WriteString("Error in sys.exitfunc:\n", f);
Guido van Rossum82598051997-03-05 00:20:32 +00001071 PyErr_Print();
Guido van Rossum59bff391992-09-03 20:28:00 +00001072 }
Guido van Rossum82598051997-03-05 00:20:32 +00001073 Py_DECREF(exitfunc);
Guido van Rossum59bff391992-09-03 20:28:00 +00001074 }
1075
Guido van Rossum0829c751998-02-28 04:31:39 +00001076 if (Py_FlushLine())
1077 PyErr_Clear();
Guido van Rossumcc283f51997-08-05 02:22:03 +00001078}
Guido van Rossum1662dd51994-09-07 14:38:28 +00001079
Guido van Rossumcc283f51997-08-05 02:22:03 +00001080static void
1081call_ll_exitfuncs()
1082{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001083 while (nexitfuncs > 0)
1084 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001085
1086 fflush(stdout);
1087 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001088}
1089
1090void
Guido van Rossum82598051997-03-05 00:20:32 +00001091Py_Exit(sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001092 int sts;
1093{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001094 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001095
Jack Jansen66a89771995-10-27 13:22:14 +00001096#ifdef macintosh
1097 PyMac_Exit(sts);
1098#else
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001099 exit(sts);
Jack Jansen66a89771995-10-27 13:22:14 +00001100#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001101}
1102
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001103static void
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001104initsigs()
1105{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001106#ifdef HAVE_SIGNAL_H
1107#ifdef SIGPIPE
1108 signal(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001109#endif
Guido van Rossuma110aa61994-08-29 12:50:44 +00001110#endif /* HAVE_SIGNAL_H */
Guido van Rossum82598051997-03-05 00:20:32 +00001111 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001112}
1113
Guido van Rossumaae0d321996-05-22 16:35:33 +00001114#ifdef Py_TRACE_REFS
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001115/* Ask a yes/no question */
1116
Guido van Rossum59bff391992-09-03 20:28:00 +00001117int
Guido van Rossum82598051997-03-05 00:20:32 +00001118_Py_AskYesNo(prompt)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001119 char *prompt;
1120{
1121 char buf[256];
1122
1123 printf("%s [ny] ", prompt);
1124 if (fgets(buf, sizeof buf, stdin) == NULL)
1125 return 0;
1126 return buf[0] == 'y' || buf[0] == 'Y';
1127}
1128#endif
1129
Guido van Rossuma110aa61994-08-29 12:50:44 +00001130#ifdef MPW
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001131
1132/* Check for file descriptor connected to interactive device.
1133 Pretend that stdin is always interactive, other files never. */
1134
1135int
1136isatty(fd)
1137 int fd;
1138{
1139 return fd == fileno(stdin);
1140}
1141
1142#endif
Guido van Rossum7433b121997-02-14 19:45:36 +00001143
1144/*
1145 * The file descriptor fd is considered ``interactive'' if either
1146 * a) isatty(fd) is TRUE, or
1147 * b) the -i flag was given, and the filename associated with
1148 * the descriptor is NULL or "<stdin>" or "???".
1149 */
1150int
1151Py_FdIsInteractive(fp, filename)
1152 FILE *fp;
1153 char *filename;
1154{
1155 if (isatty((int)fileno(fp)))
1156 return 1;
1157 if (!Py_InteractiveFlag)
1158 return 0;
1159 return (filename == NULL) ||
1160 (strcmp(filename, "<stdin>") == 0) ||
1161 (strcmp(filename, "???") == 0);
1162}