pythonrun.c revision 386fe71de1d0f35f53f082a88762e90d5b1c66bb
1 2/* Python interpreter top-level routines, including init/exit */ 3 4#include "Python.h" 5 6#include "Python-ast.h" 7#undef Yield /* undefine macro conflicting with winbase.h */ 8#include "grammar.h" 9#include "node.h" 10#include "token.h" 11#include "parsetok.h" 12#include "errcode.h" 13#include "code.h" 14#include "compile.h" 15#include "symtable.h" 16#include "pyarena.h" 17#include "ast.h" 18#include "eval.h" 19#include "marshal.h" 20#include "osdefs.h" 21#include "abstract.h" 22 23#ifdef HAVE_SIGNAL_H 24#include <signal.h> 25#endif 26 27#ifdef MS_WINDOWS 28#include "malloc.h" /* for alloca */ 29#endif 30 31#ifdef HAVE_LANGINFO_H 32#include <locale.h> 33#include <langinfo.h> 34#endif 35 36#ifdef MS_WINDOWS 37#undef BYTE 38#include "windows.h" 39#define PATH_MAX MAXPATHLEN 40#endif 41 42#ifndef Py_REF_DEBUG 43#define PRINT_TOTAL_REFS() 44#else /* Py_REF_DEBUG */ 45#define PRINT_TOTAL_REFS() fprintf(stderr, \ 46 "[%" PY_FORMAT_SIZE_T "d refs]\n", \ 47 _Py_GetRefTotal()) 48#endif 49 50#ifdef __cplusplus 51extern "C" { 52#endif 53 54extern wchar_t *Py_GetPath(void); 55 56extern grammar _PyParser_Grammar; /* From graminit.c */ 57 58/* Forward */ 59static void initmain(void); 60static void initfsencoding(void); 61static void initsite(void); 62static int initstdio(void); 63static void flush_io(void); 64static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *, 65 PyCompilerFlags *, PyArena *); 66static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *, 67 PyCompilerFlags *); 68static void err_input(perrdetail *); 69static void initsigs(void); 70static void call_py_exitfuncs(void); 71static void wait_for_thread_shutdown(void); 72static void call_ll_exitfuncs(void); 73extern void _PyUnicode_Init(void); 74extern void _PyUnicode_Fini(void); 75extern int _PyLong_Init(void); 76extern void PyLong_Fini(void); 77 78#ifdef WITH_THREAD 79extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *); 80extern void _PyGILState_Fini(void); 81#endif /* WITH_THREAD */ 82 83int Py_DebugFlag; /* Needed by parser.c */ 84int Py_VerboseFlag; /* Needed by import.c */ 85int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */ 86int Py_InspectFlag; /* Needed to determine whether to exit at SystemError */ 87int Py_NoSiteFlag; /* Suppress 'import site' */ 88int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */ 89int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.py[co]) */ 90int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */ 91int Py_FrozenFlag; /* Needed by getpath.c */ 92int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */ 93int Py_NoUserSiteDirectory = 0; /* for -s and site.py */ 94int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */ 95 96/* PyModule_GetWarningsModule is no longer necessary as of 2.6 97since _warnings is builtin. This API should not be used. */ 98PyObject * 99PyModule_GetWarningsModule(void) 100{ 101 return PyImport_ImportModule("warnings"); 102} 103 104static int initialized = 0; 105 106/* API to access the initialized flag -- useful for esoteric use */ 107 108int 109Py_IsInitialized(void) 110{ 111 return initialized; 112} 113 114/* Global initializations. Can be undone by Py_Finalize(). Don't 115 call this twice without an intervening Py_Finalize() call. When 116 initializations fail, a fatal error is issued and the function does 117 not return. On return, the first thread and interpreter state have 118 been created. 119 120 Locking: you must hold the interpreter lock while calling this. 121 (If the lock has not yet been initialized, that's equivalent to 122 having the lock, but you cannot use multiple threads.) 123 124*/ 125 126static int 127add_flag(int flag, const char *envs) 128{ 129 int env = atoi(envs); 130 if (flag < env) 131 flag = env; 132 if (flag < 1) 133 flag = 1; 134 return flag; 135} 136 137#if defined(HAVE_LANGINFO_H) && defined(CODESET) 138static char* 139get_codeset(void) 140{ 141 char* codeset, *name_str; 142 PyObject *codec, *name = NULL; 143 144 codeset = nl_langinfo(CODESET); 145 if (!codeset || codeset[0] == '\0') 146 return NULL; 147 148 codec = _PyCodec_Lookup(codeset); 149 if (!codec) 150 goto error; 151 152 name = PyObject_GetAttrString(codec, "name"); 153 Py_CLEAR(codec); 154 if (!name) 155 goto error; 156 157 name_str = _PyUnicode_AsString(name); 158 if (name == NULL) 159 goto error; 160 codeset = strdup(name_str); 161 Py_DECREF(name); 162 return codeset; 163 164error: 165 Py_XDECREF(codec); 166 Py_XDECREF(name); 167 return NULL; 168} 169#endif 170 171void 172Py_InitializeEx(int install_sigs) 173{ 174 PyInterpreterState *interp; 175 PyThreadState *tstate; 176 PyObject *bimod, *sysmod, *pstderr; 177 char *p; 178 extern void _Py_ReadyTypes(void); 179 180 if (initialized) 181 return; 182 initialized = 1; 183 184#if defined(HAVE_LANGINFO_H) && defined(HAVE_SETLOCALE) 185 /* Set up the LC_CTYPE locale, so we can obtain 186 the locale's charset without having to switch 187 locales. */ 188 setlocale(LC_CTYPE, ""); 189#endif 190 191 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0') 192 Py_DebugFlag = add_flag(Py_DebugFlag, p); 193 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0') 194 Py_VerboseFlag = add_flag(Py_VerboseFlag, p); 195 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0') 196 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p); 197 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0') 198 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p); 199 200 interp = PyInterpreterState_New(); 201 if (interp == NULL) 202 Py_FatalError("Py_Initialize: can't make first interpreter"); 203 204 tstate = PyThreadState_New(interp); 205 if (tstate == NULL) 206 Py_FatalError("Py_Initialize: can't make first thread"); 207 (void) PyThreadState_Swap(tstate); 208 209 _Py_ReadyTypes(); 210 211 if (!_PyFrame_Init()) 212 Py_FatalError("Py_Initialize: can't init frames"); 213 214 if (!_PyLong_Init()) 215 Py_FatalError("Py_Initialize: can't init longs"); 216 217 if (!PyByteArray_Init()) 218 Py_FatalError("Py_Initialize: can't init bytearray"); 219 220 _PyFloat_Init(); 221 222 interp->modules = PyDict_New(); 223 if (interp->modules == NULL) 224 Py_FatalError("Py_Initialize: can't make modules dictionary"); 225 interp->modules_reloading = PyDict_New(); 226 if (interp->modules_reloading == NULL) 227 Py_FatalError("Py_Initialize: can't make modules_reloading dictionary"); 228 229 /* Init Unicode implementation; relies on the codec registry */ 230 _PyUnicode_Init(); 231 232 bimod = _PyBuiltin_Init(); 233 if (bimod == NULL) 234 Py_FatalError("Py_Initialize: can't initialize builtins modules"); 235 _PyImport_FixupExtension(bimod, "builtins", "builtins"); 236 interp->builtins = PyModule_GetDict(bimod); 237 if (interp->builtins == NULL) 238 Py_FatalError("Py_Initialize: can't initialize builtins dict"); 239 Py_INCREF(interp->builtins); 240 241 /* initialize builtin exceptions */ 242 _PyExc_Init(); 243 244 sysmod = _PySys_Init(); 245 if (sysmod == NULL) 246 Py_FatalError("Py_Initialize: can't initialize sys"); 247 interp->sysdict = PyModule_GetDict(sysmod); 248 if (interp->sysdict == NULL) 249 Py_FatalError("Py_Initialize: can't initialize sys dict"); 250 Py_INCREF(interp->sysdict); 251 _PyImport_FixupExtension(sysmod, "sys", "sys"); 252 PySys_SetPath(Py_GetPath()); 253 PyDict_SetItemString(interp->sysdict, "modules", 254 interp->modules); 255 256 /* Set up a preliminary stderr printer until we have enough 257 infrastructure for the io module in place. */ 258 pstderr = PyFile_NewStdPrinter(fileno(stderr)); 259 if (pstderr == NULL) 260 Py_FatalError("Py_Initialize: can't set preliminary stderr"); 261 PySys_SetObject("stderr", pstderr); 262 PySys_SetObject("__stderr__", pstderr); 263 264 _PyImport_Init(); 265 266 _PyImportHooks_Init(); 267 268 initfsencoding(); 269 270 if (install_sigs) 271 initsigs(); /* Signal handling stuff, including initintr() */ 272 273 /* Initialize warnings. */ 274 _PyWarnings_Init(); 275 if (PySys_HasWarnOptions()) { 276 PyObject *warnings_module = PyImport_ImportModule("warnings"); 277 if (!warnings_module) 278 PyErr_Clear(); 279 Py_XDECREF(warnings_module); 280 } 281 282 initmain(); /* Module __main__ */ 283 if (initstdio() < 0) 284 Py_FatalError( 285 "Py_Initialize: can't initialize sys standard streams"); 286 287 /* auto-thread-state API, if available */ 288#ifdef WITH_THREAD 289 _PyGILState_Init(interp, tstate); 290#endif /* WITH_THREAD */ 291 292 if (!Py_NoSiteFlag) 293 initsite(); /* Module site */ 294} 295 296void 297Py_Initialize(void) 298{ 299 Py_InitializeEx(1); 300} 301 302 303#ifdef COUNT_ALLOCS 304extern void dump_counts(FILE*); 305#endif 306 307/* Flush stdout and stderr */ 308 309static void 310flush_std_files(void) 311{ 312 PyObject *fout = PySys_GetObject("stdout"); 313 PyObject *ferr = PySys_GetObject("stderr"); 314 PyObject *tmp; 315 316 if (fout != NULL && fout != Py_None) { 317 tmp = PyObject_CallMethod(fout, "flush", ""); 318 if (tmp == NULL) 319 PyErr_Clear(); 320 else 321 Py_DECREF(tmp); 322 } 323 324 if (ferr != NULL && ferr != Py_None) { 325 tmp = PyObject_CallMethod(ferr, "flush", ""); 326 if (tmp == NULL) 327 PyErr_Clear(); 328 else 329 Py_DECREF(tmp); 330 } 331} 332 333/* Undo the effect of Py_Initialize(). 334 335 Beware: if multiple interpreter and/or thread states exist, these 336 are not wiped out; only the current thread and interpreter state 337 are deleted. But since everything else is deleted, those other 338 interpreter and thread states should no longer be used. 339 340 (XXX We should do better, e.g. wipe out all interpreters and 341 threads.) 342 343 Locking: as above. 344 345*/ 346 347void 348Py_Finalize(void) 349{ 350 PyInterpreterState *interp; 351 PyThreadState *tstate; 352 353 if (!initialized) 354 return; 355 356 wait_for_thread_shutdown(); 357 358 /* The interpreter is still entirely intact at this point, and the 359 * exit funcs may be relying on that. In particular, if some thread 360 * or exit func is still waiting to do an import, the import machinery 361 * expects Py_IsInitialized() to return true. So don't say the 362 * interpreter is uninitialized until after the exit funcs have run. 363 * Note that Threading.py uses an exit func to do a join on all the 364 * threads created thru it, so this also protects pending imports in 365 * the threads created via Threading. 366 */ 367 call_py_exitfuncs(); 368 initialized = 0; 369 370 /* Flush stdout+stderr */ 371 flush_std_files(); 372 373 /* Get current thread state and interpreter pointer */ 374 tstate = PyThreadState_GET(); 375 interp = tstate->interp; 376 377 /* Disable signal handling */ 378 PyOS_FiniInterrupts(); 379 380 /* Clear type lookup cache */ 381 PyType_ClearCache(); 382 383 /* Collect garbage. This may call finalizers; it's nice to call these 384 * before all modules are destroyed. 385 * XXX If a __del__ or weakref callback is triggered here, and tries to 386 * XXX import a module, bad things can happen, because Python no 387 * XXX longer believes it's initialized. 388 * XXX Fatal Python error: Interpreter not initialized (version mismatch?) 389 * XXX is easy to provoke that way. I've also seen, e.g., 390 * XXX Exception exceptions.ImportError: 'No module named sha' 391 * XXX in <function callback at 0x008F5718> ignored 392 * XXX but I'm unclear on exactly how that one happens. In any case, 393 * XXX I haven't seen a real-life report of either of these. 394 */ 395 PyGC_Collect(); 396#ifdef COUNT_ALLOCS 397 /* With COUNT_ALLOCS, it helps to run GC multiple times: 398 each collection might release some types from the type 399 list, so they become garbage. */ 400 while (PyGC_Collect() > 0) 401 /* nothing */; 402#endif 403 404 /* Destroy all modules */ 405 PyImport_Cleanup(); 406 407 /* Flush stdout+stderr (again, in case more was printed) */ 408 flush_std_files(); 409 410 /* Collect final garbage. This disposes of cycles created by 411 * new-style class definitions, for example. 412 * XXX This is disabled because it caused too many problems. If 413 * XXX a __del__ or weakref callback triggers here, Python code has 414 * XXX a hard time running, because even the sys module has been 415 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc). 416 * XXX One symptom is a sequence of information-free messages 417 * XXX coming from threads (if a __del__ or callback is invoked, 418 * XXX other threads can execute too, and any exception they encounter 419 * XXX triggers a comedy of errors as subsystem after subsystem 420 * XXX fails to find what it *expects* to find in sys to help report 421 * XXX the exception and consequent unexpected failures). I've also 422 * XXX seen segfaults then, after adding print statements to the 423 * XXX Python code getting called. 424 */ 425#if 0 426 PyGC_Collect(); 427#endif 428 429 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */ 430 _PyImport_Fini(); 431 432 /* Debugging stuff */ 433#ifdef COUNT_ALLOCS 434 dump_counts(stdout); 435#endif 436 437 PRINT_TOTAL_REFS(); 438 439#ifdef Py_TRACE_REFS 440 /* Display all objects still alive -- this can invoke arbitrary 441 * __repr__ overrides, so requires a mostly-intact interpreter. 442 * Alas, a lot of stuff may still be alive now that will be cleaned 443 * up later. 444 */ 445 if (Py_GETENV("PYTHONDUMPREFS")) 446 _Py_PrintReferences(stderr); 447#endif /* Py_TRACE_REFS */ 448 449 /* Clear interpreter state */ 450 PyInterpreterState_Clear(interp); 451 452 /* Now we decref the exception classes. After this point nothing 453 can raise an exception. That's okay, because each Fini() method 454 below has been checked to make sure no exceptions are ever 455 raised. 456 */ 457 458 _PyExc_Fini(); 459 460 /* Cleanup auto-thread-state */ 461#ifdef WITH_THREAD 462 _PyGILState_Fini(); 463#endif /* WITH_THREAD */ 464 465 /* Delete current thread */ 466 PyThreadState_Swap(NULL); 467 PyInterpreterState_Delete(interp); 468 469 /* Sundry finalizers */ 470 PyMethod_Fini(); 471 PyFrame_Fini(); 472 PyCFunction_Fini(); 473 PyTuple_Fini(); 474 PyList_Fini(); 475 PySet_Fini(); 476 PyBytes_Fini(); 477 PyByteArray_Fini(); 478 PyLong_Fini(); 479 PyFloat_Fini(); 480 PyDict_Fini(); 481 482 /* Cleanup Unicode implementation */ 483 _PyUnicode_Fini(); 484 485 /* reset file system default encoding */ 486 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) { 487 free((char*)Py_FileSystemDefaultEncoding); 488 Py_FileSystemDefaultEncoding = NULL; 489 } 490 491 /* XXX Still allocated: 492 - various static ad-hoc pointers to interned strings 493 - int and float free list blocks 494 - whatever various modules and libraries allocate 495 */ 496 497 PyGrammar_RemoveAccelerators(&_PyParser_Grammar); 498 499#ifdef Py_TRACE_REFS 500 /* Display addresses (& refcnts) of all objects still alive. 501 * An address can be used to find the repr of the object, printed 502 * above by _Py_PrintReferences. 503 */ 504 if (Py_GETENV("PYTHONDUMPREFS")) 505 _Py_PrintReferenceAddresses(stderr); 506#endif /* Py_TRACE_REFS */ 507#ifdef PYMALLOC_DEBUG 508 if (Py_GETENV("PYTHONMALLOCSTATS")) 509 _PyObject_DebugMallocStats(); 510#endif 511 512 call_ll_exitfuncs(); 513} 514 515/* Create and initialize a new interpreter and thread, and return the 516 new thread. This requires that Py_Initialize() has been called 517 first. 518 519 Unsuccessful initialization yields a NULL pointer. Note that *no* 520 exception information is available even in this case -- the 521 exception information is held in the thread, and there is no 522 thread. 523 524 Locking: as above. 525 526*/ 527 528PyThreadState * 529Py_NewInterpreter(void) 530{ 531 PyInterpreterState *interp; 532 PyThreadState *tstate, *save_tstate; 533 PyObject *bimod, *sysmod; 534 535 if (!initialized) 536 Py_FatalError("Py_NewInterpreter: call Py_Initialize first"); 537 538 interp = PyInterpreterState_New(); 539 if (interp == NULL) 540 return NULL; 541 542 tstate = PyThreadState_New(interp); 543 if (tstate == NULL) { 544 PyInterpreterState_Delete(interp); 545 return NULL; 546 } 547 548 save_tstate = PyThreadState_Swap(tstate); 549 550 /* XXX The following is lax in error checking */ 551 552 interp->modules = PyDict_New(); 553 interp->modules_reloading = PyDict_New(); 554 555 bimod = _PyImport_FindExtension("builtins", "builtins"); 556 if (bimod != NULL) { 557 interp->builtins = PyModule_GetDict(bimod); 558 if (interp->builtins == NULL) 559 goto handle_error; 560 Py_INCREF(interp->builtins); 561 } 562 563 /* initialize builtin exceptions */ 564 _PyExc_Init(); 565 566 sysmod = _PyImport_FindExtension("sys", "sys"); 567 if (bimod != NULL && sysmod != NULL) { 568 PyObject *pstderr; 569 interp->sysdict = PyModule_GetDict(sysmod); 570 if (interp->sysdict == NULL) 571 goto handle_error; 572 Py_INCREF(interp->sysdict); 573 PySys_SetPath(Py_GetPath()); 574 PyDict_SetItemString(interp->sysdict, "modules", 575 interp->modules); 576 /* Set up a preliminary stderr printer until we have enough 577 infrastructure for the io module in place. */ 578 pstderr = PyFile_NewStdPrinter(fileno(stderr)); 579 if (pstderr == NULL) 580 Py_FatalError("Py_Initialize: can't set preliminary stderr"); 581 PySys_SetObject("stderr", pstderr); 582 PySys_SetObject("__stderr__", pstderr); 583 584 _PyImportHooks_Init(); 585 if (initstdio() < 0) 586 Py_FatalError( 587 "Py_Initialize: can't initialize sys standard streams"); 588 initmain(); 589 if (!Py_NoSiteFlag) 590 initsite(); 591 } 592 593 if (!PyErr_Occurred()) 594 return tstate; 595 596handle_error: 597 /* Oops, it didn't work. Undo it all. */ 598 599 PyErr_Print(); 600 PyThreadState_Clear(tstate); 601 PyThreadState_Swap(save_tstate); 602 PyThreadState_Delete(tstate); 603 PyInterpreterState_Delete(interp); 604 605 return NULL; 606} 607 608/* Delete an interpreter and its last thread. This requires that the 609 given thread state is current, that the thread has no remaining 610 frames, and that it is its interpreter's only remaining thread. 611 It is a fatal error to violate these constraints. 612 613 (Py_Finalize() doesn't have these constraints -- it zaps 614 everything, regardless.) 615 616 Locking: as above. 617 618*/ 619 620void 621Py_EndInterpreter(PyThreadState *tstate) 622{ 623 PyInterpreterState *interp = tstate->interp; 624 625 if (tstate != PyThreadState_GET()) 626 Py_FatalError("Py_EndInterpreter: thread is not current"); 627 if (tstate->frame != NULL) 628 Py_FatalError("Py_EndInterpreter: thread still has a frame"); 629 if (tstate != interp->tstate_head || tstate->next != NULL) 630 Py_FatalError("Py_EndInterpreter: not the last thread"); 631 632 PyImport_Cleanup(); 633 PyInterpreterState_Clear(interp); 634 PyThreadState_Swap(NULL); 635 PyInterpreterState_Delete(interp); 636} 637 638static wchar_t *progname = L"python"; 639 640void 641Py_SetProgramName(wchar_t *pn) 642{ 643 if (pn && *pn) 644 progname = pn; 645} 646 647wchar_t * 648Py_GetProgramName(void) 649{ 650 return progname; 651} 652 653static wchar_t *default_home = NULL; 654static wchar_t env_home[PATH_MAX+1]; 655 656void 657Py_SetPythonHome(wchar_t *home) 658{ 659 default_home = home; 660} 661 662wchar_t * 663Py_GetPythonHome(void) 664{ 665 wchar_t *home = default_home; 666 if (home == NULL && !Py_IgnoreEnvironmentFlag) { 667 char* chome = Py_GETENV("PYTHONHOME"); 668 if (chome) { 669 size_t r = mbstowcs(env_home, chome, PATH_MAX+1); 670 if (r != (size_t)-1 && r <= PATH_MAX) 671 home = env_home; 672 } 673 674 } 675 return home; 676} 677 678/* Create __main__ module */ 679 680static void 681initmain(void) 682{ 683 PyObject *m, *d; 684 m = PyImport_AddModule("__main__"); 685 if (m == NULL) 686 Py_FatalError("can't create __main__ module"); 687 d = PyModule_GetDict(m); 688 if (PyDict_GetItemString(d, "__builtins__") == NULL) { 689 PyObject *bimod = PyImport_ImportModule("builtins"); 690 if (bimod == NULL || 691 PyDict_SetItemString(d, "__builtins__", bimod) != 0) 692 Py_FatalError("can't add __builtins__ to __main__"); 693 Py_DECREF(bimod); 694 } 695} 696 697static void 698initfsencoding(void) 699{ 700 PyObject *codec; 701#if defined(HAVE_LANGINFO_H) && defined(CODESET) 702 char *codeset; 703 704 /* On Unix, set the file system encoding according to the 705 user's preference, if the CODESET names a well-known 706 Python codec, and Py_FileSystemDefaultEncoding isn't 707 initialized by other means. Also set the encoding of 708 stdin and stdout if these are terminals. */ 709 codeset = get_codeset(); 710 if (codeset != NULL) { 711 Py_FileSystemDefaultEncoding = codeset; 712 Py_HasFileSystemDefaultEncoding = 0; 713 return; 714 } 715 716 PyErr_Clear(); 717 fprintf(stderr, 718 "Unable to get the locale encoding: " 719 "fallback to utf-8\n"); 720 Py_FileSystemDefaultEncoding = "utf-8"; 721 Py_HasFileSystemDefaultEncoding = 1; 722#endif 723 724 /* the encoding is mbcs, utf-8 or ascii */ 725 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding); 726 if (!codec) { 727 /* Such error can only occurs in critical situations: no more 728 * memory, import a module of the standard library failed, 729 * etc. */ 730 Py_FatalError("Py_Initialize: unable to load the file system codec"); 731 } else { 732 Py_DECREF(codec); 733 } 734} 735 736/* Import the site module (not into __main__ though) */ 737 738static void 739initsite(void) 740{ 741 PyObject *m; 742 m = PyImport_ImportModule("site"); 743 if (m == NULL) { 744 PyErr_Print(); 745 Py_Finalize(); 746 exit(1); 747 } 748 else { 749 Py_DECREF(m); 750 } 751} 752 753static PyObject* 754create_stdio(PyObject* io, 755 int fd, int write_mode, char* name, 756 char* encoding, char* errors) 757{ 758 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res; 759 const char* mode; 760 PyObject *line_buffering; 761 int buffering, isatty; 762 763 /* stdin is always opened in buffered mode, first because it shouldn't 764 make a difference in common use cases, second because TextIOWrapper 765 depends on the presence of a read1() method which only exists on 766 buffered streams. 767 */ 768 if (Py_UnbufferedStdioFlag && write_mode) 769 buffering = 0; 770 else 771 buffering = -1; 772 if (write_mode) 773 mode = "wb"; 774 else 775 mode = "rb"; 776 buf = PyObject_CallMethod(io, "open", "isiOOOi", 777 fd, mode, buffering, 778 Py_None, Py_None, Py_None, 0); 779 if (buf == NULL) 780 goto error; 781 782 if (buffering) { 783 raw = PyObject_GetAttrString(buf, "raw"); 784 if (raw == NULL) 785 goto error; 786 } 787 else { 788 raw = buf; 789 Py_INCREF(raw); 790 } 791 792 text = PyUnicode_FromString(name); 793 if (text == NULL || PyObject_SetAttrString(raw, "name", text) < 0) 794 goto error; 795 res = PyObject_CallMethod(raw, "isatty", ""); 796 if (res == NULL) 797 goto error; 798 isatty = PyObject_IsTrue(res); 799 Py_DECREF(res); 800 if (isatty == -1) 801 goto error; 802 if (isatty || Py_UnbufferedStdioFlag) 803 line_buffering = Py_True; 804 else 805 line_buffering = Py_False; 806 807 Py_CLEAR(raw); 808 Py_CLEAR(text); 809 810 stream = PyObject_CallMethod(io, "TextIOWrapper", "OsssO", 811 buf, encoding, errors, 812 "\n", line_buffering); 813 Py_CLEAR(buf); 814 if (stream == NULL) 815 goto error; 816 817 if (write_mode) 818 mode = "w"; 819 else 820 mode = "r"; 821 text = PyUnicode_FromString(mode); 822 if (!text || PyObject_SetAttrString(stream, "mode", text) < 0) 823 goto error; 824 Py_CLEAR(text); 825 return stream; 826 827error: 828 Py_XDECREF(buf); 829 Py_XDECREF(stream); 830 Py_XDECREF(text); 831 Py_XDECREF(raw); 832 return NULL; 833} 834 835/* Initialize sys.stdin, stdout, stderr and builtins.open */ 836static int 837initstdio(void) 838{ 839 PyObject *iomod = NULL, *wrapper; 840 PyObject *bimod = NULL; 841 PyObject *m; 842 PyObject *std = NULL; 843 int status = 0, fd; 844 PyObject * encoding_attr; 845 char *encoding = NULL, *errors; 846 847 /* Hack to avoid a nasty recursion issue when Python is invoked 848 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */ 849 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) { 850 goto error; 851 } 852 Py_DECREF(m); 853 854 if (!(m = PyImport_ImportModule("encodings.latin_1"))) { 855 goto error; 856 } 857 Py_DECREF(m); 858 859 if (!(bimod = PyImport_ImportModule("builtins"))) { 860 goto error; 861 } 862 863 if (!(iomod = PyImport_ImportModule("io"))) { 864 goto error; 865 } 866 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) { 867 goto error; 868 } 869 870 /* Set builtins.open */ 871 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) { 872 goto error; 873 } 874 875 encoding = Py_GETENV("PYTHONIOENCODING"); 876 errors = NULL; 877 if (encoding) { 878 encoding = strdup(encoding); 879 errors = strchr(encoding, ':'); 880 if (errors) { 881 *errors = '\0'; 882 errors++; 883 } 884 } 885 886 /* Set sys.stdin */ 887 fd = fileno(stdin); 888 /* Under some conditions stdin, stdout and stderr may not be connected 889 * and fileno() may point to an invalid file descriptor. For example 890 * GUI apps don't have valid standard streams by default. 891 */ 892 if (fd < 0) { 893#ifdef MS_WINDOWS 894 std = Py_None; 895 Py_INCREF(std); 896#else 897 goto error; 898#endif 899 } 900 else { 901 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors); 902 if (std == NULL) 903 goto error; 904 } /* if (fd < 0) */ 905 PySys_SetObject("__stdin__", std); 906 PySys_SetObject("stdin", std); 907 Py_DECREF(std); 908 909 /* Set sys.stdout */ 910 fd = fileno(stdout); 911 if (fd < 0) { 912#ifdef MS_WINDOWS 913 std = Py_None; 914 Py_INCREF(std); 915#else 916 goto error; 917#endif 918 } 919 else { 920 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors); 921 if (std == NULL) 922 goto error; 923 } /* if (fd < 0) */ 924 PySys_SetObject("__stdout__", std); 925 PySys_SetObject("stdout", std); 926 Py_DECREF(std); 927 928#if 1 /* Disable this if you have trouble debugging bootstrap stuff */ 929 /* Set sys.stderr, replaces the preliminary stderr */ 930 fd = fileno(stderr); 931 if (fd < 0) { 932#ifdef MS_WINDOWS 933 std = Py_None; 934 Py_INCREF(std); 935#else 936 goto error; 937#endif 938 } 939 else { 940 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace"); 941 if (std == NULL) 942 goto error; 943 } /* if (fd < 0) */ 944 945 /* Same as hack above, pre-import stderr's codec to avoid recursion 946 when import.c tries to write to stderr in verbose mode. */ 947 encoding_attr = PyObject_GetAttrString(std, "encoding"); 948 if (encoding_attr != NULL) { 949 const char * encoding; 950 encoding = _PyUnicode_AsString(encoding_attr); 951 if (encoding != NULL) { 952 _PyCodec_Lookup(encoding); 953 } 954 } 955 PyErr_Clear(); /* Not a fatal error if codec isn't available */ 956 957 PySys_SetObject("__stderr__", std); 958 PySys_SetObject("stderr", std); 959 Py_DECREF(std); 960#endif 961 962 if (0) { 963 error: 964 status = -1; 965 } 966 967 if (encoding) 968 free(encoding); 969 Py_XDECREF(bimod); 970 Py_XDECREF(iomod); 971 return status; 972} 973 974/* Parse input from a file and execute it */ 975 976int 977PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit, 978 PyCompilerFlags *flags) 979{ 980 if (filename == NULL) 981 filename = "???"; 982 if (Py_FdIsInteractive(fp, filename)) { 983 int err = PyRun_InteractiveLoopFlags(fp, filename, flags); 984 if (closeit) 985 fclose(fp); 986 return err; 987 } 988 else 989 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags); 990} 991 992int 993PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags) 994{ 995 PyObject *v; 996 int ret; 997 PyCompilerFlags local_flags; 998 999 if (flags == NULL) { 1000 flags = &local_flags; 1001 local_flags.cf_flags = 0; 1002 } 1003 v = PySys_GetObject("ps1"); 1004 if (v == NULL) { 1005 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> ")); 1006 Py_XDECREF(v); 1007 } 1008 v = PySys_GetObject("ps2"); 1009 if (v == NULL) { 1010 PySys_SetObject("ps2", v = PyUnicode_FromString("... ")); 1011 Py_XDECREF(v); 1012 } 1013 for (;;) { 1014 ret = PyRun_InteractiveOneFlags(fp, filename, flags); 1015 PRINT_TOTAL_REFS(); 1016 if (ret == E_EOF) 1017 return 0; 1018 /* 1019 if (ret == E_NOMEM) 1020 return -1; 1021 */ 1022 } 1023} 1024 1025/* compute parser flags based on compiler flags */ 1026static int PARSER_FLAGS(PyCompilerFlags *flags) 1027{ 1028 int parser_flags = 0; 1029 if (!flags) 1030 return 0; 1031 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT) 1032 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT; 1033 if (flags->cf_flags & PyCF_IGNORE_COOKIE) 1034 parser_flags |= PyPARSE_IGNORE_COOKIE; 1035 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL) 1036 parser_flags |= PyPARSE_BARRY_AS_BDFL; 1037 return parser_flags; 1038} 1039 1040#if 0 1041/* Keep an example of flags with future keyword support. */ 1042#define PARSER_FLAGS(flags) \ 1043 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \ 1044 PyPARSE_DONT_IMPLY_DEDENT : 0) \ 1045 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \ 1046 PyPARSE_WITH_IS_KEYWORD : 0)) : 0) 1047#endif 1048 1049int 1050PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags) 1051{ 1052 PyObject *m, *d, *v, *w, *oenc = NULL; 1053 mod_ty mod; 1054 PyArena *arena; 1055 char *ps1 = "", *ps2 = "", *enc = NULL; 1056 int errcode = 0; 1057 1058 if (fp == stdin) { 1059 /* Fetch encoding from sys.stdin */ 1060 v = PySys_GetObject("stdin"); 1061 if (v == NULL || v == Py_None) 1062 return -1; 1063 oenc = PyObject_GetAttrString(v, "encoding"); 1064 if (!oenc) 1065 return -1; 1066 enc = _PyUnicode_AsString(oenc); 1067 if (enc == NULL) 1068 return -1; 1069 } 1070 v = PySys_GetObject("ps1"); 1071 if (v != NULL) { 1072 v = PyObject_Str(v); 1073 if (v == NULL) 1074 PyErr_Clear(); 1075 else if (PyUnicode_Check(v)) { 1076 ps1 = _PyUnicode_AsString(v); 1077 if (ps1 == NULL) { 1078 PyErr_Clear(); 1079 ps1 = ""; 1080 } 1081 } 1082 } 1083 w = PySys_GetObject("ps2"); 1084 if (w != NULL) { 1085 w = PyObject_Str(w); 1086 if (w == NULL) 1087 PyErr_Clear(); 1088 else if (PyUnicode_Check(w)) { 1089 ps2 = _PyUnicode_AsString(w); 1090 if (ps2 == NULL) { 1091 PyErr_Clear(); 1092 ps2 = ""; 1093 } 1094 } 1095 } 1096 arena = PyArena_New(); 1097 if (arena == NULL) { 1098 Py_XDECREF(v); 1099 Py_XDECREF(w); 1100 Py_XDECREF(oenc); 1101 return -1; 1102 } 1103 mod = PyParser_ASTFromFile(fp, filename, enc, 1104 Py_single_input, ps1, ps2, 1105 flags, &errcode, arena); 1106 Py_XDECREF(v); 1107 Py_XDECREF(w); 1108 Py_XDECREF(oenc); 1109 if (mod == NULL) { 1110 PyArena_Free(arena); 1111 if (errcode == E_EOF) { 1112 PyErr_Clear(); 1113 return E_EOF; 1114 } 1115 PyErr_Print(); 1116 return -1; 1117 } 1118 m = PyImport_AddModule("__main__"); 1119 if (m == NULL) { 1120 PyArena_Free(arena); 1121 return -1; 1122 } 1123 d = PyModule_GetDict(m); 1124 v = run_mod(mod, filename, d, d, flags, arena); 1125 PyArena_Free(arena); 1126 flush_io(); 1127 if (v == NULL) { 1128 PyErr_Print(); 1129 return -1; 1130 } 1131 Py_DECREF(v); 1132 return 0; 1133} 1134 1135/* Check whether a file maybe a pyc file: Look at the extension, 1136 the file type, and, if we may close it, at the first few bytes. */ 1137 1138static int 1139maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit) 1140{ 1141 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0) 1142 return 1; 1143 1144 /* Only look into the file if we are allowed to close it, since 1145 it then should also be seekable. */ 1146 if (closeit) { 1147 /* Read only two bytes of the magic. If the file was opened in 1148 text mode, the bytes 3 and 4 of the magic (\r\n) might not 1149 be read as they are on disk. */ 1150 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF; 1151 unsigned char buf[2]; 1152 /* Mess: In case of -x, the stream is NOT at its start now, 1153 and ungetc() was used to push back the first newline, 1154 which makes the current stream position formally undefined, 1155 and a x-platform nightmare. 1156 Unfortunately, we have no direct way to know whether -x 1157 was specified. So we use a terrible hack: if the current 1158 stream position is not 0, we assume -x was specified, and 1159 give up. Bug 132850 on SourceForge spells out the 1160 hopelessness of trying anything else (fseek and ftell 1161 don't work predictably x-platform for text-mode files). 1162 */ 1163 int ispyc = 0; 1164 if (ftell(fp) == 0) { 1165 if (fread(buf, 1, 2, fp) == 2 && 1166 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic) 1167 ispyc = 1; 1168 rewind(fp); 1169 } 1170 return ispyc; 1171 } 1172 return 0; 1173} 1174 1175int 1176PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, 1177 PyCompilerFlags *flags) 1178{ 1179 PyObject *m, *d, *v; 1180 const char *ext; 1181 int set_file_name = 0, ret, len; 1182 1183 m = PyImport_AddModule("__main__"); 1184 if (m == NULL) 1185 return -1; 1186 d = PyModule_GetDict(m); 1187 if (PyDict_GetItemString(d, "__file__") == NULL) { 1188 PyObject *f; 1189 f = PyUnicode_DecodeFSDefault(filename); 1190 if (f == NULL) 1191 return -1; 1192 if (PyDict_SetItemString(d, "__file__", f) < 0) { 1193 Py_DECREF(f); 1194 return -1; 1195 } 1196 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0) 1197 return -1; 1198 set_file_name = 1; 1199 Py_DECREF(f); 1200 } 1201 len = strlen(filename); 1202 ext = filename + len - (len > 4 ? 4 : 0); 1203 if (maybe_pyc_file(fp, filename, ext, closeit)) { 1204 /* Try to run a pyc file. First, re-open in binary */ 1205 if (closeit) 1206 fclose(fp); 1207 if ((fp = fopen(filename, "rb")) == NULL) { 1208 fprintf(stderr, "python: Can't reopen .pyc file\n"); 1209 ret = -1; 1210 goto done; 1211 } 1212 /* Turn on optimization if a .pyo file is given */ 1213 if (strcmp(ext, ".pyo") == 0) 1214 Py_OptimizeFlag = 1; 1215 v = run_pyc_file(fp, filename, d, d, flags); 1216 } else { 1217 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d, 1218 closeit, flags); 1219 } 1220 flush_io(); 1221 if (v == NULL) { 1222 PyErr_Print(); 1223 ret = -1; 1224 goto done; 1225 } 1226 Py_DECREF(v); 1227 ret = 0; 1228 done: 1229 if (set_file_name && PyDict_DelItemString(d, "__file__")) 1230 PyErr_Clear(); 1231 return ret; 1232} 1233 1234int 1235PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags) 1236{ 1237 PyObject *m, *d, *v; 1238 m = PyImport_AddModule("__main__"); 1239 if (m == NULL) 1240 return -1; 1241 d = PyModule_GetDict(m); 1242 v = PyRun_StringFlags(command, Py_file_input, d, d, flags); 1243 if (v == NULL) { 1244 PyErr_Print(); 1245 return -1; 1246 } 1247 Py_DECREF(v); 1248 return 0; 1249} 1250 1251static int 1252parse_syntax_error(PyObject *err, PyObject **message, const char **filename, 1253 int *lineno, int *offset, const char **text) 1254{ 1255 long hold; 1256 PyObject *v; 1257 1258 /* old style errors */ 1259 if (PyTuple_Check(err)) 1260 return PyArg_ParseTuple(err, "O(ziiz)", message, filename, 1261 lineno, offset, text); 1262 1263 /* new style errors. `err' is an instance */ 1264 1265 if (! (v = PyObject_GetAttrString(err, "msg"))) 1266 goto finally; 1267 *message = v; 1268 1269 if (!(v = PyObject_GetAttrString(err, "filename"))) 1270 goto finally; 1271 if (v == Py_None) 1272 *filename = NULL; 1273 else if (! (*filename = _PyUnicode_AsString(v))) 1274 goto finally; 1275 1276 Py_DECREF(v); 1277 if (!(v = PyObject_GetAttrString(err, "lineno"))) 1278 goto finally; 1279 hold = PyLong_AsLong(v); 1280 Py_DECREF(v); 1281 v = NULL; 1282 if (hold < 0 && PyErr_Occurred()) 1283 goto finally; 1284 *lineno = (int)hold; 1285 1286 if (!(v = PyObject_GetAttrString(err, "offset"))) 1287 goto finally; 1288 if (v == Py_None) { 1289 *offset = -1; 1290 Py_DECREF(v); 1291 v = NULL; 1292 } else { 1293 hold = PyLong_AsLong(v); 1294 Py_DECREF(v); 1295 v = NULL; 1296 if (hold < 0 && PyErr_Occurred()) 1297 goto finally; 1298 *offset = (int)hold; 1299 } 1300 1301 if (!(v = PyObject_GetAttrString(err, "text"))) 1302 goto finally; 1303 if (v == Py_None) 1304 *text = NULL; 1305 else if (!PyUnicode_Check(v) || 1306 !(*text = _PyUnicode_AsString(v))) 1307 goto finally; 1308 Py_DECREF(v); 1309 return 1; 1310 1311finally: 1312 Py_XDECREF(v); 1313 return 0; 1314} 1315 1316void 1317PyErr_Print(void) 1318{ 1319 PyErr_PrintEx(1); 1320} 1321 1322static void 1323print_error_text(PyObject *f, int offset, const char *text) 1324{ 1325 char *nl; 1326 if (offset >= 0) { 1327 if (offset > 0 && offset == (int)strlen(text)) 1328 offset--; 1329 for (;;) { 1330 nl = strchr(text, '\n'); 1331 if (nl == NULL || nl-text >= offset) 1332 break; 1333 offset -= (int)(nl+1-text); 1334 text = nl+1; 1335 } 1336 while (*text == ' ' || *text == '\t') { 1337 text++; 1338 offset--; 1339 } 1340 } 1341 PyFile_WriteString(" ", f); 1342 PyFile_WriteString(text, f); 1343 if (*text == '\0' || text[strlen(text)-1] != '\n') 1344 PyFile_WriteString("\n", f); 1345 if (offset == -1) 1346 return; 1347 PyFile_WriteString(" ", f); 1348 offset--; 1349 while (offset > 0) { 1350 PyFile_WriteString(" ", f); 1351 offset--; 1352 } 1353 PyFile_WriteString("^\n", f); 1354} 1355 1356static void 1357handle_system_exit(void) 1358{ 1359 PyObject *exception, *value, *tb; 1360 int exitcode = 0; 1361 1362 if (Py_InspectFlag) 1363 /* Don't exit if -i flag was given. This flag is set to 0 1364 * when entering interactive mode for inspecting. */ 1365 return; 1366 1367 PyErr_Fetch(&exception, &value, &tb); 1368 fflush(stdout); 1369 if (value == NULL || value == Py_None) 1370 goto done; 1371 if (PyExceptionInstance_Check(value)) { 1372 /* The error code should be in the `code' attribute. */ 1373 PyObject *code = PyObject_GetAttrString(value, "code"); 1374 if (code) { 1375 Py_DECREF(value); 1376 value = code; 1377 if (value == Py_None) 1378 goto done; 1379 } 1380 /* If we failed to dig out the 'code' attribute, 1381 just let the else clause below print the error. */ 1382 } 1383 if (PyLong_Check(value)) 1384 exitcode = (int)PyLong_AsLong(value); 1385 else { 1386 PyObject *sys_stderr = PySys_GetObject("stderr"); 1387 if (sys_stderr != NULL) 1388 PyObject_CallMethod(sys_stderr, "flush", NULL); 1389 PyObject_Print(value, stderr, Py_PRINT_RAW); 1390 fflush(stderr); 1391 PySys_WriteStderr("\n"); 1392 exitcode = 1; 1393 } 1394 done: 1395 /* Restore and clear the exception info, in order to properly decref 1396 * the exception, value, and traceback. If we just exit instead, 1397 * these leak, which confuses PYTHONDUMPREFS output, and may prevent 1398 * some finalizers from running. 1399 */ 1400 PyErr_Restore(exception, value, tb); 1401 PyErr_Clear(); 1402 Py_Exit(exitcode); 1403 /* NOTREACHED */ 1404} 1405 1406void 1407PyErr_PrintEx(int set_sys_last_vars) 1408{ 1409 PyObject *exception, *v, *tb, *hook; 1410 1411 if (PyErr_ExceptionMatches(PyExc_SystemExit)) { 1412 handle_system_exit(); 1413 } 1414 PyErr_Fetch(&exception, &v, &tb); 1415 if (exception == NULL) 1416 return; 1417 PyErr_NormalizeException(&exception, &v, &tb); 1418 if (tb == NULL) { 1419 tb = Py_None; 1420 Py_INCREF(tb); 1421 } 1422 PyException_SetTraceback(v, tb); 1423 if (exception == NULL) 1424 return; 1425 /* Now we know v != NULL too */ 1426 if (set_sys_last_vars) { 1427 PySys_SetObject("last_type", exception); 1428 PySys_SetObject("last_value", v); 1429 PySys_SetObject("last_traceback", tb); 1430 } 1431 hook = PySys_GetObject("excepthook"); 1432 if (hook) { 1433 PyObject *args = PyTuple_Pack(3, exception, v, tb); 1434 PyObject *result = PyEval_CallObject(hook, args); 1435 if (result == NULL) { 1436 PyObject *exception2, *v2, *tb2; 1437 if (PyErr_ExceptionMatches(PyExc_SystemExit)) { 1438 handle_system_exit(); 1439 } 1440 PyErr_Fetch(&exception2, &v2, &tb2); 1441 PyErr_NormalizeException(&exception2, &v2, &tb2); 1442 /* It should not be possible for exception2 or v2 1443 to be NULL. However PyErr_Display() can't 1444 tolerate NULLs, so just be safe. */ 1445 if (exception2 == NULL) { 1446 exception2 = Py_None; 1447 Py_INCREF(exception2); 1448 } 1449 if (v2 == NULL) { 1450 v2 = Py_None; 1451 Py_INCREF(v2); 1452 } 1453 fflush(stdout); 1454 PySys_WriteStderr("Error in sys.excepthook:\n"); 1455 PyErr_Display(exception2, v2, tb2); 1456 PySys_WriteStderr("\nOriginal exception was:\n"); 1457 PyErr_Display(exception, v, tb); 1458 Py_DECREF(exception2); 1459 Py_DECREF(v2); 1460 Py_XDECREF(tb2); 1461 } 1462 Py_XDECREF(result); 1463 Py_XDECREF(args); 1464 } else { 1465 PySys_WriteStderr("sys.excepthook is missing\n"); 1466 PyErr_Display(exception, v, tb); 1467 } 1468 Py_XDECREF(exception); 1469 Py_XDECREF(v); 1470 Py_XDECREF(tb); 1471} 1472 1473static void 1474print_exception(PyObject *f, PyObject *value) 1475{ 1476 int err = 0; 1477 PyObject *type, *tb; 1478 1479 if (!PyExceptionInstance_Check(value)) { 1480 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f); 1481 PyFile_WriteString(Py_TYPE(value)->tp_name, f); 1482 PyFile_WriteString(" found\n", f); 1483 return; 1484 } 1485 1486 Py_INCREF(value); 1487 fflush(stdout); 1488 type = (PyObject *) Py_TYPE(value); 1489 tb = PyException_GetTraceback(value); 1490 if (tb && tb != Py_None) 1491 err = PyTraceBack_Print(tb, f); 1492 if (err == 0 && 1493 PyObject_HasAttrString(value, "print_file_and_line")) 1494 { 1495 PyObject *message; 1496 const char *filename, *text; 1497 int lineno, offset; 1498 if (!parse_syntax_error(value, &message, &filename, 1499 &lineno, &offset, &text)) 1500 PyErr_Clear(); 1501 else { 1502 char buf[10]; 1503 PyFile_WriteString(" File \"", f); 1504 if (filename == NULL) 1505 PyFile_WriteString("<string>", f); 1506 else 1507 PyFile_WriteString(filename, f); 1508 PyFile_WriteString("\", line ", f); 1509 PyOS_snprintf(buf, sizeof(buf), "%d", lineno); 1510 PyFile_WriteString(buf, f); 1511 PyFile_WriteString("\n", f); 1512 if (text != NULL) 1513 print_error_text(f, offset, text); 1514 Py_DECREF(value); 1515 value = message; 1516 /* Can't be bothered to check all those 1517 PyFile_WriteString() calls */ 1518 if (PyErr_Occurred()) 1519 err = -1; 1520 } 1521 } 1522 if (err) { 1523 /* Don't do anything else */ 1524 } 1525 else { 1526 PyObject* moduleName; 1527 char* className; 1528 assert(PyExceptionClass_Check(type)); 1529 className = PyExceptionClass_Name(type); 1530 if (className != NULL) { 1531 char *dot = strrchr(className, '.'); 1532 if (dot != NULL) 1533 className = dot+1; 1534 } 1535 1536 moduleName = PyObject_GetAttrString(type, "__module__"); 1537 if (moduleName == NULL || !PyUnicode_Check(moduleName)) 1538 { 1539 Py_DECREF(moduleName); 1540 err = PyFile_WriteString("<unknown>", f); 1541 } 1542 else { 1543 char* modstr = _PyUnicode_AsString(moduleName); 1544 if (modstr && strcmp(modstr, "builtins")) 1545 { 1546 err = PyFile_WriteString(modstr, f); 1547 err += PyFile_WriteString(".", f); 1548 } 1549 Py_DECREF(moduleName); 1550 } 1551 if (err == 0) { 1552 if (className == NULL) 1553 err = PyFile_WriteString("<unknown>", f); 1554 else 1555 err = PyFile_WriteString(className, f); 1556 } 1557 } 1558 if (err == 0 && (value != Py_None)) { 1559 PyObject *s = PyObject_Str(value); 1560 /* only print colon if the str() of the 1561 object is not the empty string 1562 */ 1563 if (s == NULL) 1564 err = -1; 1565 else if (!PyUnicode_Check(s) || 1566 PyUnicode_GetSize(s) != 0) 1567 err = PyFile_WriteString(": ", f); 1568 if (err == 0) 1569 err = PyFile_WriteObject(s, f, Py_PRINT_RAW); 1570 Py_XDECREF(s); 1571 } 1572 /* try to write a newline in any case */ 1573 err += PyFile_WriteString("\n", f); 1574 Py_XDECREF(tb); 1575 Py_DECREF(value); 1576 /* If an error happened here, don't show it. 1577 XXX This is wrong, but too many callers rely on this behavior. */ 1578 if (err != 0) 1579 PyErr_Clear(); 1580} 1581 1582static const char *cause_message = 1583 "\nThe above exception was the direct cause " 1584 "of the following exception:\n\n"; 1585 1586static const char *context_message = 1587 "\nDuring handling of the above exception, " 1588 "another exception occurred:\n\n"; 1589 1590static void 1591print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen) 1592{ 1593 int err = 0, res; 1594 PyObject *cause, *context; 1595 1596 if (seen != NULL) { 1597 /* Exception chaining */ 1598 if (PySet_Add(seen, value) == -1) 1599 PyErr_Clear(); 1600 else if (PyExceptionInstance_Check(value)) { 1601 cause = PyException_GetCause(value); 1602 context = PyException_GetContext(value); 1603 if (cause) { 1604 res = PySet_Contains(seen, cause); 1605 if (res == -1) 1606 PyErr_Clear(); 1607 if (res == 0) { 1608 print_exception_recursive( 1609 f, cause, seen); 1610 err |= PyFile_WriteString( 1611 cause_message, f); 1612 } 1613 } 1614 else if (context) { 1615 res = PySet_Contains(seen, context); 1616 if (res == -1) 1617 PyErr_Clear(); 1618 if (res == 0) { 1619 print_exception_recursive( 1620 f, context, seen); 1621 err |= PyFile_WriteString( 1622 context_message, f); 1623 } 1624 } 1625 Py_XDECREF(context); 1626 Py_XDECREF(cause); 1627 } 1628 } 1629 print_exception(f, value); 1630 if (err != 0) 1631 PyErr_Clear(); 1632} 1633 1634void 1635PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb) 1636{ 1637 PyObject *seen; 1638 PyObject *f = PySys_GetObject("stderr"); 1639 if (f == Py_None) { 1640 /* pass */ 1641 } 1642 else if (f == NULL) { 1643 _PyObject_Dump(value); 1644 fprintf(stderr, "lost sys.stderr\n"); 1645 } 1646 else { 1647 /* We choose to ignore seen being possibly NULL, and report 1648 at least the main exception (it could be a MemoryError). 1649 */ 1650 seen = PySet_New(NULL); 1651 if (seen == NULL) 1652 PyErr_Clear(); 1653 print_exception_recursive(f, value, seen); 1654 Py_XDECREF(seen); 1655 } 1656} 1657 1658PyObject * 1659PyRun_StringFlags(const char *str, int start, PyObject *globals, 1660 PyObject *locals, PyCompilerFlags *flags) 1661{ 1662 PyObject *ret = NULL; 1663 mod_ty mod; 1664 PyArena *arena = PyArena_New(); 1665 if (arena == NULL) 1666 return NULL; 1667 1668 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena); 1669 if (mod != NULL) 1670 ret = run_mod(mod, "<string>", globals, locals, flags, arena); 1671 PyArena_Free(arena); 1672 return ret; 1673} 1674 1675PyObject * 1676PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals, 1677 PyObject *locals, int closeit, PyCompilerFlags *flags) 1678{ 1679 PyObject *ret; 1680 mod_ty mod; 1681 PyArena *arena = PyArena_New(); 1682 if (arena == NULL) 1683 return NULL; 1684 1685 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0, 1686 flags, NULL, arena); 1687 if (closeit) 1688 fclose(fp); 1689 if (mod == NULL) { 1690 PyArena_Free(arena); 1691 return NULL; 1692 } 1693 ret = run_mod(mod, filename, globals, locals, flags, arena); 1694 PyArena_Free(arena); 1695 return ret; 1696} 1697 1698static void 1699flush_io(void) 1700{ 1701 PyObject *f, *r; 1702 PyObject *type, *value, *traceback; 1703 1704 /* Save the current exception */ 1705 PyErr_Fetch(&type, &value, &traceback); 1706 1707 f = PySys_GetObject("stderr"); 1708 if (f != NULL) { 1709 r = PyObject_CallMethod(f, "flush", ""); 1710 if (r) 1711 Py_DECREF(r); 1712 else 1713 PyErr_Clear(); 1714 } 1715 f = PySys_GetObject("stdout"); 1716 if (f != NULL) { 1717 r = PyObject_CallMethod(f, "flush", ""); 1718 if (r) 1719 Py_DECREF(r); 1720 else 1721 PyErr_Clear(); 1722 } 1723 1724 PyErr_Restore(type, value, traceback); 1725} 1726 1727static PyObject * 1728run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals, 1729 PyCompilerFlags *flags, PyArena *arena) 1730{ 1731 PyCodeObject *co; 1732 PyObject *v; 1733 co = PyAST_Compile(mod, filename, flags, arena); 1734 if (co == NULL) 1735 return NULL; 1736 v = PyEval_EvalCode(co, globals, locals); 1737 Py_DECREF(co); 1738 return v; 1739} 1740 1741static PyObject * 1742run_pyc_file(FILE *fp, const char *filename, PyObject *globals, 1743 PyObject *locals, PyCompilerFlags *flags) 1744{ 1745 PyCodeObject *co; 1746 PyObject *v; 1747 long magic; 1748 long PyImport_GetMagicNumber(void); 1749 1750 magic = PyMarshal_ReadLongFromFile(fp); 1751 if (magic != PyImport_GetMagicNumber()) { 1752 PyErr_SetString(PyExc_RuntimeError, 1753 "Bad magic number in .pyc file"); 1754 return NULL; 1755 } 1756 (void) PyMarshal_ReadLongFromFile(fp); 1757 v = PyMarshal_ReadLastObjectFromFile(fp); 1758 fclose(fp); 1759 if (v == NULL || !PyCode_Check(v)) { 1760 Py_XDECREF(v); 1761 PyErr_SetString(PyExc_RuntimeError, 1762 "Bad code object in .pyc file"); 1763 return NULL; 1764 } 1765 co = (PyCodeObject *)v; 1766 v = PyEval_EvalCode(co, globals, locals); 1767 if (v && flags) 1768 flags->cf_flags |= (co->co_flags & PyCF_MASK); 1769 Py_DECREF(co); 1770 return v; 1771} 1772 1773PyObject * 1774Py_CompileStringFlags(const char *str, const char *filename, int start, 1775 PyCompilerFlags *flags) 1776{ 1777 PyCodeObject *co; 1778 mod_ty mod; 1779 PyArena *arena = PyArena_New(); 1780 if (arena == NULL) 1781 return NULL; 1782 1783 mod = PyParser_ASTFromString(str, filename, start, flags, arena); 1784 if (mod == NULL) { 1785 PyArena_Free(arena); 1786 return NULL; 1787 } 1788 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) { 1789 PyObject *result = PyAST_mod2obj(mod); 1790 PyArena_Free(arena); 1791 return result; 1792 } 1793 co = PyAST_Compile(mod, filename, flags, arena); 1794 PyArena_Free(arena); 1795 return (PyObject *)co; 1796} 1797 1798struct symtable * 1799Py_SymtableString(const char *str, const char *filename, int start) 1800{ 1801 struct symtable *st; 1802 mod_ty mod; 1803 PyCompilerFlags flags; 1804 PyArena *arena = PyArena_New(); 1805 if (arena == NULL) 1806 return NULL; 1807 1808 flags.cf_flags = 0; 1809 mod = PyParser_ASTFromString(str, filename, start, &flags, arena); 1810 if (mod == NULL) { 1811 PyArena_Free(arena); 1812 return NULL; 1813 } 1814 st = PySymtable_Build(mod, filename, 0); 1815 PyArena_Free(arena); 1816 return st; 1817} 1818 1819/* Preferred access to parser is through AST. */ 1820mod_ty 1821PyParser_ASTFromString(const char *s, const char *filename, int start, 1822 PyCompilerFlags *flags, PyArena *arena) 1823{ 1824 mod_ty mod; 1825 PyCompilerFlags localflags; 1826 perrdetail err; 1827 int iflags = PARSER_FLAGS(flags); 1828 1829 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename, 1830 &_PyParser_Grammar, start, &err, 1831 &iflags); 1832 if (flags == NULL) { 1833 localflags.cf_flags = 0; 1834 flags = &localflags; 1835 } 1836 if (n) { 1837 flags->cf_flags |= iflags & PyCF_MASK; 1838 mod = PyAST_FromNode(n, flags, filename, arena); 1839 PyNode_Free(n); 1840 return mod; 1841 } 1842 else { 1843 err_input(&err); 1844 return NULL; 1845 } 1846} 1847 1848mod_ty 1849PyParser_ASTFromFile(FILE *fp, const char *filename, const char* enc, 1850 int start, char *ps1, 1851 char *ps2, PyCompilerFlags *flags, int *errcode, 1852 PyArena *arena) 1853{ 1854 mod_ty mod; 1855 PyCompilerFlags localflags; 1856 perrdetail err; 1857 int iflags = PARSER_FLAGS(flags); 1858 1859 node *n = PyParser_ParseFileFlagsEx(fp, filename, enc, 1860 &_PyParser_Grammar, 1861 start, ps1, ps2, &err, &iflags); 1862 if (flags == NULL) { 1863 localflags.cf_flags = 0; 1864 flags = &localflags; 1865 } 1866 if (n) { 1867 flags->cf_flags |= iflags & PyCF_MASK; 1868 mod = PyAST_FromNode(n, flags, filename, arena); 1869 PyNode_Free(n); 1870 return mod; 1871 } 1872 else { 1873 err_input(&err); 1874 if (errcode) 1875 *errcode = err.error; 1876 return NULL; 1877 } 1878} 1879 1880/* Simplified interface to parsefile -- return node or set exception */ 1881 1882node * 1883PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags) 1884{ 1885 perrdetail err; 1886 node *n = PyParser_ParseFileFlags(fp, filename, NULL, 1887 &_PyParser_Grammar, 1888 start, NULL, NULL, &err, flags); 1889 if (n == NULL) 1890 err_input(&err); 1891 1892 return n; 1893} 1894 1895/* Simplified interface to parsestring -- return node or set exception */ 1896 1897node * 1898PyParser_SimpleParseStringFlags(const char *str, int start, int flags) 1899{ 1900 perrdetail err; 1901 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar, 1902 start, &err, flags); 1903 if (n == NULL) 1904 err_input(&err); 1905 return n; 1906} 1907 1908node * 1909PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename, 1910 int start, int flags) 1911{ 1912 perrdetail err; 1913 node *n = PyParser_ParseStringFlagsFilename(str, filename, 1914 &_PyParser_Grammar, start, &err, flags); 1915 if (n == NULL) 1916 err_input(&err); 1917 return n; 1918} 1919 1920node * 1921PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start) 1922{ 1923 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0); 1924} 1925 1926/* May want to move a more generalized form of this to parsetok.c or 1927 even parser modules. */ 1928 1929void 1930PyParser_SetError(perrdetail *err) 1931{ 1932 err_input(err); 1933} 1934 1935/* Set the error appropriate to the given input error code (see errcode.h) */ 1936 1937static void 1938err_input(perrdetail *err) 1939{ 1940 PyObject *v, *w, *errtype, *errtext; 1941 PyObject *msg_obj = NULL; 1942 char *msg = NULL; 1943 errtype = PyExc_SyntaxError; 1944 switch (err->error) { 1945 case E_ERROR: 1946 return; 1947 case E_SYNTAX: 1948 errtype = PyExc_IndentationError; 1949 if (err->expected == INDENT) 1950 msg = "expected an indented block"; 1951 else if (err->token == INDENT) 1952 msg = "unexpected indent"; 1953 else if (err->token == DEDENT) 1954 msg = "unexpected unindent"; 1955 else { 1956 errtype = PyExc_SyntaxError; 1957 msg = "invalid syntax"; 1958 } 1959 break; 1960 case E_TOKEN: 1961 msg = "invalid token"; 1962 break; 1963 case E_EOFS: 1964 msg = "EOF while scanning triple-quoted string literal"; 1965 break; 1966 case E_EOLS: 1967 msg = "EOL while scanning string literal"; 1968 break; 1969 case E_INTR: 1970 if (!PyErr_Occurred()) 1971 PyErr_SetNone(PyExc_KeyboardInterrupt); 1972 goto cleanup; 1973 case E_NOMEM: 1974 PyErr_NoMemory(); 1975 goto cleanup; 1976 case E_EOF: 1977 msg = "unexpected EOF while parsing"; 1978 break; 1979 case E_TABSPACE: 1980 errtype = PyExc_TabError; 1981 msg = "inconsistent use of tabs and spaces in indentation"; 1982 break; 1983 case E_OVERFLOW: 1984 msg = "expression too long"; 1985 break; 1986 case E_DEDENT: 1987 errtype = PyExc_IndentationError; 1988 msg = "unindent does not match any outer indentation level"; 1989 break; 1990 case E_TOODEEP: 1991 errtype = PyExc_IndentationError; 1992 msg = "too many levels of indentation"; 1993 break; 1994 case E_DECODE: { 1995 PyObject *type, *value, *tb; 1996 PyErr_Fetch(&type, &value, &tb); 1997 msg = "unknown decode error"; 1998 if (value != NULL) 1999 msg_obj = PyObject_Str(value); 2000 Py_XDECREF(type); 2001 Py_XDECREF(value); 2002 Py_XDECREF(tb); 2003 break; 2004 } 2005 case E_LINECONT: 2006 msg = "unexpected character after line continuation character"; 2007 break; 2008 2009 case E_IDENTIFIER: 2010 msg = "invalid character in identifier"; 2011 break; 2012 default: 2013 fprintf(stderr, "error=%d\n", err->error); 2014 msg = "unknown parsing error"; 2015 break; 2016 } 2017 /* err->text may not be UTF-8 in case of decoding errors. 2018 Explicitly convert to an object. */ 2019 if (!err->text) { 2020 errtext = Py_None; 2021 Py_INCREF(Py_None); 2022 } else { 2023 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text), 2024 "replace"); 2025 } 2026 v = Py_BuildValue("(ziiN)", err->filename, 2027 err->lineno, err->offset, errtext); 2028 if (v != NULL) { 2029 if (msg_obj) 2030 w = Py_BuildValue("(OO)", msg_obj, v); 2031 else 2032 w = Py_BuildValue("(sO)", msg, v); 2033 } else 2034 w = NULL; 2035 Py_XDECREF(v); 2036 PyErr_SetObject(errtype, w); 2037 Py_XDECREF(w); 2038cleanup: 2039 Py_XDECREF(msg_obj); 2040 if (err->text != NULL) { 2041 PyObject_FREE(err->text); 2042 err->text = NULL; 2043 } 2044} 2045 2046/* Print fatal error message and abort */ 2047 2048void 2049Py_FatalError(const char *msg) 2050{ 2051 fprintf(stderr, "Fatal Python error: %s\n", msg); 2052 fflush(stderr); /* it helps in Windows debug build */ 2053 if (PyErr_Occurred()) { 2054 PyErr_Print(); 2055 } 2056#ifdef MS_WINDOWS 2057 { 2058 size_t len = strlen(msg); 2059 WCHAR* buffer; 2060 size_t i; 2061 2062 /* Convert the message to wchar_t. This uses a simple one-to-one 2063 conversion, assuming that the this error message actually uses ASCII 2064 only. If this ceases to be true, we will have to convert. */ 2065 buffer = alloca( (len+1) * (sizeof *buffer)); 2066 for( i=0; i<=len; ++i) 2067 buffer[i] = msg[i]; 2068 OutputDebugStringW(L"Fatal Python error: "); 2069 OutputDebugStringW(buffer); 2070 OutputDebugStringW(L"\n"); 2071 } 2072#ifdef _DEBUG 2073 DebugBreak(); 2074#endif 2075#endif /* MS_WINDOWS */ 2076 abort(); 2077} 2078 2079/* Clean up and exit */ 2080 2081#ifdef WITH_THREAD 2082#include "pythread.h" 2083#endif 2084 2085static void (*pyexitfunc)(void) = NULL; 2086/* For the atexit module. */ 2087void _Py_PyAtExit(void (*func)(void)) 2088{ 2089 pyexitfunc = func; 2090} 2091 2092static void 2093call_py_exitfuncs(void) 2094{ 2095 if (pyexitfunc == NULL) 2096 return; 2097 2098 (*pyexitfunc)(); 2099 PyErr_Clear(); 2100} 2101 2102/* Wait until threading._shutdown completes, provided 2103 the threading module was imported in the first place. 2104 The shutdown routine will wait until all non-daemon 2105 "threading" threads have completed. */ 2106static void 2107wait_for_thread_shutdown(void) 2108{ 2109#ifdef WITH_THREAD 2110 PyObject *result; 2111 PyThreadState *tstate = PyThreadState_GET(); 2112 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules, 2113 "threading"); 2114 if (threading == NULL) { 2115 /* threading not imported */ 2116 PyErr_Clear(); 2117 return; 2118 } 2119 result = PyObject_CallMethod(threading, "_shutdown", ""); 2120 if (result == NULL) { 2121 PyErr_WriteUnraisable(threading); 2122 } 2123 else { 2124 Py_DECREF(result); 2125 } 2126 Py_DECREF(threading); 2127#endif 2128} 2129 2130#define NEXITFUNCS 32 2131static void (*exitfuncs[NEXITFUNCS])(void); 2132static int nexitfuncs = 0; 2133 2134int Py_AtExit(void (*func)(void)) 2135{ 2136 if (nexitfuncs >= NEXITFUNCS) 2137 return -1; 2138 exitfuncs[nexitfuncs++] = func; 2139 return 0; 2140} 2141 2142static void 2143call_ll_exitfuncs(void) 2144{ 2145 while (nexitfuncs > 0) 2146 (*exitfuncs[--nexitfuncs])(); 2147 2148 fflush(stdout); 2149 fflush(stderr); 2150} 2151 2152void 2153Py_Exit(int sts) 2154{ 2155 Py_Finalize(); 2156 2157 exit(sts); 2158} 2159 2160static void 2161initsigs(void) 2162{ 2163#ifdef SIGPIPE 2164 PyOS_setsig(SIGPIPE, SIG_IGN); 2165#endif 2166#ifdef SIGXFZ 2167 PyOS_setsig(SIGXFZ, SIG_IGN); 2168#endif 2169#ifdef SIGXFSZ 2170 PyOS_setsig(SIGXFSZ, SIG_IGN); 2171#endif 2172 PyOS_InitInterrupts(); /* May imply initsignal() */ 2173} 2174 2175 2176/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL. 2177 * 2178 * All of the code in this function must only use async-signal-safe functions, 2179 * listed at `man 7 signal` or 2180 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html. 2181 */ 2182void 2183_Py_RestoreSignals(void) 2184{ 2185#ifdef SIGPIPE 2186 PyOS_setsig(SIGPIPE, SIG_DFL); 2187#endif 2188#ifdef SIGXFZ 2189 PyOS_setsig(SIGXFZ, SIG_DFL); 2190#endif 2191#ifdef SIGXFSZ 2192 PyOS_setsig(SIGXFSZ, SIG_DFL); 2193#endif 2194} 2195 2196 2197/* 2198 * The file descriptor fd is considered ``interactive'' if either 2199 * a) isatty(fd) is TRUE, or 2200 * b) the -i flag was given, and the filename associated with 2201 * the descriptor is NULL or "<stdin>" or "???". 2202 */ 2203int 2204Py_FdIsInteractive(FILE *fp, const char *filename) 2205{ 2206 if (isatty((int)fileno(fp))) 2207 return 1; 2208 if (!Py_InteractiveFlag) 2209 return 0; 2210 return (filename == NULL) || 2211 (strcmp(filename, "<stdin>") == 0) || 2212 (strcmp(filename, "???") == 0); 2213} 2214 2215 2216#if defined(USE_STACKCHECK) 2217#if defined(WIN32) && defined(_MSC_VER) 2218 2219/* Stack checking for Microsoft C */ 2220 2221#include <malloc.h> 2222#include <excpt.h> 2223 2224/* 2225 * Return non-zero when we run out of memory on the stack; zero otherwise. 2226 */ 2227int 2228PyOS_CheckStack(void) 2229{ 2230 __try { 2231 /* alloca throws a stack overflow exception if there's 2232 not enough space left on the stack */ 2233 alloca(PYOS_STACK_MARGIN * sizeof(void*)); 2234 return 0; 2235 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ? 2236 EXCEPTION_EXECUTE_HANDLER : 2237 EXCEPTION_CONTINUE_SEARCH) { 2238 int errcode = _resetstkoflw(); 2239 if (errcode == 0) 2240 { 2241 Py_FatalError("Could not reset the stack!"); 2242 } 2243 } 2244 return 1; 2245} 2246 2247#endif /* WIN32 && _MSC_VER */ 2248 2249/* Alternate implementations can be added here... */ 2250 2251#endif /* USE_STACKCHECK */ 2252 2253 2254/* Wrappers around sigaction() or signal(). */ 2255 2256PyOS_sighandler_t 2257PyOS_getsig(int sig) 2258{ 2259#ifdef HAVE_SIGACTION 2260 struct sigaction context; 2261 if (sigaction(sig, NULL, &context) == -1) 2262 return SIG_ERR; 2263 return context.sa_handler; 2264#else 2265 PyOS_sighandler_t handler; 2266/* Special signal handling for the secure CRT in Visual Studio 2005 */ 2267#if defined(_MSC_VER) && _MSC_VER >= 1400 2268 switch (sig) { 2269 /* Only these signals are valid */ 2270 case SIGINT: 2271 case SIGILL: 2272 case SIGFPE: 2273 case SIGSEGV: 2274 case SIGTERM: 2275 case SIGBREAK: 2276 case SIGABRT: 2277 break; 2278 /* Don't call signal() with other values or it will assert */ 2279 default: 2280 return SIG_ERR; 2281 } 2282#endif /* _MSC_VER && _MSC_VER >= 1400 */ 2283 handler = signal(sig, SIG_IGN); 2284 if (handler != SIG_ERR) 2285 signal(sig, handler); 2286 return handler; 2287#endif 2288} 2289 2290/* 2291 * All of the code in this function must only use async-signal-safe functions, 2292 * listed at `man 7 signal` or 2293 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html. 2294 */ 2295PyOS_sighandler_t 2296PyOS_setsig(int sig, PyOS_sighandler_t handler) 2297{ 2298#ifdef HAVE_SIGACTION 2299 /* Some code in Modules/signalmodule.c depends on sigaction() being 2300 * used here if HAVE_SIGACTION is defined. Fix that if this code 2301 * changes to invalidate that assumption. 2302 */ 2303 struct sigaction context, ocontext; 2304 context.sa_handler = handler; 2305 sigemptyset(&context.sa_mask); 2306 context.sa_flags = 0; 2307 if (sigaction(sig, &context, &ocontext) == -1) 2308 return SIG_ERR; 2309 return ocontext.sa_handler; 2310#else 2311 PyOS_sighandler_t oldhandler; 2312 oldhandler = signal(sig, handler); 2313#ifdef HAVE_SIGINTERRUPT 2314 siginterrupt(sig, 1); 2315#endif 2316 return oldhandler; 2317#endif 2318} 2319 2320/* Deprecated C API functions still provided for binary compatiblity */ 2321 2322#undef PyParser_SimpleParseFile 2323PyAPI_FUNC(node *) 2324PyParser_SimpleParseFile(FILE *fp, const char *filename, int start) 2325{ 2326 return PyParser_SimpleParseFileFlags(fp, filename, start, 0); 2327} 2328 2329#undef PyParser_SimpleParseString 2330PyAPI_FUNC(node *) 2331PyParser_SimpleParseString(const char *str, int start) 2332{ 2333 return PyParser_SimpleParseStringFlags(str, start, 0); 2334} 2335 2336#undef PyRun_AnyFile 2337PyAPI_FUNC(int) 2338PyRun_AnyFile(FILE *fp, const char *name) 2339{ 2340 return PyRun_AnyFileExFlags(fp, name, 0, NULL); 2341} 2342 2343#undef PyRun_AnyFileEx 2344PyAPI_FUNC(int) 2345PyRun_AnyFileEx(FILE *fp, const char *name, int closeit) 2346{ 2347 return PyRun_AnyFileExFlags(fp, name, closeit, NULL); 2348} 2349 2350#undef PyRun_AnyFileFlags 2351PyAPI_FUNC(int) 2352PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags) 2353{ 2354 return PyRun_AnyFileExFlags(fp, name, 0, flags); 2355} 2356 2357#undef PyRun_File 2358PyAPI_FUNC(PyObject *) 2359PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l) 2360{ 2361 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL); 2362} 2363 2364#undef PyRun_FileEx 2365PyAPI_FUNC(PyObject *) 2366PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c) 2367{ 2368 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL); 2369} 2370 2371#undef PyRun_FileFlags 2372PyAPI_FUNC(PyObject *) 2373PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, 2374 PyCompilerFlags *flags) 2375{ 2376 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags); 2377} 2378 2379#undef PyRun_SimpleFile 2380PyAPI_FUNC(int) 2381PyRun_SimpleFile(FILE *f, const char *p) 2382{ 2383 return PyRun_SimpleFileExFlags(f, p, 0, NULL); 2384} 2385 2386#undef PyRun_SimpleFileEx 2387PyAPI_FUNC(int) 2388PyRun_SimpleFileEx(FILE *f, const char *p, int c) 2389{ 2390 return PyRun_SimpleFileExFlags(f, p, c, NULL); 2391} 2392 2393 2394#undef PyRun_String 2395PyAPI_FUNC(PyObject *) 2396PyRun_String(const char *str, int s, PyObject *g, PyObject *l) 2397{ 2398 return PyRun_StringFlags(str, s, g, l, NULL); 2399} 2400 2401#undef PyRun_SimpleString 2402PyAPI_FUNC(int) 2403PyRun_SimpleString(const char *s) 2404{ 2405 return PyRun_SimpleStringFlags(s, NULL); 2406} 2407 2408#undef Py_CompileString 2409PyAPI_FUNC(PyObject *) 2410Py_CompileString(const char *str, const char *p, int s) 2411{ 2412 return Py_CompileStringFlags(str, p, s, NULL); 2413} 2414 2415#undef PyRun_InteractiveOne 2416PyAPI_FUNC(int) 2417PyRun_InteractiveOne(FILE *f, const char *p) 2418{ 2419 return PyRun_InteractiveOneFlags(f, p, NULL); 2420} 2421 2422#undef PyRun_InteractiveLoop 2423PyAPI_FUNC(int) 2424PyRun_InteractiveLoop(FILE *f, const char *p) 2425{ 2426 return PyRun_InteractiveLoopFlags(f, p, NULL); 2427} 2428 2429#ifdef __cplusplus 2430} 2431#endif 2432