blob: b8abe252ea13aeb1a640cf9608b3d0dbca030def [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 Rossum1984f1e1992-08-04 12:41:02 +000080
Guido van Rossum25ce5661997-08-02 03:10:38 +000081static int initialized = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +000082
Guido van Rossume3c0d5e1997-08-22 04:20:13 +000083/* API to access the initialized flag -- useful for eroteric use */
84
85int
86Py_IsInitialized()
87{
88 return initialized;
89}
90
Guido van Rossum25ce5661997-08-02 03:10:38 +000091/* Global initializations. Can be undone by Py_Finalize(). Don't
92 call this twice without an intervening Py_Finalize() call. When
93 initializations fail, a fatal error is issued and the function does
94 not return. On return, the first thread and interpreter state have
95 been created.
Guido van Rossum1984f1e1992-08-04 12:41:02 +000096
Guido van Rossum25ce5661997-08-02 03:10:38 +000097 Locking: you must hold the interpreter lock while calling this.
98 (If the lock has not yet been initialized, that's equivalent to
99 having the lock, but you cannot use multiple threads.)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +0000100
Guido van Rossum25ce5661997-08-02 03:10:38 +0000101*/
Guido van Rossuma027efa1997-05-05 20:56:21 +0000102
103void
104Py_Initialize()
105{
Guido van Rossuma027efa1997-05-05 20:56:21 +0000106 PyInterpreterState *interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000107 PyThreadState *tstate;
108 PyObject *bimod, *sysmod;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000109 char *p;
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000110
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000111 if (initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000112 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000113 initialized = 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000114
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000115 if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
116 Py_DebugFlag = 1;
117 if ((p = getenv("PYTHONVERBOSE")) && *p != '\0')
118 Py_VerboseFlag = 1;
119
Guido van Rossuma027efa1997-05-05 20:56:21 +0000120 interp = PyInterpreterState_New();
121 if (interp == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000122 Py_FatalError("Py_Initialize: can't make first interpreter");
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000123
Guido van Rossuma027efa1997-05-05 20:56:21 +0000124 tstate = PyThreadState_New(interp);
125 if (tstate == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000126 Py_FatalError("Py_Initialize: can't make first thread");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000127 (void) PyThreadState_Swap(tstate);
128
Guido van Rossum25ce5661997-08-02 03:10:38 +0000129 interp->modules = PyDict_New();
130 if (interp->modules == NULL)
131 Py_FatalError("Py_Initialize: can't make modules dictionary");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000132
Barry Warsaw035574d1997-08-29 22:07:17 +0000133 bimod = _PyBuiltin_Init_1();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000134 if (bimod == NULL)
135 Py_FatalError("Py_Initialize: can't initialize __builtin__");
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000136 interp->builtins = PyModule_GetDict(bimod);
137 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000138
139 sysmod = _PySys_Init();
140 if (sysmod == NULL)
141 Py_FatalError("Py_Initialize: can't initialize sys");
142 interp->sysdict = PyModule_GetDict(sysmod);
143 Py_INCREF(interp->sysdict);
144 _PyImport_FixupExtension("sys", "sys");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000145 PySys_SetPath(Py_GetPath());
Guido van Rossum25ce5661997-08-02 03:10:38 +0000146 PyDict_SetItemString(interp->sysdict, "modules",
147 interp->modules);
148
Barry Warsaw035574d1997-08-29 22:07:17 +0000149 /* phase 2 of builtins */
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000150 _PyBuiltin_Init_2(interp->builtins);
Barry Warsaw963b8711997-09-18 16:42:02 +0000151 _PyImport_FixupExtension("__builtin__", "__builtin__");
Barry Warsaw035574d1997-08-29 22:07:17 +0000152
Guido van Rossum25ce5661997-08-02 03:10:38 +0000153 _PyImport_Init();
154
155 initsigs(); /* Signal handling stuff, including initintr() */
156
157 initmain(); /* Module __main__ */
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000158 if (!Py_NoSiteFlag)
159 initsite(); /* Module site */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000160}
161
162/* Undo the effect of Py_Initialize().
163
164 Beware: if multiple interpreter and/or thread states exist, these
165 are not wiped out; only the current thread and interpreter state
166 are deleted. But since everything else is deleted, those other
167 interpreter and thread states should no longer be used.
168
169 (XXX We should do better, e.g. wipe out all interpreters and
170 threads.)
171
172 Locking: as above.
173
174*/
175
176void
177Py_Finalize()
178{
179 PyInterpreterState *interp;
180 PyThreadState *tstate;
181
Guido van Rossumcc283f51997-08-05 02:22:03 +0000182 call_sys_exitfunc();
183
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000184 if (!initialized)
Guido van Rossumaa615051997-08-20 22:40:18 +0000185 return;
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000186 initialized = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000187
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000188 /* Get current thread state and interpreter pointer */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000189 tstate = PyThreadState_Get();
190 interp = tstate->interp;
191
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000192 /* Disable signal handling */
193 PyOS_FiniInterrupts();
194
195 /* Destroy PyExc_MemoryErrorInst */
196 _PyBuiltin_Fini_1();
197
198 /* Destroy all modules */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000199 PyImport_Cleanup();
Guido van Rossum3a44e1b1997-11-03 21:58:47 +0000200
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000201 /* Delete current thread */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000202 PyInterpreterState_Clear(interp);
203 PyThreadState_Swap(NULL);
204 PyInterpreterState_Delete(interp);
205
Guido van Rossum25ce5661997-08-02 03:10:38 +0000206 _PyImport_Fini();
Barry Warsaw035574d1997-08-29 22:07:17 +0000207
208 /* Now we decref the exception classes. After this point nothing
209 can raise an exception. That's okay, because each Fini() method
210 below has been checked to make sure no exceptions are ever
211 raised.
212 */
213 _PyBuiltin_Fini_2();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000214 PyMethod_Fini();
215 PyFrame_Fini();
216 PyCFunction_Fini();
217 PyTuple_Fini();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000218 PyString_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000219 PyInt_Fini();
220 PyFloat_Fini();
221
222 /* XXX Still allocated:
223 - various static ad-hoc pointers to interned strings
224 - int and float free list blocks
225 - whatever various modules and libraries allocate
226 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000227
228 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000229
230 call_ll_exitfuncs();
231
232#ifdef COUNT_ALLOCS
233 dump_counts();
234#endif
235
236#ifdef Py_REF_DEBUG
237 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
238#endif
239
240#ifdef Py_TRACE_REFS
241 if (_Py_AskYesNo("Print left references?")) {
242 _Py_PrintReferences(stderr);
243 }
244 _Py_ResetReferences();
245#endif /* Py_TRACE_REFS */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000246}
247
248/* Create and initialize a new interpreter and thread, and return the
249 new thread. This requires that Py_Initialize() has been called
250 first.
251
252 Unsuccessful initialization yields a NULL pointer. Note that *no*
253 exception information is available even in this case -- the
254 exception information is held in the thread, and there is no
255 thread.
256
257 Locking: as above.
258
259*/
260
261PyThreadState *
262Py_NewInterpreter()
263{
264 PyInterpreterState *interp;
265 PyThreadState *tstate, *save_tstate;
266 PyObject *bimod, *sysmod;
267
268 if (!initialized)
269 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
270
271 interp = PyInterpreterState_New();
272 if (interp == NULL)
273 return NULL;
274
275 tstate = PyThreadState_New(interp);
276 if (tstate == NULL) {
277 PyInterpreterState_Delete(interp);
278 return NULL;
279 }
280
281 save_tstate = PyThreadState_Swap(tstate);
282
283 /* XXX The following is lax in error checking */
284
285 interp->modules = PyDict_New();
286
287 bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
288 if (bimod != NULL) {
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000289 interp->builtins = PyModule_GetDict(bimod);
290 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000291 }
292 sysmod = _PyImport_FindExtension("sys", "sys");
293 if (bimod != NULL && sysmod != NULL) {
294 interp->sysdict = PyModule_GetDict(sysmod);
295 Py_INCREF(interp->sysdict);
296 PySys_SetPath(Py_GetPath());
297 PyDict_SetItemString(interp->sysdict, "modules",
298 interp->modules);
299 initmain();
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000300 if (!Py_NoSiteFlag)
301 initsite();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000302 }
303
304 if (!PyErr_Occurred())
305 return tstate;
306
307 /* Oops, it didn't work. Undo it all. */
308
309 PyErr_Print();
310 PyThreadState_Clear(tstate);
311 PyThreadState_Swap(save_tstate);
312 PyThreadState_Delete(tstate);
313 PyInterpreterState_Delete(interp);
314
315 return NULL;
316}
317
318/* Delete an interpreter and its last thread. This requires that the
319 given thread state is current, that the thread has no remaining
320 frames, and that it is its interpreter's only remaining thread.
321 It is a fatal error to violate these constraints.
322
323 (Py_Finalize() doesn't have these constraints -- it zaps
324 everything, regardless.)
325
326 Locking: as above.
327
328*/
329
330void
331Py_EndInterpreter(tstate)
332 PyThreadState *tstate;
333{
334 PyInterpreterState *interp = tstate->interp;
335
336 if (tstate != PyThreadState_Get())
337 Py_FatalError("Py_EndInterpreter: thread is not current");
338 if (tstate->frame != NULL)
339 Py_FatalError("Py_EndInterpreter: thread still has a frame");
340 if (tstate != interp->tstate_head || tstate->next != NULL)
341 Py_FatalError("Py_EndInterpreter: not the last thread");
342
343 PyImport_Cleanup();
344 PyInterpreterState_Clear(interp);
345 PyThreadState_Swap(NULL);
346 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000347}
348
349static char *progname = "python";
350
351void
352Py_SetProgramName(pn)
353 char *pn;
354{
355 if (pn && *pn)
356 progname = pn;
357}
358
359char *
360Py_GetProgramName()
361{
362 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000363}
364
Guido van Rossum6135a871995-01-09 17:53:26 +0000365/* Create __main__ module */
366
367static void
368initmain()
369{
Guido van Rossum82598051997-03-05 00:20:32 +0000370 PyObject *m, *d;
371 m = PyImport_AddModule("__main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000372 if (m == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000373 Py_FatalError("can't create __main__ module");
374 d = PyModule_GetDict(m);
375 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
Guido van Rossum858cb731997-11-19 16:15:37 +0000376 PyObject *bimod = PyImport_ImportModule("__builtin__");
377 if (bimod == NULL ||
378 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
Guido van Rossum82598051997-03-05 00:20:32 +0000379 Py_FatalError("can't add __builtins__ to __main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000380 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000381}
382
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000383/* Import the site module (not into __main__ though) */
384
385static void
386initsite()
387{
388 PyObject *m, *f;
389 m = PyImport_ImportModule("site");
390 if (m == NULL) {
391 f = PySys_GetObject("stderr");
392 if (Py_VerboseFlag) {
393 PyFile_WriteString(
394 "'import site' failed; traceback:\n", f);
395 PyErr_Print();
396 }
397 else {
398 PyFile_WriteString(
399 "'import site' failed; use -v for traceback\n", f);
400 PyErr_Clear();
401 }
402 }
403 else {
404 Py_DECREF(m);
405 }
406}
407
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000408/* Parse input from a file and execute it */
409
410int
Guido van Rossum82598051997-03-05 00:20:32 +0000411PyRun_AnyFile(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000412 FILE *fp;
413 char *filename;
414{
415 if (filename == NULL)
416 filename = "???";
Guido van Rossum7433b121997-02-14 19:45:36 +0000417 if (Py_FdIsInteractive(fp, filename))
Guido van Rossum82598051997-03-05 00:20:32 +0000418 return PyRun_InteractiveLoop(fp, filename);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000419 else
Guido van Rossum82598051997-03-05 00:20:32 +0000420 return PyRun_SimpleFile(fp, filename);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000421}
422
423int
Guido van Rossum82598051997-03-05 00:20:32 +0000424PyRun_InteractiveLoop(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000425 FILE *fp;
426 char *filename;
427{
Guido van Rossum82598051997-03-05 00:20:32 +0000428 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000429 int ret;
Guido van Rossum82598051997-03-05 00:20:32 +0000430 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000431 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000432 PySys_SetObject("ps1", v = PyString_FromString(">>> "));
433 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000434 }
Guido van Rossum82598051997-03-05 00:20:32 +0000435 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000436 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000437 PySys_SetObject("ps2", v = PyString_FromString("... "));
438 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000439 }
440 for (;;) {
Guido van Rossum82598051997-03-05 00:20:32 +0000441 ret = PyRun_InteractiveOne(fp, filename);
Guido van Rossumaae0d321996-05-22 16:35:33 +0000442#ifdef Py_REF_DEBUG
Guido van Rossum6f9e4331995-03-29 16:57:48 +0000443 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000444#endif
445 if (ret == E_EOF)
446 return 0;
447 /*
448 if (ret == E_NOMEM)
449 return -1;
450 */
451 }
452}
453
454int
Guido van Rossum82598051997-03-05 00:20:32 +0000455PyRun_InteractiveOne(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000456 FILE *fp;
457 char *filename;
458{
Guido van Rossum82598051997-03-05 00:20:32 +0000459 PyObject *m, *d, *v, *w;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000460 node *n;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000461 perrdetail err;
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000462 char *ps1 = "", *ps2 = "";
Guido van Rossum82598051997-03-05 00:20:32 +0000463 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000464 if (v != NULL) {
465 v = PyObject_Str(v);
466 if (v == NULL)
467 PyErr_Clear();
468 else if (PyString_Check(v))
469 ps1 = PyString_AsString(v);
470 }
Guido van Rossum82598051997-03-05 00:20:32 +0000471 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000472 if (w != NULL) {
473 w = PyObject_Str(w);
474 if (w == NULL)
475 PyErr_Clear();
476 else if (PyString_Check(w))
477 ps2 = PyString_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000478 }
Guido van Rossum82598051997-03-05 00:20:32 +0000479 Py_BEGIN_ALLOW_THREADS
480 n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar,
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000481 Py_single_input, ps1, ps2, &err);
Guido van Rossum82598051997-03-05 00:20:32 +0000482 Py_END_ALLOW_THREADS
483 Py_XDECREF(v);
484 Py_XDECREF(w);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000485 if (n == NULL) {
486 if (err.error == E_EOF) {
487 if (err.text)
488 free(err.text);
489 return E_EOF;
490 }
491 err_input(&err);
Guido van Rossum82598051997-03-05 00:20:32 +0000492 PyErr_Print();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000493 return err.error;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000494 }
Guido van Rossum82598051997-03-05 00:20:32 +0000495 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000496 if (m == NULL)
497 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000498 d = PyModule_GetDict(m);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000499 v = run_node(n, filename, d, d);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000500 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000501 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000502 return -1;
503 }
Guido van Rossum82598051997-03-05 00:20:32 +0000504 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000505 if (Py_FlushLine())
506 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000507 return 0;
508}
509
510int
Guido van Rossum82598051997-03-05 00:20:32 +0000511PyRun_SimpleFile(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000512 FILE *fp;
513 char *filename;
514{
Guido van Rossum82598051997-03-05 00:20:32 +0000515 PyObject *m, *d, *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000516 char *ext;
517
Guido van Rossum82598051997-03-05 00:20:32 +0000518 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000519 if (m == NULL)
520 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000521 d = PyModule_GetDict(m);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000522 ext = filename + strlen(filename) - 4;
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000523 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0
Jack Jansenbd06e961995-02-13 11:44:56 +0000524#ifdef macintosh
525 /* On a mac, we also assume a pyc file for types 'PYC ' and 'APPL' */
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000526 || getfiletype(filename) == 'PYC '
527 || getfiletype(filename) == 'APPL'
Jack Jansenbd06e961995-02-13 11:44:56 +0000528#endif /* macintosh */
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000529 ) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000530 /* Try to run a pyc file. First, re-open in binary */
Jack Jansene00637b1994-12-14 12:58:37 +0000531 /* Don't close, done in main: fclose(fp); */
Guido van Rossumfdef2711994-09-14 13:31:04 +0000532 if( (fp = fopen(filename, "rb")) == NULL ) {
533 fprintf(stderr, "python: Can't reopen .pyc file\n");
534 return -1;
535 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000536 /* Turn on optimization if a .pyo file is given */
537 if (strcmp(ext, ".pyo") == 0)
538 Py_OptimizeFlag = 1;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000539 v = run_pyc_file(fp, filename, d, d);
540 } else {
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000541 v = PyRun_File(fp, filename, Py_file_input, d, d);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000542 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000543 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000544 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000545 return -1;
546 }
Guido van Rossum82598051997-03-05 00:20:32 +0000547 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000548 if (Py_FlushLine())
549 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000550 return 0;
551}
552
553int
Guido van Rossum82598051997-03-05 00:20:32 +0000554PyRun_SimpleString(command)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000555 char *command;
556{
Guido van Rossum82598051997-03-05 00:20:32 +0000557 PyObject *m, *d, *v;
558 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000559 if (m == NULL)
560 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000561 d = PyModule_GetDict(m);
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000562 v = PyRun_String(command, Py_file_input, d, d);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000563 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000564 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000565 return -1;
566 }
Guido van Rossum82598051997-03-05 00:20:32 +0000567 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000568 if (Py_FlushLine())
569 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000570 return 0;
571}
572
Barry Warsaw035574d1997-08-29 22:07:17 +0000573static int
574parse_syntax_error(err, message, filename, lineno, offset, text)
575 PyObject* err;
576 PyObject** message;
577 char** filename;
578 int* lineno;
579 int* offset;
580 char** text;
581{
582 long hold;
583 PyObject *v;
584
585 /* old style errors */
586 if (PyTuple_Check(err))
587 return PyArg_Parse(err, "(O(ziiz))", message, filename,
588 lineno, offset, text);
589
590 /* new style errors. `err' is an instance */
591
592 if (! (v = PyObject_GetAttrString(err, "msg")))
593 goto finally;
594 *message = v;
595
596 if (!(v = PyObject_GetAttrString(err, "filename")))
597 goto finally;
598 if (v == Py_None)
599 *filename = NULL;
600 else if (! (*filename = PyString_AsString(v)))
601 goto finally;
602
603 Py_DECREF(v);
604 if (!(v = PyObject_GetAttrString(err, "lineno")))
605 goto finally;
606 hold = PyInt_AsLong(v);
607 Py_DECREF(v);
608 v = NULL;
609 if (hold < 0 && PyErr_Occurred())
610 goto finally;
611 *lineno = (int)hold;
612
613 if (!(v = PyObject_GetAttrString(err, "offset")))
614 goto finally;
615 hold = PyInt_AsLong(v);
616 Py_DECREF(v);
617 v = NULL;
618 if (hold < 0 && PyErr_Occurred())
619 goto finally;
620 *offset = (int)hold;
621
622 if (!(v = PyObject_GetAttrString(err, "text")))
623 goto finally;
624 if (v == Py_None)
625 *text = NULL;
626 else if (! (*text = PyString_AsString(v)))
627 goto finally;
628 Py_DECREF(v);
629 return 1;
630
631finally:
632 Py_XDECREF(v);
633 return 0;
634}
635
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000636void
Guido van Rossum82598051997-03-05 00:20:32 +0000637PyErr_Print()
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000638{
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000639 int err = 0;
Guido van Rossum82598051997-03-05 00:20:32 +0000640 PyObject *exception, *v, *tb, *f;
641 PyErr_Fetch(&exception, &v, &tb);
Barry Warsaw035574d1997-08-29 22:07:17 +0000642 PyErr_NormalizeException(&exception, &v, &tb);
643
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000644 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +0000645 return;
Barry Warsaw035574d1997-08-29 22:07:17 +0000646
Barry Warsaw36b8f941997-08-26 18:09:48 +0000647 if (PyErr_GivenExceptionMatches(exception, PyExc_SystemExit)) {
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000648 err = Py_FlushLine();
649 fflush(stdout);
Guido van Rossum82598051997-03-05 00:20:32 +0000650 if (v == NULL || v == Py_None)
651 Py_Exit(0);
Barry Warsaw035574d1997-08-29 22:07:17 +0000652 if (PyInstance_Check(v)) {
653 /* we expect the error code to be store in the
654 `code' attribute
655 */
656 PyObject *code = PyObject_GetAttrString(v, "code");
657 if (code) {
658 Py_DECREF(v);
659 v = code;
Guido van Rossumaa9606f1997-10-03 13:53:28 +0000660 if (v == Py_None)
661 Py_Exit(0);
Barry Warsaw035574d1997-08-29 22:07:17 +0000662 }
663 /* if we failed to dig out the "code" attribute,
664 then just let the else clause below print the
665 error
666 */
667 }
Guido van Rossum82598051997-03-05 00:20:32 +0000668 if (PyInt_Check(v))
669 Py_Exit((int)PyInt_AsLong(v));
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000670 else {
Guido van Rossum3165fe61992-09-25 21:59:05 +0000671 /* OK to use real stderr here */
Guido van Rossum82598051997-03-05 00:20:32 +0000672 PyObject_Print(v, stderr, Py_PRINT_RAW);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000673 fprintf(stderr, "\n");
Guido van Rossum82598051997-03-05 00:20:32 +0000674 Py_Exit(1);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000675 }
676 }
Guido van Rossum82598051997-03-05 00:20:32 +0000677 PySys_SetObject("last_type", exception);
678 PySys_SetObject("last_value", v);
679 PySys_SetObject("last_traceback", tb);
680 f = PySys_GetObject("stderr");
Guido van Rossum3165fe61992-09-25 21:59:05 +0000681 if (f == NULL)
682 fprintf(stderr, "lost sys.stderr\n");
683 else {
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000684 err = Py_FlushLine();
685 fflush(stdout);
686 if (err == 0)
687 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +0000688 if (err == 0 &&
689 PyErr_GivenExceptionMatches(exception, PyExc_SyntaxError))
690 {
Guido van Rossum82598051997-03-05 00:20:32 +0000691 PyObject *message;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000692 char *filename, *text;
693 int lineno, offset;
Barry Warsaw035574d1997-08-29 22:07:17 +0000694 if (!parse_syntax_error(v, &message, &filename,
695 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +0000696 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000697 else {
698 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +0000699 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000700 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000701 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000702 else
Guido van Rossum82598051997-03-05 00:20:32 +0000703 PyFile_WriteString(filename, f);
704 PyFile_WriteString("\", line ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000705 sprintf(buf, "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +0000706 PyFile_WriteString(buf, f);
707 PyFile_WriteString("\n", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000708 if (text != NULL) {
Guido van Rossum798199d1994-09-19 08:08:50 +0000709 char *nl;
710 if (offset > 0 &&
Guido van Rossum478e7181997-05-06 15:24:59 +0000711 offset == (int)strlen(text))
Guido van Rossum798199d1994-09-19 08:08:50 +0000712 offset--;
713 for (;;) {
714 nl = strchr(text, '\n');
715 if (nl == NULL ||
716 nl-text >= offset)
717 break;
718 offset -= (nl+1-text);
719 text = nl+1;
720 }
Guido van Rossuma110aa61994-08-29 12:50:44 +0000721 while (*text == ' ' || *text == '\t') {
722 text++;
723 offset--;
724 }
Guido van Rossum82598051997-03-05 00:20:32 +0000725 PyFile_WriteString(" ", f);
726 PyFile_WriteString(text, f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000727 if (*text == '\0' ||
728 text[strlen(text)-1] != '\n')
Guido van Rossum82598051997-03-05 00:20:32 +0000729 PyFile_WriteString("\n", f);
730 PyFile_WriteString(" ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000731 offset--;
732 while (offset > 0) {
Guido van Rossum82598051997-03-05 00:20:32 +0000733 PyFile_WriteString(" ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000734 offset--;
735 }
Guido van Rossum82598051997-03-05 00:20:32 +0000736 PyFile_WriteString("^\n", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000737 }
Guido van Rossum82598051997-03-05 00:20:32 +0000738 Py_INCREF(message);
739 Py_DECREF(v);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000740 v = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000741 /* Can't be bothered to check all those
742 PyFile_WriteString() calls */
743 if (PyErr_Occurred())
744 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000745 }
746 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000747 if (err) {
748 /* Don't do anything else */
749 }
750 else if (PyClass_Check(exception)) {
Barry Warsaw2f5f6a21997-09-16 21:42:03 +0000751 PyClassObject* exc = (PyClassObject*)exception;
752 PyObject* className = exc->cl_name;
753 PyObject* moduleName =
754 PyDict_GetItemString(exc->cl_dict, "__module__");
755
756 if (moduleName == NULL)
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000757 err = PyFile_WriteString("<unknown>", f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +0000758 else {
759 char* modstr = PyString_AsString(moduleName);
760 if (modstr && strcmp(modstr, "exceptions"))
761 {
762 err = PyFile_WriteString(modstr, f);
763 err += PyFile_WriteString(".", f);
764 }
765 }
766 if (err == 0) {
767 if (className == NULL)
768 err = PyFile_WriteString("<unknown>", f);
769 else
770 err = PyFile_WriteObject(className, f,
771 Py_PRINT_RAW);
772 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000773 }
774 else
775 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
776 if (err == 0) {
777 if (v != NULL && v != Py_None) {
Barry Warsaw035574d1997-08-29 22:07:17 +0000778 PyObject *s = PyObject_Str(v);
779 /* only print colon if the str() of the
780 object is not the empty string
781 */
Guido van Rossumd6bf45b1997-09-05 19:11:53 +0000782 if (s == NULL)
783 err = -1;
784 else if (!PyString_Check(s) ||
785 PyString_GET_SIZE(s) != 0)
Barry Warsaw035574d1997-08-29 22:07:17 +0000786 err = PyFile_WriteString(": ", f);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000787 if (err == 0)
Guido van Rossumd6bf45b1997-09-05 19:11:53 +0000788 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
789 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +0000790 }
Guido van Rossum262e1241995-02-07 15:30:45 +0000791 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000792 if (err == 0)
793 err = PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000794 }
Guido van Rossum82598051997-03-05 00:20:32 +0000795 Py_XDECREF(exception);
796 Py_XDECREF(v);
797 Py_XDECREF(tb);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000798 /* If an error happened here, don't show it.
799 XXX This is wrong, but too many callers rely on this behavior. */
800 if (err != 0)
801 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000802}
803
Guido van Rossum82598051997-03-05 00:20:32 +0000804PyObject *
805PyRun_String(str, start, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000806 char *str;
807 int start;
Guido van Rossum82598051997-03-05 00:20:32 +0000808 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000809{
Guido van Rossum82598051997-03-05 00:20:32 +0000810 return run_err_node(PyParser_SimpleParseString(str, start),
Guido van Rossuma110aa61994-08-29 12:50:44 +0000811 "<string>", globals, locals);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000812}
813
Guido van Rossum82598051997-03-05 00:20:32 +0000814PyObject *
815PyRun_File(fp, filename, start, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000816 FILE *fp;
817 char *filename;
818 int start;
Guido van Rossum82598051997-03-05 00:20:32 +0000819 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000820{
Guido van Rossum82598051997-03-05 00:20:32 +0000821 return run_err_node(PyParser_SimpleParseFile(fp, filename, start),
Guido van Rossuma110aa61994-08-29 12:50:44 +0000822 filename, globals, locals);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000823}
824
Guido van Rossum82598051997-03-05 00:20:32 +0000825static PyObject *
Guido van Rossuma110aa61994-08-29 12:50:44 +0000826run_err_node(n, filename, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000827 node *n;
828 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000829 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000830{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000831 if (n == NULL)
832 return NULL;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000833 return run_node(n, filename, globals, locals);
834}
835
Guido van Rossum82598051997-03-05 00:20:32 +0000836static PyObject *
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000837run_node(n, filename, globals, locals)
838 node *n;
839 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000840 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000841{
Guido van Rossum82598051997-03-05 00:20:32 +0000842 PyCodeObject *co;
843 PyObject *v;
844 co = PyNode_Compile(n, filename);
845 PyNode_Free(n);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000846 if (co == NULL)
847 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000848 v = PyEval_EvalCode(co, globals, locals);
849 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000850 return v;
851}
852
Guido van Rossum82598051997-03-05 00:20:32 +0000853static PyObject *
Guido van Rossumfdef2711994-09-14 13:31:04 +0000854run_pyc_file(fp, filename, globals, locals)
855 FILE *fp;
856 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000857 PyObject *globals, *locals;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000858{
Guido van Rossum82598051997-03-05 00:20:32 +0000859 PyCodeObject *co;
860 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000861 long magic;
Guido van Rossum82598051997-03-05 00:20:32 +0000862 long PyImport_GetMagicNumber();
Guido van Rossumfdef2711994-09-14 13:31:04 +0000863
Guido van Rossum82598051997-03-05 00:20:32 +0000864 magic = PyMarshal_ReadLongFromFile(fp);
865 if (magic != PyImport_GetMagicNumber()) {
866 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +0000867 "Bad magic number in .pyc file");
868 return NULL;
869 }
Guido van Rossum82598051997-03-05 00:20:32 +0000870 (void) PyMarshal_ReadLongFromFile(fp);
871 v = PyMarshal_ReadObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000872 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +0000873 if (v == NULL || !PyCode_Check(v)) {
874 Py_XDECREF(v);
875 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +0000876 "Bad code object in .pyc file");
877 return NULL;
878 }
Guido van Rossum82598051997-03-05 00:20:32 +0000879 co = (PyCodeObject *)v;
880 v = PyEval_EvalCode(co, globals, locals);
881 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000882 return v;
883}
884
Guido van Rossum82598051997-03-05 00:20:32 +0000885PyObject *
886Py_CompileString(str, filename, start)
Guido van Rossum5b722181993-03-30 17:46:03 +0000887 char *str;
888 char *filename;
889 int start;
890{
891 node *n;
Guido van Rossum82598051997-03-05 00:20:32 +0000892 PyCodeObject *co;
893 n = PyParser_SimpleParseString(str, start);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000894 if (n == NULL)
Guido van Rossum5b722181993-03-30 17:46:03 +0000895 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000896 co = PyNode_Compile(n, filename);
897 PyNode_Free(n);
898 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +0000899}
900
Guido van Rossuma110aa61994-08-29 12:50:44 +0000901/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000902
Guido van Rossuma110aa61994-08-29 12:50:44 +0000903node *
Guido van Rossum82598051997-03-05 00:20:32 +0000904PyParser_SimpleParseFile(fp, filename, start)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000905 FILE *fp;
906 char *filename;
907 int start;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000908{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000909 node *n;
910 perrdetail err;
Guido van Rossum82598051997-03-05 00:20:32 +0000911 Py_BEGIN_ALLOW_THREADS
912 n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar, start,
Guido van Rossuma110aa61994-08-29 12:50:44 +0000913 (char *)0, (char *)0, &err);
Guido van Rossum82598051997-03-05 00:20:32 +0000914 Py_END_ALLOW_THREADS
Guido van Rossuma110aa61994-08-29 12:50:44 +0000915 if (n == NULL)
916 err_input(&err);
917 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000918}
919
Guido van Rossuma110aa61994-08-29 12:50:44 +0000920/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000921
Guido van Rossuma110aa61994-08-29 12:50:44 +0000922node *
Guido van Rossum82598051997-03-05 00:20:32 +0000923PyParser_SimpleParseString(str, start)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000924 char *str;
925 int start;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000926{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000927 node *n;
928 perrdetail err;
Guido van Rossum82598051997-03-05 00:20:32 +0000929 n = PyParser_ParseString(str, &_PyParser_Grammar, start, &err);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000930 if (n == NULL)
931 err_input(&err);
932 return n;
933}
934
935/* Set the error appropriate to the given input error code (see errcode.h) */
936
937static void
938err_input(err)
939 perrdetail *err;
940{
Guido van Rossum82598051997-03-05 00:20:32 +0000941 PyObject *v, *w;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000942 char *msg = NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000943 v = Py_BuildValue("(ziiz)", err->filename,
Guido van Rossuma110aa61994-08-29 12:50:44 +0000944 err->lineno, err->offset, err->text);
945 if (err->text != NULL) {
946 free(err->text);
947 err->text = NULL;
948 }
949 switch (err->error) {
950 case E_SYNTAX:
951 msg = "invalid syntax";
952 break;
953 case E_TOKEN:
954 msg = "invalid token";
955
956 break;
957 case E_INTR:
Guido van Rossum82598051997-03-05 00:20:32 +0000958 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000959 return;
960 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +0000961 PyErr_NoMemory();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000962 return;
963 case E_EOF:
964 msg = "unexpected EOF while parsing";
965 break;
966 default:
967 fprintf(stderr, "error=%d\n", err->error);
968 msg = "unknown parsing error";
969 break;
970 }
Guido van Rossum82598051997-03-05 00:20:32 +0000971 w = Py_BuildValue("(sO)", msg, v);
972 Py_XDECREF(v);
973 PyErr_SetObject(PyExc_SyntaxError, w);
974 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000975}
976
977/* Print fatal error message and abort */
978
979void
Guido van Rossum82598051997-03-05 00:20:32 +0000980Py_FatalError(msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000981 char *msg;
982{
Guido van Rossum83dd6c31994-09-29 09:38:33 +0000983 fprintf(stderr, "Fatal Python error: %s\n", msg);
Guido van Rossum8ae87c01995-01-26 00:40:38 +0000984#ifdef macintosh
985 for (;;);
986#endif
Guido van Rossum9b38a141996-09-11 23:12:24 +0000987#ifdef MS_WIN32
Guido van Rossum23c94461997-05-22 20:21:30 +0000988 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +0000989 OutputDebugString(msg);
990 OutputDebugString("\n");
991#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000992 abort();
993}
994
995/* Clean up and exit */
996
Guido van Rossuma110aa61994-08-29 12:50:44 +0000997#ifdef WITH_THREAD
998#include "thread.h"
Guido van Rossum82598051997-03-05 00:20:32 +0000999int _PyThread_Started = 0; /* Set by threadmodule.c and maybe others */
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001000#endif
1001
Guido van Rossum1662dd51994-09-07 14:38:28 +00001002#define NEXITFUNCS 32
1003static void (*exitfuncs[NEXITFUNCS])();
1004static int nexitfuncs = 0;
1005
1006int Py_AtExit(func)
Guido van Rossum82598051997-03-05 00:20:32 +00001007 void (*func) Py_PROTO((void));
Guido van Rossum1662dd51994-09-07 14:38:28 +00001008{
1009 if (nexitfuncs >= NEXITFUNCS)
1010 return -1;
1011 exitfuncs[nexitfuncs++] = func;
1012 return 0;
1013}
1014
Guido van Rossumcc283f51997-08-05 02:22:03 +00001015static void
1016call_sys_exitfunc()
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001017{
Guido van Rossum82598051997-03-05 00:20:32 +00001018 PyObject *exitfunc = PySys_GetObject("exitfunc");
Guido van Rossum59bff391992-09-03 20:28:00 +00001019
1020 if (exitfunc) {
Guido van Rossum82598051997-03-05 00:20:32 +00001021 PyObject *res;
1022 Py_INCREF(exitfunc);
1023 PySys_SetObject("exitfunc", (PyObject *)NULL);
1024 res = PyEval_CallObject(exitfunc, (PyObject *)NULL);
Guido van Rossum59bff391992-09-03 20:28:00 +00001025 if (res == NULL) {
1026 fprintf(stderr, "Error in sys.exitfunc:\n");
Guido van Rossum82598051997-03-05 00:20:32 +00001027 PyErr_Print();
Guido van Rossum59bff391992-09-03 20:28:00 +00001028 }
Guido van Rossum82598051997-03-05 00:20:32 +00001029 Py_DECREF(exitfunc);
Guido van Rossum59bff391992-09-03 20:28:00 +00001030 }
1031
Guido van Rossum82598051997-03-05 00:20:32 +00001032 Py_FlushLine();
Guido van Rossumcc283f51997-08-05 02:22:03 +00001033}
Guido van Rossum1662dd51994-09-07 14:38:28 +00001034
Guido van Rossumcc283f51997-08-05 02:22:03 +00001035static void
1036call_ll_exitfuncs()
1037{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001038 while (nexitfuncs > 0)
1039 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001040
1041 fflush(stdout);
1042 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001043}
1044
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +00001045#ifdef COUNT_ALLOCS
Guido van Rossum82598051997-03-05 00:20:32 +00001046extern void dump_counts Py_PROTO((void));
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +00001047#endif
1048
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001049void
Guido van Rossum82598051997-03-05 00:20:32 +00001050Py_Exit(sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001051 int sts;
1052{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001053 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001054
Jack Jansen66a89771995-10-27 13:22:14 +00001055#ifdef macintosh
1056 PyMac_Exit(sts);
1057#else
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001058 exit(sts);
Jack Jansen66a89771995-10-27 13:22:14 +00001059#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001060}
1061
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001062static void
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001063initsigs()
1064{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001065#ifdef HAVE_SIGNAL_H
1066#ifdef SIGPIPE
1067 signal(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001068#endif
Guido van Rossuma110aa61994-08-29 12:50:44 +00001069#endif /* HAVE_SIGNAL_H */
Guido van Rossum82598051997-03-05 00:20:32 +00001070 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001071}
1072
Guido van Rossumaae0d321996-05-22 16:35:33 +00001073#ifdef Py_TRACE_REFS
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001074/* Ask a yes/no question */
1075
Guido van Rossum59bff391992-09-03 20:28:00 +00001076int
Guido van Rossum82598051997-03-05 00:20:32 +00001077_Py_AskYesNo(prompt)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001078 char *prompt;
1079{
1080 char buf[256];
1081
1082 printf("%s [ny] ", prompt);
1083 if (fgets(buf, sizeof buf, stdin) == NULL)
1084 return 0;
1085 return buf[0] == 'y' || buf[0] == 'Y';
1086}
1087#endif
1088
Guido van Rossuma110aa61994-08-29 12:50:44 +00001089#ifdef MPW
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001090
1091/* Check for file descriptor connected to interactive device.
1092 Pretend that stdin is always interactive, other files never. */
1093
1094int
1095isatty(fd)
1096 int fd;
1097{
1098 return fd == fileno(stdin);
1099}
1100
1101#endif
Guido van Rossum7433b121997-02-14 19:45:36 +00001102
1103/*
1104 * The file descriptor fd is considered ``interactive'' if either
1105 * a) isatty(fd) is TRUE, or
1106 * b) the -i flag was given, and the filename associated with
1107 * the descriptor is NULL or "<stdin>" or "???".
1108 */
1109int
1110Py_FdIsInteractive(fp, filename)
1111 FILE *fp;
1112 char *filename;
1113{
1114 if (isatty((int)fileno(fp)))
1115 return 1;
1116 if (!Py_InteractiveFlag)
1117 return 0;
1118 return (filename == NULL) ||
1119 (strcmp(filename, "<stdin>") == 0) ||
1120 (strcmp(filename, "???") == 0);
1121}