annotate Python/pythonrun.c @ 48167:a8a8232cb541 legacy-trunk

Adds a sanity check to avoid a *very rare* infinite loop due to a corrupt tls key list data structure in the thread startup path. This change is a companion to r60148 which already successfully dealt with a similar issue on thread shutdown. In particular this loop has been observed happening from this call path: #0 in find_key () #1 in PyThread_set_key_value () #2 in _PyGILState_NoteThreadState () #3 in PyThreadState_New () #4 in t_bootstrap () #5 in pthread_start_thread () I don't know how this happens but it does, *very* rarely. On more than one hardware platform. I have not been able to reproduce it manually. (A flaky mutex implementation on the system in question is one hypothesis). As with r60148, the spinning we managed to observe in the wild was due to a single list element pointing back upon itself.
author Gregory P. Smith <greg@mad-scientist.com>
date Mon, 04 Aug 2008 07:33:37 +0000
parents 7ad6e4cd7713
children b1682c693b9a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 /* Python interpreter top-level routines, including init/exit */
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
4 #include "Python.h"
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
6 #include "Python-ast.h"
41526
708c8c5fc173 Make pythoncore compile cleanly with VisualStudio 2005. Used an explicit typecast to get a 64 bit integer, and undefined the Yield macro that conflicts with winbase.h
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 41128
diff changeset
7 #undef Yield /* undefine macro conflicting with winbase.h */
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 #include "grammar.h"
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 #include "node.h"
13539
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
10 #include "token.h"
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 #include "parsetok.h"
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 #include "errcode.h"
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
13 #include "code.h"
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 #include "compile.h"
16421
aa844711463a Move a bunch of definitions that were internal to compile.c to
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16311
diff changeset
15 #include "symtable.h"
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
16 #include "pyarena.h"
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
17 #include "ast.h"
926
c156d4960c2b * Makefile: cosmetics
Guido van Rossum <guido@python.org>
parents: 923
diff changeset
18 #include "eval.h"
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
19 #include "marshal.h"
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
20
38716
42808526511c Patch #1495999: Part two of Windows CE changes.
Martin v. Löwis <martin@v.loewis.de>
parents: 38455
diff changeset
21 #ifdef HAVE_SIGNAL_H
1079
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
22 #include <signal.h>
38716
42808526511c Patch #1495999: Part two of Windows CE changes.
Martin v. Löwis <martin@v.loewis.de>
parents: 38455
diff changeset
23 #endif
1079
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
24
28174
3f90d21debe9 Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize,
Martin v. Löwis <martin@v.loewis.de>
parents: 28065
diff changeset
25 #ifdef HAVE_LANGINFO_H
3f90d21debe9 Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize,
Martin v. Löwis <martin@v.loewis.de>
parents: 28065
diff changeset
26 #include <locale.h>
3f90d21debe9 Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize,
Martin v. Löwis <martin@v.loewis.de>
parents: 28065
diff changeset
27 #include <langinfo.h>
3f90d21debe9 Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize,
Martin v. Löwis <martin@v.loewis.de>
parents: 28065
diff changeset
28 #endif
3f90d21debe9 Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize,
Martin v. Löwis <martin@v.loewis.de>
parents: 28065
diff changeset
29
24071
8142f8d668a0 Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents: 23252
diff changeset
30 #ifdef MS_WINDOWS
2529
16ea57c38c4f In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents: 2318
diff changeset
31 #undef BYTE
16ea57c38c4f In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents: 2318
diff changeset
32 #include "windows.h"
16ea57c38c4f In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents: 2318
diff changeset
33 #endif
16ea57c38c4f In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents: 2318
diff changeset
34
36837
3a3aed49b245 Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36836
diff changeset
35 #ifndef Py_REF_DEBUG
37290
89142cadcfb9 In format strings slinging Py_ssize_t, unconditionally
Tim Peters <tim.peters@gmail.com>
parents: 37229
diff changeset
36 #define PRINT_TOTAL_REFS()
36837
3a3aed49b245 Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36836
diff changeset
37 #else /* Py_REF_DEBUG */
37290
89142cadcfb9 In format strings slinging Py_ssize_t, unconditionally
Tim Peters <tim.peters@gmail.com>
parents: 37229
diff changeset
38 #define PRINT_TOTAL_REFS() fprintf(stderr, \
89142cadcfb9 In format strings slinging Py_ssize_t, unconditionally
Tim Peters <tim.peters@gmail.com>
parents: 37229
diff changeset
39 "[%" PY_FORMAT_SIZE_T "d refs]\n", \
37638
65ecb83ea7dd Ignore the references to the dummy objects used as deleted keys
Armin Rigo <arigo@tunes.org>
parents: 37423
diff changeset
40 _Py_GetRefTotal())
36837
3a3aed49b245 Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36836
diff changeset
41 #endif
3a3aed49b245 Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36836
diff changeset
42
37655
2f3f2e32dfd9 spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents: 37638
diff changeset
43 #ifdef __cplusplus
2f3f2e32dfd9 spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents: 37638
diff changeset
44 extern "C" {
2f3f2e32dfd9 spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents: 37638
diff changeset
45 #endif
2f3f2e32dfd9 spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents: 37638
diff changeset
46
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
47 extern char *Py_GetPath(void);
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
48
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
49 extern grammar _PyParser_Grammar; /* From graminit.c */
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
50
1391
7c3245c18677 * ceval.c, longobject.c, methodobject.c, listnode.c, arraymodule.c,
Guido van Rossum <guido@python.org>
parents: 1347
diff changeset
51 /* Forward */
13447
a89f7f268de4 Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
52 static void initmain(void);
a89f7f268de4 Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
53 static void initsite(void);
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
54 static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *,
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
55 PyCompilerFlags *, PyArena *);
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
56 static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
57 PyCompilerFlags *);
13447
a89f7f268de4 Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
58 static void err_input(perrdetail *);
a89f7f268de4 Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
59 static void initsigs(void);
a89f7f268de4 Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
60 static void call_sys_exitfunc(void);
a89f7f268de4 Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
61 static void call_ll_exitfuncs(void);
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
62 extern void _PyUnicode_Init(void);
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
63 extern void _PyUnicode_Fini(void);
11977
8b88e1bc0e1b Marc-Andre Lemburg: add calls to initialize and finalize Unicode and
Guido van Rossum <guido@python.org>
parents: 11673
diff changeset
64
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28653
diff changeset
65 #ifdef WITH_THREAD
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28653
diff changeset
66 extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28653
diff changeset
67 extern void _PyGILState_Fini(void);
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28653
diff changeset
68 #endif /* WITH_THREAD */
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28653
diff changeset
69
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
70 int Py_DebugFlag; /* Needed by parser.c */
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
71 int Py_VerboseFlag; /* Needed by import.c */
5108
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
72 int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
41043
728c60e85efa Variant of patch #697613: don't exit the interpreter on a SystemExit
Georg Brandl <georg@python.org>
parents: 41018
diff changeset
73 int Py_InspectFlag; /* Needed to determine whether to exit at SystemError */
6201
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
74 int Py_NoSiteFlag; /* Suppress 'import site' */
46107
5341b30b1812 Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45891
diff changeset
75 int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */
44566
599f22a349a2 Patch #602345 by Neal Norwitz and me: add -B option and PYTHONDONTWRITEBYTECODE envvar to skip writing bytecode.
Georg Brandl <georg@python.org>
parents: 44063
diff changeset
76 int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.py[co]) */
12555
04cf788d862b Py_UseClassExceptionsFlag is deprecated. We keep the C variable for C
Barry Warsaw <barry@python.org>
parents: 12539
diff changeset
77 int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c: deprecated */
7206
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
78 int Py_FrozenFlag; /* Needed by getpath.c */
12539
d7484a743354 Marc-Andre Lemburg:
Guido van Rossum <guido@python.org>
parents: 12518
diff changeset
79 int Py_UnicodeFlag = 0; /* Needed by compile.c */
18808
a8b1acc7a21f Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 18630
diff changeset
80 int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
21251
45e1177424e1 SF bug #488514: -Qnew needs work
Tim Peters <tim.peters@gmail.com>
parents: 21077
diff changeset
81 /* _XXX Py_QnewFlag should go away in 2.3. It's true iff -Qnew is passed,
45e1177424e1 SF bug #488514: -Qnew needs work
Tim Peters <tim.peters@gmail.com>
parents: 21077
diff changeset
82 on the command line, and is used in 2.2 by ceval.c to make all "/" divisions
45e1177424e1 SF bug #488514: -Qnew needs work
Tim Peters <tim.peters@gmail.com>
parents: 21077
diff changeset
83 true divisions (which they will be in 2.3). */
45e1177424e1 SF bug #488514: -Qnew needs work
Tim Peters <tim.peters@gmail.com>
parents: 21077
diff changeset
84 int _Py_QnewFlag = 0;
46698
1a2dbc84bdfc Implemented PEP 370
Christian Heimes <christian@cheimes.de>
parents: 46414
diff changeset
85 int Py_NoUserSiteDirectory = 0; /* for -s and site.py */
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
86
46414
840064802952 Re-implement the 'warnings' module in C. This allows for usage of the
Brett Cannon <bcannon@gmail.com>
parents: 46123
diff changeset
87 /* PyModule_GetWarningsModule is no longer necessary as of 2.6
840064802952 Re-implement the 'warnings' module in C. This allows for usage of the
Brett Cannon <bcannon@gmail.com>
parents: 46123
diff changeset
88 since _warnings is builtin. This API should not be used. */
840064802952 Re-implement the 'warnings' module in C. This allows for usage of the
Brett Cannon <bcannon@gmail.com>
parents: 46123
diff changeset
89 PyObject *
840064802952 Re-implement the 'warnings' module in C. This allows for usage of the
Brett Cannon <bcannon@gmail.com>
parents: 46123
diff changeset
90 PyModule_GetWarningsModule(void)
29877
72cbc41ccc2f Fix [ 771097 ] frozen programs fail due to implicit import of "warnings".
Mark Hammond <mhammond@skippinet.com.au>
parents: 28720
diff changeset
91 {
46414
840064802952 Re-implement the 'warnings' module in C. This allows for usage of the
Brett Cannon <bcannon@gmail.com>
parents: 46123
diff changeset
92 return PyImport_ImportModule("warnings");
29877
72cbc41ccc2f Fix [ 771097 ] frozen programs fail due to implicit import of "warnings".
Mark Hammond <mhammond@skippinet.com.au>
parents: 28720
diff changeset
93 }
27958
e07b21ea3c45 Fix bug 683658 - PyErr_Warn may cause import deadlock.
Mark Hammond <mhammond@skippinet.com.au>
parents: 27878
diff changeset
94
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
95 static int initialized = 0;
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
96
13620
5b727ab37092 Spelling fixes supplied by Rob W. W. Hooft. All these are fixes in either
Thomas Wouters <thomas@python.org>
parents: 13552
diff changeset
97 /* API to access the initialized flag -- useful for esoteric use */
6136
57045f51dd12 Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents: 6117
diff changeset
98
57045f51dd12 Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents: 6117
diff changeset
99 int
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
100 Py_IsInitialized(void)
6136
57045f51dd12 Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents: 6117
diff changeset
101 {
57045f51dd12 Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents: 6117
diff changeset
102 return initialized;
57045f51dd12 Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents: 6117
diff changeset
103 }
57045f51dd12 Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents: 6117
diff changeset
104
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
105 /* Global initializations. Can be undone by Py_Finalize(). Don't
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
106 call this twice without an intervening Py_Finalize() call. When
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
107 initializations fail, a fatal error is issued and the function does
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
108 not return. On return, the first thread and interpreter state have
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
109 been created.
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
110
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
111 Locking: you must hold the interpreter lock while calling this.
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
112 (If the lock has not yet been initialized, that's equivalent to
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
113 having the lock, but you cannot use multiple threads.)
2098
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
114
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
115 */
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
116
20401
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
117 static int
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
118 add_flag(int flag, const char *envs)
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
119 {
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
120 int env = atoi(envs);
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
121 if (flag < env)
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
122 flag = env;
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
123 if (flag < 1)
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
124 flag = 1;
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
125 return flag;
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
126 }
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
127
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
128 void
33189
de804edf8bcd Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents: 32781
diff changeset
129 Py_InitializeEx(int install_sigs)
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
130 {
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
131 PyInterpreterState *interp;
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
132 PyThreadState *tstate;
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
133 PyObject *bimod, *sysmod;
5850
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
134 char *p;
47413
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
135 char *icodeset; /* On Windows, input codeset may theoretically
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
136 differ from output codeset. */
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
137 char *codeset = NULL;
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
138 char *errors = NULL;
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
139 int free_codeset = 0;
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
140 int overridden = 0;
47415
622cabbaf2bc Move sys_stream and sys_isatty out of the have-langinfo block.
Martin v. Löwis <martin@v.loewis.de>
parents: 47413
diff changeset
141 PyObject *sys_stream, *sys_isatty;
30108
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
142 #if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
47413
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
143 char *saved_locale, *loc_codeset;
30108
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
144 #endif
47413
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
145 #ifdef MS_WINDOWS
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
146 char ibuf[128];
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
147 char buf[128];
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
148 #endif
19295
157bbb896198 Bunchathings:
Guido van Rossum <guido@python.org>
parents: 19237
diff changeset
149 extern void _Py_ReadyTypes(void);
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
150
6201
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
151 if (initialized)
6117
98a282cfb013 Use a counter instead of a Boolean to check for initialized; n calls
Guido van Rossum <guido@python.org>
parents: 5939
diff changeset
152 return;
6201
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
153 initialized = 1;
28648
0e8416be208e Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents: 28647
diff changeset
154
18808
a8b1acc7a21f Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 18630
diff changeset
155 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
20401
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
156 Py_DebugFlag = add_flag(Py_DebugFlag, p);
18808
a8b1acc7a21f Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 18630
diff changeset
157 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0')
20401
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
158 Py_VerboseFlag = add_flag(Py_VerboseFlag, p);
18808
a8b1acc7a21f Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 18630
diff changeset
159 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0')
20401
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
160 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p);
44566
599f22a349a2 Patch #602345 by Neal Norwitz and me: add -B option and PYTHONDONTWRITEBYTECODE envvar to skip writing bytecode.
Georg Brandl <georg@python.org>
parents: 44063
diff changeset
161 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0')
599f22a349a2 Patch #602345 by Neal Norwitz and me: add -B option and PYTHONDONTWRITEBYTECODE envvar to skip writing bytecode.
Georg Brandl <georg@python.org>
parents: 44063
diff changeset
162 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p);
5850
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
163
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
164 interp = PyInterpreterState_New();
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
165 if (interp == NULL)
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
166 Py_FatalError("Py_Initialize: can't make first interpreter");
5850
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
167
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
168 tstate = PyThreadState_New(interp);
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
169 if (tstate == NULL)
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
170 Py_FatalError("Py_Initialize: can't make first thread");
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
171 (void) PyThreadState_Swap(tstate);
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
172
19295
157bbb896198 Bunchathings:
Guido van Rossum <guido@python.org>
parents: 19237
diff changeset
173 _Py_ReadyTypes();
19040
4df72ea78ae8 - Rename PyType_InitDict() to PyType_Ready().
Guido van Rossum <guido@python.org>
parents: 18933
diff changeset
174
26923
dbfc3ef7d003 Since the *_Init() are private, prefix with _, suggested by Skip
Neal Norwitz <nnorwitz@gmail.com>
parents: 26889
diff changeset
175 if (!_PyFrame_Init())
26889
12753e7b15f7 SF #561244, Micro optimizations
Neal Norwitz <nnorwitz@gmail.com>
parents: 26885
diff changeset
176 Py_FatalError("Py_Initialize: can't init frames");
12753e7b15f7 SF #561244, Micro optimizations
Neal Norwitz <nnorwitz@gmail.com>
parents: 26885
diff changeset
177
26923
dbfc3ef7d003 Since the *_Init() are private, prefix with _, suggested by Skip
Neal Norwitz <nnorwitz@gmail.com>
parents: 26889
diff changeset
178 if (!_PyInt_Init())
26889
12753e7b15f7 SF #561244, Micro optimizations
Neal Norwitz <nnorwitz@gmail.com>
parents: 26885
diff changeset
179 Py_FatalError("Py_Initialize: can't init ints");
12753e7b15f7 SF #561244, Micro optimizations
Neal Norwitz <nnorwitz@gmail.com>
parents: 26885
diff changeset
180
47291
04bd3690fb1f First step of the C API rename:
Christian Heimes <christian@cheimes.de>
parents: 46889
diff changeset
181 if (!PyByteArray_Init())
46107
5341b30b1812 Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45891
diff changeset
182 Py_FatalError("Py_Initialize: can't init bytearray");
5341b30b1812 Merged revisions 61750,61752,61754,61756,61760,61763,61768,61772,61775,61805,61809,61812,61819,61917,61920,61930,61933-61934 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45891
diff changeset
183
34972
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 34834
diff changeset
184 _PyFloat_Init();
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 34834
diff changeset
185
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
186 interp->modules = PyDict_New();
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
187 if (interp->modules == NULL)
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
188 Py_FatalError("Py_Initialize: can't make modules dictionary");
41128
45ce388ec59a Bug #742342: make Python stop segfaulting on infinitely-recursive reload()s. Fixed by patch #922167.
Collin Winter <collinw@gmail.com>
parents: 41126
diff changeset
189 interp->modules_reloading = PyDict_New();
45ce388ec59a Bug #742342: make Python stop segfaulting on infinitely-recursive reload()s. Fixed by patch #922167.
Collin Winter <collinw@gmail.com>
parents: 41126
diff changeset
190 if (interp->modules_reloading == NULL)
45ce388ec59a Bug #742342: make Python stop segfaulting on infinitely-recursive reload()s. Fixed by patch #922167.
Collin Winter <collinw@gmail.com>
parents: 41126
diff changeset
191 Py_FatalError("Py_Initialize: can't make modules_reloading dictionary");
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
192
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19296
diff changeset
193 #ifdef Py_USING_UNICODE
11977
8b88e1bc0e1b Marc-Andre Lemburg: add calls to initialize and finalize Unicode and
Guido van Rossum <guido@python.org>
parents: 11673
diff changeset
194 /* Init Unicode implementation; relies on the codec registry */
8b88e1bc0e1b Marc-Andre Lemburg: add calls to initialize and finalize Unicode and
Guido van Rossum <guido@python.org>
parents: 11673
diff changeset
195 _PyUnicode_Init();
19343
7257e87e0720 Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents: 19296
diff changeset
196 #endif
11977
8b88e1bc0e1b Marc-Andre Lemburg: add calls to initialize and finalize Unicode and
Guido van Rossum <guido@python.org>
parents: 11673
diff changeset
197
12754
5213abfe5230 Py_Initialize(): Now that standard exceptions are builtin, we don't
Barry Warsaw <barry@python.org>
parents: 12576
diff changeset
198 bimod = _PyBuiltin_Init();
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
199 if (bimod == NULL)
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
200 Py_FatalError("Py_Initialize: can't initialize __builtin__");
6557
b331cd47e0bc Undo half of the previous change :-(
Guido van Rossum <guido@python.org>
parents: 6547
diff changeset
201 interp->builtins = PyModule_GetDict(bimod);
39458
deb748f33c1d PyModule_GetDict() can fail, produce fatal errors if this happens on startup.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39455
diff changeset
202 if (interp->builtins == NULL)
deb748f33c1d PyModule_GetDict() can fail, produce fatal errors if this happens on startup.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39455
diff changeset
203 Py_FatalError("Py_Initialize: can't initialize builtins dict");
6557
b331cd47e0bc Undo half of the previous change :-(
Guido van Rossum <guido@python.org>
parents: 6547
diff changeset
204 Py_INCREF(interp->builtins);
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
205
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
206 sysmod = _PySys_Init();
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
207 if (sysmod == NULL)
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
208 Py_FatalError("Py_Initialize: can't initialize sys");
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
209 interp->sysdict = PyModule_GetDict(sysmod);
39458
deb748f33c1d PyModule_GetDict() can fail, produce fatal errors if this happens on startup.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39455
diff changeset
210 if (interp->sysdict == NULL)
deb748f33c1d PyModule_GetDict() can fail, produce fatal errors if this happens on startup.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39455
diff changeset
211 Py_FatalError("Py_Initialize: can't initialize sys dict");
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
212 Py_INCREF(interp->sysdict);
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
213 _PyImport_FixupExtension("sys", "sys");
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
214 PySys_SetPath(Py_GetPath());
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
215 PyDict_SetItemString(interp->sysdict, "modules",
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
216 interp->modules);
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
217
11113
be8ec828c072 Marc-Andre Lemburg discovered that the switch from .pyc to .pyo files,
Guido van Rossum <guido@python.org>
parents: 10534
diff changeset
218 _PyImport_Init();
be8ec828c072 Marc-Andre Lemburg discovered that the switch from .pyc to .pyo files,
Guido van Rossum <guido@python.org>
parents: 10534
diff changeset
219
12754
5213abfe5230 Py_Initialize(): Now that standard exceptions are builtin, we don't
Barry Warsaw <barry@python.org>
parents: 12576
diff changeset
220 /* initialize builtin exceptions */
18933
09df3254b49d Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents: 18808
diff changeset
221 _PyExc_Init();
19237
e110cd4fc3c6 Py_Initialize(): Apply patch by Jürgen Hermann to call
Barry Warsaw <barry@python.org>
parents: 19158
diff changeset
222 _PyImport_FixupExtension("exceptions", "exceptions");
12754
5213abfe5230 Py_Initialize(): Now that standard exceptions are builtin, we don't
Barry Warsaw <barry@python.org>
parents: 12576
diff changeset
223
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
224 /* phase 2 of builtins */
6328
dfeaf965f48a Py_Initialize(): move the call to _PyImport_FixupExtension() to after
Barry Warsaw <barry@python.org>
parents: 6322
diff changeset
225 _PyImport_FixupExtension("__builtin__", "__builtin__");
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
226
26885
54aacb87beda PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents: 26643
diff changeset
227 _PyImportHooks_Init();
54aacb87beda PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents: 26643
diff changeset
228
33189
de804edf8bcd Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents: 32781
diff changeset
229 if (install_sigs)
de804edf8bcd Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents: 32781
diff changeset
230 initsigs(); /* Signal handling stuff, including initintr() */
46414
840064802952 Re-implement the 'warnings' module in C. This allows for usage of the
Brett Cannon <bcannon@gmail.com>
parents: 46123
diff changeset
231
47887
6f132a26b22f Fix tabs.
Georg Brandl <georg@python.org>
parents: 47527
diff changeset
232 /* Initialize warnings. */
6f132a26b22f Fix tabs.
Georg Brandl <georg@python.org>
parents: 47527
diff changeset
233 _PyWarnings_Init();
6f132a26b22f Fix tabs.
Georg Brandl <georg@python.org>
parents: 47527
diff changeset
234 if (PySys_HasWarnOptions()) {
6f132a26b22f Fix tabs.
Georg Brandl <georg@python.org>
parents: 47527
diff changeset
235 PyObject *warnings_module = PyImport_ImportModule("warnings");
6f132a26b22f Fix tabs.
Georg Brandl <georg@python.org>
parents: 47527
diff changeset
236 if (!warnings_module)
6f132a26b22f Fix tabs.
Georg Brandl <georg@python.org>
parents: 47527
diff changeset
237 PyErr_Clear();
6f132a26b22f Fix tabs.
Georg Brandl <georg@python.org>
parents: 47527
diff changeset
238 Py_XDECREF(warnings_module);
6f132a26b22f Fix tabs.
Georg Brandl <georg@python.org>
parents: 47527
diff changeset
239 }
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
240
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
241 initmain(); /* Module __main__ */
6201
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
242 if (!Py_NoSiteFlag)
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
243 initsite(); /* Module site */
28065
c61ef183ce2f Addendum to #683658:
Just van Rossum <just@letterror.com>
parents: 27958
diff changeset
244
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28653
diff changeset
245 /* auto-thread-state API, if available */
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28653
diff changeset
246 #ifdef WITH_THREAD
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28653
diff changeset
247 _PyGILState_Init(interp, tstate);
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28653
diff changeset
248 #endif /* WITH_THREAD */
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28653
diff changeset
249
47413
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
250 if ((p = Py_GETENV("PYTHONIOENCODING")) && *p != '\0') {
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
251 p = icodeset = codeset = strdup(p);
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
252 free_codeset = 1;
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
253 errors = strchr(p, ':');
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
254 if (errors) {
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
255 *errors = '\0';
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
256 errors++;
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
257 }
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
258 overridden = 1;
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
259 }
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
260
28174
3f90d21debe9 Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize,
Martin v. Löwis <martin@v.loewis.de>
parents: 28065
diff changeset
261 #if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
3f90d21debe9 Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize,
Martin v. Löwis <martin@v.loewis.de>
parents: 28065
diff changeset
262 /* On Unix, set the file system encoding according to the
3f90d21debe9 Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize,
Martin v. Löwis <martin@v.loewis.de>
parents: 28065
diff changeset
263 user's preference, if the CODESET names a well-known
3f90d21debe9 Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize,
Martin v. Löwis <martin@v.loewis.de>
parents: 28065
diff changeset
264 Python codec, and Py_FileSystemDefaultEncoding isn't
30108
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
265 initialized by other means. Also set the encoding of
47413
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
266 stdin and stdout if these are terminals, unless overridden. */
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
267
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
268 if (!overridden || !Py_FileSystemDefaultEncoding) {
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
269 saved_locale = strdup(setlocale(LC_CTYPE, NULL));
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
270 setlocale(LC_CTYPE, "");
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
271 loc_codeset = nl_langinfo(CODESET);
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
272 if (loc_codeset && *loc_codeset) {
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
273 PyObject *enc = PyCodec_Encoder(loc_codeset);
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
274 if (enc) {
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
275 loc_codeset = strdup(loc_codeset);
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
276 Py_DECREF(enc);
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
277 } else {
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
278 loc_codeset = NULL;
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
279 PyErr_Clear();
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
280 }
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
281 } else
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
282 loc_codeset = NULL;
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
283 setlocale(LC_CTYPE, saved_locale);
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
284 free(saved_locale);
30108
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
285
47413
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
286 if (!overridden) {
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
287 codeset = icodeset = loc_codeset;
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
288 free_codeset = 1;
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
289 }
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
290
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
291 /* Initialize Py_FileSystemDefaultEncoding from
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
292 locale even if PYTHONIOENCODING is set. */
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
293 if (!Py_FileSystemDefaultEncoding) {
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
294 Py_FileSystemDefaultEncoding = loc_codeset;
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
295 if (!overridden)
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
296 free_codeset = 0;
28174
3f90d21debe9 Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize,
Martin v. Löwis <martin@v.loewis.de>
parents: 28065
diff changeset
297 }
47413
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
298 }
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
299 #endif
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
300
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
301 #ifdef MS_WINDOWS
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
302 if (!overridden) {
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
303 icodeset = ibuf;
47416
2a63ab3595a1 Typo: encoding -> codeset.
Martin v. Löwis <martin@v.loewis.de>
parents: 47415
diff changeset
304 codeset = buf;
47413
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
305 sprintf(ibuf, "cp%d", GetConsoleCP());
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
306 sprintf(buf, "cp%d", GetConsoleOutputCP());
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
307 }
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
308 #endif
30108
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
309
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
310 if (codeset) {
30122
210676ec9d5f Fix refcounting and cut & paste error (?) in last checkin.
Michael W. Hudson <mwh@python.net>
parents: 30108
diff changeset
311 sys_stream = PySys_GetObject("stdin");
30108
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
312 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
313 if (!sys_isatty)
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
314 PyErr_Clear();
47413
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
315 if ((overridden ||
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
316 (sys_isatty && PyObject_IsTrue(sys_isatty))) &&
40699
86ab2f20a333 SF patch #1630975: Fix crash when replacing sys.stdout in sitecustomize
Thomas Wouters <thomas@python.org>
parents: 39779
diff changeset
317 PyFile_Check(sys_stream)) {
47413
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
318 if (!PyFile_SetEncodingAndErrors(sys_stream, icodeset, errors))
30108
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
319 Py_FatalError("Cannot set codeset of stdin");
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
320 }
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
321 Py_XDECREF(sys_isatty);
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
322
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
323 sys_stream = PySys_GetObject("stdout");
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
324 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
325 if (!sys_isatty)
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
326 PyErr_Clear();
47413
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
327 if ((overridden ||
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
328 (sys_isatty && PyObject_IsTrue(sys_isatty))) &&
40699
86ab2f20a333 SF patch #1630975: Fix crash when replacing sys.stdout in sitecustomize
Thomas Wouters <thomas@python.org>
parents: 39779
diff changeset
329 PyFile_Check(sys_stream)) {
47413
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
330 if (!PyFile_SetEncodingAndErrors(sys_stream, codeset, errors))
30108
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
331 Py_FatalError("Cannot set codeset of stdout");
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
332 }
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
333 Py_XDECREF(sys_isatty);
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
334
37423
57b1ff138995 Bug #1421664: Set sys.stderr.encoding
Martin v. Löwis <martin@v.loewis.de>
parents: 37290
diff changeset
335 sys_stream = PySys_GetObject("stderr");
57b1ff138995 Bug #1421664: Set sys.stderr.encoding
Martin v. Löwis <martin@v.loewis.de>
parents: 37290
diff changeset
336 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
57b1ff138995 Bug #1421664: Set sys.stderr.encoding
Martin v. Löwis <martin@v.loewis.de>
parents: 37290
diff changeset
337 if (!sys_isatty)
57b1ff138995 Bug #1421664: Set sys.stderr.encoding
Martin v. Löwis <martin@v.loewis.de>
parents: 37290
diff changeset
338 PyErr_Clear();
47413
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
339 if((overridden ||
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
340 (sys_isatty && PyObject_IsTrue(sys_isatty))) &&
40699
86ab2f20a333 SF patch #1630975: Fix crash when replacing sys.stdout in sitecustomize
Thomas Wouters <thomas@python.org>
parents: 39779
diff changeset
341 PyFile_Check(sys_stream)) {
47413
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
342 if (!PyFile_SetEncodingAndErrors(sys_stream, codeset, errors))
37423
57b1ff138995 Bug #1421664: Set sys.stderr.encoding
Martin v. Löwis <martin@v.loewis.de>
parents: 37290
diff changeset
343 Py_FatalError("Cannot set codeset of stderr");
57b1ff138995 Bug #1421664: Set sys.stderr.encoding
Martin v. Löwis <martin@v.loewis.de>
parents: 37290
diff changeset
344 }
57b1ff138995 Bug #1421664: Set sys.stderr.encoding
Martin v. Löwis <martin@v.loewis.de>
parents: 37290
diff changeset
345 Py_XDECREF(sys_isatty);
57b1ff138995 Bug #1421664: Set sys.stderr.encoding
Martin v. Löwis <martin@v.loewis.de>
parents: 37290
diff changeset
346
47413
1062b7dec95b New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47294
diff changeset
347 if (free_codeset)
30108
a88e6dfbfd6d Move initialization of sys.std{in,out}.encoding to Py_Initialize.
Martin v. Löwis <martin@v.loewis.de>
parents: 29879
diff changeset
348 free(codeset);
28174
3f90d21debe9 Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize,
Martin v. Löwis <martin@v.loewis.de>
parents: 28065
diff changeset
349 }
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
350 }
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
351
33189
de804edf8bcd Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents: 32781
diff changeset
352 void
de804edf8bcd Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents: 32781
diff changeset
353 Py_Initialize(void)
de804edf8bcd Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents: 32781
diff changeset
354 {
de804edf8bcd Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents: 32781
diff changeset
355 Py_InitializeEx(1);
de804edf8bcd Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents: 32781
diff changeset
356 }
de804edf8bcd Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents: 32781
diff changeset
357
de804edf8bcd Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents: 32781
diff changeset
358
9641
d152adf3f094 Move the prototype for dump_counts() to before where it is used.
Guido van Rossum <guido@python.org>
parents: 9285
diff changeset
359 #ifdef COUNT_ALLOCS
37831
d82dced6f1fa Remove types from type_list if they have no objects
Martin v. Löwis <martin@v.loewis.de>
parents: 37655
diff changeset
360 extern void dump_counts(FILE*);
9641
d152adf3f094 Move the prototype for dump_counts() to before where it is used.
Guido van Rossum <guido@python.org>
parents: 9285
diff changeset
361 #endif
d152adf3f094 Move the prototype for dump_counts() to before where it is used.
Guido van Rossum <guido@python.org>
parents: 9285
diff changeset
362
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
363 /* Undo the effect of Py_Initialize().
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
364
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
365 Beware: if multiple interpreter and/or thread states exist, these
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
366 are not wiped out; only the current thread and interpreter state
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
367 are deleted. But since everything else is deleted, those other
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
368 interpreter and thread states should no longer be used.
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
369
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
370 (XXX We should do better, e.g. wipe out all interpreters and
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
371 threads.)
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
372
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
373 Locking: as above.
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
374
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
375 */
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
376
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
377 void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
378 Py_Finalize(void)
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
379 {
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
380 PyInterpreterState *interp;
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
381 PyThreadState *tstate;
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
382
6201
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
383 if (!initialized)
6117
98a282cfb013 Use a counter instead of a Boolean to check for initialized; n calls
Guido van Rossum <guido@python.org>
parents: 5939
diff changeset
384 return;
16073
713ed6c6bcb5 Bug #128475: mimetools.encode (sometimes) fails when called from a thread.
Tim Peters <tim.peters@gmail.com>
parents: 15963
diff changeset
385
713ed6c6bcb5 Bug #128475: mimetools.encode (sometimes) fails when called from a thread.
Tim Peters <tim.peters@gmail.com>
parents: 15963
diff changeset
386 /* The interpreter is still entirely intact at this point, and the
713ed6c6bcb5 Bug #128475: mimetools.encode (sometimes) fails when called from a thread.
Tim Peters <tim.peters@gmail.com>
parents: 15963
diff changeset
387 * exit funcs may be relying on that. In particular, if some thread
713ed6c6bcb5 Bug #128475: mimetools.encode (sometimes) fails when called from a thread.
Tim Peters <tim.peters@gmail.com>
parents: 15963
diff changeset
388 * or exit func is still waiting to do an import, the import machinery
713ed6c6bcb5 Bug #128475: mimetools.encode (sometimes) fails when called from a thread.
Tim Peters <tim.peters@gmail.com>
parents: 15963
diff changeset
389 * expects Py_IsInitialized() to return true. So don't say the
713ed6c6bcb5 Bug #128475: mimetools.encode (sometimes) fails when called from a thread.
Tim Peters <tim.peters@gmail.com>
parents: 15963
diff changeset
390 * interpreter is uninitialized until after the exit funcs have run.
713ed6c6bcb5 Bug #128475: mimetools.encode (sometimes) fails when called from a thread.
Tim Peters <tim.peters@gmail.com>
parents: 15963
diff changeset
391 * Note that Threading.py uses an exit func to do a join on all the
713ed6c6bcb5 Bug #128475: mimetools.encode (sometimes) fails when called from a thread.
Tim Peters <tim.peters@gmail.com>
parents: 15963
diff changeset
392 * threads created thru it, so this also protects pending imports in
713ed6c6bcb5 Bug #128475: mimetools.encode (sometimes) fails when called from a thread.
Tim Peters <tim.peters@gmail.com>
parents: 15963
diff changeset
393 * the threads created via Threading.
713ed6c6bcb5 Bug #128475: mimetools.encode (sometimes) fails when called from a thread.
Tim Peters <tim.peters@gmail.com>
parents: 15963
diff changeset
394 */
713ed6c6bcb5 Bug #128475: mimetools.encode (sometimes) fails when called from a thread.
Tim Peters <tim.peters@gmail.com>
parents: 15963
diff changeset
395 call_sys_exitfunc();
6201
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
396 initialized = 0;
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
397
6547
724382af5339 Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents: 6376
diff changeset
398 /* Get current thread state and interpreter pointer */
31797
846b3ee7e106 Changed random calls to PyThreadState_Get() to use the macro
Nicholas Bastin <nick.bastin@gmail.com>
parents: 31771
diff changeset
399 tstate = PyThreadState_GET();
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
400 interp = tstate->interp;
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
401
6547
724382af5339 Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents: 6376
diff changeset
402 /* Disable signal handling */
724382af5339 Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents: 6376
diff changeset
403 PyOS_FiniInterrupts();
724382af5339 Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents: 6376
diff changeset
404
45025
ea3fe302d392 Added clear cache methods to clear the internal type lookup cache for ref leak test runs.
Christian Heimes <christian@cheimes.de>
parents: 44566
diff changeset
405 /* Clear type lookup cache */
ea3fe302d392 Added clear cache methods to clear the internal type lookup cache for ref leak test runs.
Christian Heimes <christian@cheimes.de>
parents: 44566
diff changeset
406 PyType_ClearCache();
ea3fe302d392 Added clear cache methods to clear the internal type lookup cache for ref leak test runs.
Christian Heimes <christian@cheimes.de>
parents: 44566
diff changeset
407
28651
7fda09f751ad - New C API PyGC_Collect(), same as calling gc.collect().
Guido van Rossum <guido@python.org>
parents: 28649
diff changeset
408 /* Collect garbage. This may call finalizers; it's nice to call these
31057
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
409 * before all modules are destroyed.
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
410 * XXX If a __del__ or weakref callback is triggered here, and tries to
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
411 * XXX import a module, bad things can happen, because Python no
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
412 * XXX longer believes it's initialized.
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
413 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
414 * XXX is easy to provoke that way. I've also seen, e.g.,
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
415 * XXX Exception exceptions.ImportError: 'No module named sha'
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
416 * XXX in <function callback at 0x008F5718> ignored
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
417 * XXX but I'm unclear on exactly how that one happens. In any case,
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
418 * XXX I haven't seen a real-life report of either of these.
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
419 */
28651
7fda09f751ad - New C API PyGC_Collect(), same as calling gc.collect().
Guido van Rossum <guido@python.org>
parents: 28649
diff changeset
420 PyGC_Collect();
37831
d82dced6f1fa Remove types from type_list if they have no objects
Martin v. Löwis <martin@v.loewis.de>
parents: 37655
diff changeset
421 #ifdef COUNT_ALLOCS
d82dced6f1fa Remove types from type_list if they have no objects
Martin v. Löwis <martin@v.loewis.de>
parents: 37655
diff changeset
422 /* With COUNT_ALLOCS, it helps to run GC multiple times:
d82dced6f1fa Remove types from type_list if they have no objects
Martin v. Löwis <martin@v.loewis.de>
parents: 37655
diff changeset
423 each collection might release some types from the type
d82dced6f1fa Remove types from type_list if they have no objects
Martin v. Löwis <martin@v.loewis.de>
parents: 37655
diff changeset
424 list, so they become garbage. */
d82dced6f1fa Remove types from type_list if they have no objects
Martin v. Löwis <martin@v.loewis.de>
parents: 37655
diff changeset
425 while (PyGC_Collect() > 0)
d82dced6f1fa Remove types from type_list if they have no objects
Martin v. Löwis <martin@v.loewis.de>
parents: 37655
diff changeset
426 /* nothing */;
d82dced6f1fa Remove types from type_list if they have no objects
Martin v. Löwis <martin@v.loewis.de>
parents: 37655
diff changeset
427 #endif
28651
7fda09f751ad - New C API PyGC_Collect(), same as calling gc.collect().
Guido van Rossum <guido@python.org>
parents: 28649
diff changeset
428
6547
724382af5339 Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents: 6376
diff changeset
429 /* Destroy all modules */
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
430 PyImport_Cleanup();
6547
724382af5339 Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents: 6376
diff changeset
431
28651
7fda09f751ad - New C API PyGC_Collect(), same as calling gc.collect().
Guido van Rossum <guido@python.org>
parents: 28649
diff changeset
432 /* Collect final garbage. This disposes of cycles created by
31057
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
433 * new-style class definitions, for example.
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
434 * XXX This is disabled because it caused too many problems. If
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
435 * XXX a __del__ or weakref callback triggers here, Python code has
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
436 * XXX a hard time running, because even the sys module has been
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
437 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
438 * XXX One symptom is a sequence of information-free messages
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
439 * XXX coming from threads (if a __del__ or callback is invoked,
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
440 * XXX other threads can execute too, and any exception they encounter
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
441 * XXX triggers a comedy of errors as subsystem after subsystem
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
442 * XXX fails to find what it *expects* to find in sys to help report
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
443 * XXX the exception and consequent unexpected failures). I've also
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
444 * XXX seen segfaults then, after adding print statements to the
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
445 * XXX Python code getting called.
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
446 */
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
447 #if 0
28651
7fda09f751ad - New C API PyGC_Collect(), same as calling gc.collect().
Guido van Rossum <guido@python.org>
parents: 28649
diff changeset
448 PyGC_Collect();
31057
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
449 #endif
28651
7fda09f751ad - New C API PyGC_Collect(), same as calling gc.collect().
Guido van Rossum <guido@python.org>
parents: 28649
diff changeset
450
6786
bc007cf1d6ba Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents: 6661
diff changeset
451 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
bc007cf1d6ba Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents: 6661
diff changeset
452 _PyImport_Fini();
bc007cf1d6ba Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents: 6661
diff changeset
453
bc007cf1d6ba Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents: 6661
diff changeset
454 /* Debugging stuff */
bc007cf1d6ba Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents: 6661
diff changeset
455 #ifdef COUNT_ALLOCS
37831
d82dced6f1fa Remove types from type_list if they have no objects
Martin v. Löwis <martin@v.loewis.de>
parents: 37655
diff changeset
456 dump_counts(stdout);
6786
bc007cf1d6ba Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents: 6661
diff changeset
457 #endif
bc007cf1d6ba Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents: 6661
diff changeset
458
37290
89142cadcfb9 In format strings slinging Py_ssize_t, unconditionally
Tim Peters <tim.peters@gmail.com>
parents: 37229
diff changeset
459 PRINT_TOTAL_REFS();
6786
bc007cf1d6ba Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents: 6661
diff changeset
460
28647
9d4e138494fb Py_Finalize(): Reverted recent changes that tried to move the
Tim Peters <tim.peters@gmail.com>
parents: 28616
diff changeset
461 #ifdef Py_TRACE_REFS
9d4e138494fb Py_Finalize(): Reverted recent changes that tried to move the
Tim Peters <tim.peters@gmail.com>
parents: 28616
diff changeset
462 /* Display all objects still alive -- this can invoke arbitrary
9d4e138494fb Py_Finalize(): Reverted recent changes that tried to move the
Tim Peters <tim.peters@gmail.com>
parents: 28616
diff changeset
463 * __repr__ overrides, so requires a mostly-intact interpreter.
9d4e138494fb Py_Finalize(): Reverted recent changes that tried to move the
Tim Peters <tim.peters@gmail.com>
parents: 28616
diff changeset
464 * Alas, a lot of stuff may still be alive now that will be cleaned
9d4e138494fb Py_Finalize(): Reverted recent changes that tried to move the
Tim Peters <tim.peters@gmail.com>
parents: 28616
diff changeset
465 * up later.
9d4e138494fb Py_Finalize(): Reverted recent changes that tried to move the
Tim Peters <tim.peters@gmail.com>
parents: 28616
diff changeset
466 */
28653
56006d97bcef _Py_PrintReferences(): Changed to print object address at start of each
Tim Peters <tim.peters@gmail.com>
parents: 28651
diff changeset
467 if (Py_GETENV("PYTHONDUMPREFS"))
28647
9d4e138494fb Py_Finalize(): Reverted recent changes that tried to move the
Tim Peters <tim.peters@gmail.com>
parents: 28616
diff changeset
468 _Py_PrintReferences(stderr);
9d4e138494fb Py_Finalize(): Reverted recent changes that tried to move the
Tim Peters <tim.peters@gmail.com>
parents: 28616
diff changeset
469 #endif /* Py_TRACE_REFS */
9d4e138494fb Py_Finalize(): Reverted recent changes that tried to move the
Tim Peters <tim.peters@gmail.com>
parents: 28616
diff changeset
470
28613
b1671550c7e1 Move the call to _Py_PrintReferences() a bit further down. This
Guido van Rossum <guido@python.org>
parents: 28574
diff changeset
471 /* Clear interpreter state */
b1671550c7e1 Move the call to _Py_PrintReferences() a bit further down. This
Guido van Rossum <guido@python.org>
parents: 28574
diff changeset
472 PyInterpreterState_Clear(interp);
b1671550c7e1 Move the call to _Py_PrintReferences() a bit further down. This
Guido van Rossum <guido@python.org>
parents: 28574
diff changeset
473
34834
7cfda9898863 Move exception finalisation later in the shutdown process - this
Anthony Baxter <anthonybaxter@gmail.com>
parents: 34664
diff changeset
474 /* Now we decref the exception classes. After this point nothing
7cfda9898863 Move exception finalisation later in the shutdown process - this
Anthony Baxter <anthonybaxter@gmail.com>
parents: 34664
diff changeset
475 can raise an exception. That's okay, because each Fini() method
7cfda9898863 Move exception finalisation later in the shutdown process - this
Anthony Baxter <anthonybaxter@gmail.com>
parents: 34664
diff changeset
476 below has been checked to make sure no exceptions are ever
7cfda9898863 Move exception finalisation later in the shutdown process - this
Anthony Baxter <anthonybaxter@gmail.com>
parents: 34664
diff changeset
477 raised.
7cfda9898863 Move exception finalisation later in the shutdown process - this
Anthony Baxter <anthonybaxter@gmail.com>
parents: 34664
diff changeset
478 */
7cfda9898863 Move exception finalisation later in the shutdown process - this
Anthony Baxter <anthonybaxter@gmail.com>
parents: 34664
diff changeset
479
7cfda9898863 Move exception finalisation later in the shutdown process - this
Anthony Baxter <anthonybaxter@gmail.com>
parents: 34664
diff changeset
480 _PyExc_Fini();
7cfda9898863 Move exception finalisation later in the shutdown process - this
Anthony Baxter <anthonybaxter@gmail.com>
parents: 34664
diff changeset
481
44063
4417ab5b351e Issue #1402: PyInterpreterState_Clear() may still invoke user code
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 41526
diff changeset
482 /* Cleanup auto-thread-state */
4417ab5b351e Issue #1402: PyInterpreterState_Clear() may still invoke user code
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 41526
diff changeset
483 #ifdef WITH_THREAD
4417ab5b351e Issue #1402: PyInterpreterState_Clear() may still invoke user code
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 41526
diff changeset
484 _PyGILState_Fini();
4417ab5b351e Issue #1402: PyInterpreterState_Clear() may still invoke user code
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 41526
diff changeset
485 #endif /* WITH_THREAD */
4417ab5b351e Issue #1402: PyInterpreterState_Clear() may still invoke user code
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 41526
diff changeset
486
6557
b331cd47e0bc Undo half of the previous change :-(
Guido van Rossum <guido@python.org>
parents: 6547
diff changeset
487 /* Delete current thread */
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
488 PyThreadState_Swap(NULL);
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
489 PyInterpreterState_Delete(interp);
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
490
28613
b1671550c7e1 Move the call to _Py_PrintReferences() a bit further down. This
Guido van Rossum <guido@python.org>
parents: 28574
diff changeset
491 /* Sundry finalizers */
5939
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
492 PyMethod_Fini();
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
493 PyFrame_Fini();
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
494 PyCFunction_Fini();
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
495 PyTuple_Fini();
33679
55fba88930bc Finalize the freelist of list objects.
Raymond Hettinger <python@rcn.com>
parents: 33189
diff changeset
496 PyList_Fini();
35297
26bf6c27e9ce * Improve code for the empty frozenset singleton:
Raymond Hettinger <python@rcn.com>
parents: 34972
diff changeset
497 PySet_Fini();
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47416
diff changeset
498 PyString_Fini();
47291
04bd3690fb1f First step of the C API rename:
Christian Heimes <christian@cheimes.de>
parents: 46889
diff changeset
499 PyByteArray_Fini();
5939
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
500 PyInt_Fini();
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
501 PyFloat_Fini();
45229
262263737bce Deallocate content of the dict free list on interpreter shutdown
Christian Heimes <christian@cheimes.de>
parents: 45025
diff changeset
502 PyDict_Fini();
5939
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
503
22883
d8bc68cb17e0 Move Unicode finalization further down in the chain.
Marc-André Lemburg <mal@egenix.com>
parents: 22721
diff changeset
504 #ifdef Py_USING_UNICODE
d8bc68cb17e0 Move Unicode finalization further down in the chain.
Marc-André Lemburg <mal@egenix.com>
parents: 22721
diff changeset
505 /* Cleanup Unicode implementation */
d8bc68cb17e0 Move Unicode finalization further down in the chain.
Marc-André Lemburg <mal@egenix.com>
parents: 22721
diff changeset
506 _PyUnicode_Fini();
d8bc68cb17e0 Move Unicode finalization further down in the chain.
Marc-André Lemburg <mal@egenix.com>
parents: 22721
diff changeset
507 #endif
d8bc68cb17e0 Move Unicode finalization further down in the chain.
Marc-André Lemburg <mal@egenix.com>
parents: 22721
diff changeset
508
5939
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
509 /* XXX Still allocated:
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
510 - various static ad-hoc pointers to interned strings
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
511 - int and float free list blocks
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
512 - whatever various modules and libraries allocate
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
513 */
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
514
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
515 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
5939
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
516
28653
56006d97bcef _Py_PrintReferences(): Changed to print object address at start of each
Tim Peters <tim.peters@gmail.com>
parents: 28651
diff changeset
517 #ifdef Py_TRACE_REFS
56006d97bcef _Py_PrintReferences(): Changed to print object address at start of each
Tim Peters <tim.peters@gmail.com>
parents: 28651
diff changeset
518 /* Display addresses (& refcnts) of all objects still alive.
56006d97bcef _Py_PrintReferences(): Changed to print object address at start of each
Tim Peters <tim.peters@gmail.com>
parents: 28651
diff changeset
519 * An address can be used to find the repr of the object, printed
56006d97bcef _Py_PrintReferences(): Changed to print object address at start of each
Tim Peters <tim.peters@gmail.com>
parents: 28651
diff changeset
520 * above by _Py_PrintReferences.
56006d97bcef _Py_PrintReferences(): Changed to print object address at start of each
Tim Peters <tim.peters@gmail.com>
parents: 28651
diff changeset
521 */
56006d97bcef _Py_PrintReferences(): Changed to print object address at start of each
Tim Peters <tim.peters@gmail.com>
parents: 28651
diff changeset
522 if (Py_GETENV("PYTHONDUMPREFS"))
56006d97bcef _Py_PrintReferences(): Changed to print object address at start of each
Tim Peters <tim.peters@gmail.com>
parents: 28651
diff changeset
523 _Py_PrintReferenceAddresses(stderr);
56006d97bcef _Py_PrintReferences(): Changed to print object address at start of each
Tim Peters <tim.peters@gmail.com>
parents: 28651
diff changeset
524 #endif /* Py_TRACE_REFS */
23020
e2848618bd19 _PyObject_DebugDumpStats: renamed to _PyObject_DebugMallocStats.
Tim Peters <tim.peters@gmail.com>
parents: 22883
diff changeset
525 #ifdef PYMALLOC_DEBUG
e2848618bd19 _PyObject_DebugDumpStats: renamed to _PyObject_DebugMallocStats.
Tim Peters <tim.peters@gmail.com>
parents: 22883
diff changeset
526 if (Py_GETENV("PYTHONMALLOCSTATS"))
e2848618bd19 _PyObject_DebugDumpStats: renamed to _PyObject_DebugMallocStats.
Tim Peters <tim.peters@gmail.com>
parents: 22883
diff changeset
527 _PyObject_DebugMallocStats();
e2848618bd19 _PyObject_DebugDumpStats: renamed to _PyObject_DebugMallocStats.
Tim Peters <tim.peters@gmail.com>
parents: 22883
diff changeset
528 #endif
e2848618bd19 _PyObject_DebugDumpStats: renamed to _PyObject_DebugMallocStats.
Tim Peters <tim.peters@gmail.com>
parents: 22883
diff changeset
529
5939
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
530 call_ll_exitfuncs();
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
531 }
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
532
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
533 /* Create and initialize a new interpreter and thread, and return the
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
534 new thread. This requires that Py_Initialize() has been called
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
535 first.
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
536
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
537 Unsuccessful initialization yields a NULL pointer. Note that *no*
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
538 exception information is available even in this case -- the
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
539 exception information is held in the thread, and there is no
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
540 thread.
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
541
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
542 Locking: as above.
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
543
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
544 */
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
545
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
546 PyThreadState *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
547 Py_NewInterpreter(void)
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
548 {
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
549 PyInterpreterState *interp;
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
550 PyThreadState *tstate, *save_tstate;
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
551 PyObject *bimod, *sysmod;
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
552
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
553 if (!initialized)
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
554 Py_FatalError("Py_NewInterpreter: call Py_Initialize first");
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
555
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
556 interp = PyInterpreterState_New();
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
557 if (interp == NULL)
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
558 return NULL;
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
559
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
560 tstate = PyThreadState_New(interp);
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
561 if (tstate == NULL) {
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
562 PyInterpreterState_Delete(interp);
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
563 return NULL;
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
564 }
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
565
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
566 save_tstate = PyThreadState_Swap(tstate);
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
567
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
568 /* XXX The following is lax in error checking */
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
569
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
570 interp->modules = PyDict_New();
41128
45ce388ec59a Bug #742342: make Python stop segfaulting on infinitely-recursive reload()s. Fixed by patch #922167.
Collin Winter <collinw@gmail.com>
parents: 41126
diff changeset
571 interp->modules_reloading = PyDict_New();
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
572
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
573 bimod = _PyImport_FindExtension("__builtin__", "__builtin__");
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
574 if (bimod != NULL) {
6557
b331cd47e0bc Undo half of the previous change :-(
Guido van Rossum <guido@python.org>
parents: 6547
diff changeset
575 interp->builtins = PyModule_GetDict(bimod);
39614
9dee81dcb9b4 Handle a few more error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39458
diff changeset
576 if (interp->builtins == NULL)
9dee81dcb9b4 Handle a few more error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39458
diff changeset
577 goto handle_error;
6557
b331cd47e0bc Undo half of the previous change :-(
Guido van Rossum <guido@python.org>
parents: 6547
diff changeset
578 Py_INCREF(interp->builtins);
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
579 }
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
580 sysmod = _PyImport_FindExtension("sys", "sys");
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
581 if (bimod != NULL && sysmod != NULL) {
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
582 interp->sysdict = PyModule_GetDict(sysmod);
39614
9dee81dcb9b4 Handle a few more error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39458
diff changeset
583 if (interp->sysdict == NULL)
9dee81dcb9b4 Handle a few more error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39458
diff changeset
584 goto handle_error;
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
585 Py_INCREF(interp->sysdict);
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
586 PySys_SetPath(Py_GetPath());
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
587 PyDict_SetItemString(interp->sysdict, "modules",
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
588 interp->modules);
27340
8b53b0ce06d4 Patch #671459: Invoke import hooks in Py_NewInterpreter.
Martin v. Löwis <martin@v.loewis.de>
parents: 26923
diff changeset
589 _PyImportHooks_Init();
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
590 initmain();
6201
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
591 if (!Py_NoSiteFlag)
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
592 initsite();
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
593 }
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
594
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
595 if (!PyErr_Occurred())
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
596 return tstate;
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
597
39614
9dee81dcb9b4 Handle a few more error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39458
diff changeset
598 handle_error:
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
599 /* Oops, it didn't work. Undo it all. */
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
600
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
601 PyErr_Print();
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
602 PyThreadState_Clear(tstate);
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
603 PyThreadState_Swap(save_tstate);
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
604 PyThreadState_Delete(tstate);
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
605 PyInterpreterState_Delete(interp);
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
606
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
607 return NULL;
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
608 }
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
609
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
610 /* Delete an interpreter and its last thread. This requires that the
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
611 given thread state is current, that the thread has no remaining
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
612 frames, and that it is its interpreter's only remaining thread.
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
613 It is a fatal error to violate these constraints.
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
614
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
615 (Py_Finalize() doesn't have these constraints -- it zaps
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
616 everything, regardless.)
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
617
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
618 Locking: as above.
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
619
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
620 */
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
621
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
622 void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
623 Py_EndInterpreter(PyThreadState *tstate)
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
624 {
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
625 PyInterpreterState *interp = tstate->interp;
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
626
31797
846b3ee7e106 Changed random calls to PyThreadState_Get() to use the macro
Nicholas Bastin <nick.bastin@gmail.com>
parents: 31771
diff changeset
627 if (tstate != PyThreadState_GET())
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
628 Py_FatalError("Py_EndInterpreter: thread is not current");
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
629 if (tstate->frame != NULL)
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
630 Py_FatalError("Py_EndInterpreter: thread still has a frame");
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
631 if (tstate != interp->tstate_head || tstate->next != NULL)
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
632 Py_FatalError("Py_EndInterpreter: not the last thread");
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
633
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
634 PyImport_Cleanup();
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
635 PyInterpreterState_Clear(interp);
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
636 PyThreadState_Swap(NULL);
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
637 PyInterpreterState_Delete(interp);
5850
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
638 }
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
639
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
640 static char *progname = "python";
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
641
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
642 void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
643 Py_SetProgramName(char *pn)
5850
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
644 {
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
645 if (pn && *pn)
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
646 progname = pn;
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
647 }
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
648
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
649 char *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
650 Py_GetProgramName(void)
5850
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
651 {
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
652 return progname;
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
653 }
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
654
7206
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
655 static char *default_home = NULL;
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
656
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
657 void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
658 Py_SetPythonHome(char *home)
7206
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
659 {
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
660 default_home = home;
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
661 }
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
662
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
663 char *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
664 Py_GetPythonHome(void)
7206
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
665 {
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
666 char *home = default_home;
18808
a8b1acc7a21f Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 18630
diff changeset
667 if (home == NULL && !Py_IgnoreEnvironmentFlag)
a8b1acc7a21f Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 18630
diff changeset
668 home = Py_GETENV("PYTHONHOME");
7206
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
669 return home;
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
670 }
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
671
2098
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
672 /* Create __main__ module */
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
673
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
674 static void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
675 initmain(void)
2098
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
676 {
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
677 PyObject *m, *d;
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
678 m = PyImport_AddModule("__main__");
2098
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
679 if (m == NULL)
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
680 Py_FatalError("can't create __main__ module");
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
681 d = PyModule_GetDict(m);
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
682 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
6600
83ccf44bf195 Two changes (here we go again :-( ).
Guido van Rossum <guido@python.org>
parents: 6557
diff changeset
683 PyObject *bimod = PyImport_ImportModule("__builtin__");
83ccf44bf195 Two changes (here we go again :-( ).
Guido van Rossum <guido@python.org>
parents: 6557
diff changeset
684 if (bimod == NULL ||
83ccf44bf195 Two changes (here we go again :-( ).
Guido van Rossum <guido@python.org>
parents: 6557
diff changeset
685 PyDict_SetItemString(d, "__builtins__", bimod) != 0)
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
686 Py_FatalError("can't add __builtins__ to __main__");
10024
caf2c65a6bcf initmain(): Nailed a memory leak. bimod must be DECREF'd!
Barry Warsaw <barry@python.org>
parents: 9965
diff changeset
687 Py_DECREF(bimod);
2098
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
688 }
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
689 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
690
6201
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
691 /* Import the site module (not into __main__ though) */
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
692
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
693 static void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
694 initsite(void)
6201
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
695 {
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
696 PyObject *m, *f;
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
697 m = PyImport_ImportModule("site");
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
698 if (m == NULL) {
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
699 f = PySys_GetObject("stderr");
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
700 if (Py_VerboseFlag) {
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
701 PyFile_WriteString(
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
702 "'import site' failed; traceback:\n", f);
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
703 PyErr_Print();
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
704 }
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
705 else {
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
706 PyFile_WriteString(
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
707 "'import site' failed; use -v for traceback\n", f);
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
708 PyErr_Clear();
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
709 }
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
710 }
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
711 else {
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
712 Py_DECREF(m);
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
713 }
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
714 }
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
715
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
716 /* Parse input from a file and execute it */
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
717
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
718 int
38455
1a23706139ca PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents: 38431
diff changeset
719 PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
720 PyCompilerFlags *flags)
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
721 {
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
722 if (filename == NULL)
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
723 filename = "???";
14228
20377f15b96a Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(),
Guido van Rossum <guido@python.org>
parents: 14227
diff changeset
724 if (Py_FdIsInteractive(fp, filename)) {
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
725 int err = PyRun_InteractiveLoopFlags(fp, filename, flags);
14228
20377f15b96a Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(),
Guido van Rossum <guido@python.org>
parents: 14227
diff changeset
726 if (closeit)
20377f15b96a Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(),
Guido van Rossum <guido@python.org>
parents: 14227
diff changeset
727 fclose(fp);
20377f15b96a Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(),
Guido van Rossum <guido@python.org>
parents: 14227
diff changeset
728 return err;
20377f15b96a Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(),
Guido van Rossum <guido@python.org>
parents: 14227
diff changeset
729 }
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
730 else
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
731 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
732 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
733
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
734 int
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
735 PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
736 {
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
737 PyObject *v;
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
738 int ret;
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
739 PyCompilerFlags local_flags;
16916
b0456d3a0f1f Useful future statement support for the interactive interpreter
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16845
diff changeset
740
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
741 if (flags == NULL) {
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
742 flags = &local_flags;
18611
fdb36a0c7e6e Part way to allowing "from __future__ import generators" to communicate
Tim Peters <tim.peters@gmail.com>
parents: 18101
diff changeset
743 local_flags.cf_flags = 0;
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
744 }
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
745 v = PySys_GetObject("ps1");
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
746 if (v == NULL) {
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47416
diff changeset
747 PySys_SetObject("ps1", v = PyString_FromString(">>> "));
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
748 Py_XDECREF(v);
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
749 }
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
750 v = PySys_GetObject("ps2");
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
751 if (v == NULL) {
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47416
diff changeset
752 PySys_SetObject("ps2", v = PyString_FromString("... "));
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
753 Py_XDECREF(v);
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
754 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
755 for (;;) {
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
756 ret = PyRun_InteractiveOneFlags(fp, filename, flags);
37290
89142cadcfb9 In format strings slinging Py_ssize_t, unconditionally
Tim Peters <tim.peters@gmail.com>
parents: 37229
diff changeset
757 PRINT_TOTAL_REFS();
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
758 if (ret == E_EOF)
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
759 return 0;
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
760 /*
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
761 if (ret == E_NOMEM)
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
762 return -1;
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
763 */
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
764 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
765 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
766
45891
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45389
diff changeset
767 #if 0
22468
eebae4f60d05 Disable the parser hacks that enabled the "yield" keyword using a future
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22121
diff changeset
768 /* compute parser flags based on compiler flags */
eebae4f60d05 Disable the parser hacks that enabled the "yield" keyword using a future
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22121
diff changeset
769 #define PARSER_FLAGS(flags) \
36726
bbf16fd024df from __future__ import with_statement addon for 'with', mostly written by
Thomas Wouters <thomas@python.org>
parents: 36662
diff changeset
770 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
39779
b8fbd322760a with and as are now keywords. There are some generated files I can't recreate.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39614
diff changeset
771 PyPARSE_DONT_IMPLY_DEDENT : 0)) : 0)
45891
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45389
diff changeset
772 #endif
727f743cf630 Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents: 45389
diff changeset
773 #if 1
39779
b8fbd322760a with and as are now keywords. There are some generated files I can't recreate.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39614
diff changeset
774 /* Keep an example of flags with future keyword support. */
b8fbd322760a with and as are now keywords. There are some generated files I can't recreate.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39614
diff changeset
775 #define PARSER_FLAGS(flags) \
b8fbd322760a with and as are now keywords. There are some generated files I can't recreate.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39614
diff changeset
776 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \
36726
bbf16fd024df from __future__ import with_statement addon for 'with', mostly written by
Thomas Wouters <thomas@python.org>
parents: 36662
diff changeset
777 PyPARSE_DONT_IMPLY_DEDENT : 0) \
46118
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
778 | (((flags)->cf_flags & CO_FUTURE_PRINT_FUNCTION) ? \
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
779 PyPARSE_PRINT_IS_FUNCTION : 0) \
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
780 | (((flags)->cf_flags & CO_FUTURE_UNICODE_LITERALS) ? \
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
781 PyPARSE_UNICODE_LITERALS : 0) \
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
782 ) : 0)
39779
b8fbd322760a with and as are now keywords. There are some generated files I can't recreate.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39614
diff changeset
783 #endif
22468
eebae4f60d05 Disable the parser hacks that enabled the "yield" keyword using a future
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22121
diff changeset
784
16916
b0456d3a0f1f Useful future statement support for the interactive interpreter
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16845
diff changeset
785 int
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
786 PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
16916
b0456d3a0f1f Useful future statement support for the interactive interpreter
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16845
diff changeset
787 {
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
788 PyObject *m, *d, *v, *w;
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
789 mod_ty mod;
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
790 PyArena *arena;
6661
99955b65408d Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents: 6600
diff changeset
791 char *ps1 = "", *ps2 = "";
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
792 int errcode = 0;
18615
0a90e5ec61b6 Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents: 18612
diff changeset
793
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
794 v = PySys_GetObject("ps1");
6661
99955b65408d Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents: 6600
diff changeset
795 if (v != NULL) {
99955b65408d Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents: 6600
diff changeset
796 v = PyObject_Str(v);
99955b65408d Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents: 6600
diff changeset
797 if (v == NULL)
99955b65408d Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents: 6600
diff changeset
798 PyErr_Clear();
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47416
diff changeset
799 else if (PyString_Check(v))
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47416
diff changeset
800 ps1 = PyString_AsString(v);
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
801 }
6661
99955b65408d Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents: 6600
diff changeset
802 w = PySys_GetObject("ps2");
99955b65408d Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents: 6600
diff changeset
803 if (w != NULL) {
99955b65408d Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents: 6600
diff changeset
804 w = PyObject_Str(w);
99955b65408d Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents: 6600
diff changeset
805 if (w == NULL)
99955b65408d Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents: 6600
diff changeset
806 PyErr_Clear();
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47416
diff changeset
807 else if (PyString_Check(w))
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47416
diff changeset
808 ps2 = PyString_AsString(w);
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
809 }
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
810 arena = PyArena_New();
39135
12e973bdfeee Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39131
diff changeset
811 if (arena == NULL) {
12e973bdfeee Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39131
diff changeset
812 Py_XDECREF(v);
12e973bdfeee Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39131
diff changeset
813 Py_XDECREF(w);
12e973bdfeee Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39131
diff changeset
814 return -1;
12e973bdfeee Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39131
diff changeset
815 }
38455
1a23706139ca PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents: 38431
diff changeset
816 mod = PyParser_ASTFromFile(fp, filename,
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
817 Py_single_input, ps1, ps2,
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
818 flags, &errcode, arena);
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
819 Py_XDECREF(v);
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
820 Py_XDECREF(w);
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
821 if (mod == NULL) {
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
822 PyArena_Free(arena);
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
823 if (errcode == E_EOF) {
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
824 PyErr_Clear();
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
825 return E_EOF;
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
826 }
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
827 PyErr_Print();
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
828 return -1;
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
829 }
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
830 m = PyImport_AddModule("__main__");
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
831 if (m == NULL) {
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
832 PyArena_Free(arena);
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
833 return -1;
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
834 }
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
835 d = PyModule_GetDict(m);
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
836 v = run_mod(mod, filename, d, d, flags, arena);
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
837 PyArena_Free(arena);
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
838 if (v == NULL) {
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
839 PyErr_Print();
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
840 return -1;
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
841 }
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
842 Py_DECREF(v);
5607
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
843 if (Py_FlushLine())
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
844 PyErr_Clear();
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
845 return 0;
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
846 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
847
15738
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
848 /* Check whether a file maybe a pyc file: Look at the extension,
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
849 the file type, and, if we may close it, at the first few bytes. */
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
850
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
851 static int
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
852 maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
15738
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
853 {
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
854 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
855 return 1;
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
856
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
857 /* Only look into the file if we are allowed to close it, since
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
858 it then should also be seekable. */
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
859 if (closeit) {
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
860 /* Read only two bytes of the magic. If the file was opened in
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
861 text mode, the bytes 3 and 4 of the magic (\r\n) might not
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
862 be read as they are on disk. */
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
863 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
864 unsigned char buf[2];
16560
e8e636cc1a09 Ugly fix for SF bug 131239 (-x flag busted).
Tim Peters <tim.peters@gmail.com>
parents: 16421
diff changeset
865 /* Mess: In case of -x, the stream is NOT at its start now,
e8e636cc1a09 Ugly fix for SF bug 131239 (-x flag busted).
Tim Peters <tim.peters@gmail.com>
parents: 16421
diff changeset
866 and ungetc() was used to push back the first newline,
16648
a51b9961f3bb Bug #132850 unix line terminator on windows.
Tim Peters <tim.peters@gmail.com>
parents: 16560
diff changeset
867 which makes the current stream position formally undefined,
a51b9961f3bb Bug #132850 unix line terminator on windows.
Tim Peters <tim.peters@gmail.com>
parents: 16560
diff changeset
868 and a x-platform nightmare.
a51b9961f3bb Bug #132850 unix line terminator on windows.
Tim Peters <tim.peters@gmail.com>
parents: 16560
diff changeset
869 Unfortunately, we have no direct way to know whether -x
a51b9961f3bb Bug #132850 unix line terminator on windows.
Tim Peters <tim.peters@gmail.com>
parents: 16560
diff changeset
870 was specified. So we use a terrible hack: if the current
a51b9961f3bb Bug #132850 unix line terminator on windows.
Tim Peters <tim.peters@gmail.com>
parents: 16560
diff changeset
871 stream position is not 0, we assume -x was specified, and
a51b9961f3bb Bug #132850 unix line terminator on windows.
Tim Peters <tim.peters@gmail.com>
parents: 16560
diff changeset
872 give up. Bug 132850 on SourceForge spells out the
a51b9961f3bb Bug #132850 unix line terminator on windows.
Tim Peters <tim.peters@gmail.com>
parents: 16560
diff changeset
873 hopelessness of trying anything else (fseek and ftell
a51b9961f3bb Bug #132850 unix line terminator on windows.
Tim Peters <tim.peters@gmail.com>
parents: 16560
diff changeset
874 don't work predictably x-platform for text-mode files).
16560
e8e636cc1a09 Ugly fix for SF bug 131239 (-x flag busted).
Tim Peters <tim.peters@gmail.com>
parents: 16421
diff changeset
875 */
e8e636cc1a09 Ugly fix for SF bug 131239 (-x flag busted).
Tim Peters <tim.peters@gmail.com>
parents: 16421
diff changeset
876 int ispyc = 0;
16648
a51b9961f3bb Bug #132850 unix line terminator on windows.
Tim Peters <tim.peters@gmail.com>
parents: 16560
diff changeset
877 if (ftell(fp) == 0) {
a51b9961f3bb Bug #132850 unix line terminator on windows.
Tim Peters <tim.peters@gmail.com>
parents: 16560
diff changeset
878 if (fread(buf, 1, 2, fp) == 2 &&
28648
0e8416be208e Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents: 28647
diff changeset
879 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic)
16648
a51b9961f3bb Bug #132850 unix line terminator on windows.
Tim Peters <tim.peters@gmail.com>
parents: 16560
diff changeset
880 ispyc = 1;
a51b9961f3bb Bug #132850 unix line terminator on windows.
Tim Peters <tim.peters@gmail.com>
parents: 16560
diff changeset
881 rewind(fp);
a51b9961f3bb Bug #132850 unix line terminator on windows.
Tim Peters <tim.peters@gmail.com>
parents: 16560
diff changeset
882 }
16560
e8e636cc1a09 Ugly fix for SF bug 131239 (-x flag busted).
Tim Peters <tim.peters@gmail.com>
parents: 16421
diff changeset
883 return ispyc;
15738
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
884 }
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
885 return 0;
28648
0e8416be208e Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents: 28647
diff changeset
886 }
15738
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
887
14228
20377f15b96a Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(),
Guido van Rossum <guido@python.org>
parents: 14227
diff changeset
888 int
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
889 PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
890 PyCompilerFlags *flags)
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
891 {
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
892 PyObject *m, *d, *v;
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
893 const char *ext;
41044
c8ed4aea6c58 Patch #703779: unset __file__ in __main__ after running a file. This
Georg Brandl <georg@python.org>
parents: 41043
diff changeset
894 int set_file_name = 0, ret;
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
895
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
896 m = PyImport_AddModule("__main__");
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
897 if (m == NULL)
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
898 return -1;
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
899 d = PyModule_GetDict(m);
25827
093fe5b9f6f9 If we have a filename and __main__.__file__ hasn't already been set,
Fred Drake <fdrake@acm.org>
parents: 25573
diff changeset
900 if (PyDict_GetItemString(d, "__file__") == NULL) {
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47416
diff changeset
901 PyObject *f = PyString_FromString(filename);
25827
093fe5b9f6f9 If we have a filename and __main__.__file__ hasn't already been set,
Fred Drake <fdrake@acm.org>
parents: 25573
diff changeset
902 if (f == NULL)
093fe5b9f6f9 If we have a filename and __main__.__file__ hasn't already been set,
Fred Drake <fdrake@acm.org>
parents: 25573
diff changeset
903 return -1;
093fe5b9f6f9 If we have a filename and __main__.__file__ hasn't already been set,
Fred Drake <fdrake@acm.org>
parents: 25573
diff changeset
904 if (PyDict_SetItemString(d, "__file__", f) < 0) {
093fe5b9f6f9 If we have a filename and __main__.__file__ hasn't already been set,
Fred Drake <fdrake@acm.org>
parents: 25573
diff changeset
905 Py_DECREF(f);
093fe5b9f6f9 If we have a filename and __main__.__file__ hasn't already been set,
Fred Drake <fdrake@acm.org>
parents: 25573
diff changeset
906 return -1;
093fe5b9f6f9 If we have a filename and __main__.__file__ hasn't already been set,
Fred Drake <fdrake@acm.org>
parents: 25573
diff changeset
907 }
41044
c8ed4aea6c58 Patch #703779: unset __file__ in __main__ after running a file. This
Georg Brandl <georg@python.org>
parents: 41043
diff changeset
908 set_file_name = 1;
25827
093fe5b9f6f9 If we have a filename and __main__.__file__ hasn't already been set,
Fred Drake <fdrake@acm.org>
parents: 25573
diff changeset
909 Py_DECREF(f);
093fe5b9f6f9 If we have a filename and __main__.__file__ hasn't already been set,
Fred Drake <fdrake@acm.org>
parents: 25573
diff changeset
910 }
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
911 ext = filename + strlen(filename) - 4;
15738
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
912 if (maybe_pyc_file(fp, filename, ext, closeit)) {
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
913 /* Try to run a pyc file. First, re-open in binary */
14228
20377f15b96a Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(),
Guido van Rossum <guido@python.org>
parents: 14227
diff changeset
914 if (closeit)
20377f15b96a Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(),
Guido van Rossum <guido@python.org>
parents: 14227
diff changeset
915 fclose(fp);
25827
093fe5b9f6f9 If we have a filename and __main__.__file__ hasn't already been set,
Fred Drake <fdrake@acm.org>
parents: 25573
diff changeset
916 if ((fp = fopen(filename, "rb")) == NULL) {
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
917 fprintf(stderr, "python: Can't reopen .pyc file\n");
41044
c8ed4aea6c58 Patch #703779: unset __file__ in __main__ after running a file. This
Georg Brandl <georg@python.org>
parents: 41043
diff changeset
918 ret = -1;
c8ed4aea6c58 Patch #703779: unset __file__ in __main__ after running a file. This
Georg Brandl <georg@python.org>
parents: 41043
diff changeset
919 goto done;
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
920 }
5234
07ed52e200db Allow passing a .pyo file.
Guido van Rossum <guido@python.org>
parents: 5170
diff changeset
921 /* Turn on optimization if a .pyo file is given */
07ed52e200db Allow passing a .pyo file.
Guido van Rossum <guido@python.org>
parents: 5170
diff changeset
922 if (strcmp(ext, ".pyo") == 0)
07ed52e200db Allow passing a .pyo file.
Guido van Rossum <guido@python.org>
parents: 5170
diff changeset
923 Py_OptimizeFlag = 1;
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
924 v = run_pyc_file(fp, filename, d, d, flags);
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
925 } else {
28648
0e8416be208e Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents: 28647
diff changeset
926 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d,
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
927 closeit, flags);
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
928 }
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
929 if (v == NULL) {
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
930 PyErr_Print();
41044
c8ed4aea6c58 Patch #703779: unset __file__ in __main__ after running a file. This
Georg Brandl <georg@python.org>
parents: 41043
diff changeset
931 ret = -1;
c8ed4aea6c58 Patch #703779: unset __file__ in __main__ after running a file. This
Georg Brandl <georg@python.org>
parents: 41043
diff changeset
932 goto done;
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
933 }
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
934 Py_DECREF(v);
5607
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
935 if (Py_FlushLine())
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
936 PyErr_Clear();
41044
c8ed4aea6c58 Patch #703779: unset __file__ in __main__ after running a file. This
Georg Brandl <georg@python.org>
parents: 41043
diff changeset
937 ret = 0;
c8ed4aea6c58 Patch #703779: unset __file__ in __main__ after running a file. This
Georg Brandl <georg@python.org>
parents: 41043
diff changeset
938 done:
c8ed4aea6c58 Patch #703779: unset __file__ in __main__ after running a file. This
Georg Brandl <georg@python.org>
parents: 41043
diff changeset
939 if (set_file_name && PyDict_DelItemString(d, "__file__"))
c8ed4aea6c58 Patch #703779: unset __file__ in __main__ after running a file. This
Georg Brandl <georg@python.org>
parents: 41043
diff changeset
940 PyErr_Clear();
c8ed4aea6c58 Patch #703779: unset __file__ in __main__ after running a file. This
Georg Brandl <georg@python.org>
parents: 41043
diff changeset
941 return ret;
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
942 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
943
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
944 int
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
945 PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
19633
c0a44829bcd5 Add warning mode for classic division, almost exactly as specified in
Guido van Rossum <guido@python.org>
parents: 19343
diff changeset
946 {
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
947 PyObject *m, *d, *v;
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
948 m = PyImport_AddModule("__main__");
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
949 if (m == NULL)
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
950 return -1;
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
951 d = PyModule_GetDict(m);
19633
c0a44829bcd5 Add warning mode for classic division, almost exactly as specified in
Guido van Rossum <guido@python.org>
parents: 19343
diff changeset
952 v = PyRun_StringFlags(command, Py_file_input, d, d, flags);
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
953 if (v == NULL) {
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
954 PyErr_Print();
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
955 return -1;
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
956 }
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
957 Py_DECREF(v);
5607
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
958 if (Py_FlushLine())
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
959 PyErr_Clear();
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
960 return 0;
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
961 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
962
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
963 static int
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
964 parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
965 int *lineno, int *offset, const char **text)
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
966 {
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
967 long hold;
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
968 PyObject *v;
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
969
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
970 /* old style errors */
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
971 if (PyTuple_Check(err))
22721
253de588f2fb Get rid of another use of PyArg_Parse()
Neal Norwitz <nnorwitz@gmail.com>
parents: 22468
diff changeset
972 return PyArg_ParseTuple(err, "O(ziiz)", message, filename,
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
973 lineno, offset, text);
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
974
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
975 /* new style errors. `err' is an instance */
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
976
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
977 if (! (v = PyObject_GetAttrString(err, "msg")))
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
978 goto finally;
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
979 *message = v;
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
980
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
981 if (!(v = PyObject_GetAttrString(err, "filename")))
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
982 goto finally;
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
983 if (v == Py_None)
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
984 *filename = NULL;
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47416
diff changeset
985 else if (! (*filename = PyString_AsString(v)))
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
986 goto finally;
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
987
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
988 Py_DECREF(v);
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
989 if (!(v = PyObject_GetAttrString(err, "lineno")))
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
990 goto finally;
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
991 hold = PyInt_AsLong(v);
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
992 Py_DECREF(v);
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
993 v = NULL;
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
994 if (hold < 0 && PyErr_Occurred())
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
995 goto finally;
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
996 *lineno = (int)hold;
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
997
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
998 if (!(v = PyObject_GetAttrString(err, "offset")))
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
999 goto finally;
16831
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1000 if (v == Py_None) {
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1001 *offset = -1;
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1002 Py_DECREF(v);
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1003 v = NULL;
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1004 } else {
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1005 hold = PyInt_AsLong(v);
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1006 Py_DECREF(v);
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1007 v = NULL;
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1008 if (hold < 0 && PyErr_Occurred())
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1009 goto finally;
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1010 *offset = (int)hold;
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1011 }
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1012
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1013 if (!(v = PyObject_GetAttrString(err, "text")))
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1014 goto finally;
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1015 if (v == Py_None)
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1016 *text = NULL;
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47416
diff changeset
1017 else if (! (*text = PyString_AsString(v)))
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1018 goto finally;
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1019 Py_DECREF(v);
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1020 return 1;
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1021
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1022 finally:
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1023 Py_XDECREF(v);
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1024 return 0;
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1025 }
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1026
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1027 void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
1028 PyErr_Print(void)
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1029 {
7206
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
1030 PyErr_PrintEx(1);
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
1031 }
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
1032
16831
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1033 static void
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
1034 print_error_text(PyObject *f, int offset, const char *text)
16831
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1035 {
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1036 char *nl;
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1037 if (offset >= 0) {
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1038 if (offset > 0 && offset == (int)strlen(text))
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1039 offset--;
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1040 for (;;) {
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1041 nl = strchr(text, '\n');
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1042 if (nl == NULL || nl-text >= offset)
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1043 break;
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 36078
diff changeset
1044 offset -= (int)(nl+1-text);
16831
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1045 text = nl+1;
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1046 }
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1047 while (*text == ' ' || *text == '\t') {
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1048 text++;
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1049 offset--;
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1050 }
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1051 }
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1052 PyFile_WriteString(" ", f);
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1053 PyFile_WriteString(text, f);
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1054 if (*text == '\0' || text[strlen(text)-1] != '\n')
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1055 PyFile_WriteString("\n", f);
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1056 if (offset == -1)
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1057 return;
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1058 PyFile_WriteString(" ", f);
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1059 offset--;
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1060 while (offset > 0) {
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1061 PyFile_WriteString(" ", f);
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1062 offset--;
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1063 }
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1064 PyFile_WriteString("^\n", f);
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1065 }
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1066
17212
215dc725db84 Finishing touch to Ping's changes. This is a patch that Ping sent me
Guido van Rossum <guido@python.org>
parents: 17207
diff changeset
1067 static void
215dc725db84 Finishing touch to Ping's changes. This is a patch that Ping sent me
Guido van Rossum <guido@python.org>
parents: 17207
diff changeset
1068 handle_system_exit(void)
17191
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1069 {
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1070 PyObject *exception, *value, *tb;
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1071 int exitcode = 0;
28698
aef01a076ef9 handle_system_exit(): This leaked the current exception info, in
Tim Peters <tim.peters@gmail.com>
parents: 28694
diff changeset
1072
41043
728c60e85efa Variant of patch #697613: don't exit the interpreter on a SystemExit
Georg Brandl <georg@python.org>
parents: 41018
diff changeset
1073 if (Py_InspectFlag)
728c60e85efa Variant of patch #697613: don't exit the interpreter on a SystemExit
Georg Brandl <georg@python.org>
parents: 41018
diff changeset
1074 /* Don't exit if -i flag was given. This flag is set to 0
728c60e85efa Variant of patch #697613: don't exit the interpreter on a SystemExit
Georg Brandl <georg@python.org>
parents: 41018
diff changeset
1075 * when entering interactive mode for inspecting. */
728c60e85efa Variant of patch #697613: don't exit the interpreter on a SystemExit
Georg Brandl <georg@python.org>
parents: 41018
diff changeset
1076 return;
728c60e85efa Variant of patch #697613: don't exit the interpreter on a SystemExit
Georg Brandl <georg@python.org>
parents: 41018
diff changeset
1077
17212
215dc725db84 Finishing touch to Ping's changes. This is a patch that Ping sent me
Guido van Rossum <guido@python.org>
parents: 17207
diff changeset
1078 PyErr_Fetch(&exception, &value, &tb);
17191
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1079 if (Py_FlushLine())
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1080 PyErr_Clear();
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1081 fflush(stdout);
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1082 if (value == NULL || value == Py_None)
28698
aef01a076ef9 handle_system_exit(): This leaked the current exception info, in
Tim Peters <tim.peters@gmail.com>
parents: 28694
diff changeset
1083 goto done;
36751
8e04de2480e4 PEP 352 implementation. Creates a new base class, BaseException, which has an
Brett Cannon <bcannon@gmail.com>
parents: 36726
diff changeset
1084 if (PyExceptionInstance_Check(value)) {
17191
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1085 /* The error code should be in the `code' attribute. */
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1086 PyObject *code = PyObject_GetAttrString(value, "code");
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1087 if (code) {
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1088 Py_DECREF(value);
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1089 value = code;
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1090 if (value == Py_None)
28698
aef01a076ef9 handle_system_exit(): This leaked the current exception info, in
Tim Peters <tim.peters@gmail.com>
parents: 28694
diff changeset
1091 goto done;
17191
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1092 }
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1093 /* If we failed to dig out the 'code' attribute,
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1094 just let the else clause below print the error. */
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1095 }
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1096 if (PyInt_Check(value))
28698
aef01a076ef9 handle_system_exit(): This leaked the current exception info, in
Tim Peters <tim.peters@gmail.com>
parents: 28694
diff changeset
1097 exitcode = (int)PyInt_AsLong(value);
17191
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1098 else {
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1099 PyObject_Print(value, stderr, Py_PRINT_RAW);
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1100 PySys_WriteStderr("\n");
28698
aef01a076ef9 handle_system_exit(): This leaked the current exception info, in
Tim Peters <tim.peters@gmail.com>
parents: 28694
diff changeset
1101 exitcode = 1;
17191
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1102 }
28698
aef01a076ef9 handle_system_exit(): This leaked the current exception info, in
Tim Peters <tim.peters@gmail.com>
parents: 28694
diff changeset
1103 done:
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1104 /* Restore and clear the exception info, in order to properly decref
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1105 * the exception, value, and traceback. If we just exit instead,
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1106 * these leak, which confuses PYTHONDUMPREFS output, and may prevent
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1107 * some finalizers from running.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1108 */
28698
aef01a076ef9 handle_system_exit(): This leaked the current exception info, in
Tim Peters <tim.peters@gmail.com>
parents: 28694
diff changeset
1109 PyErr_Restore(exception, value, tb);
aef01a076ef9 handle_system_exit(): This leaked the current exception info, in
Tim Peters <tim.peters@gmail.com>
parents: 28694
diff changeset
1110 PyErr_Clear();
aef01a076ef9 handle_system_exit(): This leaked the current exception info, in
Tim Peters <tim.peters@gmail.com>
parents: 28694
diff changeset
1111 Py_Exit(exitcode);
aef01a076ef9 handle_system_exit(): This leaked the current exception info, in
Tim Peters <tim.peters@gmail.com>
parents: 28694
diff changeset
1112 /* NOTREACHED */
17191
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1113 }
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1114
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1115 void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
1116 PyErr_PrintEx(int set_sys_last_vars)
7206
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
1117 {
17164
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1118 PyObject *exception, *v, *tb, *hook;
17212
215dc725db84 Finishing touch to Ping's changes. This is a patch that Ping sent me
Guido van Rossum <guido@python.org>
parents: 17207
diff changeset
1119
215dc725db84 Finishing touch to Ping's changes. This is a patch that Ping sent me
Guido van Rossum <guido@python.org>
parents: 17207
diff changeset
1120 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
215dc725db84 Finishing touch to Ping's changes. This is a patch that Ping sent me
Guido van Rossum <guido@python.org>
parents: 17207
diff changeset
1121 handle_system_exit();
215dc725db84 Finishing touch to Ping's changes. This is a patch that Ping sent me
Guido van Rossum <guido@python.org>
parents: 17207
diff changeset
1122 }
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1123 PyErr_Fetch(&exception, &v, &tb);
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1124 if (exception == NULL)
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1125 return;
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1126 PyErr_NormalizeException(&exception, &v, &tb);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents: 2022
diff changeset
1127 if (exception == NULL)
5611
5ed3a21cc122 Can't return 0 from void function...
Guido van Rossum <guido@python.org>
parents: 5607
diff changeset
1128 return;
47887
6f132a26b22f Fix tabs.
Georg Brandl <georg@python.org>
parents: 47527
diff changeset
1129 /* Now we know v != NULL too */
7206
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
1130 if (set_sys_last_vars) {
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
1131 PySys_SetObject("last_type", exception);
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
1132 PySys_SetObject("last_value", v);
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
1133 PySys_SetObject("last_traceback", tb);
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
1134 }
17164
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1135 hook = PySys_GetObject("excepthook");
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1136 if (hook) {
30683
3b59fa5d25b1 Simplify and speedup uses of Py_BuildValue():
Raymond Hettinger <python@rcn.com>
parents: 30122
diff changeset
1137 PyObject *args = PyTuple_Pack(3,
36881
4706b7a1256c Address an coverity issue. Coverity was complaining about a line that's fine,
Guido van Rossum <guido@python.org>
parents: 36859
diff changeset
1138 exception, v, tb ? tb : Py_None);
17164
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1139 PyObject *result = PyEval_CallObject(hook, args);
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1140 if (result == NULL) {
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1141 PyObject *exception2, *v2, *tb2;
17212
215dc725db84 Finishing touch to Ping's changes. This is a patch that Ping sent me
Guido van Rossum <guido@python.org>
parents: 17207
diff changeset
1142 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
215dc725db84 Finishing touch to Ping's changes. This is a patch that Ping sent me
Guido van Rossum <guido@python.org>
parents: 17207
diff changeset
1143 handle_system_exit();
215dc725db84 Finishing touch to Ping's changes. This is a patch that Ping sent me
Guido van Rossum <guido@python.org>
parents: 17207
diff changeset
1144 }
17164
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1145 PyErr_Fetch(&exception2, &v2, &tb2);
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1146 PyErr_NormalizeException(&exception2, &v2, &tb2);
39105
aa85791f5991 Reported by Klocwork #151.
Neal Norwitz <nnorwitz@gmail.com>
parents: 38716
diff changeset
1147 /* It should not be possible for exception2 or v2
aa85791f5991 Reported by Klocwork #151.
Neal Norwitz <nnorwitz@gmail.com>
parents: 38716
diff changeset
1148 to be NULL. However PyErr_Display() can't
aa85791f5991 Reported by Klocwork #151.
Neal Norwitz <nnorwitz@gmail.com>
parents: 38716
diff changeset
1149 tolerate NULLs, so just be safe. */
aa85791f5991 Reported by Klocwork #151.
Neal Norwitz <nnorwitz@gmail.com>
parents: 38716
diff changeset
1150 if (exception2 == NULL) {
aa85791f5991 Reported by Klocwork #151.
Neal Norwitz <nnorwitz@gmail.com>
parents: 38716
diff changeset
1151 exception2 = Py_None;
aa85791f5991 Reported by Klocwork #151.
Neal Norwitz <nnorwitz@gmail.com>
parents: 38716
diff changeset
1152 Py_INCREF(exception2);
aa85791f5991 Reported by Klocwork #151.
Neal Norwitz <nnorwitz@gmail.com>
parents: 38716
diff changeset
1153 }
aa85791f5991 Reported by Klocwork #151.
Neal Norwitz <nnorwitz@gmail.com>
parents: 38716
diff changeset
1154 if (v2 == NULL) {
aa85791f5991 Reported by Klocwork #151.
Neal Norwitz <nnorwitz@gmail.com>
parents: 38716
diff changeset
1155 v2 = Py_None;
aa85791f5991 Reported by Klocwork #151.
Neal Norwitz <nnorwitz@gmail.com>
parents: 38716
diff changeset
1156 Py_INCREF(v2);
aa85791f5991 Reported by Klocwork #151.
Neal Norwitz <nnorwitz@gmail.com>
parents: 38716
diff changeset
1157 }
17164
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1158 if (Py_FlushLine())
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1159 PyErr_Clear();
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1160 fflush(stdout);
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1161 PySys_WriteStderr("Error in sys.excepthook:\n");
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1162 PyErr_Display(exception2, v2, tb2);
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1163 PySys_WriteStderr("\nOriginal exception was:\n");
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1164 PyErr_Display(exception, v, tb);
39105
aa85791f5991 Reported by Klocwork #151.
Neal Norwitz <nnorwitz@gmail.com>
parents: 38716
diff changeset
1165 Py_DECREF(exception2);
aa85791f5991 Reported by Klocwork #151.
Neal Norwitz <nnorwitz@gmail.com>
parents: 38716
diff changeset
1166 Py_DECREF(v2);
21284
43b8a962a32a Missing DECREFs when exception is raised in sys.excepthook.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 21251
diff changeset
1167 Py_XDECREF(tb2);
17164
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1168 }
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1169 Py_XDECREF(result);
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1170 Py_XDECREF(args);
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1171 } else {
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1172 PySys_WriteStderr("sys.excepthook is missing\n");
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1173 PyErr_Display(exception, v, tb);
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1174 }
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1175 Py_XDECREF(exception);
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1176 Py_XDECREF(v);
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1177 Py_XDECREF(tb);
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1178 }
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1179
38431
4c0823f0a0a1 Conversion of exceptions over from faked-up classes to new-style C types.
Richard Jones <richard@commonground.com.au>
parents: 37845
diff changeset
1180 void
4c0823f0a0a1 Conversion of exceptions over from faked-up classes to new-style C types.
Richard Jones <richard@commonground.com.au>
parents: 37845
diff changeset
1181 PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
17164
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1182 {
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1183 int err = 0;
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1184 PyObject *f = PySys_GetObject("stderr");
31771
76053a1dd452 Lost reference.
Armin Rigo <arigo@tunes.org>
parents: 31504
diff changeset
1185 Py_INCREF(value);
1073
2c0432fcc270 Modified most (but not yet all) I/O to always go through sys.stdout or
Guido van Rossum <guido@python.org>
parents: 1015
diff changeset
1186 if (f == NULL)
2c0432fcc270 Modified most (but not yet all) I/O to always go through sys.stdout or
Guido van Rossum <guido@python.org>
parents: 1015
diff changeset
1187 fprintf(stderr, "lost sys.stderr\n");
2c0432fcc270 Modified most (but not yet all) I/O to always go through sys.stdout or
Guido van Rossum <guido@python.org>
parents: 1015
diff changeset
1188 else {
7509
b5d52c415b15 Fix the handling of errors in Py_FlushLine() in a few places.
Guido van Rossum <guido@python.org>
parents: 7206
diff changeset
1189 if (Py_FlushLine())
b5d52c415b15 Fix the handling of errors in Py_FlushLine() in a few places.
Guido van Rossum <guido@python.org>
parents: 7206
diff changeset
1190 PyErr_Clear();
5607
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
1191 fflush(stdout);
17164
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1192 if (tb && tb != Py_None)
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1193 err = PyTraceBack_Print(tb, f);
6165
29ddf1049842 PyErr_Print(): Use PyErr_GivenExceptionMatches() instead of pointer
Barry Warsaw <barry@python.org>
parents: 6136
diff changeset
1194 if (err == 0 &&
31771
76053a1dd452 Lost reference.
Armin Rigo <arigo@tunes.org>
parents: 31504
diff changeset
1195 PyObject_HasAttrString(value, "print_file_and_line"))
6165
29ddf1049842 PyErr_Print(): Use PyErr_GivenExceptionMatches() instead of pointer
Barry Warsaw <barry@python.org>
parents: 6136
diff changeset
1196 {
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1197 PyObject *message;
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
1198 const char *filename, *text;
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1199 int lineno, offset;
31771
76053a1dd452 Lost reference.
Armin Rigo <arigo@tunes.org>
parents: 31504
diff changeset
1200 if (!parse_syntax_error(value, &message, &filename,
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1201 &lineno, &offset, &text))
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1202 PyErr_Clear();
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1203 else {
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1204 char buf[10];
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1205 PyFile_WriteString(" File \"", f);
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1206 if (filename == NULL)
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1207 PyFile_WriteString("<string>", f);
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1208 else
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1209 PyFile_WriteString(filename, f);
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1210 PyFile_WriteString("\", line ", f);
21077
379fc66f4c96 Use PyOS_snprintf instead of sprintf.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 20969
diff changeset
1211 PyOS_snprintf(buf, sizeof(buf), "%d", lineno);
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1212 PyFile_WriteString(buf, f);
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1213 PyFile_WriteString("\n", f);
16831
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1214 if (text != NULL)
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1215 print_error_text(f, offset, text);
31771
76053a1dd452 Lost reference.
Armin Rigo <arigo@tunes.org>
parents: 31504
diff changeset
1216 Py_DECREF(value);
76053a1dd452 Lost reference.
Armin Rigo <arigo@tunes.org>
parents: 31504
diff changeset
1217 value = message;
5607
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
1218 /* Can't be bothered to check all those
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
1219 PyFile_WriteString() calls */
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
1220 if (PyErr_Occurred())
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
1221 err = -1;
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1222 }
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1223 }
5607
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
1224 if (err) {
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
1225 /* Don't do anything else */
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
1226 }
36751
8e04de2480e4 PEP 352 implementation. Creates a new base class, BaseException, which has an
Brett Cannon <bcannon@gmail.com>
parents: 36726
diff changeset
1227 else if (PyExceptionClass_Check(exception)) {
38455
1a23706139ca PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents: 38431
diff changeset
1228 PyObject* moduleName;
36751
8e04de2480e4 PEP 352 implementation. Creates a new base class, BaseException, which has an
Brett Cannon <bcannon@gmail.com>
parents: 36726
diff changeset
1229 char* className = PyExceptionClass_Name(exception);
38455
1a23706139ca PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents: 38431
diff changeset
1230 if (className != NULL) {
1a23706139ca PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents: 38431
diff changeset
1231 char *dot = strrchr(className, '.');
1a23706139ca PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents: 38431
diff changeset
1232 if (dot != NULL)
1a23706139ca PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents: 38431
diff changeset
1233 className = dot+1;
1a23706139ca PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents: 38431
diff changeset
1234 }
1a23706139ca PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents: 38431
diff changeset
1235
38431
4c0823f0a0a1 Conversion of exceptions over from faked-up classes to new-style C types.
Richard Jones <richard@commonground.com.au>
parents: 37845
diff changeset
1236 moduleName = PyObject_GetAttrString(exception, "__module__");
6322
05d943c4597c PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents: 6246
diff changeset
1237 if (moduleName == NULL)
5607
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
1238 err = PyFile_WriteString("<unknown>", f);
6322
05d943c4597c PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents: 6246
diff changeset
1239 else {
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47416
diff changeset
1240 char* modstr = PyString_AsString(moduleName);
28648
0e8416be208e Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents: 28647
diff changeset
1241 if (modstr && strcmp(modstr, "exceptions"))
6322
05d943c4597c PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents: 6246
diff changeset
1242 {
05d943c4597c PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents: 6246
diff changeset
1243 err = PyFile_WriteString(modstr, f);
05d943c4597c PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents: 6246
diff changeset
1244 err += PyFile_WriteString(".", f);
05d943c4597c PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents: 6246
diff changeset
1245 }
38431
4c0823f0a0a1 Conversion of exceptions over from faked-up classes to new-style C types.
Richard Jones <richard@commonground.com.au>
parents: 37845
diff changeset
1246 Py_DECREF(moduleName);
6322
05d943c4597c PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents: 6246
diff changeset
1247 }
05d943c4597c PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents: 6246
diff changeset
1248 if (err == 0) {
05d943c4597c PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents: 6246
diff changeset
1249 if (className == NULL)
05d943c4597c PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents: 6246
diff changeset
1250 err = PyFile_WriteString("<unknown>", f);
05d943c4597c PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents: 6246
diff changeset
1251 else
36751
8e04de2480e4 PEP 352 implementation. Creates a new base class, BaseException, which has an
Brett Cannon <bcannon@gmail.com>
parents: 36726
diff changeset
1252 err = PyFile_WriteString(className, f);
6322
05d943c4597c PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents: 6246
diff changeset
1253 }
5607
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
1254 }
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
1255 else
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
1256 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW);
36807
de4816d344ee Fix refleak in PyErr_Display().
Brett Cannon <bcannon@gmail.com>
parents: 36768
diff changeset
1257 if (err == 0 && (value != Py_None)) {
de4816d344ee Fix refleak in PyErr_Display().
Brett Cannon <bcannon@gmail.com>
parents: 36768
diff changeset
1258 PyObject *s = PyObject_Str(value);
de4816d344ee Fix refleak in PyErr_Display().
Brett Cannon <bcannon@gmail.com>
parents: 36768
diff changeset
1259 /* only print colon if the str() of the
de4816d344ee Fix refleak in PyErr_Display().
Brett Cannon <bcannon@gmail.com>
parents: 36768
diff changeset
1260 object is not the empty string
de4816d344ee Fix refleak in PyErr_Display().
Brett Cannon <bcannon@gmail.com>
parents: 36768
diff changeset
1261 */
de4816d344ee Fix refleak in PyErr_Display().
Brett Cannon <bcannon@gmail.com>
parents: 36768
diff changeset
1262 if (s == NULL)
de4816d344ee Fix refleak in PyErr_Display().
Brett Cannon <bcannon@gmail.com>
parents: 36768
diff changeset
1263 err = -1;
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47416
diff changeset
1264 else if (!PyString_Check(s) ||
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47416
diff changeset
1265 PyString_GET_SIZE(s) != 0)
36807
de4816d344ee Fix refleak in PyErr_Display().
Brett Cannon <bcannon@gmail.com>
parents: 36768
diff changeset
1266 err = PyFile_WriteString(": ", f);
de4816d344ee Fix refleak in PyErr_Display().
Brett Cannon <bcannon@gmail.com>
parents: 36768
diff changeset
1267 if (err == 0)
de4816d344ee Fix refleak in PyErr_Display().
Brett Cannon <bcannon@gmail.com>
parents: 36768
diff changeset
1268 err = PyFile_WriteObject(s, f, Py_PRINT_RAW);
de4816d344ee Fix refleak in PyErr_Display().
Brett Cannon <bcannon@gmail.com>
parents: 36768
diff changeset
1269 Py_XDECREF(s);
2293
a24146241991 print class name for exceptions that are classes
Guido van Rossum <guido@python.org>
parents: 2279
diff changeset
1270 }
41126
a87bcc37bf0f Bug #1678647: write a newline after printing an exception in any
Georg Brandl <georg@python.org>
parents: 41044
diff changeset
1271 /* try to write a newline in any case */
a87bcc37bf0f Bug #1678647: write a newline after printing an exception in any
Georg Brandl <georg@python.org>
parents: 41044
diff changeset
1272 err += PyFile_WriteString("\n", f);
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1273 }
31771
76053a1dd452 Lost reference.
Armin Rigo <arigo@tunes.org>
parents: 31504
diff changeset
1274 Py_DECREF(value);
5607
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
1275 /* If an error happened here, don't show it.
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
1276 XXX This is wrong, but too many callers rely on this behavior. */
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
1277 if (err != 0)
cbb4e3cf086e Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents: 5593
diff changeset
1278 PyErr_Clear();
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1279 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1280
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1281 PyObject *
38455
1a23706139ca PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents: 38431
diff changeset
1282 PyRun_StringFlags(const char *str, int start, PyObject *globals,
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1283 PyObject *locals, PyCompilerFlags *flags)
14228
20377f15b96a Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(),
Guido van Rossum <guido@python.org>
parents: 14227
diff changeset
1284 {
36835
9109b1a0d265 Get rid of run_err_mod(). It was only used in two places.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36807
diff changeset
1285 PyObject *ret = NULL;
39135
12e973bdfeee Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39131
diff changeset
1286 mod_ty mod;
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1287 PyArena *arena = PyArena_New();
39131
7c09b66f04bd Handle more memory allocation failures without crashing.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39105
diff changeset
1288 if (arena == NULL)
7c09b66f04bd Handle more memory allocation failures without crashing.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39105
diff changeset
1289 return NULL;
7c09b66f04bd Handle more memory allocation failures without crashing.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39105
diff changeset
1290
7c09b66f04bd Handle more memory allocation failures without crashing.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39105
diff changeset
1291 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena);
36835
9109b1a0d265 Get rid of run_err_mod(). It was only used in two places.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36807
diff changeset
1292 if (mod != NULL)
9109b1a0d265 Get rid of run_err_mod(). It was only used in two places.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36807
diff changeset
1293 ret = run_mod(mod, "<string>", globals, locals, flags, arena);
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1294 PyArena_Free(arena);
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1295 return ret;
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
1296 }
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
1297
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
1298 PyObject *
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
1299 PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
1300 PyObject *locals, int closeit, PyCompilerFlags *flags)
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
1301 {
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1302 PyObject *ret;
39135
12e973bdfeee Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39131
diff changeset
1303 mod_ty mod;
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1304 PyArena *arena = PyArena_New();
39131
7c09b66f04bd Handle more memory allocation failures without crashing.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39105
diff changeset
1305 if (arena == NULL)
7c09b66f04bd Handle more memory allocation failures without crashing.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39105
diff changeset
1306 return NULL;
7c09b66f04bd Handle more memory allocation failures without crashing.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39105
diff changeset
1307
7c09b66f04bd Handle more memory allocation failures without crashing.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39105
diff changeset
1308 mod = PyParser_ASTFromFile(fp, filename, start, 0, 0,
7c09b66f04bd Handle more memory allocation failures without crashing.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39105
diff changeset
1309 flags, NULL, arena);
41018
5c08e6460dc5 Bug #1674503: close the file opened by execfile() in an error condition.
Georg Brandl <georg@python.org>
parents: 40699
diff changeset
1310 if (closeit)
5c08e6460dc5 Bug #1674503: close the file opened by execfile() in an error condition.
Georg Brandl <georg@python.org>
parents: 40699
diff changeset
1311 fclose(fp);
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1312 if (mod == NULL) {
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1313 PyArena_Free(arena);
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1314 return NULL;
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1315 }
36835
9109b1a0d265 Get rid of run_err_mod(). It was only used in two places.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36807
diff changeset
1316 ret = run_mod(mod, filename, globals, locals, flags, arena);
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1317 PyArena_Free(arena);
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1318 return ret;
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
1319 }
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
1320
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1321 static PyObject *
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1322 run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1323 PyCompilerFlags *flags, PyArena *arena)
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1324 {
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1325 PyCodeObject *co;
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1326 PyObject *v;
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1327 co = PyAST_Compile(mod, filename, flags, arena);
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1328 if (co == NULL)
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1329 return NULL;
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1330 v = PyEval_EvalCode(co, globals, locals);
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1331 Py_DECREF(co);
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1332 return v;
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1333 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1334
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1335 static PyObject *
38455
1a23706139ca PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents: 38431
diff changeset
1336 run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1337 PyObject *locals, PyCompilerFlags *flags)
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
1338 {
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1339 PyCodeObject *co;
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1340 PyObject *v;
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
1341 long magic;
14278
fb8fb53a2eff Add a comment explaining the return value of PyOS_CheckStack().
Fred Drake <fdrake@acm.org>
parents: 14231
diff changeset
1342 long PyImport_GetMagicNumber(void);
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
1343
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1344 magic = PyMarshal_ReadLongFromFile(fp);
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1345 if (magic != PyImport_GetMagicNumber()) {
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1346 PyErr_SetString(PyExc_RuntimeError,
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
1347 "Bad magic number in .pyc file");
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
1348 return NULL;
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
1349 }
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1350 (void) PyMarshal_ReadLongFromFile(fp);
16311
8c41f3861aad It's unclear whether PyMarshal_XXX() are part of the public or private API.
Tim Peters <tim.peters@gmail.com>
parents: 16073
diff changeset
1351 v = PyMarshal_ReadLastObjectFromFile(fp);
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
1352 fclose(fp);
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1353 if (v == NULL || !PyCode_Check(v)) {
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1354 Py_XDECREF(v);
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1355 PyErr_SetString(PyExc_RuntimeError,
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
1356 "Bad code object in .pyc file");
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
1357 return NULL;
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
1358 }
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1359 co = (PyCodeObject *)v;
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1360 v = PyEval_EvalCode(co, globals, locals);
19158
97a3d3d7029f Refactor future feature handling
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 19099
diff changeset
1361 if (v && flags)
97a3d3d7029f Refactor future feature handling
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 19099
diff changeset
1362 flags->cf_flags |= (co->co_flags & PyCF_MASK);
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1363 Py_DECREF(co);
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
1364 return v;
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
1365 }
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
1366
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1367 PyObject *
28648
0e8416be208e Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents: 28647
diff changeset
1368 Py_CompileStringFlags(const char *str, const char *filename, int start,
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
1369 PyCompilerFlags *flags)
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
1370 {
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1371 PyCodeObject *co;
39135
12e973bdfeee Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39131
diff changeset
1372 mod_ty mod;
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1373 PyArena *arena = PyArena_New();
39135
12e973bdfeee Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39131
diff changeset
1374 if (arena == NULL)
12e973bdfeee Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39131
diff changeset
1375 return NULL;
12e973bdfeee Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39131
diff changeset
1376
12e973bdfeee Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39131
diff changeset
1377 mod = PyParser_ASTFromString(str, filename, start, flags, arena);
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1378 if (mod == NULL) {
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1379 PyArena_Free(arena);
1263
65a1e4e9cd54 * Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents: 1262
diff changeset
1380 return NULL;
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1381 }
36662
2ab9270ef19a Check whether there are flags.
Martin v. Löwis <martin@v.loewis.de>
parents: 36660
diff changeset
1382 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
36660
3c0b26113df6 Generate code to recursively copy an AST into
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
1383 PyObject *result = PyAST_mod2obj(mod);
3c0b26113df6 Generate code to recursively copy an AST into
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
1384 PyArena_Free(arena);
3c0b26113df6 Generate code to recursively copy an AST into
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
1385 return result;
3c0b26113df6 Generate code to recursively copy an AST into
Martin v. Löwis <martin@v.loewis.de>
parents: 36501
diff changeset
1386 }
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1387 co = PyAST_Compile(mod, filename, flags, arena);
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1388 PyArena_Free(arena);
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1389 return (PyObject *)co;
1263
65a1e4e9cd54 * Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents: 1262
diff changeset
1390 }
65a1e4e9cd54 * Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents: 1262
diff changeset
1391
16421
aa844711463a Move a bunch of definitions that were internal to compile.c to
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16311
diff changeset
1392 struct symtable *
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
1393 Py_SymtableString(const char *str, const char *filename, int start)
16421
aa844711463a Move a bunch of definitions that were internal to compile.c to
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16311
diff changeset
1394 {
aa844711463a Move a bunch of definitions that were internal to compile.c to
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16311
diff changeset
1395 struct symtable *st;
39135
12e973bdfeee Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39131
diff changeset
1396 mod_ty mod;
46118
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
1397 PyCompilerFlags flags;
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1398 PyArena *arena = PyArena_New();
39135
12e973bdfeee Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39131
diff changeset
1399 if (arena == NULL)
12e973bdfeee Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39131
diff changeset
1400 return NULL;
12e973bdfeee Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents: 39131
diff changeset
1401
46121
d00ded8b2677 Initialize PyCompilerFlags cf_flags with 0
Christian Heimes <christian@cheimes.de>
parents: 46118
diff changeset
1402 flags.cf_flags = 0;
d00ded8b2677 Initialize PyCompilerFlags cf_flags with 0
Christian Heimes <christian@cheimes.de>
parents: 46118
diff changeset
1403
46118
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
1404 mod = PyParser_ASTFromString(str, filename, start, &flags, arena);
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1405 if (mod == NULL) {
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1406 PyArena_Free(arena);
16421
aa844711463a Move a bunch of definitions that were internal to compile.c to
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16311
diff changeset
1407 return NULL;
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1408 }
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1409 st = PySymtable_Build(mod, filename, 0);
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1410 PyArena_Free(arena);
16421
aa844711463a Move a bunch of definitions that were internal to compile.c to
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16311
diff changeset
1411 return st;
aa844711463a Move a bunch of definitions that were internal to compile.c to
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16311
diff changeset
1412 }
aa844711463a Move a bunch of definitions that were internal to compile.c to
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16311
diff changeset
1413
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1414 /* Preferred access to parser is through AST. */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1415 mod_ty
38455
1a23706139ca PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents: 38431
diff changeset
1416 PyParser_ASTFromString(const char *s, const char *filename, int start,
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1417 PyCompilerFlags *flags, PyArena *arena)
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1418 {
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1419 mod_ty mod;
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1420 perrdetail err;
46123
248676988c54 C89 compliance: Microsoft compilers want variable declarations at the top
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46121
diff changeset
1421 int iflags = PARSER_FLAGS(flags);
46118
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
1422
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
1423 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename,
38455
1a23706139ca PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents: 38431
diff changeset
1424 &_PyParser_Grammar, start, &err,
46118
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
1425 &iflags);
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1426 if (n) {
46118
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
1427 if (flags) {
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
1428 flags->cf_flags |= iflags & PyCF_MASK;
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
1429 }
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1430 mod = PyAST_FromNode(n, flags, filename, arena);
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1431 PyNode_Free(n);
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1432 return mod;
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1433 }
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1434 else {
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1435 err_input(&err);
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1436 return NULL;
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1437 }
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1438 }
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1439
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1440 mod_ty
38455
1a23706139ca PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents: 38431
diff changeset
1441 PyParser_ASTFromFile(FILE *fp, const char *filename, int start, char *ps1,
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1442 char *ps2, PyCompilerFlags *flags, int *errcode,
36836
Neal Norwitz <nnorwitz@gmail.com>
parents: 36835
diff changeset
1443 PyArena *arena)
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1444 {
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1445 mod_ty mod;
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1446 perrdetail err;
46123
248676988c54 C89 compliance: Microsoft compilers want variable declarations at the top
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46121
diff changeset
1447 int iflags = PARSER_FLAGS(flags);
46118
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
1448
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
1449 node *n = PyParser_ParseFileFlagsEx(fp, filename, &_PyParser_Grammar,
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
1450 start, ps1, ps2, &err, &iflags);
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1451 if (n) {
46118
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
1452 if (flags) {
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
1453 flags->cf_flags |= iflags & PyCF_MASK;
c78d3586c474 Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents: 46107
diff changeset
1454 }
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1455 mod = PyAST_FromNode(n, flags, filename, arena);
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1456 PyNode_Free(n);
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1457 return mod;
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1458 }
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1459 else {
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1460 err_input(&err);
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1461 if (errcode)
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1462 *errcode = err.error;
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1463 return NULL;
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1464 }
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1465 }
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1466
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1467 /* Simplified interface to parsefile -- return node or set exception */
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1468
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1469 node *
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
1470 PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1471 {
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1472 perrdetail err;
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1473 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar,
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1474 start, NULL, NULL, &err, flags);
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1475 if (n == NULL)
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1476 err_input(&err);
38455
1a23706139ca PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents: 38431
diff changeset
1477
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1478 return n;
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1479 }
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1480
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1481 /* Simplified interface to parsestring -- return node or set exception */
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1482
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1483 node *
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
1484 PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
18615
0a90e5ec61b6 Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents: 18612
diff changeset
1485 {
0a90e5ec61b6 Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents: 18612
diff changeset
1486 perrdetail err;
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1487 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar,
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1488 start, &err, flags);
18615
0a90e5ec61b6 Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents: 18612
diff changeset
1489 if (n == NULL)
0a90e5ec61b6 Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents: 18612
diff changeset
1490 err_input(&err);
0a90e5ec61b6 Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents: 18612
diff changeset
1491 return n;
0a90e5ec61b6 Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents: 18612
diff changeset
1492 }
0a90e5ec61b6 Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents: 18612
diff changeset
1493
0a90e5ec61b6 Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents: 18612
diff changeset
1494 node *
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
1495 PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
24159
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
1496 int start, int flags)
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
1497 {
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
1498 perrdetail err;
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1499 node *n = PyParser_ParseStringFlagsFilename(str, filename,
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1500 &_PyParser_Grammar, start, &err, flags);
24159
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
1501 if (n == NULL)
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
1502 err_input(&err);
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
1503 return n;
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
1504 }
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
1505
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
1506 node *
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
1507 PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
24159
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
1508 {
36065
ea083efdc96c Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents: 35961
diff changeset
1509 return PyParser_SimpleParseStringFlagsFilename(str, filename, start, 0);
24159
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
1510 }
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
1511
28649
04b172843292 A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents: 28648
diff changeset
1512 /* May want to move a more generalized form of this to parsetok.c or
04b172843292 A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents: 28648
diff changeset
1513 even parser modules. */
04b172843292 A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents: 28648
diff changeset
1514
04b172843292 A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents: 28648
diff changeset
1515 void
04b172843292 A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents: 28648
diff changeset
1516 PyParser_SetError(perrdetail *err)
04b172843292 A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents: 28648
diff changeset
1517 {
04b172843292 A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents: 28648
diff changeset
1518 err_input(err);
04b172843292 A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents: 28648
diff changeset
1519 }
04b172843292 A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents: 28648
diff changeset
1520
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1521 /* Set the error appropriate to the given input error code (see errcode.h) */
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1522
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1523 static void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
1524 err_input(perrdetail *err)
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1525 {
13539
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1526 PyObject *v, *w, *errtype;
24539
06f1e2fd05bc Patch #534304: Implement phase 1 of PEP 263.
Martin v. Löwis <martin@v.loewis.de>
parents: 24162
diff changeset
1527 PyObject* u = NULL;
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1528 char *msg = NULL;
13539
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1529 errtype = PyExc_SyntaxError;
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1530 switch (err->error) {
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1531 case E_SYNTAX:
13539
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1532 errtype = PyExc_IndentationError;
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1533 if (err->expected == INDENT)
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1534 msg = "expected an indented block";
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1535 else if (err->token == INDENT)
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1536 msg = "unexpected indent";
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1537 else if (err->token == DEDENT)
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1538 msg = "unexpected unindent";
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1539 else {
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1540 errtype = PyExc_SyntaxError;
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1541 msg = "invalid syntax";
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1542 }
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1543 break;
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1544 case E_TOKEN:
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1545 msg = "invalid token";
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1546 break;
24839
17e95cc06f69 provide less mysterious error messages when seeing end-of-line in
Skip Montanaro <skip@pobox.com>
parents: 24539
diff changeset
1547 case E_EOFS:
46889
1fdfb29f4fb8 #2816: clarify error messages for EOF while scanning strings.
Georg Brandl <georg@python.org>
parents: 46698
diff changeset
1548 msg = "EOF while scanning triple-quoted string literal";
24839
17e95cc06f69 provide less mysterious error messages when seeing end-of-line in
Skip Montanaro <skip@pobox.com>
parents: 24539
diff changeset
1549 break;
17e95cc06f69 provide less mysterious error messages when seeing end-of-line in
Skip Montanaro <skip@pobox.com>
parents: 24539
diff changeset
1550 case E_EOLS:
46889
1fdfb29f4fb8 #2816: clarify error messages for EOF while scanning strings.
Georg Brandl <georg@python.org>
parents: 46698
diff changeset
1551 msg = "EOL while scanning string literal";
24839
17e95cc06f69 provide less mysterious error messages when seeing end-of-line in
Skip Montanaro <skip@pobox.com>
parents: 24539
diff changeset
1552 break;
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1553 case E_INTR:
32526
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 31797
diff changeset
1554 if (!PyErr_Occurred())
78bd25b42d46 This closes patch:
Michael W. Hudson <mwh@python.net>
parents: 31797
diff changeset
1555 PyErr_SetNone(PyExc_KeyboardInterrupt);
48024
7ad6e4cd7713 #3378: in case of no memory, don't leak even more memory. :)
Georg Brandl <georg@python.org>
parents: 47887
diff changeset
1556 goto cleanup;
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1557 case E_NOMEM:
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1558 PyErr_NoMemory();
48024
7ad6e4cd7713 #3378: in case of no memory, don't leak even more memory. :)
Georg Brandl <georg@python.org>
parents: 47887
diff changeset
1559 goto cleanup;
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1560 case E_EOF:
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1561 msg = "unexpected EOF while parsing";
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1562 break;
13539
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1563 case E_TABSPACE:
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1564 errtype = PyExc_TabError;
7967
bbd2b5d8d0b6 Translate E_INDENT to the clearest error message I can think of.
Guido van Rossum <guido@python.org>
parents: 7847
diff changeset
1565 msg = "inconsistent use of tabs and spaces in indentation";
bbd2b5d8d0b6 Translate E_INDENT to the clearest error message I can think of.
Guido van Rossum <guido@python.org>
parents: 7847
diff changeset
1566 break;
12970
63436719d12e Add new parser error code, E_OVERFLOW. This error is returned when
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12754
diff changeset
1567 case E_OVERFLOW:
63436719d12e Add new parser error code, E_OVERFLOW. This error is returned when
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12754
diff changeset
1568 msg = "expression too long";
63436719d12e Add new parser error code, E_OVERFLOW. This error is returned when
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 12754
diff changeset
1569 break;
13539
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1570 case E_DEDENT:
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1571 errtype = PyExc_IndentationError;
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1572 msg = "unindent does not match any outer indentation level";
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1573 break;
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1574 case E_TOODEEP:
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1575 errtype = PyExc_IndentationError;
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1576 msg = "too many levels of indentation";
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1577 break;
35417
e48fcd4c358d Forward UnicodeDecodeError into SyntaxError for source encoding errors.
Martin v. Löwis <martin@v.loewis.de>
parents: 35297
diff changeset
1578 case E_DECODE: {
e48fcd4c358d Forward UnicodeDecodeError into SyntaxError for source encoding errors.
Martin v. Löwis <martin@v.loewis.de>
parents: 35297
diff changeset
1579 PyObject *type, *value, *tb;
e48fcd4c358d Forward UnicodeDecodeError into SyntaxError for source encoding errors.
Martin v. Löwis <martin@v.loewis.de>
parents: 35297
diff changeset
1580 PyErr_Fetch(&type, &value, &tb);
24539
06f1e2fd05bc Patch #534304: Implement phase 1 of PEP 263.
Martin v. Löwis <martin@v.loewis.de>
parents: 24162
diff changeset
1581 if (value != NULL) {
35417
e48fcd4c358d Forward UnicodeDecodeError into SyntaxError for source encoding errors.
Martin v. Löwis <martin@v.loewis.de>
parents: 35297
diff changeset
1582 u = PyObject_Str(value);
24539
06f1e2fd05bc Patch #534304: Implement phase 1 of PEP 263.
Martin v. Löwis <martin@v.loewis.de>
parents: 24162
diff changeset
1583 if (u != NULL) {
47527
52294af4b663 This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents: 47416
diff changeset
1584 msg = PyString_AsString(u);
24539
06f1e2fd05bc Patch #534304: Implement phase 1 of PEP 263.
Martin v. Löwis <martin@v.loewis.de>
parents: 24162
diff changeset
1585 }
06f1e2fd05bc Patch #534304: Implement phase 1 of PEP 263.
Martin v. Löwis <martin@v.loewis.de>
parents: 24162
diff changeset
1586 }
32781
caaef302f1e3 Patch #984714: Properly diagnose E_DECODE errors.
Martin v. Löwis <martin@v.loewis.de>
parents: 32526
diff changeset
1587 if (msg == NULL)
caaef302f1e3 Patch #984714: Properly diagnose E_DECODE errors.
Martin v. Löwis <martin@v.loewis.de>
parents: 32526
diff changeset
1588 msg = "unknown decode error";
36078
1ff4790b7605 Fix Bug #1378022, UTF-8 files with a leading BOM crashed the interpreter.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36065
diff changeset
1589 Py_XDECREF(type);
1ff4790b7605 Fix Bug #1378022, UTF-8 files with a leading BOM crashed the interpreter.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36065
diff changeset
1590 Py_XDECREF(value);
35666
b8e571e6de2e - Fix segfault with invalid coding.
Neal Norwitz <nnorwitz@gmail.com>
parents: 35417
diff changeset
1591 Py_XDECREF(tb);
32781
caaef302f1e3 Patch #984714: Properly diagnose E_DECODE errors.
Martin v. Löwis <martin@v.loewis.de>
parents: 32526
diff changeset
1592 break;
24539
06f1e2fd05bc Patch #534304: Implement phase 1 of PEP 263.
Martin v. Löwis <martin@v.loewis.de>
parents: 24162
diff changeset
1593 }
34664
3785610ff763 Patch #802188: better parser error message for non-EOL following line cont.
Martin v. Löwis <martin@v.loewis.de>
parents: 33747
diff changeset
1594 case E_LINECONT:
3785610ff763 Patch #802188: better parser error message for non-EOL following line cont.
Martin v. Löwis <martin@v.loewis.de>
parents: 33747
diff changeset
1595 msg = "unexpected character after line continuation character";
3785610ff763 Patch #802188: better parser error message for non-EOL following line cont.
Martin v. Löwis <martin@v.loewis.de>
parents: 33747
diff changeset
1596 break;
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1597 default:
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1598 fprintf(stderr, "error=%d\n", err->error);
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1599 msg = "unknown parsing error";
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1600 break;
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1601 }
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1602 v = Py_BuildValue("(ziiz)", err->filename,
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1603 err->lineno, err->offset, err->text);
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1604 w = NULL;
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1605 if (v != NULL)
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1606 w = Py_BuildValue("(sO)", msg, v);
24539
06f1e2fd05bc Patch #534304: Implement phase 1 of PEP 263.
Martin v. Löwis <martin@v.loewis.de>
parents: 24162
diff changeset
1607 Py_XDECREF(u);
17168
0d52358cb288 Fix memory leak with SyntaxError. (The DECREF was originally hidden
Guido van Rossum <guido@python.org>
parents: 17164
diff changeset
1608 Py_XDECREF(v);
13539
feab677269e0 Create two new exceptions: IndentationError and TabError. These are
Fred Drake <fdrake@acm.org>
parents: 13447
diff changeset
1609 PyErr_SetObject(errtype, w);
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1610 Py_XDECREF(w);
48024
7ad6e4cd7713 #3378: in case of no memory, don't leak even more memory. :)
Georg Brandl <georg@python.org>
parents: 47887
diff changeset
1611 cleanup:
7ad6e4cd7713 #3378: in case of no memory, don't leak even more memory. :)
Georg Brandl <georg@python.org>
parents: 47887
diff changeset
1612 if (err->text != NULL) {
7ad6e4cd7713 #3378: in case of no memory, don't leak even more memory. :)
Georg Brandl <georg@python.org>
parents: 47887
diff changeset
1613 PyObject_FREE(err->text);
7ad6e4cd7713 #3378: in case of no memory, don't leak even more memory. :)
Georg Brandl <georg@python.org>
parents: 47887
diff changeset
1614 err->text = NULL;
7ad6e4cd7713 #3378: in case of no memory, don't leak even more memory. :)
Georg Brandl <georg@python.org>
parents: 47887
diff changeset
1615 }
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1616 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1617
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1618 /* Print fatal error message and abort */
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1619
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1620 void
24155
9456a2ccda61 The Py_REF_DEBUG/COUNT_ALLOCS/Py_TRACE_REFS macro minefield: added
Tim Peters <tim.peters@gmail.com>
parents: 24071
diff changeset
1621 Py_FatalError(const char *msg)
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1622 {
1911
a7f269610ec2 * Python/pythonrun.c: add string "Python" to fatal error message
Guido van Rossum <guido@python.org>
parents: 1898
diff changeset
1623 fprintf(stderr, "Fatal Python error: %s\n", msg);
24071
8142f8d668a0 Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents: 23252
diff changeset
1624 #ifdef MS_WINDOWS
5593
451c7ccf36b6 Added a space in an error message
Guido van Rossum <guido@python.org>
parents: 5438
diff changeset
1625 OutputDebugString("Fatal Python error: ");
2529
16ea57c38c4f In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents: 2318
diff changeset
1626 OutputDebugString(msg);
16ea57c38c4f In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents: 2318
diff changeset
1627 OutputDebugString("\n");
8988
070de4d39ddd Add DebugBreak() call to Py_FatalError() for Mark Hammond (only on
Guido van Rossum <guido@python.org>
parents: 7967
diff changeset
1628 #ifdef _DEBUG
070de4d39ddd Add DebugBreak() call to Py_FatalError() for Mark Hammond (only on
Guido van Rossum <guido@python.org>
parents: 7967
diff changeset
1629 DebugBreak();
2529
16ea57c38c4f In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents: 2318
diff changeset
1630 #endif
24071
8142f8d668a0 Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents: 23252
diff changeset
1631 #endif /* MS_WINDOWS */
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1632 abort();
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1633 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1634
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1635 /* Clean up and exit */
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1636
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1637 #ifdef WITH_THREAD
9203
07dae6fdae79 Renamed thread.h to pythread.h.
Guido van Rossum <guido@python.org>
parents: 9192
diff changeset
1638 #include "pythread.h"
961
a31e07847063 New thread.c from Sjoerd, supports _exit_prog(). Use this in goaway()
Guido van Rossum <guido@python.org>
parents: 941
diff changeset
1639 #endif
a31e07847063 New thread.c from Sjoerd, supports _exit_prog(). Use this in goaway()
Guido van Rossum <guido@python.org>
parents: 941
diff changeset
1640
9192
ac6c29d1f10c On second though, NEXITFUNCS should be defined here and not in
Guido van Rossum <guido@python.org>
parents: 9161
diff changeset
1641 #define NEXITFUNCS 32
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
1642 static void (*exitfuncs[NEXITFUNCS])(void);
1870
61738ed6cc10 added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents: 1839
diff changeset
1643 static int nexitfuncs = 0;
61738ed6cc10 added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents: 1839
diff changeset
1644
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
1645 int Py_AtExit(void (*func)(void))
1870
61738ed6cc10 added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents: 1839
diff changeset
1646 {
61738ed6cc10 added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents: 1839
diff changeset
1647 if (nexitfuncs >= NEXITFUNCS)
61738ed6cc10 added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents: 1839
diff changeset
1648 return -1;
61738ed6cc10 added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents: 1839
diff changeset
1649 exitfuncs[nexitfuncs++] = func;
61738ed6cc10 added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents: 1839
diff changeset
1650 return 0;
61738ed6cc10 added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents: 1839
diff changeset
1651 }
61738ed6cc10 added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents: 1839
diff changeset
1652
5939
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
1653 static void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
1654 call_sys_exitfunc(void)
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1655 {
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1656 PyObject *exitfunc = PySys_GetObject("exitfunc");
1015
f3d5e2c3b9a3 Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents: 961
diff changeset
1657
f3d5e2c3b9a3 Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents: 961
diff changeset
1658 if (exitfunc) {
17207
16f145aac2ec call_sys_exitfunc(): Remove unused variable f.
Fred Drake <fdrake@acm.org>
parents: 17191
diff changeset
1659 PyObject *res;
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1660 Py_INCREF(exitfunc);
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1661 PySys_SetObject("exitfunc", (PyObject *)NULL);
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1662 res = PyEval_CallObject(exitfunc, (PyObject *)NULL);
1015
f3d5e2c3b9a3 Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents: 961
diff changeset
1663 if (res == NULL) {
17191
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1664 if (!PyErr_ExceptionMatches(PyExc_SystemExit)) {
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1665 PySys_WriteStderr("Error in sys.exitfunc:\n");
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1666 }
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1667 PyErr_Print();
1015
f3d5e2c3b9a3 Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents: 961
diff changeset
1668 }
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1669 Py_DECREF(exitfunc);
1015
f3d5e2c3b9a3 Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents: 961
diff changeset
1670 }
f3d5e2c3b9a3 Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents: 961
diff changeset
1671
7509
b5d52c415b15 Fix the handling of errors in Py_FlushLine() in a few places.
Guido van Rossum <guido@python.org>
parents: 7206
diff changeset
1672 if (Py_FlushLine())
b5d52c415b15 Fix the handling of errors in Py_FlushLine() in a few places.
Guido van Rossum <guido@python.org>
parents: 7206
diff changeset
1673 PyErr_Clear();
5939
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
1674 }
1870
61738ed6cc10 added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents: 1839
diff changeset
1675
5939
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
1676 static void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
1677 call_ll_exitfuncs(void)
5939
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
1678 {
1870
61738ed6cc10 added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents: 1839
diff changeset
1679 while (nexitfuncs > 0)
61738ed6cc10 added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents: 1839
diff changeset
1680 (*exitfuncs[--nexitfuncs])();
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
1681
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
1682 fflush(stdout);
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
1683 fflush(stderr);
1079
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
1684 }
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
1685
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
1686 void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
1687 Py_Exit(int sts)
1079
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
1688 {
5939
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
1689 Py_Finalize();
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1690
3235
3df9ab03badf Moved mac-specific exit handling to macmain.c
Jack Jansen <jack.jansen@cwi.nl>
parents: 3152
diff changeset
1691 exit(sts);
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1692 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1693
1319
cd397266dc1c * Makefile: added all: and default: targets.
Guido van Rossum <guido@python.org>
parents: 1289
diff changeset
1694 static void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
1695 initsigs(void)
1079
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
1696 {
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1697 #ifdef SIGPIPE
33747
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1698 PyOS_setsig(SIGPIPE, SIG_IGN);
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
1699 #endif
19295
157bbb896198 Bunchathings:
Guido van Rossum <guido@python.org>
parents: 19237
diff changeset
1700 #ifdef SIGXFZ
33747
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1701 PyOS_setsig(SIGXFZ, SIG_IGN);
19295
157bbb896198 Bunchathings:
Guido van Rossum <guido@python.org>
parents: 19237
diff changeset
1702 #endif
23252
4f335ca3f11c Ignore SIGXFSZ.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 23020
diff changeset
1703 #ifdef SIGXFSZ
33747
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1704 PyOS_setsig(SIGXFSZ, SIG_IGN);
23252
4f335ca3f11c Ignore SIGXFSZ.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 23020
diff changeset
1705 #endif
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
1706 PyOS_InitInterrupts(); /* May imply initsignal() */
1079
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
1707 }
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
1708
5108
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1709
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1710 /*
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1711 * The file descriptor fd is considered ``interactive'' if either
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1712 * a) isatty(fd) is TRUE, or
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1713 * b) the -i flag was given, and the filename associated with
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1714 * the descriptor is NULL or "<stdin>" or "???".
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1715 */
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1716 int
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
1717 Py_FdIsInteractive(FILE *fp, const char *filename)
5108
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1718 {
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1719 if (isatty((int)fileno(fp)))
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1720 return 1;
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1721 if (!Py_InteractiveFlag)
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1722 return 0;
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1723 return (filename == NULL) ||
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1724 (strcmp(filename, "<stdin>") == 0) ||
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1725 (strcmp(filename, "???") == 0);
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
1726 }
14227
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1727
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1728
28648
0e8416be208e Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents: 28647
diff changeset
1729 #if defined(USE_STACKCHECK)
14227
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1730 #if defined(WIN32) && defined(_MSC_VER)
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1731
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1732 /* Stack checking for Microsoft C */
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1733
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1734 #include <malloc.h>
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1735 #include <excpt.h>
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1736
14278
fb8fb53a2eff Add a comment explaining the return value of PyOS_CheckStack().
Fred Drake <fdrake@acm.org>
parents: 14231
diff changeset
1737 /*
fb8fb53a2eff Add a comment explaining the return value of PyOS_CheckStack().
Fred Drake <fdrake@acm.org>
parents: 14231
diff changeset
1738 * Return non-zero when we run out of memory on the stack; zero otherwise.
fb8fb53a2eff Add a comment explaining the return value of PyOS_CheckStack().
Fred Drake <fdrake@acm.org>
parents: 14231
diff changeset
1739 */
14227
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1740 int
14280
68b61aa1aa4a PyOS_CheckStack(): Better ANSI'fy this while we're at it.
Fred Drake <fdrake@acm.org>
parents: 14278
diff changeset
1741 PyOS_CheckStack(void)
14227
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1742 {
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1743 __try {
25573
0231cc54f87e s/_alloca/alloca/g; Windows doesn't need the former, at least not unless
Tim Peters <tim.peters@gmail.com>
parents: 24839
diff changeset
1744 /* alloca throws a stack overflow exception if there's
14227
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1745 not enough space left on the stack */
25573
0231cc54f87e s/_alloca/alloca/g; Windows doesn't need the former, at least not unless
Tim Peters <tim.peters@gmail.com>
parents: 24839
diff changeset
1746 alloca(PYOS_STACK_MARGIN * sizeof(void*));
14227
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1747 return 0;
45389
2efcd7f606f8 Perform correct handling of stack overflow for windows: Catch the correct exception code and reset the overflow condition when handled.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 45229
diff changeset
1748 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
2efcd7f606f8 Perform correct handling of stack overflow for windows: Catch the correct exception code and reset the overflow condition when handled.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 45229
diff changeset
1749 EXCEPTION_EXECUTE_HANDLER :
2efcd7f606f8 Perform correct handling of stack overflow for windows: Catch the correct exception code and reset the overflow condition when handled.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 45229
diff changeset
1750 EXCEPTION_CONTINUE_SEARCH) {
2efcd7f606f8 Perform correct handling of stack overflow for windows: Catch the correct exception code and reset the overflow condition when handled.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 45229
diff changeset
1751 int errcode = _resetstkoflw();
2efcd7f606f8 Perform correct handling of stack overflow for windows: Catch the correct exception code and reset the overflow condition when handled.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 45229
diff changeset
1752 if (errcode)
2efcd7f606f8 Perform correct handling of stack overflow for windows: Catch the correct exception code and reset the overflow condition when handled.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 45229
diff changeset
1753 {
2efcd7f606f8 Perform correct handling of stack overflow for windows: Catch the correct exception code and reset the overflow condition when handled.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 45229
diff changeset
1754 Py_FatalError("Could not reset the stack!");
2efcd7f606f8 Perform correct handling of stack overflow for windows: Catch the correct exception code and reset the overflow condition when handled.
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents: 45229
diff changeset
1755 }
14227
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1756 }
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1757 return 1;
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1758 }
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1759
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1760 #endif /* WIN32 && _MSC_VER */
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1761
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1762 /* Alternate implementations can be added here... */
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1763
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
1764 #endif /* USE_STACKCHECK */
14637
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1765
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1766
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1767 /* Wrappers around sigaction() or signal(). */
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1768
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1769 PyOS_sighandler_t
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1770 PyOS_getsig(int sig)
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1771 {
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1772 #ifdef HAVE_SIGACTION
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1773 struct sigaction context;
33747
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1774 if (sigaction(sig, NULL, &context) == -1)
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1775 return SIG_ERR;
14637
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1776 return context.sa_handler;
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1777 #else
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1778 PyOS_sighandler_t handler;
35961
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1779 /* Special signal handling for the secure CRT in Visual Studio 2005 */
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1780 #if defined(_MSC_VER) && _MSC_VER >= 1400
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1781 switch (sig) {
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1782 /* Only these signals are valid */
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1783 case SIGINT:
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1784 case SIGILL:
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1785 case SIGFPE:
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1786 case SIGSEGV:
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1787 case SIGTERM:
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1788 case SIGBREAK:
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1789 case SIGABRT:
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1790 break;
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1791 /* Don't call signal() with other values or it will assert */
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1792 default:
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1793 return SIG_ERR;
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1794 }
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
1795 #endif /* _MSC_VER && _MSC_VER >= 1400 */
14637
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1796 handler = signal(sig, SIG_IGN);
33747
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1797 if (handler != SIG_ERR)
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1798 signal(sig, handler);
14637
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1799 return handler;
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1800 #endif
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1801 }
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1802
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1803 PyOS_sighandler_t
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1804 PyOS_setsig(int sig, PyOS_sighandler_t handler)
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1805 {
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1806 #ifdef HAVE_SIGACTION
33747
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1807 struct sigaction context, ocontext;
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1808 context.sa_handler = handler;
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1809 sigemptyset(&context.sa_mask);
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1810 context.sa_flags = 0;
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1811 if (sigaction(sig, &context, &ocontext) == -1)
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1812 return SIG_ERR;
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1813 return ocontext.sa_handler;
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1814 #else
14637
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1815 PyOS_sighandler_t oldhandler;
33747
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1816 oldhandler = signal(sig, handler);
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1817 #ifdef HAVE_SIGINTERRUPT
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1818 siginterrupt(sig, 1);
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
1819 #endif
14637
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1820 return oldhandler;
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1821 #endif
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
1822 }
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1823
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1824 /* Deprecated C API functions still provided for binary compatiblity */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1825
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1826 #undef PyParser_SimpleParseFile
37845
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1827 PyAPI_FUNC(node *)
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1828 PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1829 {
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1830 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1831 }
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1832
37845
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1833 #undef PyParser_SimpleParseString
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1834 PyAPI_FUNC(node *)
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1835 PyParser_SimpleParseString(const char *str, int start)
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1836 {
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1837 return PyParser_SimpleParseStringFlags(str, start, 0);
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
1838 }
37655
2f3f2e32dfd9 spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents: 37638
diff changeset
1839
37845
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1840 #undef PyRun_AnyFile
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1841 PyAPI_FUNC(int)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1842 PyRun_AnyFile(FILE *fp, const char *name)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1843 {
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1844 return PyRun_AnyFileExFlags(fp, name, 0, NULL);
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1845 }
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1846
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1847 #undef PyRun_AnyFileEx
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1848 PyAPI_FUNC(int)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1849 PyRun_AnyFileEx(FILE *fp, const char *name, int closeit)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1850 {
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1851 return PyRun_AnyFileExFlags(fp, name, closeit, NULL);
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1852 }
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1853
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1854 #undef PyRun_AnyFileFlags
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1855 PyAPI_FUNC(int)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1856 PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1857 {
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1858 return PyRun_AnyFileExFlags(fp, name, 0, flags);
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1859 }
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1860
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1861 #undef PyRun_File
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1862 PyAPI_FUNC(PyObject *)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1863 PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1864 {
47887
6f132a26b22f Fix tabs.
Georg Brandl <georg@python.org>
parents: 47527
diff changeset
1865 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL);
37845
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1866 }
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1867
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1868 #undef PyRun_FileEx
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1869 PyAPI_FUNC(PyObject *)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1870 PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1871 {
47887
6f132a26b22f Fix tabs.
Georg Brandl <georg@python.org>
parents: 47527
diff changeset
1872 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL);
37845
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1873 }
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1874
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1875 #undef PyRun_FileFlags
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1876 PyAPI_FUNC(PyObject *)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1877 PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l,
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1878 PyCompilerFlags *flags)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1879 {
47887
6f132a26b22f Fix tabs.
Georg Brandl <georg@python.org>
parents: 47527
diff changeset
1880 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags);
37845
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1881 }
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1882
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1883 #undef PyRun_SimpleFile
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1884 PyAPI_FUNC(int)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1885 PyRun_SimpleFile(FILE *f, const char *p)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1886 {
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1887 return PyRun_SimpleFileExFlags(f, p, 0, NULL);
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1888 }
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1889
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1890 #undef PyRun_SimpleFileEx
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1891 PyAPI_FUNC(int)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1892 PyRun_SimpleFileEx(FILE *f, const char *p, int c)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1893 {
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1894 return PyRun_SimpleFileExFlags(f, p, c, NULL);
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1895 }
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1896
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1897
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1898 #undef PyRun_String
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1899 PyAPI_FUNC(PyObject *)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1900 PyRun_String(const char *str, int s, PyObject *g, PyObject *l)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1901 {
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1902 return PyRun_StringFlags(str, s, g, l, NULL);
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1903 }
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1904
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1905 #undef PyRun_SimpleString
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1906 PyAPI_FUNC(int)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1907 PyRun_SimpleString(const char *s)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1908 {
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1909 return PyRun_SimpleStringFlags(s, NULL);
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1910 }
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1911
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1912 #undef Py_CompileString
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1913 PyAPI_FUNC(PyObject *)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1914 Py_CompileString(const char *str, const char *p, int s)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1915 {
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1916 return Py_CompileStringFlags(str, p, s, NULL);
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1917 }
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1918
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1919 #undef PyRun_InteractiveOne
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1920 PyAPI_FUNC(int)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1921 PyRun_InteractiveOne(FILE *f, const char *p)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1922 {
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1923 return PyRun_InteractiveOneFlags(f, p, NULL);
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1924 }
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1925
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1926 #undef PyRun_InteractiveLoop
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1927 PyAPI_FUNC(int)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1928 PyRun_InteractiveLoop(FILE *f, const char *p)
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1929 {
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1930 return PyRun_InteractiveLoopFlags(f, p, NULL);
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1931 }
35f27bbd9ad8 Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents: 37831
diff changeset
1932
37655
2f3f2e32dfd9 spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents: 37638
diff changeset
1933 #ifdef __cplusplus
2f3f2e32dfd9 spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents: 37638
diff changeset
1934 }
2f3f2e32dfd9 spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents: 37638
diff changeset
1935 #endif
2f3f2e32dfd9 spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents: 37638
diff changeset
1936