2 /* Python interpreter top-level routines, including init/exit */
6 #include "Python-ast.h"
22 #ifdef HAVE_LANGINFO_H
33 #define PRINT_TOTAL_REFS()
34 #else /* Py_REF_DEBUG */
35 #define PRINT_TOTAL_REFS() fprintf(stderr, \
36 "[%" PY_FORMAT_SIZE_T "d refs]\n", \
44 extern char *Py_GetPath(void);
46 extern grammar _PyParser_Grammar
; /* From graminit.c */
49 static void initmain(void);
50 static void initsite(void);
51 static PyObject
*run_mod(mod_ty
, const char *, PyObject
*, PyObject
*,
52 PyCompilerFlags
*, PyArena
*);
53 static PyObject
*run_pyc_file(FILE *, const char *, PyObject
*, PyObject
*,
55 static void err_input(perrdetail
*);
56 static void initsigs(void);
57 static void call_sys_exitfunc(void);
58 static void call_ll_exitfuncs(void);
59 extern void _PyUnicode_Init(void);
60 extern void _PyUnicode_Fini(void);
63 extern void _PyGILState_Init(PyInterpreterState
*, PyThreadState
*);
64 extern void _PyGILState_Fini(void);
65 #endif /* WITH_THREAD */
67 int Py_DebugFlag
; /* Needed by parser.c */
68 int Py_VerboseFlag
; /* Needed by import.c */
69 int Py_InteractiveFlag
; /* Needed by Py_FdIsInteractive() below */
70 int Py_NoSiteFlag
; /* Suppress 'import site' */
71 int Py_UseClassExceptionsFlag
= 1; /* Needed by bltinmodule.c: deprecated */
72 int Py_FrozenFlag
; /* Needed by getpath.c */
73 int Py_UnicodeFlag
= 0; /* Needed by compile.c */
74 int Py_IgnoreEnvironmentFlag
; /* e.g. PYTHONPATH, PYTHONHOME */
75 /* _XXX Py_QnewFlag should go away in 2.3. It's true iff -Qnew is passed,
76 on the command line, and is used in 2.2 by ceval.c to make all "/" divisions
77 true divisions (which they will be in 2.3). */
80 /* Reference to 'warnings' module, to avoid importing it
81 on the fly when the import lock may be held. See 683658/771097
83 static PyObject
*warnings_module
= NULL
;
85 /* Returns a borrowed reference to the 'warnings' module, or NULL.
86 If the module is returned, it is guaranteed to have been obtained
87 without acquiring the import lock
89 PyObject
*PyModule_GetWarningsModule(void)
91 PyObject
*typ
, *val
, *tb
;
92 PyObject
*all_modules
;
93 /* If we managed to get the module at init time, just use it */
95 return warnings_module
;
96 /* If it wasn't available at init time, it may be available
97 now in sys.modules (common scenario is frozen apps: import
98 at init time fails, but the frozen init code sets up sys.path
99 correctly, then does an implicit import of warnings for us
101 /* Save and restore any exceptions */
102 PyErr_Fetch(&typ
, &val
, &tb
);
104 all_modules
= PySys_GetObject("modules");
106 warnings_module
= PyDict_GetItemString(all_modules
, "warnings");
107 /* We keep a ref in the global */
108 Py_XINCREF(warnings_module
);
110 PyErr_Restore(typ
, val
, tb
);
111 return warnings_module
;
114 static int initialized
= 0;
116 /* API to access the initialized flag -- useful for esoteric use */
119 Py_IsInitialized(void)
124 /* Global initializations. Can be undone by Py_Finalize(). Don't
125 call this twice without an intervening Py_Finalize() call. When
126 initializations fail, a fatal error is issued and the function does
127 not return. On return, the first thread and interpreter state have
130 Locking: you must hold the interpreter lock while calling this.
131 (If the lock has not yet been initialized, that's equivalent to
132 having the lock, but you cannot use multiple threads.)
137 add_flag(int flag
, const char *envs
)
139 int env
= atoi(envs
);
148 Py_InitializeEx(int install_sigs
)
150 PyInterpreterState
*interp
;
151 PyThreadState
*tstate
;
152 PyObject
*bimod
, *sysmod
;
154 #if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
157 PyObject
*sys_stream
, *sys_isatty
;
159 extern void _Py_ReadyTypes(void);
165 if ((p
= Py_GETENV("PYTHONDEBUG")) && *p
!= '\0')
166 Py_DebugFlag
= add_flag(Py_DebugFlag
, p
);
167 if ((p
= Py_GETENV("PYTHONVERBOSE")) && *p
!= '\0')
168 Py_VerboseFlag
= add_flag(Py_VerboseFlag
, p
);
169 if ((p
= Py_GETENV("PYTHONOPTIMIZE")) && *p
!= '\0')
170 Py_OptimizeFlag
= add_flag(Py_OptimizeFlag
, p
);
172 interp
= PyInterpreterState_New();
174 Py_FatalError("Py_Initialize: can't make first interpreter");
176 tstate
= PyThreadState_New(interp
);
178 Py_FatalError("Py_Initialize: can't make first thread");
179 (void) PyThreadState_Swap(tstate
);
183 if (!_PyFrame_Init())
184 Py_FatalError("Py_Initialize: can't init frames");
187 Py_FatalError("Py_Initialize: can't init ints");
191 interp
->modules
= PyDict_New();
192 if (interp
->modules
== NULL
)
193 Py_FatalError("Py_Initialize: can't make modules dictionary");
195 #ifdef Py_USING_UNICODE
196 /* Init Unicode implementation; relies on the codec registry */
200 bimod
= _PyBuiltin_Init();
202 Py_FatalError("Py_Initialize: can't initialize __builtin__");
203 interp
->builtins
= PyModule_GetDict(bimod
);
204 Py_INCREF(interp
->builtins
);
206 sysmod
= _PySys_Init();
208 Py_FatalError("Py_Initialize: can't initialize sys");
209 interp
->sysdict
= PyModule_GetDict(sysmod
);
210 Py_INCREF(interp
->sysdict
);
211 _PyImport_FixupExtension("sys", "sys");
212 PySys_SetPath(Py_GetPath());
213 PyDict_SetItemString(interp
->sysdict
, "modules",
218 /* initialize builtin exceptions */
220 _PyImport_FixupExtension("exceptions", "exceptions");
222 /* phase 2 of builtins */
223 _PyImport_FixupExtension("__builtin__", "__builtin__");
225 _PyImportHooks_Init();
228 initsigs(); /* Signal handling stuff, including initintr() */
230 initmain(); /* Module __main__ */
232 initsite(); /* Module site */
234 /* auto-thread-state API, if available */
236 _PyGILState_Init(interp
, tstate
);
237 #endif /* WITH_THREAD */
239 warnings_module
= PyImport_ImportModule("warnings");
240 if (!warnings_module
)
243 #if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
244 /* On Unix, set the file system encoding according to the
245 user's preference, if the CODESET names a well-known
246 Python codec, and Py_FileSystemDefaultEncoding isn't
247 initialized by other means. Also set the encoding of
248 stdin and stdout if these are terminals. */
250 saved_locale
= strdup(setlocale(LC_CTYPE
, NULL
));
251 setlocale(LC_CTYPE
, "");
252 codeset
= nl_langinfo(CODESET
);
253 if (codeset
&& *codeset
) {
254 PyObject
*enc
= PyCodec_Encoder(codeset
);
256 codeset
= strdup(codeset
);
264 setlocale(LC_CTYPE
, saved_locale
);
268 sys_stream
= PySys_GetObject("stdin");
269 sys_isatty
= PyObject_CallMethod(sys_stream
, "isatty", "");
272 if(sys_isatty
&& PyObject_IsTrue(sys_isatty
)) {
273 if (!PyFile_SetEncoding(sys_stream
, codeset
))
274 Py_FatalError("Cannot set codeset of stdin");
276 Py_XDECREF(sys_isatty
);
278 sys_stream
= PySys_GetObject("stdout");
279 sys_isatty
= PyObject_CallMethod(sys_stream
, "isatty", "");
282 if(sys_isatty
&& PyObject_IsTrue(sys_isatty
)) {
283 if (!PyFile_SetEncoding(sys_stream
, codeset
))
284 Py_FatalError("Cannot set codeset of stdout");
286 Py_XDECREF(sys_isatty
);
288 sys_stream
= PySys_GetObject("stderr");
289 sys_isatty
= PyObject_CallMethod(sys_stream
, "isatty", "");
292 if(sys_isatty
&& PyObject_IsTrue(sys_isatty
)) {
293 if (!PyFile_SetEncoding(sys_stream
, codeset
))
294 Py_FatalError("Cannot set codeset of stderr");
296 Py_XDECREF(sys_isatty
);
298 if (!Py_FileSystemDefaultEncoding
)
299 Py_FileSystemDefaultEncoding
= codeset
;
314 extern void dump_counts(FILE*);
317 /* Undo the effect of Py_Initialize().
319 Beware: if multiple interpreter and/or thread states exist, these
320 are not wiped out; only the current thread and interpreter state
321 are deleted. But since everything else is deleted, those other
322 interpreter and thread states should no longer be used.
324 (XXX We should do better, e.g. wipe out all interpreters and
334 PyInterpreterState
*interp
;
335 PyThreadState
*tstate
;
340 /* The interpreter is still entirely intact at this point, and the
341 * exit funcs may be relying on that. In particular, if some thread
342 * or exit func is still waiting to do an import, the import machinery
343 * expects Py_IsInitialized() to return true. So don't say the
344 * interpreter is uninitialized until after the exit funcs have run.
345 * Note that Threading.py uses an exit func to do a join on all the
346 * threads created thru it, so this also protects pending imports in
347 * the threads created via Threading.
352 /* Get current thread state and interpreter pointer */
353 tstate
= PyThreadState_GET();
354 interp
= tstate
->interp
;
356 /* Disable signal handling */
357 PyOS_FiniInterrupts();
359 /* drop module references we saved */
360 Py_XDECREF(warnings_module
);
361 warnings_module
= NULL
;
363 /* Collect garbage. This may call finalizers; it's nice to call these
364 * before all modules are destroyed.
365 * XXX If a __del__ or weakref callback is triggered here, and tries to
366 * XXX import a module, bad things can happen, because Python no
367 * XXX longer believes it's initialized.
368 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
369 * XXX is easy to provoke that way. I've also seen, e.g.,
370 * XXX Exception exceptions.ImportError: 'No module named sha'
371 * XXX in <function callback at 0x008F5718> ignored
372 * XXX but I'm unclear on exactly how that one happens. In any case,
373 * XXX I haven't seen a real-life report of either of these.
377 /* With COUNT_ALLOCS, it helps to run GC multiple times:
378 each collection might release some types from the type
379 list, so they become garbage. */
380 while (PyGC_Collect() > 0)
384 /* Destroy all modules */
387 /* Collect final garbage. This disposes of cycles created by
388 * new-style class definitions, for example.
389 * XXX This is disabled because it caused too many problems. If
390 * XXX a __del__ or weakref callback triggers here, Python code has
391 * XXX a hard time running, because even the sys module has been
392 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
393 * XXX One symptom is a sequence of information-free messages
394 * XXX coming from threads (if a __del__ or callback is invoked,
395 * XXX other threads can execute too, and any exception they encounter
396 * XXX triggers a comedy of errors as subsystem after subsystem
397 * XXX fails to find what it *expects* to find in sys to help report
398 * XXX the exception and consequent unexpected failures). I've also
399 * XXX seen segfaults then, after adding print statements to the
400 * XXX Python code getting called.
406 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
409 /* Debugging stuff */
417 /* Display all objects still alive -- this can invoke arbitrary
418 * __repr__ overrides, so requires a mostly-intact interpreter.
419 * Alas, a lot of stuff may still be alive now that will be cleaned
422 if (Py_GETENV("PYTHONDUMPREFS"))
423 _Py_PrintReferences(stderr
);
424 #endif /* Py_TRACE_REFS */
426 /* Cleanup auto-thread-state */
429 #endif /* WITH_THREAD */
431 /* Clear interpreter state */
432 PyInterpreterState_Clear(interp
);
434 /* Now we decref the exception classes. After this point nothing
435 can raise an exception. That's okay, because each Fini() method
436 below has been checked to make sure no exceptions are ever
442 /* Delete current thread */
443 PyThreadState_Swap(NULL
);
444 PyInterpreterState_Delete(interp
);
446 /* Sundry finalizers */
457 #ifdef Py_USING_UNICODE
458 /* Cleanup Unicode implementation */
462 /* XXX Still allocated:
463 - various static ad-hoc pointers to interned strings
464 - int and float free list blocks
465 - whatever various modules and libraries allocate
468 PyGrammar_RemoveAccelerators(&_PyParser_Grammar
);
471 /* Display addresses (& refcnts) of all objects still alive.
472 * An address can be used to find the repr of the object, printed
473 * above by _Py_PrintReferences.
475 if (Py_GETENV("PYTHONDUMPREFS"))
476 _Py_PrintReferenceAddresses(stderr
);
477 #endif /* Py_TRACE_REFS */
478 #ifdef PYMALLOC_DEBUG
479 if (Py_GETENV("PYTHONMALLOCSTATS"))
480 _PyObject_DebugMallocStats();
486 /* Create and initialize a new interpreter and thread, and return the
487 new thread. This requires that Py_Initialize() has been called
490 Unsuccessful initialization yields a NULL pointer. Note that *no*
491 exception information is available even in this case -- the
492 exception information is held in the thread, and there is no
500 Py_NewInterpreter(void)
502 PyInterpreterState
*interp
;
503 PyThreadState
*tstate
, *save_tstate
;
504 PyObject
*bimod
, *sysmod
;
507 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
509 interp
= PyInterpreterState_New();
513 tstate
= PyThreadState_New(interp
);
514 if (tstate
== NULL
) {
515 PyInterpreterState_Delete(interp
);
519 save_tstate
= PyThreadState_Swap(tstate
);
521 /* XXX The following is lax in error checking */
523 interp
->modules
= PyDict_New();
525 bimod
= _PyImport_FindExtension("__builtin__", "__builtin__");
527 interp
->builtins
= PyModule_GetDict(bimod
);
528 Py_INCREF(interp
->builtins
);
530 sysmod
= _PyImport_FindExtension("sys", "sys");
531 if (bimod
!= NULL
&& sysmod
!= NULL
) {
532 interp
->sysdict
= PyModule_GetDict(sysmod
);
533 Py_INCREF(interp
->sysdict
);
534 PySys_SetPath(Py_GetPath());
535 PyDict_SetItemString(interp
->sysdict
, "modules",
537 _PyImportHooks_Init();
543 if (!PyErr_Occurred())
546 /* Oops, it didn't work. Undo it all. */
549 PyThreadState_Clear(tstate
);
550 PyThreadState_Swap(save_tstate
);
551 PyThreadState_Delete(tstate
);
552 PyInterpreterState_Delete(interp
);
557 /* Delete an interpreter and its last thread. This requires that the
558 given thread state is current, that the thread has no remaining
559 frames, and that it is its interpreter's only remaining thread.
560 It is a fatal error to violate these constraints.
562 (Py_Finalize() doesn't have these constraints -- it zaps
563 everything, regardless.)
570 Py_EndInterpreter(PyThreadState
*tstate
)
572 PyInterpreterState
*interp
= tstate
->interp
;
574 if (tstate
!= PyThreadState_GET())
575 Py_FatalError("Py_EndInterpreter: thread is not current");
576 if (tstate
->frame
!= NULL
)
577 Py_FatalError("Py_EndInterpreter: thread still has a frame");
578 if (tstate
!= interp
->tstate_head
|| tstate
->next
!= NULL
)
579 Py_FatalError("Py_EndInterpreter: not the last thread");
582 PyInterpreterState_Clear(interp
);
583 PyThreadState_Swap(NULL
);
584 PyInterpreterState_Delete(interp
);
587 static char *progname
= "python";
590 Py_SetProgramName(char *pn
)
597 Py_GetProgramName(void)
602 static char *default_home
= NULL
;
605 Py_SetPythonHome(char *home
)
611 Py_GetPythonHome(void)
613 char *home
= default_home
;
614 if (home
== NULL
&& !Py_IgnoreEnvironmentFlag
)
615 home
= Py_GETENV("PYTHONHOME");
619 /* Create __main__ module */
625 m
= PyImport_AddModule("__main__");
627 Py_FatalError("can't create __main__ module");
628 d
= PyModule_GetDict(m
);
629 if (PyDict_GetItemString(d
, "__builtins__") == NULL
) {
630 PyObject
*bimod
= PyImport_ImportModule("__builtin__");
632 PyDict_SetItemString(d
, "__builtins__", bimod
) != 0)
633 Py_FatalError("can't add __builtins__ to __main__");
638 /* Import the site module (not into __main__ though) */
644 m
= PyImport_ImportModule("site");
646 f
= PySys_GetObject("stderr");
647 if (Py_VerboseFlag
) {
649 "'import site' failed; traceback:\n", f
);
654 "'import site' failed; use -v for traceback\n", f
);
663 /* Parse input from a file and execute it */
666 PyRun_AnyFileExFlags(FILE *fp
, const char *filename
, int closeit
,
667 PyCompilerFlags
*flags
)
669 if (filename
== NULL
)
671 if (Py_FdIsInteractive(fp
, filename
)) {
672 int err
= PyRun_InteractiveLoopFlags(fp
, filename
, flags
);
678 return PyRun_SimpleFileExFlags(fp
, filename
, closeit
, flags
);
682 PyRun_InteractiveLoopFlags(FILE *fp
, const char *filename
, PyCompilerFlags
*flags
)
686 PyCompilerFlags local_flags
;
689 flags
= &local_flags
;
690 local_flags
.cf_flags
= 0;
692 v
= PySys_GetObject("ps1");
694 PySys_SetObject("ps1", v
= PyString_FromString(">>> "));
697 v
= PySys_GetObject("ps2");
699 PySys_SetObject("ps2", v
= PyString_FromString("... "));
703 ret
= PyRun_InteractiveOneFlags(fp
, filename
, flags
);
714 /* compute parser flags based on compiler flags */
715 #define PARSER_FLAGS(flags) \
716 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
717 PyPARSE_DONT_IMPLY_DEDENT : 0) \
718 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \
719 PyPARSE_WITH_IS_KEYWORD : 0)) : 0)
722 PyRun_InteractiveOneFlags(FILE *fp
, const char *filename
, PyCompilerFlags
*flags
)
724 PyObject
*m
, *d
, *v
, *w
;
727 char *ps1
= "", *ps2
= "";
730 v
= PySys_GetObject("ps1");
735 else if (PyString_Check(v
))
736 ps1
= PyString_AsString(v
);
738 w
= PySys_GetObject("ps2");
743 else if (PyString_Check(w
))
744 ps2
= PyString_AsString(w
);
746 arena
= PyArena_New();
747 mod
= PyParser_ASTFromFile(fp
, filename
,
748 Py_single_input
, ps1
, ps2
,
749 flags
, &errcode
, arena
);
754 if (errcode
== E_EOF
) {
761 m
= PyImport_AddModule("__main__");
766 d
= PyModule_GetDict(m
);
767 v
= run_mod(mod
, filename
, d
, d
, flags
, arena
);
779 /* Check whether a file maybe a pyc file: Look at the extension,
780 the file type, and, if we may close it, at the first few bytes. */
783 maybe_pyc_file(FILE *fp
, const char* filename
, const char* ext
, int closeit
)
785 if (strcmp(ext
, ".pyc") == 0 || strcmp(ext
, ".pyo") == 0)
788 /* Only look into the file if we are allowed to close it, since
789 it then should also be seekable. */
791 /* Read only two bytes of the magic. If the file was opened in
792 text mode, the bytes 3 and 4 of the magic (\r\n) might not
793 be read as they are on disk. */
794 unsigned int halfmagic
= PyImport_GetMagicNumber() & 0xFFFF;
795 unsigned char buf
[2];
796 /* Mess: In case of -x, the stream is NOT at its start now,
797 and ungetc() was used to push back the first newline,
798 which makes the current stream position formally undefined,
799 and a x-platform nightmare.
800 Unfortunately, we have no direct way to know whether -x
801 was specified. So we use a terrible hack: if the current
802 stream position is not 0, we assume -x was specified, and
803 give up. Bug 132850 on SourceForge spells out the
804 hopelessness of trying anything else (fseek and ftell
805 don't work predictably x-platform for text-mode files).
808 if (ftell(fp
) == 0) {
809 if (fread(buf
, 1, 2, fp
) == 2 &&
810 ((unsigned int)buf
[1]<<8 | buf
[0]) == halfmagic
)
820 PyRun_SimpleFileExFlags(FILE *fp
, const char *filename
, int closeit
,
821 PyCompilerFlags
*flags
)
826 m
= PyImport_AddModule("__main__");
829 d
= PyModule_GetDict(m
);
830 if (PyDict_GetItemString(d
, "__file__") == NULL
) {
831 PyObject
*f
= PyString_FromString(filename
);
834 if (PyDict_SetItemString(d
, "__file__", f
) < 0) {
840 ext
= filename
+ strlen(filename
) - 4;
841 if (maybe_pyc_file(fp
, filename
, ext
, closeit
)) {
842 /* Try to run a pyc file. First, re-open in binary */
845 if ((fp
= fopen(filename
, "rb")) == NULL
) {
846 fprintf(stderr
, "python: Can't reopen .pyc file\n");
849 /* Turn on optimization if a .pyo file is given */
850 if (strcmp(ext
, ".pyo") == 0)
852 v
= run_pyc_file(fp
, filename
, d
, d
, flags
);
854 v
= PyRun_FileExFlags(fp
, filename
, Py_file_input
, d
, d
,
868 PyRun_SimpleStringFlags(const char *command
, PyCompilerFlags
*flags
)
871 m
= PyImport_AddModule("__main__");
874 d
= PyModule_GetDict(m
);
875 v
= PyRun_StringFlags(command
, Py_file_input
, d
, d
, flags
);
887 parse_syntax_error(PyObject
*err
, PyObject
**message
, const char **filename
,
888 int *lineno
, int *offset
, const char **text
)
893 /* old style errors */
894 if (PyTuple_Check(err
))
895 return PyArg_ParseTuple(err
, "O(ziiz)", message
, filename
,
896 lineno
, offset
, text
);
898 /* new style errors. `err' is an instance */
900 if (! (v
= PyObject_GetAttrString(err
, "msg")))
904 if (!(v
= PyObject_GetAttrString(err
, "filename")))
908 else if (! (*filename
= PyString_AsString(v
)))
912 if (!(v
= PyObject_GetAttrString(err
, "lineno")))
914 hold
= PyInt_AsLong(v
);
917 if (hold
< 0 && PyErr_Occurred())
921 if (!(v
= PyObject_GetAttrString(err
, "offset")))
928 hold
= PyInt_AsLong(v
);
931 if (hold
< 0 && PyErr_Occurred())
936 if (!(v
= PyObject_GetAttrString(err
, "text")))
940 else if (! (*text
= PyString_AsString(v
)))
957 print_error_text(PyObject
*f
, int offset
, const char *text
)
961 if (offset
> 0 && offset
== (int)strlen(text
))
964 nl
= strchr(text
, '\n');
965 if (nl
== NULL
|| nl
-text
>= offset
)
967 offset
-= (int)(nl
+1-text
);
970 while (*text
== ' ' || *text
== '\t') {
975 PyFile_WriteString(" ", f
);
976 PyFile_WriteString(text
, f
);
977 if (*text
== '\0' || text
[strlen(text
)-1] != '\n')
978 PyFile_WriteString("\n", f
);
981 PyFile_WriteString(" ", f
);
984 PyFile_WriteString(" ", f
);
987 PyFile_WriteString("^\n", f
);
991 handle_system_exit(void)
993 PyObject
*exception
, *value
, *tb
;
996 PyErr_Fetch(&exception
, &value
, &tb
);
1000 if (value
== NULL
|| value
== Py_None
)
1002 if (PyExceptionInstance_Check(value
)) {
1003 /* The error code should be in the `code' attribute. */
1004 PyObject
*code
= PyObject_GetAttrString(value
, "code");
1008 if (value
== Py_None
)
1011 /* If we failed to dig out the 'code' attribute,
1012 just let the else clause below print the error. */
1014 if (PyInt_Check(value
))
1015 exitcode
= (int)PyInt_AsLong(value
);
1017 PyObject_Print(value
, stderr
, Py_PRINT_RAW
);
1018 PySys_WriteStderr("\n");
1022 /* Restore and clear the exception info, in order to properly decref
1023 * the exception, value, and traceback. If we just exit instead,
1024 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
1025 * some finalizers from running.
1027 PyErr_Restore(exception
, value
, tb
);
1034 PyErr_PrintEx(int set_sys_last_vars
)
1036 PyObject
*exception
, *v
, *tb
, *hook
;
1038 if (PyErr_ExceptionMatches(PyExc_SystemExit
)) {
1039 handle_system_exit();
1041 PyErr_Fetch(&exception
, &v
, &tb
);
1042 if (exception
== NULL
)
1044 PyErr_NormalizeException(&exception
, &v
, &tb
);
1045 if (exception
== NULL
)
1047 /* Now we know v != NULL too */
1048 if (set_sys_last_vars
) {
1049 PySys_SetObject("last_type", exception
);
1050 PySys_SetObject("last_value", v
);
1051 PySys_SetObject("last_traceback", tb
);
1053 hook
= PySys_GetObject("excepthook");
1055 PyObject
*args
= PyTuple_Pack(3,
1056 exception
, v
, tb
? tb
: Py_None
);
1057 PyObject
*result
= PyEval_CallObject(hook
, args
);
1058 if (result
== NULL
) {
1059 PyObject
*exception2
, *v2
, *tb2
;
1060 if (PyErr_ExceptionMatches(PyExc_SystemExit
)) {
1061 handle_system_exit();
1063 PyErr_Fetch(&exception2
, &v2
, &tb2
);
1064 PyErr_NormalizeException(&exception2
, &v2
, &tb2
);
1068 PySys_WriteStderr("Error in sys.excepthook:\n");
1069 PyErr_Display(exception2
, v2
, tb2
);
1070 PySys_WriteStderr("\nOriginal exception was:\n");
1071 PyErr_Display(exception
, v
, tb
);
1072 Py_XDECREF(exception2
);
1079 PySys_WriteStderr("sys.excepthook is missing\n");
1080 PyErr_Display(exception
, v
, tb
);
1082 Py_XDECREF(exception
);
1087 void PyErr_Display(PyObject
*exception
, PyObject
*value
, PyObject
*tb
)
1090 PyObject
*f
= PySys_GetObject("stderr");
1093 fprintf(stderr
, "lost sys.stderr\n");
1098 if (tb
&& tb
!= Py_None
)
1099 err
= PyTraceBack_Print(tb
, f
);
1101 PyObject_HasAttrString(value
, "print_file_and_line"))
1104 const char *filename
, *text
;
1106 if (!parse_syntax_error(value
, &message
, &filename
,
1107 &lineno
, &offset
, &text
))
1111 PyFile_WriteString(" File \"", f
);
1112 if (filename
== NULL
)
1113 PyFile_WriteString("<string>", f
);
1115 PyFile_WriteString(filename
, f
);
1116 PyFile_WriteString("\", line ", f
);
1117 PyOS_snprintf(buf
, sizeof(buf
), "%d", lineno
);
1118 PyFile_WriteString(buf
, f
);
1119 PyFile_WriteString("\n", f
);
1121 print_error_text(f
, offset
, text
);
1124 /* Can't be bothered to check all those
1125 PyFile_WriteString() calls */
1126 if (PyErr_Occurred())
1131 /* Don't do anything else */
1133 else if (PyExceptionClass_Check(exception
)) {
1134 char* className
= PyExceptionClass_Name(exception
);
1135 PyObject
* moduleName
=
1136 PyObject_GetAttrString(exception
, "__module__");
1138 if (moduleName
== NULL
)
1139 err
= PyFile_WriteString("<unknown>", f
);
1141 char* modstr
= PyString_AsString(moduleName
);
1142 Py_DECREF(moduleName
);
1143 if (modstr
&& strcmp(modstr
, "exceptions"))
1145 err
= PyFile_WriteString(modstr
, f
);
1146 err
+= PyFile_WriteString(".", f
);
1150 if (className
== NULL
)
1151 err
= PyFile_WriteString("<unknown>", f
);
1153 err
= PyFile_WriteString(className
, f
);
1157 err
= PyFile_WriteObject(exception
, f
, Py_PRINT_RAW
);
1158 if (err
== 0 && (value
!= Py_None
)) {
1159 PyObject
*s
= PyObject_Str(value
);
1160 /* only print colon if the str() of the
1161 object is not the empty string
1165 else if (!PyString_Check(s
) ||
1166 PyString_GET_SIZE(s
) != 0)
1167 err
= PyFile_WriteString(": ", f
);
1169 err
= PyFile_WriteObject(s
, f
, Py_PRINT_RAW
);
1173 err
= PyFile_WriteString("\n", f
);
1176 /* If an error happened here, don't show it.
1177 XXX This is wrong, but too many callers rely on this behavior. */
1183 PyRun_StringFlags(const char *str
, int start
, PyObject
*globals
,
1184 PyObject
*locals
, PyCompilerFlags
*flags
)
1186 PyObject
*ret
= NULL
;
1187 PyArena
*arena
= PyArena_New();
1188 mod_ty mod
= PyParser_ASTFromString(str
, "<string>", start
, flags
,
1191 ret
= run_mod(mod
, "<string>", globals
, locals
, flags
, arena
);
1192 PyArena_Free(arena
);
1197 PyRun_FileExFlags(FILE *fp
, const char *filename
, int start
, PyObject
*globals
,
1198 PyObject
*locals
, int closeit
, PyCompilerFlags
*flags
)
1201 PyArena
*arena
= PyArena_New();
1202 mod_ty mod
= PyParser_ASTFromFile(fp
, filename
, start
, 0, 0,
1203 flags
, NULL
, arena
);
1205 PyArena_Free(arena
);
1210 ret
= run_mod(mod
, filename
, globals
, locals
, flags
, arena
);
1211 PyArena_Free(arena
);
1216 run_mod(mod_ty mod
, const char *filename
, PyObject
*globals
, PyObject
*locals
,
1217 PyCompilerFlags
*flags
, PyArena
*arena
)
1221 co
= PyAST_Compile(mod
, filename
, flags
, arena
);
1224 v
= PyEval_EvalCode(co
, globals
, locals
);
1230 run_pyc_file(FILE *fp
, const char *filename
, PyObject
*globals
,
1231 PyObject
*locals
, PyCompilerFlags
*flags
)
1236 long PyImport_GetMagicNumber(void);
1238 magic
= PyMarshal_ReadLongFromFile(fp
);
1239 if (magic
!= PyImport_GetMagicNumber()) {
1240 PyErr_SetString(PyExc_RuntimeError
,
1241 "Bad magic number in .pyc file");
1244 (void) PyMarshal_ReadLongFromFile(fp
);
1245 v
= PyMarshal_ReadLastObjectFromFile(fp
);
1247 if (v
== NULL
|| !PyCode_Check(v
)) {
1249 PyErr_SetString(PyExc_RuntimeError
,
1250 "Bad code object in .pyc file");
1253 co
= (PyCodeObject
*)v
;
1254 v
= PyEval_EvalCode(co
, globals
, locals
);
1256 flags
->cf_flags
|= (co
->co_flags
& PyCF_MASK
);
1262 Py_CompileStringFlags(const char *str
, const char *filename
, int start
,
1263 PyCompilerFlags
*flags
)
1266 PyArena
*arena
= PyArena_New();
1267 mod_ty mod
= PyParser_ASTFromString(str
, filename
, start
, flags
, arena
);
1269 PyArena_Free(arena
);
1272 if (flags
&& (flags
->cf_flags
& PyCF_ONLY_AST
)) {
1273 PyObject
*result
= PyAST_mod2obj(mod
);
1274 PyArena_Free(arena
);
1277 co
= PyAST_Compile(mod
, filename
, flags
, arena
);
1278 PyArena_Free(arena
);
1279 return (PyObject
*)co
;
1283 Py_SymtableString(const char *str
, const char *filename
, int start
)
1285 struct symtable
*st
;
1286 PyArena
*arena
= PyArena_New();
1287 mod_ty mod
= PyParser_ASTFromString(str
, filename
, start
, NULL
, arena
);
1289 PyArena_Free(arena
);
1292 st
= PySymtable_Build(mod
, filename
, 0);
1293 PyArena_Free(arena
);
1297 /* Preferred access to parser is through AST. */
1299 PyParser_ASTFromString(const char *s
, const char *filename
, int start
,
1300 PyCompilerFlags
*flags
, PyArena
*arena
)
1304 node
*n
= PyParser_ParseStringFlagsFilename(s
, filename
,
1305 &_PyParser_Grammar
, start
, &err
,
1306 PARSER_FLAGS(flags
));
1308 mod
= PyAST_FromNode(n
, flags
, filename
, arena
);
1319 PyParser_ASTFromFile(FILE *fp
, const char *filename
, int start
, char *ps1
,
1320 char *ps2
, PyCompilerFlags
*flags
, int *errcode
,
1325 node
*n
= PyParser_ParseFileFlags(fp
, filename
, &_PyParser_Grammar
,
1326 start
, ps1
, ps2
, &err
, PARSER_FLAGS(flags
));
1328 mod
= PyAST_FromNode(n
, flags
, filename
, arena
);
1335 *errcode
= err
.error
;
1340 /* Simplified interface to parsefile -- return node or set exception */
1343 PyParser_SimpleParseFileFlags(FILE *fp
, const char *filename
, int start
, int flags
)
1346 node
*n
= PyParser_ParseFileFlags(fp
, filename
, &_PyParser_Grammar
,
1347 start
, NULL
, NULL
, &err
, flags
);
1354 /* Simplified interface to parsestring -- return node or set exception */
1357 PyParser_SimpleParseStringFlags(const char *str
, int start
, int flags
)
1360 node
*n
= PyParser_ParseStringFlags(str
, &_PyParser_Grammar
,
1361 start
, &err
, flags
);
1368 PyParser_SimpleParseStringFlagsFilename(const char *str
, const char *filename
,
1369 int start
, int flags
)
1372 node
*n
= PyParser_ParseStringFlagsFilename(str
, filename
,
1373 &_PyParser_Grammar
, start
, &err
, flags
);
1380 PyParser_SimpleParseStringFilename(const char *str
, const char *filename
, int start
)
1382 return PyParser_SimpleParseStringFlagsFilename(str
, filename
, start
, 0);
1385 /* May want to move a more generalized form of this to parsetok.c or
1386 even parser modules. */
1389 PyParser_SetError(perrdetail
*err
)
1394 /* Set the error appropriate to the given input error code (see errcode.h) */
1397 err_input(perrdetail
*err
)
1399 PyObject
*v
, *w
, *errtype
;
1402 errtype
= PyExc_SyntaxError
;
1403 switch (err
->error
) {
1405 errtype
= PyExc_IndentationError
;
1406 if (err
->expected
== INDENT
)
1407 msg
= "expected an indented block";
1408 else if (err
->token
== INDENT
)
1409 msg
= "unexpected indent";
1410 else if (err
->token
== DEDENT
)
1411 msg
= "unexpected unindent";
1413 errtype
= PyExc_SyntaxError
;
1414 msg
= "invalid syntax";
1418 msg
= "invalid token";
1421 msg
= "EOF while scanning triple-quoted string";
1424 msg
= "EOL while scanning single-quoted string";
1427 if (!PyErr_Occurred())
1428 PyErr_SetNone(PyExc_KeyboardInterrupt
);
1434 msg
= "unexpected EOF while parsing";
1437 errtype
= PyExc_TabError
;
1438 msg
= "inconsistent use of tabs and spaces in indentation";
1441 msg
= "expression too long";
1444 errtype
= PyExc_IndentationError
;
1445 msg
= "unindent does not match any outer indentation level";
1448 errtype
= PyExc_IndentationError
;
1449 msg
= "too many levels of indentation";
1452 PyObject
*type
, *value
, *tb
;
1453 PyErr_Fetch(&type
, &value
, &tb
);
1454 if (value
!= NULL
) {
1455 u
= PyObject_Str(value
);
1457 msg
= PyString_AsString(u
);
1461 msg
= "unknown decode error";
1468 msg
= "unexpected character after line continuation character";
1471 fprintf(stderr
, "error=%d\n", err
->error
);
1472 msg
= "unknown parsing error";
1475 v
= Py_BuildValue("(ziiz)", err
->filename
,
1476 err
->lineno
, err
->offset
, err
->text
);
1477 if (err
->text
!= NULL
) {
1478 PyObject_FREE(err
->text
);
1483 w
= Py_BuildValue("(sO)", msg
, v
);
1486 PyErr_SetObject(errtype
, w
);
1490 /* Print fatal error message and abort */
1493 Py_FatalError(const char *msg
)
1495 fprintf(stderr
, "Fatal Python error: %s\n", msg
);
1497 OutputDebugString("Fatal Python error: ");
1498 OutputDebugString(msg
);
1499 OutputDebugString("\n");
1503 #endif /* MS_WINDOWS */
1507 /* Clean up and exit */
1510 #include "pythread.h"
1513 #define NEXITFUNCS 32
1514 static void (*exitfuncs
[NEXITFUNCS
])(void);
1515 static int nexitfuncs
= 0;
1517 int Py_AtExit(void (*func
)(void))
1519 if (nexitfuncs
>= NEXITFUNCS
)
1521 exitfuncs
[nexitfuncs
++] = func
;
1526 call_sys_exitfunc(void)
1528 PyObject
*exitfunc
= PySys_GetObject("exitfunc");
1532 Py_INCREF(exitfunc
);
1533 PySys_SetObject("exitfunc", (PyObject
*)NULL
);
1534 res
= PyEval_CallObject(exitfunc
, (PyObject
*)NULL
);
1536 if (!PyErr_ExceptionMatches(PyExc_SystemExit
)) {
1537 PySys_WriteStderr("Error in sys.exitfunc:\n");
1541 Py_DECREF(exitfunc
);
1549 call_ll_exitfuncs(void)
1551 while (nexitfuncs
> 0)
1552 (*exitfuncs
[--nexitfuncs
])();
1570 PyOS_setsig(SIGPIPE
, SIG_IGN
);
1573 PyOS_setsig(SIGXFZ
, SIG_IGN
);
1576 PyOS_setsig(SIGXFSZ
, SIG_IGN
);
1578 PyOS_InitInterrupts(); /* May imply initsignal() */
1583 * The file descriptor fd is considered ``interactive'' if either
1584 * a) isatty(fd) is TRUE, or
1585 * b) the -i flag was given, and the filename associated with
1586 * the descriptor is NULL or "<stdin>" or "???".
1589 Py_FdIsInteractive(FILE *fp
, const char *filename
)
1591 if (isatty((int)fileno(fp
)))
1593 if (!Py_InteractiveFlag
)
1595 return (filename
== NULL
) ||
1596 (strcmp(filename
, "<stdin>") == 0) ||
1597 (strcmp(filename
, "???") == 0);
1601 #if defined(USE_STACKCHECK)
1602 #if defined(WIN32) && defined(_MSC_VER)
1604 /* Stack checking for Microsoft C */
1610 * Return non-zero when we run out of memory on the stack; zero otherwise.
1613 PyOS_CheckStack(void)
1616 /* alloca throws a stack overflow exception if there's
1617 not enough space left on the stack */
1618 alloca(PYOS_STACK_MARGIN
* sizeof(void*));
1620 } __except (EXCEPTION_EXECUTE_HANDLER
) {
1621 /* just ignore all errors */
1626 #endif /* WIN32 && _MSC_VER */
1628 /* Alternate implementations can be added here... */
1630 #endif /* USE_STACKCHECK */
1633 /* Wrappers around sigaction() or signal(). */
1636 PyOS_getsig(int sig
)
1638 #ifdef HAVE_SIGACTION
1639 struct sigaction context
;
1640 if (sigaction(sig
, NULL
, &context
) == -1)
1642 return context
.sa_handler
;
1644 PyOS_sighandler_t handler
;
1645 /* Special signal handling for the secure CRT in Visual Studio 2005 */
1646 #if defined(_MSC_VER) && _MSC_VER >= 1400
1648 /* Only these signals are valid */
1657 /* Don't call signal() with other values or it will assert */
1661 #endif /* _MSC_VER && _MSC_VER >= 1400 */
1662 handler
= signal(sig
, SIG_IGN
);
1663 if (handler
!= SIG_ERR
)
1664 signal(sig
, handler
);
1670 PyOS_setsig(int sig
, PyOS_sighandler_t handler
)
1672 #ifdef HAVE_SIGACTION
1673 struct sigaction context
, ocontext
;
1674 context
.sa_handler
= handler
;
1675 sigemptyset(&context
.sa_mask
);
1676 context
.sa_flags
= 0;
1677 if (sigaction(sig
, &context
, &ocontext
) == -1)
1679 return ocontext
.sa_handler
;
1681 PyOS_sighandler_t oldhandler
;
1682 oldhandler
= signal(sig
, handler
);
1683 #ifdef HAVE_SIGINTERRUPT
1684 siginterrupt(sig
, 1);
1690 /* Deprecated C API functions still provided for binary compatiblity */
1692 #undef PyParser_SimpleParseFile
1694 PyParser_SimpleParseFile(FILE *fp
, const char *filename
, int start
)
1696 return PyParser_SimpleParseFileFlags(fp
, filename
, start
, 0);
1699 #undef PyParser_SimpleParseString
1701 PyParser_SimpleParseString(const char *str
, int start
)
1703 return PyParser_SimpleParseStringFlags(str
, start
, 0);
1706 #undef PyRun_AnyFile
1708 PyRun_AnyFile(FILE *fp
, const char *name
)
1710 return PyRun_AnyFileExFlags(fp
, name
, 0, NULL
);
1713 #undef PyRun_AnyFileEx
1715 PyRun_AnyFileEx(FILE *fp
, const char *name
, int closeit
)
1717 return PyRun_AnyFileExFlags(fp
, name
, closeit
, NULL
);
1720 #undef PyRun_AnyFileFlags
1722 PyRun_AnyFileFlags(FILE *fp
, const char *name
, PyCompilerFlags
*flags
)
1724 return PyRun_AnyFileExFlags(fp
, name
, 0, flags
);
1728 PyAPI_FUNC(PyObject
*)
1729 PyRun_File(FILE *fp
, const char *p
, int s
, PyObject
*g
, PyObject
*l
)
1731 return PyRun_FileExFlags(fp
, p
, s
, g
, l
, 0, NULL
);
1735 PyAPI_FUNC(PyObject
*)
1736 PyRun_FileEx(FILE *fp
, const char *p
, int s
, PyObject
*g
, PyObject
*l
, int c
)
1738 return PyRun_FileExFlags(fp
, p
, s
, g
, l
, c
, NULL
);
1741 #undef PyRun_FileFlags
1742 PyAPI_FUNC(PyObject
*)
1743 PyRun_FileFlags(FILE *fp
, const char *p
, int s
, PyObject
*g
, PyObject
*l
,
1744 PyCompilerFlags
*flags
)
1746 return PyRun_FileExFlags(fp
, p
, s
, g
, l
, 0, flags
);
1749 #undef PyRun_SimpleFile
1751 PyRun_SimpleFile(FILE *f
, const char *p
)
1753 return PyRun_SimpleFileExFlags(f
, p
, 0, NULL
);
1756 #undef PyRun_SimpleFileEx
1758 PyRun_SimpleFileEx(FILE *f
, const char *p
, int c
)
1760 return PyRun_SimpleFileExFlags(f
, p
, c
, NULL
);
1765 PyAPI_FUNC(PyObject
*)
1766 PyRun_String(const char *str
, int s
, PyObject
*g
, PyObject
*l
)
1768 return PyRun_StringFlags(str
, s
, g
, l
, NULL
);
1771 #undef PyRun_SimpleString
1773 PyRun_SimpleString(const char *s
)
1775 return PyRun_SimpleStringFlags(s
, NULL
);
1778 #undef Py_CompileString
1779 PyAPI_FUNC(PyObject
*)
1780 Py_CompileString(const char *str
, const char *p
, int s
)
1782 return Py_CompileStringFlags(str
, p
, s
, NULL
);
1785 #undef PyRun_InteractiveOne
1787 PyRun_InteractiveOne(FILE *f
, const char *p
)
1789 return PyRun_InteractiveOneFlags(f
, p
, NULL
);
1792 #undef PyRun_InteractiveLoop
1794 PyRun_InteractiveLoop(FILE *f
, const char *p
)
1796 return PyRun_InteractiveLoopFlags(f
, p
, NULL
);