blob: e57428191885736d773b79207ba4b0666d9fe2a4 [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 Rossum1707aad1997-12-08 23:43:45 +0000201 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
202 _PyImport_Fini();
203
204 /* Debugging stuff */
205#ifdef COUNT_ALLOCS
206 dump_counts();
207#endif
208
209#ifdef Py_REF_DEBUG
210 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
211#endif
212
213#ifdef Py_TRACE_REFS
214 if (_Py_AskYesNo("Print left references?")) {
215 _Py_PrintReferences(stderr);
216 }
217#endif /* Py_TRACE_REFS */
218
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000219 /* Delete current thread */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000220 PyInterpreterState_Clear(interp);
221 PyThreadState_Swap(NULL);
222 PyInterpreterState_Delete(interp);
223
Barry Warsaw035574d1997-08-29 22:07:17 +0000224 /* Now we decref the exception classes. After this point nothing
225 can raise an exception. That's okay, because each Fini() method
226 below has been checked to make sure no exceptions are ever
227 raised.
228 */
229 _PyBuiltin_Fini_2();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000230 PyMethod_Fini();
231 PyFrame_Fini();
232 PyCFunction_Fini();
233 PyTuple_Fini();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000234 PyString_Fini();
Guido van Rossumcc283f51997-08-05 02:22:03 +0000235 PyInt_Fini();
236 PyFloat_Fini();
237
238 /* XXX Still allocated:
239 - various static ad-hoc pointers to interned strings
240 - int and float free list blocks
241 - whatever various modules and libraries allocate
242 */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000243
244 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
Guido van Rossumcc283f51997-08-05 02:22:03 +0000245
246 call_ll_exitfuncs();
247
Guido van Rossumcc283f51997-08-05 02:22:03 +0000248#ifdef Py_TRACE_REFS
Guido van Rossumcc283f51997-08-05 02:22:03 +0000249 _Py_ResetReferences();
250#endif /* Py_TRACE_REFS */
Guido van Rossum25ce5661997-08-02 03:10:38 +0000251}
252
253/* Create and initialize a new interpreter and thread, and return the
254 new thread. This requires that Py_Initialize() has been called
255 first.
256
257 Unsuccessful initialization yields a NULL pointer. Note that *no*
258 exception information is available even in this case -- the
259 exception information is held in the thread, and there is no
260 thread.
261
262 Locking: as above.
263
264*/
265
266PyThreadState *
267Py_NewInterpreter()
268{
269 PyInterpreterState *interp;
270 PyThreadState *tstate, *save_tstate;
271 PyObject *bimod, *sysmod;
272
273 if (!initialized)
274 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
275
276 interp = PyInterpreterState_New();
277 if (interp == NULL)
278 return NULL;
279
280 tstate = PyThreadState_New(interp);
281 if (tstate == NULL) {
282 PyInterpreterState_Delete(interp);
283 return NULL;
284 }
285
286 save_tstate = PyThreadState_Swap(tstate);
287
288 /* XXX The following is lax in error checking */
289
290 interp->modules = PyDict_New();
291
292 bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
293 if (bimod != NULL) {
Guido van Rossum4a1f39a1997-11-04 19:36:18 +0000294 interp->builtins = PyModule_GetDict(bimod);
295 Py_INCREF(interp->builtins);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000296 }
297 sysmod = _PyImport_FindExtension("sys", "sys");
298 if (bimod != NULL && sysmod != NULL) {
299 interp->sysdict = PyModule_GetDict(sysmod);
300 Py_INCREF(interp->sysdict);
301 PySys_SetPath(Py_GetPath());
302 PyDict_SetItemString(interp->sysdict, "modules",
303 interp->modules);
304 initmain();
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000305 if (!Py_NoSiteFlag)
306 initsite();
Guido van Rossum25ce5661997-08-02 03:10:38 +0000307 }
308
309 if (!PyErr_Occurred())
310 return tstate;
311
312 /* Oops, it didn't work. Undo it all. */
313
314 PyErr_Print();
315 PyThreadState_Clear(tstate);
316 PyThreadState_Swap(save_tstate);
317 PyThreadState_Delete(tstate);
318 PyInterpreterState_Delete(interp);
319
320 return NULL;
321}
322
323/* Delete an interpreter and its last thread. This requires that the
324 given thread state is current, that the thread has no remaining
325 frames, and that it is its interpreter's only remaining thread.
326 It is a fatal error to violate these constraints.
327
328 (Py_Finalize() doesn't have these constraints -- it zaps
329 everything, regardless.)
330
331 Locking: as above.
332
333*/
334
335void
336Py_EndInterpreter(tstate)
337 PyThreadState *tstate;
338{
339 PyInterpreterState *interp = tstate->interp;
340
341 if (tstate != PyThreadState_Get())
342 Py_FatalError("Py_EndInterpreter: thread is not current");
343 if (tstate->frame != NULL)
344 Py_FatalError("Py_EndInterpreter: thread still has a frame");
345 if (tstate != interp->tstate_head || tstate->next != NULL)
346 Py_FatalError("Py_EndInterpreter: not the last thread");
347
348 PyImport_Cleanup();
349 PyInterpreterState_Clear(interp);
350 PyThreadState_Swap(NULL);
351 PyInterpreterState_Delete(interp);
Guido van Rossumad6dfda1997-07-19 19:17:22 +0000352}
353
354static char *progname = "python";
355
356void
357Py_SetProgramName(pn)
358 char *pn;
359{
360 if (pn && *pn)
361 progname = pn;
362}
363
364char *
365Py_GetProgramName()
366{
367 return progname;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000368}
369
Guido van Rossum6135a871995-01-09 17:53:26 +0000370/* Create __main__ module */
371
372static void
373initmain()
374{
Guido van Rossum82598051997-03-05 00:20:32 +0000375 PyObject *m, *d;
376 m = PyImport_AddModule("__main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000377 if (m == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000378 Py_FatalError("can't create __main__ module");
379 d = PyModule_GetDict(m);
380 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
Guido van Rossum858cb731997-11-19 16:15:37 +0000381 PyObject *bimod = PyImport_ImportModule("__builtin__");
382 if (bimod == NULL ||
383 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
Guido van Rossum82598051997-03-05 00:20:32 +0000384 Py_FatalError("can't add __builtins__ to __main__");
Guido van Rossum6135a871995-01-09 17:53:26 +0000385 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000386}
387
Guido van Rossumdcc0c131997-08-29 22:32:42 +0000388/* Import the site module (not into __main__ though) */
389
390static void
391initsite()
392{
393 PyObject *m, *f;
394 m = PyImport_ImportModule("site");
395 if (m == NULL) {
396 f = PySys_GetObject("stderr");
397 if (Py_VerboseFlag) {
398 PyFile_WriteString(
399 "'import site' failed; traceback:\n", f);
400 PyErr_Print();
401 }
402 else {
403 PyFile_WriteString(
404 "'import site' failed; use -v for traceback\n", f);
405 PyErr_Clear();
406 }
407 }
408 else {
409 Py_DECREF(m);
410 }
411}
412
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000413/* Parse input from a file and execute it */
414
415int
Guido van Rossum82598051997-03-05 00:20:32 +0000416PyRun_AnyFile(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000417 FILE *fp;
418 char *filename;
419{
420 if (filename == NULL)
421 filename = "???";
Guido van Rossum7433b121997-02-14 19:45:36 +0000422 if (Py_FdIsInteractive(fp, filename))
Guido van Rossum82598051997-03-05 00:20:32 +0000423 return PyRun_InteractiveLoop(fp, filename);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000424 else
Guido van Rossum82598051997-03-05 00:20:32 +0000425 return PyRun_SimpleFile(fp, filename);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000426}
427
428int
Guido van Rossum82598051997-03-05 00:20:32 +0000429PyRun_InteractiveLoop(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000430 FILE *fp;
431 char *filename;
432{
Guido van Rossum82598051997-03-05 00:20:32 +0000433 PyObject *v;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000434 int ret;
Guido van Rossum82598051997-03-05 00:20:32 +0000435 v = PySys_GetObject("ps1");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000436 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000437 PySys_SetObject("ps1", v = PyString_FromString(">>> "));
438 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000439 }
Guido van Rossum82598051997-03-05 00:20:32 +0000440 v = PySys_GetObject("ps2");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000441 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000442 PySys_SetObject("ps2", v = PyString_FromString("... "));
443 Py_XDECREF(v);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000444 }
445 for (;;) {
Guido van Rossum82598051997-03-05 00:20:32 +0000446 ret = PyRun_InteractiveOne(fp, filename);
Guido van Rossumaae0d321996-05-22 16:35:33 +0000447#ifdef Py_REF_DEBUG
Guido van Rossum6f9e4331995-03-29 16:57:48 +0000448 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000449#endif
450 if (ret == E_EOF)
451 return 0;
452 /*
453 if (ret == E_NOMEM)
454 return -1;
455 */
456 }
457}
458
459int
Guido van Rossum82598051997-03-05 00:20:32 +0000460PyRun_InteractiveOne(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000461 FILE *fp;
462 char *filename;
463{
Guido van Rossum82598051997-03-05 00:20:32 +0000464 PyObject *m, *d, *v, *w;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000465 node *n;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000466 perrdetail err;
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000467 char *ps1 = "", *ps2 = "";
Guido van Rossum82598051997-03-05 00:20:32 +0000468 v = PySys_GetObject("ps1");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000469 if (v != NULL) {
470 v = PyObject_Str(v);
471 if (v == NULL)
472 PyErr_Clear();
473 else if (PyString_Check(v))
474 ps1 = PyString_AsString(v);
475 }
Guido van Rossum82598051997-03-05 00:20:32 +0000476 w = PySys_GetObject("ps2");
Guido van Rossumddc3fb51997-11-25 20:58:13 +0000477 if (w != NULL) {
478 w = PyObject_Str(w);
479 if (w == NULL)
480 PyErr_Clear();
481 else if (PyString_Check(w))
482 ps2 = PyString_AsString(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000483 }
Guido van Rossum82598051997-03-05 00:20:32 +0000484 Py_BEGIN_ALLOW_THREADS
485 n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar,
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000486 Py_single_input, ps1, ps2, &err);
Guido van Rossum82598051997-03-05 00:20:32 +0000487 Py_END_ALLOW_THREADS
488 Py_XDECREF(v);
489 Py_XDECREF(w);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000490 if (n == NULL) {
491 if (err.error == E_EOF) {
492 if (err.text)
493 free(err.text);
494 return E_EOF;
495 }
496 err_input(&err);
Guido van Rossum82598051997-03-05 00:20:32 +0000497 PyErr_Print();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000498 return err.error;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000499 }
Guido van Rossum82598051997-03-05 00:20:32 +0000500 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000501 if (m == NULL)
502 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000503 d = PyModule_GetDict(m);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000504 v = run_node(n, filename, d, d);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000505 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000506 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000507 return -1;
508 }
Guido van Rossum82598051997-03-05 00:20:32 +0000509 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000510 if (Py_FlushLine())
511 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000512 return 0;
513}
514
515int
Guido van Rossum82598051997-03-05 00:20:32 +0000516PyRun_SimpleFile(fp, filename)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000517 FILE *fp;
518 char *filename;
519{
Guido van Rossum82598051997-03-05 00:20:32 +0000520 PyObject *m, *d, *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000521 char *ext;
522
Guido van Rossum82598051997-03-05 00:20:32 +0000523 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000524 if (m == NULL)
525 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000526 d = PyModule_GetDict(m);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000527 ext = filename + strlen(filename) - 4;
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000528 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0
Jack Jansenbd06e961995-02-13 11:44:56 +0000529#ifdef macintosh
530 /* On a mac, we also assume a pyc file for types 'PYC ' and 'APPL' */
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000531 || getfiletype(filename) == 'PYC '
532 || getfiletype(filename) == 'APPL'
Jack Jansenbd06e961995-02-13 11:44:56 +0000533#endif /* macintosh */
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000534 ) {
Guido van Rossumfdef2711994-09-14 13:31:04 +0000535 /* Try to run a pyc file. First, re-open in binary */
Jack Jansene00637b1994-12-14 12:58:37 +0000536 /* Don't close, done in main: fclose(fp); */
Guido van Rossumfdef2711994-09-14 13:31:04 +0000537 if( (fp = fopen(filename, "rb")) == NULL ) {
538 fprintf(stderr, "python: Can't reopen .pyc file\n");
539 return -1;
540 }
Guido van Rossum2a7f58d1997-04-02 05:28:38 +0000541 /* Turn on optimization if a .pyo file is given */
542 if (strcmp(ext, ".pyo") == 0)
543 Py_OptimizeFlag = 1;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000544 v = run_pyc_file(fp, filename, d, d);
545 } else {
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000546 v = PyRun_File(fp, filename, Py_file_input, d, d);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000547 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000548 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000549 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000550 return -1;
551 }
Guido van Rossum82598051997-03-05 00:20:32 +0000552 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000553 if (Py_FlushLine())
554 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000555 return 0;
556}
557
558int
Guido van Rossum82598051997-03-05 00:20:32 +0000559PyRun_SimpleString(command)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000560 char *command;
561{
Guido van Rossum82598051997-03-05 00:20:32 +0000562 PyObject *m, *d, *v;
563 m = PyImport_AddModule("__main__");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000564 if (m == NULL)
565 return -1;
Guido van Rossum82598051997-03-05 00:20:32 +0000566 d = PyModule_GetDict(m);
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000567 v = PyRun_String(command, Py_file_input, d, d);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000568 if (v == NULL) {
Guido van Rossum82598051997-03-05 00:20:32 +0000569 PyErr_Print();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000570 return -1;
571 }
Guido van Rossum82598051997-03-05 00:20:32 +0000572 Py_DECREF(v);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000573 if (Py_FlushLine())
574 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000575 return 0;
576}
577
Barry Warsaw035574d1997-08-29 22:07:17 +0000578static int
579parse_syntax_error(err, message, filename, lineno, offset, text)
580 PyObject* err;
581 PyObject** message;
582 char** filename;
583 int* lineno;
584 int* offset;
585 char** text;
586{
587 long hold;
588 PyObject *v;
589
590 /* old style errors */
591 if (PyTuple_Check(err))
592 return PyArg_Parse(err, "(O(ziiz))", message, filename,
593 lineno, offset, text);
594
595 /* new style errors. `err' is an instance */
596
597 if (! (v = PyObject_GetAttrString(err, "msg")))
598 goto finally;
599 *message = v;
600
601 if (!(v = PyObject_GetAttrString(err, "filename")))
602 goto finally;
603 if (v == Py_None)
604 *filename = NULL;
605 else if (! (*filename = PyString_AsString(v)))
606 goto finally;
607
608 Py_DECREF(v);
609 if (!(v = PyObject_GetAttrString(err, "lineno")))
610 goto finally;
611 hold = PyInt_AsLong(v);
612 Py_DECREF(v);
613 v = NULL;
614 if (hold < 0 && PyErr_Occurred())
615 goto finally;
616 *lineno = (int)hold;
617
618 if (!(v = PyObject_GetAttrString(err, "offset")))
619 goto finally;
620 hold = PyInt_AsLong(v);
621 Py_DECREF(v);
622 v = NULL;
623 if (hold < 0 && PyErr_Occurred())
624 goto finally;
625 *offset = (int)hold;
626
627 if (!(v = PyObject_GetAttrString(err, "text")))
628 goto finally;
629 if (v == Py_None)
630 *text = NULL;
631 else if (! (*text = PyString_AsString(v)))
632 goto finally;
633 Py_DECREF(v);
634 return 1;
635
636finally:
637 Py_XDECREF(v);
638 return 0;
639}
640
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000641void
Guido van Rossum82598051997-03-05 00:20:32 +0000642PyErr_Print()
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000643{
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000644 int err = 0;
Guido van Rossum82598051997-03-05 00:20:32 +0000645 PyObject *exception, *v, *tb, *f;
646 PyErr_Fetch(&exception, &v, &tb);
Barry Warsaw035574d1997-08-29 22:07:17 +0000647 PyErr_NormalizeException(&exception, &v, &tb);
648
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000649 if (exception == NULL)
Guido van Rossum296b4751997-05-23 00:19:20 +0000650 return;
Barry Warsaw035574d1997-08-29 22:07:17 +0000651
Barry Warsaw36b8f941997-08-26 18:09:48 +0000652 if (PyErr_GivenExceptionMatches(exception, PyExc_SystemExit)) {
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000653 err = Py_FlushLine();
654 fflush(stdout);
Guido van Rossum82598051997-03-05 00:20:32 +0000655 if (v == NULL || v == Py_None)
656 Py_Exit(0);
Barry Warsaw035574d1997-08-29 22:07:17 +0000657 if (PyInstance_Check(v)) {
658 /* we expect the error code to be store in the
659 `code' attribute
660 */
661 PyObject *code = PyObject_GetAttrString(v, "code");
662 if (code) {
663 Py_DECREF(v);
664 v = code;
Guido van Rossumaa9606f1997-10-03 13:53:28 +0000665 if (v == Py_None)
666 Py_Exit(0);
Barry Warsaw035574d1997-08-29 22:07:17 +0000667 }
668 /* if we failed to dig out the "code" attribute,
669 then just let the else clause below print the
670 error
671 */
672 }
Guido van Rossum82598051997-03-05 00:20:32 +0000673 if (PyInt_Check(v))
674 Py_Exit((int)PyInt_AsLong(v));
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000675 else {
Guido van Rossum3165fe61992-09-25 21:59:05 +0000676 /* OK to use real stderr here */
Guido van Rossum82598051997-03-05 00:20:32 +0000677 PyObject_Print(v, stderr, Py_PRINT_RAW);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000678 fprintf(stderr, "\n");
Guido van Rossum82598051997-03-05 00:20:32 +0000679 Py_Exit(1);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000680 }
681 }
Guido van Rossum82598051997-03-05 00:20:32 +0000682 PySys_SetObject("last_type", exception);
683 PySys_SetObject("last_value", v);
684 PySys_SetObject("last_traceback", tb);
685 f = PySys_GetObject("stderr");
Guido van Rossum3165fe61992-09-25 21:59:05 +0000686 if (f == NULL)
687 fprintf(stderr, "lost sys.stderr\n");
688 else {
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000689 err = Py_FlushLine();
690 fflush(stdout);
691 if (err == 0)
692 err = PyTraceBack_Print(tb, f);
Barry Warsaw36b8f941997-08-26 18:09:48 +0000693 if (err == 0 &&
694 PyErr_GivenExceptionMatches(exception, PyExc_SyntaxError))
695 {
Guido van Rossum82598051997-03-05 00:20:32 +0000696 PyObject *message;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000697 char *filename, *text;
698 int lineno, offset;
Barry Warsaw035574d1997-08-29 22:07:17 +0000699 if (!parse_syntax_error(v, &message, &filename,
700 &lineno, &offset, &text))
Guido van Rossum82598051997-03-05 00:20:32 +0000701 PyErr_Clear();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000702 else {
703 char buf[10];
Guido van Rossum82598051997-03-05 00:20:32 +0000704 PyFile_WriteString(" File \"", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000705 if (filename == NULL)
Guido van Rossum82598051997-03-05 00:20:32 +0000706 PyFile_WriteString("<string>", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000707 else
Guido van Rossum82598051997-03-05 00:20:32 +0000708 PyFile_WriteString(filename, f);
709 PyFile_WriteString("\", line ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000710 sprintf(buf, "%d", lineno);
Guido van Rossum82598051997-03-05 00:20:32 +0000711 PyFile_WriteString(buf, f);
712 PyFile_WriteString("\n", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000713 if (text != NULL) {
Guido van Rossum798199d1994-09-19 08:08:50 +0000714 char *nl;
715 if (offset > 0 &&
Guido van Rossum478e7181997-05-06 15:24:59 +0000716 offset == (int)strlen(text))
Guido van Rossum798199d1994-09-19 08:08:50 +0000717 offset--;
718 for (;;) {
719 nl = strchr(text, '\n');
720 if (nl == NULL ||
721 nl-text >= offset)
722 break;
723 offset -= (nl+1-text);
724 text = nl+1;
725 }
Guido van Rossuma110aa61994-08-29 12:50:44 +0000726 while (*text == ' ' || *text == '\t') {
727 text++;
728 offset--;
729 }
Guido van Rossum82598051997-03-05 00:20:32 +0000730 PyFile_WriteString(" ", f);
731 PyFile_WriteString(text, f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000732 if (*text == '\0' ||
733 text[strlen(text)-1] != '\n')
Guido van Rossum82598051997-03-05 00:20:32 +0000734 PyFile_WriteString("\n", f);
735 PyFile_WriteString(" ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000736 offset--;
737 while (offset > 0) {
Guido van Rossum82598051997-03-05 00:20:32 +0000738 PyFile_WriteString(" ", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000739 offset--;
740 }
Guido van Rossum82598051997-03-05 00:20:32 +0000741 PyFile_WriteString("^\n", f);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000742 }
Guido van Rossum82598051997-03-05 00:20:32 +0000743 Py_INCREF(message);
744 Py_DECREF(v);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000745 v = message;
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000746 /* Can't be bothered to check all those
747 PyFile_WriteString() calls */
748 if (PyErr_Occurred())
749 err = -1;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000750 }
751 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000752 if (err) {
753 /* Don't do anything else */
754 }
755 else if (PyClass_Check(exception)) {
Barry Warsaw2f5f6a21997-09-16 21:42:03 +0000756 PyClassObject* exc = (PyClassObject*)exception;
757 PyObject* className = exc->cl_name;
758 PyObject* moduleName =
759 PyDict_GetItemString(exc->cl_dict, "__module__");
760
761 if (moduleName == NULL)
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000762 err = PyFile_WriteString("<unknown>", f);
Barry Warsaw2f5f6a21997-09-16 21:42:03 +0000763 else {
764 char* modstr = PyString_AsString(moduleName);
765 if (modstr && strcmp(modstr, "exceptions"))
766 {
767 err = PyFile_WriteString(modstr, f);
768 err += PyFile_WriteString(".", f);
769 }
770 }
771 if (err == 0) {
772 if (className == NULL)
773 err = PyFile_WriteString("<unknown>", f);
774 else
775 err = PyFile_WriteObject(className, f,
776 Py_PRINT_RAW);
777 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000778 }
779 else
780 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
781 if (err == 0) {
782 if (v != NULL && v != Py_None) {
Barry Warsaw035574d1997-08-29 22:07:17 +0000783 PyObject *s = PyObject_Str(v);
784 /* only print colon if the str() of the
785 object is not the empty string
786 */
Guido van Rossumd6bf45b1997-09-05 19:11:53 +0000787 if (s == NULL)
788 err = -1;
789 else if (!PyString_Check(s) ||
790 PyString_GET_SIZE(s) != 0)
Barry Warsaw035574d1997-08-29 22:07:17 +0000791 err = PyFile_WriteString(": ", f);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000792 if (err == 0)
Guido van Rossumd6bf45b1997-09-05 19:11:53 +0000793 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
794 Py_XDECREF(s);
Guido van Rossum262e1241995-02-07 15:30:45 +0000795 }
Guido van Rossum262e1241995-02-07 15:30:45 +0000796 }
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000797 if (err == 0)
798 err = PyFile_WriteString("\n", f);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000799 }
Guido van Rossum82598051997-03-05 00:20:32 +0000800 Py_XDECREF(exception);
801 Py_XDECREF(v);
802 Py_XDECREF(tb);
Guido van Rossum78a1ed31997-05-22 22:35:04 +0000803 /* If an error happened here, don't show it.
804 XXX This is wrong, but too many callers rely on this behavior. */
805 if (err != 0)
806 PyErr_Clear();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000807}
808
Guido van Rossum82598051997-03-05 00:20:32 +0000809PyObject *
810PyRun_String(str, start, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000811 char *str;
812 int start;
Guido van Rossum82598051997-03-05 00:20:32 +0000813 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000814{
Guido van Rossum82598051997-03-05 00:20:32 +0000815 return run_err_node(PyParser_SimpleParseString(str, start),
Guido van Rossuma110aa61994-08-29 12:50:44 +0000816 "<string>", globals, locals);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000817}
818
Guido van Rossum82598051997-03-05 00:20:32 +0000819PyObject *
820PyRun_File(fp, filename, start, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000821 FILE *fp;
822 char *filename;
823 int start;
Guido van Rossum82598051997-03-05 00:20:32 +0000824 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000825{
Guido van Rossum82598051997-03-05 00:20:32 +0000826 return run_err_node(PyParser_SimpleParseFile(fp, filename, start),
Guido van Rossuma110aa61994-08-29 12:50:44 +0000827 filename, globals, locals);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000828}
829
Guido van Rossum82598051997-03-05 00:20:32 +0000830static PyObject *
Guido van Rossuma110aa61994-08-29 12:50:44 +0000831run_err_node(n, filename, globals, locals)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000832 node *n;
833 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000834 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000835{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000836 if (n == NULL)
837 return NULL;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000838 return run_node(n, filename, globals, locals);
839}
840
Guido van Rossum82598051997-03-05 00:20:32 +0000841static PyObject *
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000842run_node(n, filename, globals, locals)
843 node *n;
844 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000845 PyObject *globals, *locals;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000846{
Guido van Rossum82598051997-03-05 00:20:32 +0000847 PyCodeObject *co;
848 PyObject *v;
849 co = PyNode_Compile(n, filename);
850 PyNode_Free(n);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000851 if (co == NULL)
852 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000853 v = PyEval_EvalCode(co, globals, locals);
854 Py_DECREF(co);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000855 return v;
856}
857
Guido van Rossum82598051997-03-05 00:20:32 +0000858static PyObject *
Guido van Rossumfdef2711994-09-14 13:31:04 +0000859run_pyc_file(fp, filename, globals, locals)
860 FILE *fp;
861 char *filename;
Guido van Rossum82598051997-03-05 00:20:32 +0000862 PyObject *globals, *locals;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000863{
Guido van Rossum82598051997-03-05 00:20:32 +0000864 PyCodeObject *co;
865 PyObject *v;
Guido van Rossumfdef2711994-09-14 13:31:04 +0000866 long magic;
Guido van Rossum82598051997-03-05 00:20:32 +0000867 long PyImport_GetMagicNumber();
Guido van Rossumfdef2711994-09-14 13:31:04 +0000868
Guido van Rossum82598051997-03-05 00:20:32 +0000869 magic = PyMarshal_ReadLongFromFile(fp);
870 if (magic != PyImport_GetMagicNumber()) {
871 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +0000872 "Bad magic number in .pyc file");
873 return NULL;
874 }
Guido van Rossum82598051997-03-05 00:20:32 +0000875 (void) PyMarshal_ReadLongFromFile(fp);
876 v = PyMarshal_ReadObjectFromFile(fp);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000877 fclose(fp);
Guido van Rossum82598051997-03-05 00:20:32 +0000878 if (v == NULL || !PyCode_Check(v)) {
879 Py_XDECREF(v);
880 PyErr_SetString(PyExc_RuntimeError,
Guido van Rossumfdef2711994-09-14 13:31:04 +0000881 "Bad code object in .pyc file");
882 return NULL;
883 }
Guido van Rossum82598051997-03-05 00:20:32 +0000884 co = (PyCodeObject *)v;
885 v = PyEval_EvalCode(co, globals, locals);
886 Py_DECREF(co);
Guido van Rossumfdef2711994-09-14 13:31:04 +0000887 return v;
888}
889
Guido van Rossum82598051997-03-05 00:20:32 +0000890PyObject *
891Py_CompileString(str, filename, start)
Guido van Rossum5b722181993-03-30 17:46:03 +0000892 char *str;
893 char *filename;
894 int start;
895{
896 node *n;
Guido van Rossum82598051997-03-05 00:20:32 +0000897 PyCodeObject *co;
898 n = PyParser_SimpleParseString(str, start);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000899 if (n == NULL)
Guido van Rossum5b722181993-03-30 17:46:03 +0000900 return NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000901 co = PyNode_Compile(n, filename);
902 PyNode_Free(n);
903 return (PyObject *)co;
Guido van Rossum5b722181993-03-30 17:46:03 +0000904}
905
Guido van Rossuma110aa61994-08-29 12:50:44 +0000906/* Simplified interface to parsefile -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000907
Guido van Rossuma110aa61994-08-29 12:50:44 +0000908node *
Guido van Rossum82598051997-03-05 00:20:32 +0000909PyParser_SimpleParseFile(fp, filename, start)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000910 FILE *fp;
911 char *filename;
912 int start;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000913{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000914 node *n;
915 perrdetail err;
Guido van Rossum82598051997-03-05 00:20:32 +0000916 Py_BEGIN_ALLOW_THREADS
917 n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar, start,
Guido van Rossuma110aa61994-08-29 12:50:44 +0000918 (char *)0, (char *)0, &err);
Guido van Rossum82598051997-03-05 00:20:32 +0000919 Py_END_ALLOW_THREADS
Guido van Rossuma110aa61994-08-29 12:50:44 +0000920 if (n == NULL)
921 err_input(&err);
922 return n;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000923}
924
Guido van Rossuma110aa61994-08-29 12:50:44 +0000925/* Simplified interface to parsestring -- return node or set exception */
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000926
Guido van Rossuma110aa61994-08-29 12:50:44 +0000927node *
Guido van Rossum82598051997-03-05 00:20:32 +0000928PyParser_SimpleParseString(str, start)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000929 char *str;
930 int start;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000931{
Guido van Rossuma110aa61994-08-29 12:50:44 +0000932 node *n;
933 perrdetail err;
Guido van Rossum82598051997-03-05 00:20:32 +0000934 n = PyParser_ParseString(str, &_PyParser_Grammar, start, &err);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000935 if (n == NULL)
936 err_input(&err);
937 return n;
938}
939
940/* Set the error appropriate to the given input error code (see errcode.h) */
941
942static void
943err_input(err)
944 perrdetail *err;
945{
Guido van Rossum82598051997-03-05 00:20:32 +0000946 PyObject *v, *w;
Guido van Rossuma110aa61994-08-29 12:50:44 +0000947 char *msg = NULL;
Guido van Rossum82598051997-03-05 00:20:32 +0000948 v = Py_BuildValue("(ziiz)", err->filename,
Guido van Rossuma110aa61994-08-29 12:50:44 +0000949 err->lineno, err->offset, err->text);
950 if (err->text != NULL) {
951 free(err->text);
952 err->text = NULL;
953 }
954 switch (err->error) {
955 case E_SYNTAX:
956 msg = "invalid syntax";
957 break;
958 case E_TOKEN:
959 msg = "invalid token";
960
961 break;
962 case E_INTR:
Guido van Rossum82598051997-03-05 00:20:32 +0000963 PyErr_SetNone(PyExc_KeyboardInterrupt);
Guido van Rossuma110aa61994-08-29 12:50:44 +0000964 return;
965 case E_NOMEM:
Guido van Rossum82598051997-03-05 00:20:32 +0000966 PyErr_NoMemory();
Guido van Rossuma110aa61994-08-29 12:50:44 +0000967 return;
968 case E_EOF:
969 msg = "unexpected EOF while parsing";
970 break;
971 default:
972 fprintf(stderr, "error=%d\n", err->error);
973 msg = "unknown parsing error";
974 break;
975 }
Guido van Rossum82598051997-03-05 00:20:32 +0000976 w = Py_BuildValue("(sO)", msg, v);
977 Py_XDECREF(v);
978 PyErr_SetObject(PyExc_SyntaxError, w);
979 Py_XDECREF(w);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000980}
981
982/* Print fatal error message and abort */
983
984void
Guido van Rossum82598051997-03-05 00:20:32 +0000985Py_FatalError(msg)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000986 char *msg;
987{
Guido van Rossum83dd6c31994-09-29 09:38:33 +0000988 fprintf(stderr, "Fatal Python error: %s\n", msg);
Guido van Rossum8ae87c01995-01-26 00:40:38 +0000989#ifdef macintosh
990 for (;;);
991#endif
Guido van Rossum9b38a141996-09-11 23:12:24 +0000992#ifdef MS_WIN32
Guido van Rossum23c94461997-05-22 20:21:30 +0000993 OutputDebugString("Fatal Python error: ");
Guido van Rossuma44823b1995-03-14 15:01:17 +0000994 OutputDebugString(msg);
995 OutputDebugString("\n");
996#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000997 abort();
998}
999
1000/* Clean up and exit */
1001
Guido van Rossuma110aa61994-08-29 12:50:44 +00001002#ifdef WITH_THREAD
1003#include "thread.h"
Guido van Rossum82598051997-03-05 00:20:32 +00001004int _PyThread_Started = 0; /* Set by threadmodule.c and maybe others */
Guido van Rossumf9f2e821992-08-17 08:59:08 +00001005#endif
1006
Guido van Rossum1662dd51994-09-07 14:38:28 +00001007#define NEXITFUNCS 32
1008static void (*exitfuncs[NEXITFUNCS])();
1009static int nexitfuncs = 0;
1010
1011int Py_AtExit(func)
Guido van Rossum82598051997-03-05 00:20:32 +00001012 void (*func) Py_PROTO((void));
Guido van Rossum1662dd51994-09-07 14:38:28 +00001013{
1014 if (nexitfuncs >= NEXITFUNCS)
1015 return -1;
1016 exitfuncs[nexitfuncs++] = func;
1017 return 0;
1018}
1019
Guido van Rossumcc283f51997-08-05 02:22:03 +00001020static void
1021call_sys_exitfunc()
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001022{
Guido van Rossum82598051997-03-05 00:20:32 +00001023 PyObject *exitfunc = PySys_GetObject("exitfunc");
Guido van Rossum59bff391992-09-03 20:28:00 +00001024
1025 if (exitfunc) {
Guido van Rossum82598051997-03-05 00:20:32 +00001026 PyObject *res;
1027 Py_INCREF(exitfunc);
1028 PySys_SetObject("exitfunc", (PyObject *)NULL);
1029 res = PyEval_CallObject(exitfunc, (PyObject *)NULL);
Guido van Rossum59bff391992-09-03 20:28:00 +00001030 if (res == NULL) {
1031 fprintf(stderr, "Error in sys.exitfunc:\n");
Guido van Rossum82598051997-03-05 00:20:32 +00001032 PyErr_Print();
Guido van Rossum59bff391992-09-03 20:28:00 +00001033 }
Guido van Rossum82598051997-03-05 00:20:32 +00001034 Py_DECREF(exitfunc);
Guido van Rossum59bff391992-09-03 20:28:00 +00001035 }
1036
Guido van Rossum82598051997-03-05 00:20:32 +00001037 Py_FlushLine();
Guido van Rossumcc283f51997-08-05 02:22:03 +00001038}
Guido van Rossum1662dd51994-09-07 14:38:28 +00001039
Guido van Rossumcc283f51997-08-05 02:22:03 +00001040static void
1041call_ll_exitfuncs()
1042{
Guido van Rossum1662dd51994-09-07 14:38:28 +00001043 while (nexitfuncs > 0)
1044 (*exitfuncs[--nexitfuncs])();
Guido van Rossum25ce5661997-08-02 03:10:38 +00001045
1046 fflush(stdout);
1047 fflush(stderr);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001048}
1049
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +00001050#ifdef COUNT_ALLOCS
Guido van Rossum82598051997-03-05 00:20:32 +00001051extern void dump_counts Py_PROTO((void));
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +00001052#endif
1053
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001054void
Guido van Rossum82598051997-03-05 00:20:32 +00001055Py_Exit(sts)
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001056 int sts;
1057{
Guido van Rossumcc283f51997-08-05 02:22:03 +00001058 Py_Finalize();
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001059
Jack Jansen66a89771995-10-27 13:22:14 +00001060#ifdef macintosh
1061 PyMac_Exit(sts);
1062#else
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001063 exit(sts);
Jack Jansen66a89771995-10-27 13:22:14 +00001064#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001065}
1066
Guido van Rossumf1dc5661993-07-05 10:31:29 +00001067static void
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001068initsigs()
1069{
Guido van Rossuma110aa61994-08-29 12:50:44 +00001070#ifdef HAVE_SIGNAL_H
1071#ifdef SIGPIPE
1072 signal(SIGPIPE, SIG_IGN);
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001073#endif
Guido van Rossuma110aa61994-08-29 12:50:44 +00001074#endif /* HAVE_SIGNAL_H */
Guido van Rossum82598051997-03-05 00:20:32 +00001075 PyOS_InitInterrupts(); /* May imply initsignal() */
Guido van Rossuma9e7dc11992-10-18 18:53:57 +00001076}
1077
Guido van Rossumaae0d321996-05-22 16:35:33 +00001078#ifdef Py_TRACE_REFS
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001079/* Ask a yes/no question */
1080
Guido van Rossum59bff391992-09-03 20:28:00 +00001081int
Guido van Rossum82598051997-03-05 00:20:32 +00001082_Py_AskYesNo(prompt)
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001083 char *prompt;
1084{
1085 char buf[256];
1086
1087 printf("%s [ny] ", prompt);
1088 if (fgets(buf, sizeof buf, stdin) == NULL)
1089 return 0;
1090 return buf[0] == 'y' || buf[0] == 'Y';
1091}
1092#endif
1093
Guido van Rossuma110aa61994-08-29 12:50:44 +00001094#ifdef MPW
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001095
1096/* Check for file descriptor connected to interactive device.
1097 Pretend that stdin is always interactive, other files never. */
1098
1099int
1100isatty(fd)
1101 int fd;
1102{
1103 return fd == fileno(stdin);
1104}
1105
1106#endif
Guido van Rossum7433b121997-02-14 19:45:36 +00001107
1108/*
1109 * The file descriptor fd is considered ``interactive'' if either
1110 * a) isatty(fd) is TRUE, or
1111 * b) the -i flag was given, and the filename associated with
1112 * the descriptor is NULL or "<stdin>" or "???".
1113 */
1114int
1115Py_FdIsInteractive(fp, filename)
1116 FILE *fp;
1117 char *filename;
1118{
1119 if (isatty((int)fileno(fp)))
1120 return 1;
1121 if (!Py_InteractiveFlag)
1122 return 0;
1123 return (filename == NULL) ||
1124 (strcmp(filename, "<stdin>") == 0) ||
1125 (strcmp(filename, "???") == 0);
1126}