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