blob: a4c986ef6a88d2d073f1fef344872e9c810a808d [file] [log] [blame]
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001/***********************************************************
Guido van Rossum6d023c91995-01-04 19:12:13 +00002Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
Guido van Rossum1984f1e1992-08-04 12:41:02 +00004
5 All Rights Reserved
6
Guido van Rossumd266eb41996-10-25 14:44:06 +00007Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
Guido van Rossum1984f1e1992-08-04 12:41:02 +00009provided that the above copyright notice appear in all copies and that
Guido van Rossumd266eb41996-10-25 14:44:06 +000010both that copyright notice and this permission notice appear in
Guido van Rossum1984f1e1992-08-04 12:41:02 +000011supporting documentation, and that the names of Stichting Mathematisch
Guido van Rossumd266eb41996-10-25 14:44:06 +000012Centrum or CWI or Corporation for National Research Initiatives or
13CNRI not be used in advertising or publicity pertaining to
14distribution of the software without specific, written prior
15permission.
Guido van Rossum1984f1e1992-08-04 12:41:02 +000016
Guido van Rossumd266eb41996-10-25 14:44:06 +000017While CWI is the initial source for this software, a modified version
18is made available by the Corporation for National Research Initiatives
19(CNRI) at the Internet address ftp://ftp.python.org.
20
21STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28PERFORMANCE OF THIS SOFTWARE.
Guido van Rossum1984f1e1992-08-04 12:41:02 +000029
30******************************************************************/
31
32/* Python interpreter top-level routines, including init/exit */
33
Guido van Rossum82598051997-03-05 00:20:32 +000034#include "Python.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000035
36#include "grammar.h"
37#include "node.h"
38#include "parsetok.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000039#include "errcode.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000040#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000041#include "eval.h"
Guido van Rossumfdef2711994-09-14 13:31:04 +000042#include "marshal.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +000043
Guido van Rossum80bb9651996-12-05 23:27:02 +000044#ifdef HAVE_UNISTD_H
45#include <unistd.h>
46#endif
47
Guido van Rossuma110aa61994-08-29 12:50:44 +000048#ifdef HAVE_SIGNAL_H
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000049#include <signal.h>
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000050#endif
51
Guido van Rossum9b38a141996-09-11 23:12:24 +000052#ifdef MS_WIN32
Guido van Rossuma44823b1995-03-14 15:01:17 +000053#undef BYTE
54#include "windows.h"
55#endif
56
Guido van Rossum82598051997-03-05 00:20:32 +000057extern char *Py_GetPath();
Guido van Rossum1984f1e1992-08-04 12:41:02 +000058
Guido van Rossum82598051997-03-05 00:20:32 +000059extern grammar _PyParser_Grammar; /* From graminit.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000060
Guido van Rossumb73cc041993-11-01 16:28:59 +000061/* Forward */
Guido van Rossum82598051997-03-05 00:20:32 +000062static void initmain Py_PROTO((void));
Guido van Rossumdcc0c131997-08-29 22:32:42 +000063static void initsite Py_PROTO((void));
Guido van Rossum82598051997-03-05 00:20:32 +000064static PyObject *run_err_node Py_PROTO((node *n, char *filename,
65 PyObject *globals, PyObject *locals));
66static PyObject *run_node Py_PROTO((node *n, char *filename,
67 PyObject *globals, PyObject *locals));
68static PyObject *run_pyc_file Py_PROTO((FILE *fp, char *filename,
69 PyObject *globals, PyObject *locals));
70static void err_input Py_PROTO((perrdetail *));
71static void initsigs Py_PROTO((void));
Guido van Rossumcc283f51997-08-05 02:22:03 +000072static void call_sys_exitfunc Py_PROTO((void));
73static void call_ll_exitfuncs Py_PROTO((void));
Guido van Rossuma9e7dc11992-10-18 18:53:57 +000074
Guido van Rossumbffd6832000-01-20 22:32:56 +000075#ifdef Py_TRACE_REFS
76int _Py_AskYesNo(char *prompt);
77#endif
78
Guido van Rossumc94044c2000-03-10 23:03:54 +000079extern void _PyUnicode_Init();
80extern void _PyUnicode_Fini();
81extern void _PyCodecRegistry_Init();
82extern void _PyCodecRegistry_Fini();
83
84
Guido van Rossum82598051997-03-05 00:20:32 +000085int Py_DebugFlag; /* Needed by parser.c */
86int Py_VerboseFlag; /* Needed by import.c */
Guido van Rossum7433b121997-02-14 19:45:36 +000087int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
Guido van Rossumdcc0c131997-08-29 22:32:42 +000088int Py_NoSiteFlag; /* Suppress 'import site' */
Guido van Rossum999e5e91997-10-03 19:46:02 +000089int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c */
Guido van Rossuma61691e1998-02-06 22:27:24 +000090int Py_FrozenFlag; /* Needed by getpath.c */
Guido van Rossumb16d1972000-05-01 17:55:15 +000091int Py_UnicodeFlag = 0; /* Needed by compile.c */
Guido van Rossum1984f1e1992-08-04 12:41:02 +000092
Guido van Rossum25ce5661997-08-02 03:10:38 +000093static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +000094
Guido van Rossume3c0d5e1997-08-22 04:20:13 +000095/* API to access the initialized flag -- useful for eroteric use */
96
97int
98Py_IsInitialized()
99{
100 return initialized;
101}
102
Guido van Rossum25ce5661997-08-02 03:10:38 +0000103/* Global initializations. Can be undone by Py_Finalize(). Don't
104 call this twice without an intervening Py_Finalize() call. When
105 initializations fail, a fatal error is issued and the function does
106 not return. On return, the first thread and interpreter state have
107 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000108
Guido van Rossum25ce5661997-08-02 03:10:38 +0000109 Locking: you must hold the interpreter lock while calling this.
110 (If the lock has not yet been initialized, that's equivalent to
111 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000112
Guido van Rossum25ce5661997-08-02 03:10:38 +0000113*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000114
115void
116Py_Initialize()
117{
Guido van Rossuma027efa1997-05-05 20:56:21 +0000118 PyInterpreterState *interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000119 PyThreadState *tstate;
120 PyObject *bimod, *sysmod;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000121 char *p;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000122
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000123 if (initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000124 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000125 initialized = 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000126
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000127 if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
128 Py_DebugFlag = 1;
129 if ((p = getenv("PYTHONVERBOSE")) && *p != '\0')
130 Py_VerboseFlag = 1;
Guido van Rossum562f5b11998-10-07 14:50:42 +0000131 if ((p = getenv("PYTHONOPTIMIZE")) && *p != '\0')
132 Py_OptimizeFlag = 1;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000133
Guido van Rossuma027efa1997-05-05 20:56:21 +0000134 interp = PyInterpreterState_New();
135 if (interp == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000136 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000137
Guido van Rossuma027efa1997-05-05 20:56:21 +0000138 tstate = PyThreadState_New(interp);
139 if (tstate == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000140 Py_FatalError("Py_Initialize: can't make first thread");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000141 (void) PyThreadState_Swap(tstate);
142
Guido van Rossum25ce5661997-08-02 03:10:38 +0000143 interp->modules = PyDict_New();
144 if (interp->modules == NULL)
145 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000146
Guido van Rossumc94044c2000-03-10 23:03:54 +0000147 /* Init codec registry */
148 _PyCodecRegistry_Init();
149
150 /* Init Unicode implementation; relies on the codec registry */
151 _PyUnicode_Init();
152
Jeremy Hylton4a3dd2d2000-04-14 19:13:24 +0000153 _PyCompareState_Key = PyString_InternFromString("cmp_state");
154
Barry Warsaw035574d1997-08-29 22:07:17 +0000155 bimod = _PyBuiltin_Init_1();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000156 if (bimod == NULL)
157 Py_FatalError("Py_Initialize: can't initialize __builtin__");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000158 interp->builtins = PyModule_GetDict(bimod);
159 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000160
161 sysmod = _PySys_Init();
162 if (sysmod == NULL)
163 Py_FatalError("Py_Initialize: can't initialize sys");
164 interp->sysdict = PyModule_GetDict(sysmod);
165 Py_INCREF(interp->sysdict);
166 _PyImport_FixupExtension("sys", "sys");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000167 PySys_SetPath(Py_GetPath());
Guido van Rossum25ce5661997-08-02 03:10:38 +0000168 PyDict_SetItemString(interp->sysdict, "modules",
169 interp->modules);
170
Guido van Rossum7c85ab81999-07-08 17:26:56 +0000171 _PyImport_Init();
172
Barry Warsaw035574d1997-08-29 22:07:17 +0000173 /* phase 2 of builtins */
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000174 _PyBuiltin_Init_2(interp->builtins);
Barry Warsaw963b8711997-09-18 16:42:02 +0000175 _PyImport_FixupExtension("__builtin__", "__builtin__");
Barry Warsaw035574d1997-08-29 22:07:17 +0000176
Guido van Rossum25ce5661997-08-02 03:10:38 +0000177 initsigs(); /* Signal handling stuff, including initintr() */
178
179 initmain(); /* Module __main__ */
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000180 if (!Py_NoSiteFlag)
181 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000182}
183
Guido van Rossum2edcf0d1998-12-15 16:12:00 +0000184#ifdef COUNT_ALLOCS
185extern void dump_counts Py_PROTO((void));
186#endif
187
Guido van Rossum25ce5661997-08-02 03:10:38 +0000188/* Undo the effect of Py_Initialize().
189
190 Beware: if multiple interpreter and/or thread states exist, these
191 are not wiped out; only the current thread and interpreter state
192 are deleted. But since everything else is deleted, those other
193 interpreter and thread states should no longer be used.
194
195 (XXX We should do better, e.g. wipe out all interpreters and
196 threads.)
197
198 Locking: as above.
199
200*/
201
202void
203Py_Finalize()
204{
205 PyInterpreterState *interp;
206 PyThreadState *tstate;
207
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000208 if (!initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000209 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000210 initialized = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000211
Guido van Rossum4cc462e1998-01-19 22:00:38 +0000212 call_sys_exitfunc();
213
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000214 /* Get current thread state and interpreter pointer */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000215 tstate = PyThreadState_Get();
216 interp = tstate->interp;
217
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000218 /* Disable signal handling */
219 PyOS_FiniInterrupts();
220
221 /* Destroy PyExc_MemoryErrorInst */
222 _PyBuiltin_Fini_1();
223
Guido van Rossumc94044c2000-03-10 23:03:54 +0000224 /* Cleanup Unicode implementation */
225 _PyUnicode_Fini();
226
227 /* Cleanup Codec registry */
228 _PyCodecRegistry_Fini();
229
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000230 /* Destroy all modules */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000231 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000232
Guido van Rossum1707aad1997-12-08 23:43:45 +0000233 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
234 _PyImport_Fini();
235
236 /* Debugging stuff */
237#ifdef COUNT_ALLOCS
238 dump_counts();
239#endif
240
241#ifdef Py_REF_DEBUG
242 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
243#endif
244
245#ifdef Py_TRACE_REFS
Guido van Rossumeca47842000-04-27 23:44:15 +0000246 if (
247#ifdef MS_WINDOWS /* Only ask on Windows if env var set */
248 getenv("PYTHONDUMPREFS") &&
249#endif /* MS_WINDOWS */
250 _Py_AskYesNo("Print left references?")) {
Guido van Rossum1707aad1997-12-08 23:43:45 +0000251 _Py_PrintReferences(stderr);
252 }
253#endif /* Py_TRACE_REFS */
254
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000255 /* Delete current thread */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000256 PyInterpreterState_Clear(interp);
257 PyThreadState_Swap(NULL);
258 PyInterpreterState_Delete(interp);
259
Barry Warsaw035574d1997-08-29 22:07:17 +0000260 /* Now we decref the exception classes. After this point nothing
261 can raise an exception. That's okay, because each Fini() method
262 below has been checked to make sure no exceptions are ever
263 raised.
264 */
265 _PyBuiltin_Fini_2();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000266 PyMethod_Fini();
267 PyFrame_Fini();
268 PyCFunction_Fini();
269 PyTuple_Fini();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000270 PyString_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000271 PyInt_Fini();
272 PyFloat_Fini();
273
274 /* XXX Still allocated:
275 - various static ad-hoc pointers to interned strings
276 - int and float free list blocks
277 - whatever various modules and libraries allocate
278 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000279
280 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000281
282 call_ll_exitfuncs();
283
Guido van Rossumcc283f51997-08-05 02:22:03 +0000284#ifdef Py_TRACE_REFS
Guido van Rossumcc283f51997-08-05 02:22:03 +0000285 _Py_ResetReferences();
286#endif /* Py_TRACE_REFS */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000287}
288
289/* Create and initialize a new interpreter and thread, and return the
290 new thread. This requires that Py_Initialize() has been called
291 first.
292
293 Unsuccessful initialization yields a NULL pointer. Note that *no*
294 exception information is available even in this case -- the
295 exception information is held in the thread, and there is no
296 thread.
297
298 Locking: as above.
299
300*/
301
302PyThreadState *
303Py_NewInterpreter()
304{
305 PyInterpreterState *interp;
306 PyThreadState *tstate, *save_tstate;
307 PyObject *bimod, *sysmod;
308
309 if (!initialized)
310 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
311
312 interp = PyInterpreterState_New();
313 if (interp == NULL)
314 return NULL;
315
316 tstate = PyThreadState_New(interp);
317 if (tstate == NULL) {
318 PyInterpreterState_Delete(interp);
319 return NULL;
320 }
321
322 save_tstate = PyThreadState_Swap(tstate);
323
324 /* XXX The following is lax in error checking */
325
326 interp->modules = PyDict_New();
327
328 bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
329 if (bimod != NULL) {
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000330 interp->builtins = PyModule_GetDict(bimod);
331 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000332 }
333 sysmod = _PyImport_FindExtension("sys", "sys");
334 if (bimod != NULL && sysmod != NULL) {
335 interp->sysdict = PyModule_GetDict(sysmod);
336 Py_INCREF(interp->sysdict);
337 PySys_SetPath(Py_GetPath());
338 PyDict_SetItemString(interp->sysdict, "modules",
339 interp->modules);
340 initmain();
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000341 if (!Py_NoSiteFlag)
342 initsite();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000343 }
344
345 if (!PyErr_Occurred())
346 return tstate;
347
348 /* Oops, it didn't work. Undo it all. */
349
350 PyErr_Print();
351 PyThreadState_Clear(tstate);
352 PyThreadState_Swap(save_tstate);
353 PyThreadState_Delete(tstate);
354 PyInterpreterState_Delete(interp);
355
356 return NULL;
357}
358
359/* Delete an interpreter and its last thread. This requires that the
360 given thread state is current, that the thread has no remaining
361 frames, and that it is its interpreter's only remaining thread.
362 It is a fatal error to violate these constraints.
363
364 (Py_Finalize() doesn't have these constraints -- it zaps
365 everything, regardless.)
366
367 Locking: as above.
368
369*/
370
371void
372Py_EndInterpreter(tstate)
373 PyThreadState *tstate;
374{
375 PyInterpreterState *interp = tstate->interp;
376
377 if (tstate != PyThreadState_Get())
378 Py_FatalError("Py_EndInterpreter: thread is not current");
379 if (tstate->frame != NULL)
380 Py_FatalError("Py_EndInterpreter: thread still has a frame");
381 if (tstate != interp->tstate_head || tstate->next != NULL)
382 Py_FatalError("Py_EndInterpreter: not the last thread");
383
384 PyImport_Cleanup();
385 PyInterpreterState_Clear(interp);
386 PyThreadState_Swap(NULL);
387 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000388}
389
390static char *progname = "python";
391
392void
393Py_SetProgramName(pn)
394 char *pn;
395{
396 if (pn && *pn)
397 progname = pn;
398}
399
400char *
401Py_GetProgramName()
402{
403 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000404}
405
Guido van Rossuma61691e1998-02-06 22:27:24 +0000406static char *default_home = NULL;
407
408void
409Py_SetPythonHome(home)
410 char *home;
411{
412 default_home = home;
413}
414
415char *
416Py_GetPythonHome()
417{
418 char *home = default_home;
419 if (home == NULL)
420 home = getenv("PYTHONHOME");
421 return home;
422}
423
Guido van Rossum6135a871995-01-09 17:53:26 +0000424/* Create __main__ module */
425
426static void
427initmain()
428{
Guido van Rossum82598051997-03-05 00:20:32 +0000429 PyObject *m, *d;
430 m = PyImport_AddModule("__main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000431 if (m == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000432 Py_FatalError("can't create __main__ module");
433 d = PyModule_GetDict(m);
434 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
Guido van Rossum858cb731997-11-19 16:15:37 +0000435 PyObject *bimod = PyImport_ImportModule("__builtin__");
436 if (bimod == NULL ||
437 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
Guido van Rossum82598051997-03-05 00:20:32 +0000438 Py_FatalError("can't add __builtins__ to __main__");
Barry Warsaw3d05b1a1999-01-29 21:30:22 +0000439 Py_DECREF(bimod);
Guido van Rossum6135a871995-01-09 17:53:26 +0000440 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000441}
442
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000443/* Import the site module (not into __main__ though) */
444
445static void
446initsite()
447{
448 PyObject *m, *f;
449 m = PyImport_ImportModule("site");
450 if (m == NULL) {
451 f = PySys_GetObject("stderr");
452 if (Py_VerboseFlag) {
453 PyFile_WriteString(
454 "'import site' failed; traceback:\n", f);
455 PyErr_Print();
456 }
457 else {
458 PyFile_WriteString(
459 "'import site' failed; use -v for traceback\n", f);
460 PyErr_Clear();
461 }
462 }
463 else {
464 Py_DECREF(m);
465 }
466}
467
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000468/* Parse input from a file and execute it */
469
470int
Guido van Rossum82598051997-03-05 00:20:32 +0000471PyRun_AnyFile(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000472 FILE *fp;
473 char *filename;
474{
475 if (filename == NULL)
476 filename = "???";
Guido van Rossum7433b121997-02-14 19:45:36 +0000477 if (Py_FdIsInteractive(fp, filename))
Guido van Rossum82598051997-03-05 00:20:32 +0000478 return PyRun_InteractiveLoop(fp, filename);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000479 else
Guido van Rossum82598051997-03-05 00:20:32 +0000480 return PyRun_SimpleFile(fp, filename);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000481}
482
483int
Guido van Rossum82598051997-03-05 00:20:32 +0000484PyRun_InteractiveLoop(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000485 FILE *fp;
486 char *filename;
487{
Guido van Rossum82598051997-03-05 00:20:32 +0000488 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000489 int ret;
Guido van Rossum82598051997-03-05 00:20:32 +0000490 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000491 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000492 PySys_SetObject("ps1", v = PyString_FromString(">>> "));
493 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000494 }
Guido van Rossum82598051997-03-05 00:20:32 +0000495 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000496 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000497 PySys_SetObject("ps2", v = PyString_FromString("... "));
498 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000499 }
500 for (;;) {
Guido van Rossum82598051997-03-05 00:20:32 +0000501 ret = PyRun_InteractiveOne(fp, filename);
Guido van Rossumaae0d321996-05-22 16:35:33 +0000502#ifdef Py_REF_DEBUG
Guido van Rossum6f9e4331995-03-29 16:57:48 +0000503 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000504#endif
505 if (ret == E_EOF)
506 return 0;
507 /*
508 if (ret == E_NOMEM)
509 return -1;
510 */
511 }
512}
513
514int
Guido van Rossum82598051997-03-05 00:20:32 +0000515PyRun_InteractiveOne(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000516 FILE *fp;
517 char *filename;
518{
Guido van Rossum82598051997-03-05 00:20:32 +0000519 PyObject *m, *d, *v, *w;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000520 node *n;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000521 perrdetail err;
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000522 char *ps1 = "", *ps2 = "";
Guido van Rossum82598051997-03-05 00:20:32 +0000523 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000524 if (v != NULL) {
525 v = PyObject_Str(v);
526 if (v == NULL)
527 PyErr_Clear();
528 else if (PyString_Check(v))
529 ps1 = PyString_AsString(v);
530 }
Guido van Rossum82598051997-03-05 00:20:32 +0000531 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000532 if (w != NULL) {
533 w = PyObject_Str(w);
534 if (w == NULL)
535 PyErr_Clear();
536 else if (PyString_Check(w))
537 ps2 = PyString_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000538 }
Guido van Rossum82598051997-03-05 00:20:32 +0000539 n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar,
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000540 Py_single_input, ps1, ps2, &err);
Guido van Rossum82598051997-03-05 00:20:32 +0000541 Py_XDECREF(v);
542 Py_XDECREF(w);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000543 if (n == NULL) {
544 if (err.error == E_EOF) {
545 if (err.text)
546 free(err.text);
547 return E_EOF;
548 }
549 err_input(&err);
Guido van Rossum82598051997-03-05 00:20:32 +0000550 PyErr_Print();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000551 return err.error;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000552 }
Guido van Rossum82598051997-03-05 00:20:32 +0000553 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000554 if (m == NULL)
555 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000556 d = PyModule_GetDict(m);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000557 v = run_node(n, filename, d, d);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000558 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000559 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000560 return -1;
561 }
Guido van Rossum82598051997-03-05 00:20:32 +0000562 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000563 if (Py_FlushLine())
564 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000565 return 0;
566}
567
568int
Guido van Rossum82598051997-03-05 00:20:32 +0000569PyRun_SimpleFile(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000570 FILE *fp;
571 char *filename;
572{
Guido van Rossum82598051997-03-05 00:20:32 +0000573 PyObject *m, *d, *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000574 char *ext;
575
Guido van Rossum82598051997-03-05 00:20:32 +0000576 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000577 if (m == NULL)
578 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000579 d = PyModule_GetDict(m);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000580 ext = filename + strlen(filename) - 4;
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000581 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0
Jack Jansenbd06e961995-02-13 11:44:56 +0000582#ifdef macintosh
583 /* On a mac, we also assume a pyc file for types 'PYC ' and 'APPL' */
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000584 || getfiletype(filename) == 'PYC '
585 || getfiletype(filename) == 'APPL'
Jack Jansenbd06e961995-02-13 11:44:56 +0000586#endif /* macintosh */
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000587 ) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000588 /* Try to run a pyc file. First, re-open in binary */
Jack Jansene00637b1994-12-14 12:58:37 +0000589 /* Don't close, done in main: fclose(fp); */
Guido van Rossumfdef2711994-09-14 13:31:04 +0000590 if( (fp = fopen(filename, "rb")) == NULL ) {
591 fprintf(stderr, "python: Can't reopen .pyc file\n");
592 return -1;
593 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000594 /* Turn on optimization if a .pyo file is given */
595 if (strcmp(ext, ".pyo") == 0)
596 Py_OptimizeFlag = 1;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000597 v = run_pyc_file(fp, filename, d, d);
598 } else {
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000599 v = PyRun_File(fp, filename, Py_file_input, d, d);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000600 }
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
611int
Guido van Rossum82598051997-03-05 00:20:32 +0000612PyRun_SimpleString(command)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000613 char *command;
614{
Guido van Rossum82598051997-03-05 00:20:32 +0000615 PyObject *m, *d, *v;
616 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000617 if (m == NULL)
618 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000619 d = PyModule_GetDict(m);
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000620 v = PyRun_String(command, Py_file_input, d, d);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000621 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000622 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000623 return -1;
624 }
Guido van Rossum82598051997-03-05 00:20:32 +0000625 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000626 if (Py_FlushLine())
627 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000628 return 0;
629}
630
Barry Warsaw035574d1997-08-29 22:07:17 +0000631static int
632parse_syntax_error(err, message, filename, lineno, offset, text)
633 PyObject* err;
634 PyObject** message;
635 char** filename;
636 int* lineno;
637 int* offset;
638 char** text;
639{
640 long hold;
641 PyObject *v;
642
643 /* old style errors */
644 if (PyTuple_Check(err))
645 return PyArg_Parse(err, "(O(ziiz))", message, filename,
646 lineno, offset, text);
647
648 /* new style errors. `err' is an instance */
649
650 if (! (v = PyObject_GetAttrString(err, "msg")))
651 goto finally;
652 *message = v;
653
654 if (!(v = PyObject_GetAttrString(err, "filename")))
655 goto finally;
656 if (v == Py_None)
657 *filename = NULL;
658 else if (! (*filename = PyString_AsString(v)))
659 goto finally;
660
661 Py_DECREF(v);
662 if (!(v = PyObject_GetAttrString(err, "lineno")))
663 goto finally;
664 hold = PyInt_AsLong(v);
665 Py_DECREF(v);
666 v = NULL;
667 if (hold < 0 && PyErr_Occurred())
668 goto finally;
669 *lineno = (int)hold;
670
671 if (!(v = PyObject_GetAttrString(err, "offset")))
672 goto finally;
673 hold = PyInt_AsLong(v);
674 Py_DECREF(v);
675 v = NULL;
676 if (hold < 0 && PyErr_Occurred())
677 goto finally;
678 *offset = (int)hold;
679
680 if (!(v = PyObject_GetAttrString(err, "text")))
681 goto finally;
682 if (v == Py_None)
683 *text = NULL;
684 else if (! (*text = PyString_AsString(v)))
685 goto finally;
686 Py_DECREF(v);
687 return 1;
688
689finally:
690 Py_XDECREF(v);
691 return 0;
692}
693
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000694void
Guido van Rossum82598051997-03-05 00:20:32 +0000695PyErr_Print()
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000696{
Guido van Rossuma61691e1998-02-06 22:27:24 +0000697 PyErr_PrintEx(1);
698}
699
700void
701PyErr_PrintEx(set_sys_last_vars)
702 int set_sys_last_vars;
703{
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000704 int err = 0;
Guido van Rossum82598051997-03-05 00:20:32 +0000705 PyObject *exception, *v, *tb, *f;
706 PyErr_Fetch(&exception, &v, &tb);
Barry Warsaw035574d1997-08-29 22:07:17 +0000707 PyErr_NormalizeException(&exception, &v, &tb);
708
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000709 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +0000710 return;
Barry Warsaw035574d1997-08-29 22:07:17 +0000711
Barry Warsaw36b8f941997-08-26 18:09:48 +0000712 if (PyErr_GivenExceptionMatches(exception, PyExc_SystemExit)) {
Guido van Rossum0829c751998-02-28 04:31:39 +0000713 if (Py_FlushLine())
714 PyErr_Clear();
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000715 fflush(stdout);
Guido van Rossum82598051997-03-05 00:20:32 +0000716 if (v == NULL || v == Py_None)
717 Py_Exit(0);
Barry Warsaw035574d1997-08-29 22:07:17 +0000718 if (PyInstance_Check(v)) {
719 /* we expect the error code to be store in the
720 `code' attribute
721 */
722 PyObject *code = PyObject_GetAttrString(v, "code");
723 if (code) {
724 Py_DECREF(v);
725 v = code;
Guido van Rossumaa9606f1997-10-03 13:53:28 +0000726 if (v == Py_None)
727 Py_Exit(0);
Barry Warsaw035574d1997-08-29 22:07:17 +0000728 }
729 /* if we failed to dig out the "code" attribute,
730 then just let the else clause below print the
731 error
732 */
733 }
Guido van Rossum82598051997-03-05 00:20:32 +0000734 if (PyInt_Check(v))
735 Py_Exit((int)PyInt_AsLong(v));
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000736 else {
Guido van Rossum3165fe61992-09-25 21:59:05 +0000737 /* OK to use real stderr here */
Guido van Rossum82598051997-03-05 00:20:32 +0000738 PyObject_Print(v, stderr, Py_PRINT_RAW);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000739 fprintf(stderr, "\n");
Guido van Rossum82598051997-03-05 00:20:32 +0000740 Py_Exit(1);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000741 }
742 }
Guido van Rossuma61691e1998-02-06 22:27:24 +0000743 if (set_sys_last_vars) {
744 PySys_SetObject("last_type", exception);
745 PySys_SetObject("last_value", v);
746 PySys_SetObject("last_traceback", tb);
747 }
Guido van Rossum82598051997-03-05 00:20:32 +0000748 f = PySys_GetObject("stderr");
Guido van Rossum3165fe61992-09-25 21:59:05 +0000749 if (f == NULL)
750 fprintf(stderr, "lost sys.stderr\n");
751 else {
Guido van Rossum0829c751998-02-28 04:31:39 +0000752 if (Py_FlushLine())
753 PyErr_Clear();
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000754 fflush(stdout);
Guido van Rossum0829c751998-02-28 04:31:39 +0000755 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +0000756 if (err == 0 &&
757 PyErr_GivenExceptionMatches(exception, PyExc_SyntaxError))
758 {
Guido van Rossum82598051997-03-05 00:20:32 +0000759 PyObject *message;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000760 char *filename, *text;
761 int lineno, offset;
Barry Warsaw035574d1997-08-29 22:07:17 +0000762 if (!parse_syntax_error(v, &message, &filename,
763 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +0000764 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000765 else {
766 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +0000767 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000768 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000769 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000770 else
Guido van Rossum82598051997-03-05 00:20:32 +0000771 PyFile_WriteString(filename, f);
772 PyFile_WriteString("\", line ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000773 sprintf(buf, "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +0000774 PyFile_WriteString(buf, f);
775 PyFile_WriteString("\n", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000776 if (text != NULL) {
Guido van Rossum798199d1994-09-19 08:08:50 +0000777 char *nl;
778 if (offset > 0 &&
Guido van Rossum478e7181997-05-06 15:24:59 +0000779 offset == (int)strlen(text))
Guido van Rossum798199d1994-09-19 08:08:50 +0000780 offset--;
781 for (;;) {
782 nl = strchr(text, '\n');
783 if (nl == NULL ||
784 nl-text >= offset)
785 break;
786 offset -= (nl+1-text);
787 text = nl+1;
788 }
Guido van Rossuma110aa61994-08-29 12:50:44 +0000789 while (*text == ' ' || *text == '\t') {
790 text++;
791 offset--;
792 }
Guido van Rossum82598051997-03-05 00:20:32 +0000793 PyFile_WriteString(" ", f);
794 PyFile_WriteString(text, f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000795 if (*text == '\0' ||
796 text[strlen(text)-1] != '\n')
Guido van Rossum82598051997-03-05 00:20:32 +0000797 PyFile_WriteString("\n", f);
798 PyFile_WriteString(" ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000799 offset--;
800 while (offset > 0) {
Guido van Rossum82598051997-03-05 00:20:32 +0000801 PyFile_WriteString(" ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000802 offset--;
803 }
Guido van Rossum82598051997-03-05 00:20:32 +0000804 PyFile_WriteString("^\n", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000805 }
Guido van Rossum82598051997-03-05 00:20:32 +0000806 Py_INCREF(message);
807 Py_DECREF(v);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000808 v = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000809 /* Can't be bothered to check all those
810 PyFile_WriteString() calls */
811 if (PyErr_Occurred())
812 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000813 }
814 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000815 if (err) {
816 /* Don't do anything else */
817 }
818 else if (PyClass_Check(exception)) {
Barry Warsaw2f5f6a21997-09-16 21:42:03 +0000819 PyClassObject* exc = (PyClassObject*)exception;
820 PyObject* className = exc->cl_name;
821 PyObject* moduleName =
822 PyDict_GetItemString(exc->cl_dict, "__module__");
823
824 if (moduleName == NULL)
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000825 err = PyFile_WriteString("<unknown>", f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +0000826 else {
827 char* modstr = PyString_AsString(moduleName);
828 if (modstr && strcmp(modstr, "exceptions"))
829 {
830 err = PyFile_WriteString(modstr, f);
831 err += PyFile_WriteString(".", f);
832 }
833 }
834 if (err == 0) {
835 if (className == NULL)
836 err = PyFile_WriteString("<unknown>", f);
837 else
838 err = PyFile_WriteObject(className, f,
839 Py_PRINT_RAW);
840 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000841 }
842 else
843 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
844 if (err == 0) {
845 if (v != NULL && v != Py_None) {
Barry Warsaw035574d1997-08-29 22:07:17 +0000846 PyObject *s = PyObject_Str(v);
847 /* only print colon if the str() of the
848 object is not the empty string
849 */
Guido van Rossumd6bf45b1997-09-05 19:11:53 +0000850 if (s == NULL)
851 err = -1;
852 else if (!PyString_Check(s) ||
853 PyString_GET_SIZE(s) != 0)
Barry Warsaw035574d1997-08-29 22:07:17 +0000854 err = PyFile_WriteString(": ", f);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000855 if (err == 0)
Guido van Rossumd6bf45b1997-09-05 19:11:53 +0000856 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
857 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +0000858 }
Guido van Rossum262e1241995-02-07 15:30:45 +0000859 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000860 if (err == 0)
861 err = PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000862 }
Guido van Rossum82598051997-03-05 00:20:32 +0000863 Py_XDECREF(exception);
864 Py_XDECREF(v);
865 Py_XDECREF(tb);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000866 /* If an error happened here, don't show it.
867 XXX This is wrong, but too many callers rely on this behavior. */
868 if (err != 0)
869 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000870}
871
Guido van Rossum82598051997-03-05 00:20:32 +0000872PyObject *
873PyRun_String(str, start, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000874 char *str;
875 int start;
Guido van Rossum82598051997-03-05 00:20:32 +0000876 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000877{
Guido van Rossum82598051997-03-05 00:20:32 +0000878 return run_err_node(PyParser_SimpleParseString(str, start),
Guido van Rossuma110aa61994-08-29 12:50:44 +0000879 "<string>", globals, locals);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000880}
881
Guido van Rossum82598051997-03-05 00:20:32 +0000882PyObject *
883PyRun_File(fp, filename, start, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000884 FILE *fp;
885 char *filename;
886 int start;
Guido van Rossum82598051997-03-05 00:20:32 +0000887 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000888{
Guido van Rossum82598051997-03-05 00:20:32 +0000889 return run_err_node(PyParser_SimpleParseFile(fp, filename, start),
Guido van Rossuma110aa61994-08-29 12:50:44 +0000890 filename, globals, locals);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000891}
892
Guido van Rossum82598051997-03-05 00:20:32 +0000893static PyObject *
Guido van Rossuma110aa61994-08-29 12:50:44 +0000894run_err_node(n, filename, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000895 node *n;
896 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000897 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000898{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000899 if (n == NULL)
900 return NULL;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000901 return run_node(n, filename, globals, locals);
902}
903
Guido van Rossum82598051997-03-05 00:20:32 +0000904static PyObject *
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000905run_node(n, filename, globals, locals)
906 node *n;
907 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000908 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000909{
Guido van Rossum82598051997-03-05 00:20:32 +0000910 PyCodeObject *co;
911 PyObject *v;
912 co = PyNode_Compile(n, filename);
913 PyNode_Free(n);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000914 if (co == NULL)
915 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000916 v = PyEval_EvalCode(co, globals, locals);
917 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000918 return v;
919}
920
Guido van Rossum82598051997-03-05 00:20:32 +0000921static PyObject *
Guido van Rossumfdef2711994-09-14 13:31:04 +0000922run_pyc_file(fp, filename, globals, locals)
923 FILE *fp;
924 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000925 PyObject *globals, *locals;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000926{
Guido van Rossum82598051997-03-05 00:20:32 +0000927 PyCodeObject *co;
928 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000929 long magic;
Guido van Rossum82598051997-03-05 00:20:32 +0000930 long PyImport_GetMagicNumber();
Guido van Rossumfdef2711994-09-14 13:31:04 +0000931
Guido van Rossum82598051997-03-05 00:20:32 +0000932 magic = PyMarshal_ReadLongFromFile(fp);
933 if (magic != PyImport_GetMagicNumber()) {
934 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +0000935 "Bad magic number in .pyc file");
936 return NULL;
937 }
Guido van Rossum82598051997-03-05 00:20:32 +0000938 (void) PyMarshal_ReadLongFromFile(fp);
939 v = PyMarshal_ReadObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000940 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +0000941 if (v == NULL || !PyCode_Check(v)) {
942 Py_XDECREF(v);
943 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +0000944 "Bad code object in .pyc file");
945 return NULL;
946 }
Guido van Rossum82598051997-03-05 00:20:32 +0000947 co = (PyCodeObject *)v;
948 v = PyEval_EvalCode(co, globals, locals);
949 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000950 return v;
951}
952
Guido van Rossum82598051997-03-05 00:20:32 +0000953PyObject *
954Py_CompileString(str, filename, start)
Guido van Rossum5b722181993-03-30 17:46:03 +0000955 char *str;
956 char *filename;
957 int start;
958{
959 node *n;
Guido van Rossum82598051997-03-05 00:20:32 +0000960 PyCodeObject *co;
961 n = PyParser_SimpleParseString(str, start);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000962 if (n == NULL)
Guido van Rossum5b722181993-03-30 17:46:03 +0000963 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000964 co = PyNode_Compile(n, filename);
965 PyNode_Free(n);
966 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +0000967}
968
Guido van Rossuma110aa61994-08-29 12:50:44 +0000969/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000970
Guido van Rossuma110aa61994-08-29 12:50:44 +0000971node *
Guido van Rossum82598051997-03-05 00:20:32 +0000972PyParser_SimpleParseFile(fp, filename, start)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000973 FILE *fp;
974 char *filename;
975 int start;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000976{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000977 node *n;
978 perrdetail err;
Guido van Rossum82598051997-03-05 00:20:32 +0000979 n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar, start,
Guido van Rossuma110aa61994-08-29 12:50:44 +0000980 (char *)0, (char *)0, &err);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000981 if (n == NULL)
982 err_input(&err);
983 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000984}
985
Guido van Rossuma110aa61994-08-29 12:50:44 +0000986/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000987
Guido van Rossuma110aa61994-08-29 12:50:44 +0000988node *
Guido van Rossum82598051997-03-05 00:20:32 +0000989PyParser_SimpleParseString(str, start)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000990 char *str;
991 int start;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000992{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000993 node *n;
994 perrdetail err;
Guido van Rossum82598051997-03-05 00:20:32 +0000995 n = PyParser_ParseString(str, &_PyParser_Grammar, start, &err);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000996 if (n == NULL)
997 err_input(&err);
998 return n;
999}
1000
1001/* Set the error appropriate to the given input error code (see errcode.h) */
1002
1003static void
1004err_input(err)
1005 perrdetail *err;
1006{
Guido van Rossum82598051997-03-05 00:20:32 +00001007 PyObject *v, *w;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001008 char *msg = NULL;
Guido van Rossum82598051997-03-05 00:20:32 +00001009 v = Py_BuildValue("(ziiz)", err->filename,
Guido van Rossuma110aa61994-08-29 12:50:44 +00001010 err->lineno, err->offset, err->text);
1011 if (err->text != NULL) {
1012 free(err->text);
1013 err->text = NULL;
1014 }
1015 switch (err->error) {
1016 case E_SYNTAX:
1017 msg = "invalid syntax";
1018 break;
1019 case E_TOKEN:
1020 msg = "invalid token";
Guido van Rossuma110aa61994-08-29 12:50:44 +00001021 break;
1022 case E_INTR:
Guido van Rossum82598051997-03-05 00:20:32 +00001023 PyErr_SetNone(PyExc_KeyboardInterrupt);
Barry Warsawc80baa31999-01-27 16:39:40 +00001024 Py_XDECREF(v);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001025 return;
1026 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +00001027 PyErr_NoMemory();
Barry Warsawc80baa31999-01-27 16:39:40 +00001028 Py_XDECREF(v);
Guido van Rossuma110aa61994-08-29 12:50:44 +00001029 return;
1030 case E_EOF:
1031 msg = "unexpected EOF while parsing";
1032 break;
Guido van Rossum560e8ad1998-04-10 19:43:42 +00001033 case E_INDENT:
1034 msg = "inconsistent use of tabs and spaces in indentation";
1035 break;
Guido van Rossuma110aa61994-08-29 12:50:44 +00001036 default:
1037 fprintf(stderr, "error=%d\n", err->error);
1038 msg = "unknown parsing error";
1039 break;
1040 }
Guido van Rossum82598051997-03-05 00:20:32 +00001041 w = Py_BuildValue("(sO)", msg, v);
1042 Py_XDECREF(v);
1043 PyErr_SetObject(PyExc_SyntaxError, w);
1044 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001045}
1046
1047/* Print fatal error message and abort */
1048
1049void
Guido van Rossum82598051997-03-05 00:20:32 +00001050Py_FatalError(msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001051 char *msg;
1052{
Guido van Rossum83dd6c31994-09-29 09:38:33 +00001053 fprintf(stderr, "Fatal Python error: %s\n", msg);
Guido van Rossum8ae87c01995-01-26 00:40:38 +00001054#ifdef macintosh
1055 for (;;);
1056#endif
Guido van Rossum9b38a141996-09-11 23:12:24 +00001057#ifdef MS_WIN32
Guido van Rossum23c94461997-05-22 20:21:30 +00001058 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +00001059 OutputDebugString(msg);
1060 OutputDebugString("\n");
Guido van Rossum0ba35361998-08-13 13:33:16 +00001061#ifdef _DEBUG
1062 DebugBreak();
Guido van Rossuma44823b1995-03-14 15:01:17 +00001063#endif
Guido van Rossum0ba35361998-08-13 13:33:16 +00001064#endif /* MS_WIN32 */
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001065 abort();
1066}
1067
1068/* Clean up and exit */
1069
Guido van Rossuma110aa61994-08-29 12:50:44 +00001070#ifdef WITH_THREAD
Guido van Rossum49b56061998-10-01 20:42:43 +00001071#include "pythread.h"
Guido van Rossum82598051997-03-05 00:20:32 +00001072int _PyThread_Started = 0; /* Set by threadmodule.c and maybe others */
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001073#endif
1074
Guido van Rossum2dcfc961998-10-01 16:01:57 +00001075#define NEXITFUNCS 32
Guido van Rossum1662dd51994-09-07 14:38:28 +00001076static void (*exitfuncs[NEXITFUNCS])();
1077static int nexitfuncs = 0;
1078
1079int Py_AtExit(func)
Guido van Rossum82598051997-03-05 00:20:32 +00001080 void (*func) Py_PROTO((void));
Guido van Rossum1662dd51994-09-07 14:38:28 +00001081{
1082 if (nexitfuncs >= NEXITFUNCS)
1083 return -1;
1084 exitfuncs[nexitfuncs++] = func;
1085 return 0;
1086}
1087
Guido van Rossumcc283f51997-08-05 02:22:03 +00001088static void
1089call_sys_exitfunc()
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001090{
Guido van Rossum82598051997-03-05 00:20:32 +00001091 PyObject *exitfunc = PySys_GetObject("exitfunc");
Guido van Rossum59bff391992-09-03 20:28:00 +00001092
1093 if (exitfunc) {
Guido van Rossumbf02fb21998-04-03 21:12:12 +00001094 PyObject *res, *f;
Guido van Rossum82598051997-03-05 00:20:32 +00001095 Py_INCREF(exitfunc);
1096 PySys_SetObject("exitfunc", (PyObject *)NULL);
Guido van Rossumbf02fb21998-04-03 21:12:12 +00001097 f = PySys_GetObject("stderr");
Guido van Rossum82598051997-03-05 00:20:32 +00001098 res = PyEval_CallObject(exitfunc, (PyObject *)NULL);
Guido van Rossum59bff391992-09-03 20:28:00 +00001099 if (res == NULL) {
Guido van Rossumbf02fb21998-04-03 21:12:12 +00001100 if (f)
1101 PyFile_WriteString("Error in sys.exitfunc:\n", f);
Guido van Rossum82598051997-03-05 00:20:32 +00001102 PyErr_Print();
Guido van Rossum59bff391992-09-03 20:28:00 +00001103 }
Guido van Rossum82598051997-03-05 00:20:32 +00001104 Py_DECREF(exitfunc);
Guido van Rossum59bff391992-09-03 20:28:00 +00001105 }
1106
Guido van Rossum0829c751998-02-28 04:31:39 +00001107 if (Py_FlushLine())
1108 PyErr_Clear();
Guido van Rossumcc283f51997-08-05 02:22:03 +00001109}
Guido van Rossum1662dd51994-09-07 14:38:28 +00001110
Guido van Rossumcc283f51997-08-05 02:22:03 +00001111static void
1112call_ll_exitfuncs()
1113{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001114 while (nexitfuncs > 0)
1115 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001116
1117 fflush(stdout);
1118 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001119}
1120
1121void
Guido van Rossum82598051997-03-05 00:20:32 +00001122Py_Exit(sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001123 int sts;
1124{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001125 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001126
Jack Jansen66a89771995-10-27 13:22:14 +00001127#ifdef macintosh
1128 PyMac_Exit(sts);
1129#else
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001130 exit(sts);
Jack Jansen66a89771995-10-27 13:22:14 +00001131#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001132}
1133
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001134static void
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001135initsigs()
1136{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001137#ifdef HAVE_SIGNAL_H
1138#ifdef SIGPIPE
1139 signal(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001140#endif
Guido van Rossuma110aa61994-08-29 12:50:44 +00001141#endif /* HAVE_SIGNAL_H */
Guido van Rossum82598051997-03-05 00:20:32 +00001142 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001143}
1144
Guido van Rossumaae0d321996-05-22 16:35:33 +00001145#ifdef Py_TRACE_REFS
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001146/* Ask a yes/no question */
1147
Guido van Rossum59bff391992-09-03 20:28:00 +00001148int
Guido van Rossum82598051997-03-05 00:20:32 +00001149_Py_AskYesNo(prompt)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001150 char *prompt;
1151{
1152 char buf[256];
1153
1154 printf("%s [ny] ", prompt);
1155 if (fgets(buf, sizeof buf, stdin) == NULL)
1156 return 0;
1157 return buf[0] == 'y' || buf[0] == 'Y';
1158}
1159#endif
1160
Guido van Rossuma110aa61994-08-29 12:50:44 +00001161#ifdef MPW
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001162
1163/* Check for file descriptor connected to interactive device.
1164 Pretend that stdin is always interactive, other files never. */
1165
1166int
1167isatty(fd)
1168 int fd;
1169{
1170 return fd == fileno(stdin);
1171}
1172
1173#endif
Guido van Rossum7433b121997-02-14 19:45:36 +00001174
1175/*
1176 * The file descriptor fd is considered ``interactive'' if either
1177 * a) isatty(fd) is TRUE, or
1178 * b) the -i flag was given, and the filename associated with
1179 * the descriptor is NULL or "<stdin>" or "???".
1180 */
1181int
1182Py_FdIsInteractive(fp, filename)
1183 FILE *fp;
1184 char *filename;
1185{
1186 if (isatty((int)fileno(fp)))
1187 return 1;
1188 if (!Py_InteractiveFlag)
1189 return 0;
1190 return (filename == NULL) ||
1191 (strcmp(filename, "<stdin>") == 0) ||
1192 (strcmp(filename, "???") == 0);
1193}