Mercurial > cpython-lru_cache-weakref
annotate Python/pythonrun.c @ 61774:55e2368f72f2 2.6
Merged revisions 81380 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r81380 | brett.cannon | 2010-05-20 11:37:55 -0700 (Thu, 20 May 2010) | 8 lines
Turned out that if you used explicit relative import syntax
(e.g. from .os import sep) and it failed, import would still try the implicit
relative import semantics of an absolute import (from os import sep). That's
not right, so when level is negative, only do explicit relative import
semantics.
Fixes issue #7902. Thanks to Meador Inge for the patch.
........
| author | Brett Cannon <bcannon@gmail.com> |
|---|---|
| date | Thu, 20 May 2010 18:41:08 +0000 |
| parents | e38335d4df91 |
| children | 8dbbd90eeda8 |
| 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 | 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" |
|
56781
2abc3b4bce7c
Merged revisions 75570,75574,75624 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52818
diff
changeset
|
20 #include "abstract.h" |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 |
|
38716
42808526511c
Patch #1495999: Part two of Windows CE changes.
Martin v. Löwis <martin@v.loewis.de>
parents:
38455
diff
changeset
|
22 #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
|
23 #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
|
24 #endif |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
25 |
|
50522
ee9ced92843a
Merged revisions 68133-68134,68141-68142,68145-68146,68148-68149,68159-68162,68166,68171-68174,68179,68195-68196,68210,68214-68215,68217-68222 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49818
diff
changeset
|
26 #ifdef MS_WINDOWS |
|
ee9ced92843a
Merged revisions 68133-68134,68141-68142,68145-68146,68148-68149,68159-68162,68166,68171-68174,68179,68195-68196,68210,68214-68215,68217-68222 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49818
diff
changeset
|
27 #include "malloc.h" /* for alloca */ |
|
ee9ced92843a
Merged revisions 68133-68134,68141-68142,68145-68146,68148-68149,68159-68162,68166,68171-68174,68179,68195-68196,68210,68214-68215,68217-68222 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49818
diff
changeset
|
28 #endif |
|
ee9ced92843a
Merged revisions 68133-68134,68141-68142,68145-68146,68148-68149,68159-68162,68166,68171-68174,68179,68195-68196,68210,68214-68215,68217-68222 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49818
diff
changeset
|
29 |
|
28174
3f90d21debe9
Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize,
Martin v. Löwis <martin@v.loewis.de>
parents:
28065
diff
changeset
|
30 #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
|
31 #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
|
32 #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
|
33 #endif |
|
3f90d21debe9
Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize,
Martin v. Löwis <martin@v.loewis.de>
parents:
28065
diff
changeset
|
34 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
23252
diff
changeset
|
35 #ifdef MS_WINDOWS |
|
2529
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
36 #undef BYTE |
|
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
37 #include "windows.h" |
|
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
38 #endif |
|
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
39 |
|
36837
3a3aed49b245
Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36836
diff
changeset
|
40 #ifndef Py_REF_DEBUG |
|
37290
89142cadcfb9
In format strings slinging Py_ssize_t, unconditionally
Tim Peters <tim.peters@gmail.com>
parents:
37229
diff
changeset
|
41 #define PRINT_TOTAL_REFS() |
|
36837
3a3aed49b245
Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36836
diff
changeset
|
42 #else /* Py_REF_DEBUG */ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
43 #define PRINT_TOTAL_REFS() fprintf(stderr, \ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
44 "[%" PY_FORMAT_SIZE_T "d refs]\n", \ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
45 _Py_GetRefTotal()) |
|
36837
3a3aed49b245
Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36836
diff
changeset
|
46 #endif |
|
3a3aed49b245
Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36836
diff
changeset
|
47 |
|
37655
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37638
diff
changeset
|
48 #ifdef __cplusplus |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37638
diff
changeset
|
49 extern "C" { |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37638
diff
changeset
|
50 #endif |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37638
diff
changeset
|
51 |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
52 extern char *Py_GetPath(void); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
53 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
54 extern grammar _PyParser_Grammar; /* From graminit.c */ |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
55 |
|
1391
7c3245c18677
* ceval.c, longobject.c, methodobject.c, listnode.c, arraymodule.c,
Guido van Rossum <guido@python.org>
parents:
1347
diff
changeset
|
56 /* Forward */ |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13256
diff
changeset
|
57 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
|
58 static void initsite(void); |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
59 static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
60 PyCompilerFlags *, PyArena *); |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
61 static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
62 PyCompilerFlags *); |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13256
diff
changeset
|
63 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
|
64 static void initsigs(void); |
|
56781
2abc3b4bce7c
Merged revisions 75570,75574,75624 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52818
diff
changeset
|
65 static void wait_for_thread_shutdown(void); |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13256
diff
changeset
|
66 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
|
67 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
|
68 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
|
69 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
|
70 |
|
28694
a4154dd5939a
New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents:
28653
diff
changeset
|
71 #ifdef WITH_THREAD |
|
a4154dd5939a
New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents:
28653
diff
changeset
|
72 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
|
73 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
|
74 #endif /* WITH_THREAD */ |
|
a4154dd5939a
New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents:
28653
diff
changeset
|
75 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
76 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
|
77 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
|
78 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
|
79 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
|
80 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
|
81 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
|
82 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
|
83 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
|
84 int Py_FrozenFlag; /* Needed by getpath.c */ |
| 12539 | 85 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
|
86 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
|
87 /* _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
|
88 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
|
89 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
|
90 int _Py_QnewFlag = 0; |
|
46698
1a2dbc84bdfc
Implemented PEP 370
Christian Heimes <christian@cheimes.de>
parents:
46414
diff
changeset
|
91 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
|
92 |
|
46414
840064802952
Re-implement the 'warnings' module in C. This allows for usage of the
Brett Cannon <bcannon@gmail.com>
parents:
46123
diff
changeset
|
93 /* 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
|
94 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
|
95 PyObject * |
|
840064802952
Re-implement the 'warnings' module in C. This allows for usage of the
Brett Cannon <bcannon@gmail.com>
parents:
46123
diff
changeset
|
96 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
|
97 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
98 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
|
99 } |
|
27958
e07b21ea3c45
Fix bug 683658 - PyErr_Warn may cause import deadlock.
Mark Hammond <mhammond@skippinet.com.au>
parents:
27878
diff
changeset
|
100 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
101 static int initialized = 0; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
102 |
|
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
|
103 /* 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
|
104 |
|
57045f51dd12
Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents:
6117
diff
changeset
|
105 int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
106 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
|
107 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
108 return initialized; |
|
6136
57045f51dd12
Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents:
6117
diff
changeset
|
109 } |
|
57045f51dd12
Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents:
6117
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 /* 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
|
112 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
|
113 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
|
114 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
|
115 been created. |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
116 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
117 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
|
118 (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
|
119 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
|
120 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
121 */ |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
122 |
|
20401
b74610c92d8b
SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
19633
diff
changeset
|
123 static int |
|
b74610c92d8b
SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
19633
diff
changeset
|
124 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
|
125 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
126 int env = atoi(envs); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
127 if (flag < env) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
128 flag = env; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
129 if (flag < 1) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
130 flag = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
131 return flag; |
|
20401
b74610c92d8b
SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
19633
diff
changeset
|
132 } |
|
b74610c92d8b
SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
19633
diff
changeset
|
133 |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
134 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
|
135 Py_InitializeEx(int install_sigs) |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
136 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
137 PyInterpreterState *interp; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
138 PyThreadState *tstate; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
139 PyObject *bimod, *sysmod; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
140 char *p; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
141 char *icodeset = NULL; /* On Windows, input codeset may theoretically |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
142 differ from output codeset. */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
143 char *codeset = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
144 char *errors = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
145 int free_codeset = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
146 int overridden = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
147 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
|
148 #if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET) |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
149 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
|
150 #endif |
|
47413
1062b7dec95b
New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents:
47294
diff
changeset
|
151 #ifdef MS_WINDOWS |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
152 char ibuf[128]; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
153 char buf[128]; |
|
47413
1062b7dec95b
New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents:
47294
diff
changeset
|
154 #endif |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
155 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
|
156 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
157 if (initialized) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
158 return; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
159 initialized = 1; |
|
28648
0e8416be208e
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
28647
diff
changeset
|
160 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
161 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0') |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
162 Py_DebugFlag = add_flag(Py_DebugFlag, p); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
163 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0') |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
164 Py_VerboseFlag = add_flag(Py_VerboseFlag, p); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
165 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0') |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
166 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
167 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0') |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
168 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
|
169 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
170 interp = PyInterpreterState_New(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
171 if (interp == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
172 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
|
173 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
174 tstate = PyThreadState_New(interp); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
175 if (tstate == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
176 Py_FatalError("Py_Initialize: can't make first thread"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
177 (void) PyThreadState_Swap(tstate); |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
178 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
179 _Py_ReadyTypes(); |
|
19040
4df72ea78ae8
- Rename PyType_InitDict() to PyType_Ready().
Guido van Rossum <guido@python.org>
parents:
18933
diff
changeset
|
180 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
181 if (!_PyFrame_Init()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
182 Py_FatalError("Py_Initialize: can't init frames"); |
|
26889
12753e7b15f7
SF #561244, Micro optimizations
Neal Norwitz <nnorwitz@gmail.com>
parents:
26885
diff
changeset
|
183 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
184 if (!_PyInt_Init()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
185 Py_FatalError("Py_Initialize: can't init ints"); |
|
26889
12753e7b15f7
SF #561244, Micro optimizations
Neal Norwitz <nnorwitz@gmail.com>
parents:
26885
diff
changeset
|
186 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
187 if (!PyByteArray_Init()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
188 Py_FatalError("Py_Initialize: can't init bytearray"); |
|
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
|
189 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
190 _PyFloat_Init(); |
| 34972 | 191 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
192 interp->modules = PyDict_New(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
193 if (interp->modules == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
194 Py_FatalError("Py_Initialize: can't make modules dictionary"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
195 interp->modules_reloading = PyDict_New(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
196 if (interp->modules_reloading == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
197 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
|
198 |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
19296
diff
changeset
|
199 #ifdef Py_USING_UNICODE |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
200 /* Init Unicode implementation; relies on the codec registry */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
201 _PyUnicode_Init(); |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
19296
diff
changeset
|
202 #endif |
|
11977
8b88e1bc0e1b
Marc-Andre Lemburg: add calls to initialize and finalize Unicode and
Guido van Rossum <guido@python.org>
parents:
11673
diff
changeset
|
203 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
204 bimod = _PyBuiltin_Init(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
205 if (bimod == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
206 Py_FatalError("Py_Initialize: can't initialize __builtin__"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
207 interp->builtins = PyModule_GetDict(bimod); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
208 if (interp->builtins == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
209 Py_FatalError("Py_Initialize: can't initialize builtins dict"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
210 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
|
211 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
212 sysmod = _PySys_Init(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
213 if (sysmod == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
214 Py_FatalError("Py_Initialize: can't initialize sys"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
215 interp->sysdict = PyModule_GetDict(sysmod); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
216 if (interp->sysdict == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
217 Py_FatalError("Py_Initialize: can't initialize sys dict"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
218 Py_INCREF(interp->sysdict); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
219 _PyImport_FixupExtension("sys", "sys"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
220 PySys_SetPath(Py_GetPath()); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
221 PyDict_SetItemString(interp->sysdict, "modules", |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
222 interp->modules); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
223 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
224 _PyImport_Init(); |
|
11113
be8ec828c072
Marc-Andre Lemburg discovered that the switch from .pyc to .pyo files,
Guido van Rossum <guido@python.org>
parents:
10534
diff
changeset
|
225 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
226 /* initialize builtin exceptions */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
227 _PyExc_Init(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
228 _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
|
229 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
230 /* phase 2 of builtins */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
231 _PyImport_FixupExtension("__builtin__", "__builtin__"); |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
232 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
233 _PyImportHooks_Init(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
234 |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
235 if (install_sigs) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
236 initsigs(); /* Signal handling stuff, including initintr() */ |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26643
diff
changeset
|
237 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
238 /* Initialize warnings. */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
239 _PyWarnings_Init(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
240 if (PySys_HasWarnOptions()) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
241 PyObject *warnings_module = PyImport_ImportModule("warnings"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
242 if (!warnings_module) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
243 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
244 Py_XDECREF(warnings_module); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
245 } |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
246 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
247 initmain(); /* Module __main__ */ |
|
28065
c61ef183ce2f
Addendum to #683658:
Just van Rossum <just@letterror.com>
parents:
27958
diff
changeset
|
248 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
249 /* auto-thread-state API, if available */ |
|
28694
a4154dd5939a
New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents:
28653
diff
changeset
|
250 #ifdef WITH_THREAD |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
251 _PyGILState_Init(interp, tstate); |
|
28694
a4154dd5939a
New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents:
28653
diff
changeset
|
252 #endif /* WITH_THREAD */ |
|
a4154dd5939a
New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents:
28653
diff
changeset
|
253 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
254 if (!Py_NoSiteFlag) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
255 initsite(); /* Module site */ |
|
59822
8d8c9bf2a04e
Partial backport of r78826: leave import site error handler unchanged (print
Victor Stinner <victor.stinner@haypocalc.com>
parents:
56781
diff
changeset
|
256 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
257 if ((p = Py_GETENV("PYTHONIOENCODING")) && *p != '\0') { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
258 p = icodeset = codeset = strdup(p); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
259 free_codeset = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
260 errors = strchr(p, ':'); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
261 if (errors) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
262 *errors = '\0'; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
263 errors++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
264 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
265 overridden = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
266 } |
|
47413
1062b7dec95b
New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents:
47294
diff
changeset
|
267 |
|
28174
3f90d21debe9
Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize,
Martin v. Löwis <martin@v.loewis.de>
parents:
28065
diff
changeset
|
268 #if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET) |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
269 /* On Unix, set the file system encoding according to the |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
270 user's preference, if the CODESET names a well-known |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
271 Python codec, and Py_FileSystemDefaultEncoding isn't |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
272 initialized by other means. Also set the encoding of |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
273 stdin and stdout if these are terminals, unless overridden. */ |
|
47413
1062b7dec95b
New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents:
47294
diff
changeset
|
274 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
275 if (!overridden || !Py_FileSystemDefaultEncoding) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
276 saved_locale = strdup(setlocale(LC_CTYPE, NULL)); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
277 setlocale(LC_CTYPE, ""); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
278 loc_codeset = nl_langinfo(CODESET); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
279 if (loc_codeset && *loc_codeset) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
280 PyObject *enc = PyCodec_Encoder(loc_codeset); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
281 if (enc) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
282 loc_codeset = strdup(loc_codeset); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
283 Py_DECREF(enc); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
284 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
285 if (PyErr_ExceptionMatches(PyExc_LookupError)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
286 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
287 loc_codeset = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
288 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
289 PyErr_Print(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
290 exit(1); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
291 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
292 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
293 } else |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
294 loc_codeset = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
295 setlocale(LC_CTYPE, saved_locale); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
296 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
|
297 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
298 if (!overridden) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
299 codeset = icodeset = loc_codeset; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
300 free_codeset = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
301 } |
|
47413
1062b7dec95b
New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents:
47294
diff
changeset
|
302 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
303 /* Initialize Py_FileSystemDefaultEncoding from |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
304 locale even if PYTHONIOENCODING is set. */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
305 if (!Py_FileSystemDefaultEncoding) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
306 Py_FileSystemDefaultEncoding = loc_codeset; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
307 if (!overridden) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
308 free_codeset = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
309 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
310 } |
|
47413
1062b7dec95b
New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents:
47294
diff
changeset
|
311 #endif |
|
1062b7dec95b
New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents:
47294
diff
changeset
|
312 |
|
1062b7dec95b
New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents:
47294
diff
changeset
|
313 #ifdef MS_WINDOWS |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
314 if (!overridden) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
315 icodeset = ibuf; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
316 codeset = buf; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
317 sprintf(ibuf, "cp%d", GetConsoleCP()); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
318 sprintf(buf, "cp%d", GetConsoleOutputCP()); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
319 } |
|
47413
1062b7dec95b
New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents:
47294
diff
changeset
|
320 #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
|
321 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
322 if (codeset) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
323 sys_stream = PySys_GetObject("stdin"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
324 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", ""); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
325 if (!sys_isatty) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
326 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
327 if ((overridden || |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
328 (sys_isatty && PyObject_IsTrue(sys_isatty))) && |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
329 PyFile_Check(sys_stream)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
330 if (!PyFile_SetEncodingAndErrors(sys_stream, icodeset, errors)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
331 Py_FatalError("Cannot set codeset of stdin"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
332 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
333 Py_XDECREF(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
|
334 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
335 sys_stream = PySys_GetObject("stdout"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
336 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", ""); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
337 if (!sys_isatty) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
338 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
339 if ((overridden || |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
340 (sys_isatty && PyObject_IsTrue(sys_isatty))) && |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
341 PyFile_Check(sys_stream)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
342 if (!PyFile_SetEncodingAndErrors(sys_stream, codeset, errors)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
343 Py_FatalError("Cannot set codeset of stdout"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
344 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
345 Py_XDECREF(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
|
346 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
347 sys_stream = PySys_GetObject("stderr"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
348 sys_isatty = PyObject_CallMethod(sys_stream, "isatty", ""); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
349 if (!sys_isatty) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
350 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
351 if((overridden || |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
352 (sys_isatty && PyObject_IsTrue(sys_isatty))) && |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
353 PyFile_Check(sys_stream)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
354 if (!PyFile_SetEncodingAndErrors(sys_stream, codeset, errors)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
355 Py_FatalError("Cannot set codeset of stderr"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
356 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
357 Py_XDECREF(sys_isatty); |
|
37423
57b1ff138995
Bug #1421664: Set sys.stderr.encoding
Martin v. Löwis <martin@v.loewis.de>
parents:
37290
diff
changeset
|
358 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
359 if (free_codeset) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
360 free(codeset); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
361 } |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
362 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
363 |
|
33189
de804edf8bcd
Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents:
32781
diff
changeset
|
364 void |
|
de804edf8bcd
Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents:
32781
diff
changeset
|
365 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
|
366 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
367 Py_InitializeEx(1); |
|
33189
de804edf8bcd
Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents:
32781
diff
changeset
|
368 } |
|
de804edf8bcd
Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents:
32781
diff
changeset
|
369 |
|
de804edf8bcd
Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents:
32781
diff
changeset
|
370 |
|
9641
d152adf3f094
Move the prototype for dump_counts() to before where it is used.
Guido van Rossum <guido@python.org>
parents:
9285
diff
changeset
|
371 #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
|
372 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
|
373 #endif |
|
d152adf3f094
Move the prototype for dump_counts() to before where it is used.
Guido van Rossum <guido@python.org>
parents:
9285
diff
changeset
|
374 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
375 /* 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
|
376 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
377 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
|
378 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
|
379 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
|
380 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
|
381 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
382 (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
|
383 threads.) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
384 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
385 Locking: as above. |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
386 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
387 */ |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
388 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
389 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
390 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
|
391 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
392 PyInterpreterState *interp; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
393 PyThreadState *tstate; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
394 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
395 if (!initialized) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
396 return; |
|
16073
713ed6c6bcb5
Bug #128475: mimetools.encode (sometimes) fails when called from a thread.
Tim Peters <tim.peters@gmail.com>
parents:
15963
diff
changeset
|
397 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
398 wait_for_thread_shutdown(); |
|
56781
2abc3b4bce7c
Merged revisions 75570,75574,75624 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52818
diff
changeset
|
399 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
400 /* The interpreter is still entirely intact at this point, and the |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
401 * exit funcs may be relying on that. In particular, if some thread |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
402 * or exit func is still waiting to do an import, the import machinery |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
403 * expects Py_IsInitialized() to return true. So don't say the |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
404 * interpreter is uninitialized until after the exit funcs have run. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
405 * Note that Threading.py uses an exit func to do a join on all the |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
406 * threads created thru it, so this also protects pending imports in |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
407 * the threads created via Threading. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
408 */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
409 call_sys_exitfunc(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
410 initialized = 0; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
411 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
412 /* Get current thread state and interpreter pointer */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
413 tstate = PyThreadState_GET(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
414 interp = tstate->interp; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
415 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
416 /* Disable signal handling */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
417 PyOS_FiniInterrupts(); |
|
6547
724382af5339
Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents:
6376
diff
changeset
|
418 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
419 /* Clear type lookup cache */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
420 PyType_ClearCache(); |
|
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
|
421 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
422 /* Collect garbage. This may call finalizers; it's nice to call these |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
423 * before all modules are destroyed. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
424 * XXX If a __del__ or weakref callback is triggered here, and tries to |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
425 * XXX import a module, bad things can happen, because Python no |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
426 * XXX longer believes it's initialized. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
427 * XXX Fatal Python error: Interpreter not initialized (version mismatch?) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
428 * XXX is easy to provoke that way. I've also seen, e.g., |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
429 * XXX Exception exceptions.ImportError: 'No module named sha' |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
430 * XXX in <function callback at 0x008F5718> ignored |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
431 * XXX but I'm unclear on exactly how that one happens. In any case, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
432 * XXX I haven't seen a real-life report of either of these. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
433 */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
434 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
|
435 #ifdef COUNT_ALLOCS |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
436 /* With COUNT_ALLOCS, it helps to run GC multiple times: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
437 each collection might release some types from the type |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
438 list, so they become garbage. */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
439 while (PyGC_Collect() > 0) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
440 /* nothing */; |
|
37831
d82dced6f1fa
Remove types from type_list if they have no objects
Martin v. Löwis <martin@v.loewis.de>
parents:
37655
diff
changeset
|
441 #endif |
|
28651
7fda09f751ad
- New C API PyGC_Collect(), same as calling gc.collect().
Guido van Rossum <guido@python.org>
parents:
28649
diff
changeset
|
442 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
443 /* Destroy all modules */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
444 PyImport_Cleanup(); |
|
6547
724382af5339
Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents:
6376
diff
changeset
|
445 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
446 /* Collect final garbage. This disposes of cycles created by |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
447 * new-style class definitions, for example. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
448 * XXX This is disabled because it caused too many problems. If |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
449 * XXX a __del__ or weakref callback triggers here, Python code has |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
450 * XXX a hard time running, because even the sys module has been |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
451 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc). |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
452 * XXX One symptom is a sequence of information-free messages |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
453 * XXX coming from threads (if a __del__ or callback is invoked, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
454 * XXX other threads can execute too, and any exception they encounter |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
455 * XXX triggers a comedy of errors as subsystem after subsystem |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
456 * XXX fails to find what it *expects* to find in sys to help report |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
457 * XXX the exception and consequent unexpected failures). I've also |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
458 * XXX seen segfaults then, after adding print statements to the |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
459 * XXX Python code getting called. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
460 */ |
|
31057
f69589179c55
Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents:
30979
diff
changeset
|
461 #if 0 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
462 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
|
463 #endif |
|
28651
7fda09f751ad
- New C API PyGC_Collect(), same as calling gc.collect().
Guido van Rossum <guido@python.org>
parents:
28649
diff
changeset
|
464 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
465 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
466 _PyImport_Fini(); |
|
6786
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
467 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
468 /* Debugging stuff */ |
|
6786
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
469 #ifdef COUNT_ALLOCS |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
470 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
|
471 #endif |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
472 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
473 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
|
474 |
|
28647
9d4e138494fb
Py_Finalize(): Reverted recent changes that tried to move the
Tim Peters <tim.peters@gmail.com>
parents:
28616
diff
changeset
|
475 #ifdef Py_TRACE_REFS |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
476 /* Display all objects still alive -- this can invoke arbitrary |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
477 * __repr__ overrides, so requires a mostly-intact interpreter. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
478 * Alas, a lot of stuff may still be alive now that will be cleaned |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
479 * up later. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
480 */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
481 if (Py_GETENV("PYTHONDUMPREFS")) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
482 _Py_PrintReferences(stderr); |
|
28647
9d4e138494fb
Py_Finalize(): Reverted recent changes that tried to move the
Tim Peters <tim.peters@gmail.com>
parents:
28616
diff
changeset
|
483 #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
|
484 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
485 /* Clear interpreter state */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
486 PyInterpreterState_Clear(interp); |
|
28613
b1671550c7e1
Move the call to _Py_PrintReferences() a bit further down. This
Guido van Rossum <guido@python.org>
parents:
28574
diff
changeset
|
487 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
488 /* Now we decref the exception classes. After this point nothing |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
489 can raise an exception. That's okay, because each Fini() method |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
490 below has been checked to make sure no exceptions are ever |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
491 raised. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
492 */ |
|
34834
7cfda9898863
Move exception finalisation later in the shutdown process - this
Anthony Baxter <anthonybaxter@gmail.com>
parents:
34664
diff
changeset
|
493 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
494 _PyExc_Fini(); |
|
34834
7cfda9898863
Move exception finalisation later in the shutdown process - this
Anthony Baxter <anthonybaxter@gmail.com>
parents:
34664
diff
changeset
|
495 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
496 /* Cleanup auto-thread-state */ |
|
44063
4417ab5b351e
Issue #1402: PyInterpreterState_Clear() may still invoke user code
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
41526
diff
changeset
|
497 #ifdef WITH_THREAD |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
498 _PyGILState_Fini(); |
|
44063
4417ab5b351e
Issue #1402: PyInterpreterState_Clear() may still invoke user code
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
41526
diff
changeset
|
499 #endif /* WITH_THREAD */ |
|
4417ab5b351e
Issue #1402: PyInterpreterState_Clear() may still invoke user code
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
41526
diff
changeset
|
500 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
501 /* Delete current thread */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
502 PyThreadState_Swap(NULL); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
503 PyInterpreterState_Delete(interp); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
504 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
505 /* Sundry finalizers */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
506 PyMethod_Fini(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
507 PyFrame_Fini(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
508 PyCFunction_Fini(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
509 PyTuple_Fini(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
510 PyList_Fini(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
511 PySet_Fini(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
512 PyString_Fini(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
513 PyByteArray_Fini(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
514 PyInt_Fini(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
515 PyFloat_Fini(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
516 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
|
517 |
|
22883
d8bc68cb17e0
Move Unicode finalization further down in the chain.
Marc-André Lemburg <mal@egenix.com>
parents:
22721
diff
changeset
|
518 #ifdef Py_USING_UNICODE |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
519 /* Cleanup Unicode implementation */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
520 _PyUnicode_Fini(); |
|
22883
d8bc68cb17e0
Move Unicode finalization further down in the chain.
Marc-André Lemburg <mal@egenix.com>
parents:
22721
diff
changeset
|
521 #endif |
|
d8bc68cb17e0
Move Unicode finalization further down in the chain.
Marc-André Lemburg <mal@egenix.com>
parents:
22721
diff
changeset
|
522 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
523 /* XXX Still allocated: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
524 - various static ad-hoc pointers to interned strings |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
525 - int and float free list blocks |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
526 - whatever various modules and libraries allocate |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
527 */ |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
528 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
529 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
|
530 |
|
28653
56006d97bcef
_Py_PrintReferences(): Changed to print object address at start of each
Tim Peters <tim.peters@gmail.com>
parents:
28651
diff
changeset
|
531 #ifdef Py_TRACE_REFS |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
532 /* Display addresses (& refcnts) of all objects still alive. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
533 * An address can be used to find the repr of the object, printed |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
534 * above by _Py_PrintReferences. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
535 */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
536 if (Py_GETENV("PYTHONDUMPREFS")) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
537 _Py_PrintReferenceAddresses(stderr); |
|
28653
56006d97bcef
_Py_PrintReferences(): Changed to print object address at start of each
Tim Peters <tim.peters@gmail.com>
parents:
28651
diff
changeset
|
538 #endif /* Py_TRACE_REFS */ |
|
23020
e2848618bd19
_PyObject_DebugDumpStats: renamed to _PyObject_DebugMallocStats.
Tim Peters <tim.peters@gmail.com>
parents:
22883
diff
changeset
|
539 #ifdef PYMALLOC_DEBUG |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
540 if (Py_GETENV("PYTHONMALLOCSTATS")) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
541 _PyObject_DebugMallocStats(); |
|
23020
e2848618bd19
_PyObject_DebugDumpStats: renamed to _PyObject_DebugMallocStats.
Tim Peters <tim.peters@gmail.com>
parents:
22883
diff
changeset
|
542 #endif |
|
e2848618bd19
_PyObject_DebugDumpStats: renamed to _PyObject_DebugMallocStats.
Tim Peters <tim.peters@gmail.com>
parents:
22883
diff
changeset
|
543 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
544 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
|
545 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
546 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
547 /* 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
|
548 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
|
549 first. |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
550 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
551 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
|
552 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
|
553 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
|
554 thread. |
|
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 Locking: as above. |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
557 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
558 */ |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
559 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
560 PyThreadState * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
561 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
|
562 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
563 PyInterpreterState *interp; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
564 PyThreadState *tstate, *save_tstate; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
565 PyObject *bimod, *sysmod; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
566 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
567 if (!initialized) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
568 Py_FatalError("Py_NewInterpreter: call Py_Initialize first"); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
569 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
570 interp = PyInterpreterState_New(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
571 if (interp == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
572 return NULL; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
573 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
574 tstate = PyThreadState_New(interp); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
575 if (tstate == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
576 PyInterpreterState_Delete(interp); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
577 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
578 } |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
579 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
580 save_tstate = PyThreadState_Swap(tstate); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
581 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
582 /* XXX The following is lax in error checking */ |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
583 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
584 interp->modules = PyDict_New(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
585 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
|
586 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
587 bimod = _PyImport_FindExtension("__builtin__", "__builtin__"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
588 if (bimod != NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
589 interp->builtins = PyModule_GetDict(bimod); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
590 if (interp->builtins == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
591 goto handle_error; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
592 Py_INCREF(interp->builtins); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
593 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
594 sysmod = _PyImport_FindExtension("sys", "sys"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
595 if (bimod != NULL && sysmod != NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
596 interp->sysdict = PyModule_GetDict(sysmod); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
597 if (interp->sysdict == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
598 goto handle_error; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
599 Py_INCREF(interp->sysdict); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
600 PySys_SetPath(Py_GetPath()); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
601 PyDict_SetItemString(interp->sysdict, "modules", |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
602 interp->modules); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
603 _PyImportHooks_Init(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
604 initmain(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
605 if (!Py_NoSiteFlag) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
606 initsite(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
607 } |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
608 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
609 if (!PyErr_Occurred()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
610 return tstate; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
611 |
|
39614
9dee81dcb9b4
Handle a few more error conditions.
Neal Norwitz <nnorwitz@gmail.com>
parents:
39458
diff
changeset
|
612 handle_error: |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
613 /* Oops, it didn't work. Undo it all. */ |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
614 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
615 PyErr_Print(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
616 PyThreadState_Clear(tstate); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
617 PyThreadState_Swap(save_tstate); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
618 PyThreadState_Delete(tstate); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
619 PyInterpreterState_Delete(interp); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
620 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
621 return NULL; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
622 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
623 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
624 /* 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
|
625 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
|
626 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
|
627 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
|
628 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
629 (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
|
630 everything, regardless.) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
631 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
632 Locking: as above. |
|
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 */ |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
635 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
636 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
637 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
|
638 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
639 PyInterpreterState *interp = tstate->interp; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
640 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
641 if (tstate != PyThreadState_GET()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
642 Py_FatalError("Py_EndInterpreter: thread is not current"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
643 if (tstate->frame != NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
644 Py_FatalError("Py_EndInterpreter: thread still has a frame"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
645 if (tstate != interp->tstate_head || tstate->next != NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
646 Py_FatalError("Py_EndInterpreter: not the last thread"); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
647 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
648 PyImport_Cleanup(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
649 PyInterpreterState_Clear(interp); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
650 PyThreadState_Swap(NULL); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
651 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
|
652 } |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
653 |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
654 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
|
655 |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
656 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
657 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
|
658 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
659 if (pn && *pn) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
660 progname = 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
|
661 } |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
662 |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
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_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
|
665 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
666 return progname; |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
667 } |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
668 |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
669 static char *default_home = NULL; |
|
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 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
672 Py_SetPythonHome(char *home) |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
673 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
674 default_home = home; |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
675 } |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
676 |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
677 char * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
678 Py_GetPythonHome(void) |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
679 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
680 char *home = default_home; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
681 if (home == NULL && !Py_IgnoreEnvironmentFlag) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
682 home = Py_GETENV("PYTHONHOME"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
683 return home; |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
684 } |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
685 |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
686 /* Create __main__ module */ |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
687 |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
688 static void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
689 initmain(void) |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
690 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
691 PyObject *m, *d; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
692 m = PyImport_AddModule("__main__"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
693 if (m == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
694 Py_FatalError("can't create __main__ module"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
695 d = PyModule_GetDict(m); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
696 if (PyDict_GetItemString(d, "__builtins__") == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
697 PyObject *bimod = PyImport_ImportModule("__builtin__"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
698 if (bimod == NULL || |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
699 PyDict_SetItemString(d, "__builtins__", bimod) != 0) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
700 Py_FatalError("can't add __builtins__ to __main__"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
701 Py_DECREF(bimod); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
702 } |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
703 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
704 |
|
6201
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
705 /* Import the site module (not into __main__ though) */ |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
706 |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
707 static void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
708 initsite(void) |
|
6201
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
709 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
710 PyObject *m, *f; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
711 m = PyImport_ImportModule("site"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
712 if (m == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
713 f = PySys_GetObject("stderr"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
714 if (Py_VerboseFlag) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
715 PyFile_WriteString( |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
716 "'import site' failed; traceback:\n", f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
717 PyErr_Print(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
718 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
719 else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
720 PyFile_WriteString( |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
721 "'import site' failed; use -v for traceback\n", f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
722 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
723 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
724 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
725 else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
726 Py_DECREF(m); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
727 } |
|
6201
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
728 } |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
729 |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
730 /* Parse input from a file and execute it */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
731 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
732 int |
|
38455
1a23706139ca
PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents:
38431
diff
changeset
|
733 PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
734 PyCompilerFlags *flags) |
|
17125
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
735 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
736 if (filename == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
737 filename = "???"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
738 if (Py_FdIsInteractive(fp, filename)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
739 int err = PyRun_InteractiveLoopFlags(fp, filename, flags); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
740 if (closeit) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
741 fclose(fp); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
742 return err; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
743 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
744 else |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
745 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
746 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
747 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
748 int |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
749 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
|
750 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
751 PyObject *v; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
752 int ret; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
753 PyCompilerFlags local_flags; |
|
16916
b0456d3a0f1f
Useful future statement support for the interactive interpreter
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16845
diff
changeset
|
754 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
755 if (flags == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
756 flags = &local_flags; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
757 local_flags.cf_flags = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
758 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
759 v = PySys_GetObject("ps1"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
760 if (v == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
761 PySys_SetObject("ps1", v = PyString_FromString(">>> ")); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
762 Py_XDECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
763 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
764 v = PySys_GetObject("ps2"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
765 if (v == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
766 PySys_SetObject("ps2", v = PyString_FromString("... ")); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
767 Py_XDECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
768 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
769 for (;;) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
770 ret = PyRun_InteractiveOneFlags(fp, filename, flags); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
771 PRINT_TOTAL_REFS(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
772 if (ret == E_EOF) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
773 return 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
774 /* |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
775 if (ret == E_NOMEM) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
776 return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
777 */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
778 } |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
779 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
780 |
|
45891
727f743cf630
Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents:
45389
diff
changeset
|
781 #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
|
782 /* 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
|
783 #define PARSER_FLAGS(flags) \ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
784 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
785 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
|
786 #endif |
|
727f743cf630
Backport of the print function, using a __future__ import.
Eric Smith <eric@trueblade.com>
parents:
45389
diff
changeset
|
787 #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
|
788 /* 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
|
789 #define PARSER_FLAGS(flags) \ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
790 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
791 PyPARSE_DONT_IMPLY_DEDENT : 0) \ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
792 | (((flags)->cf_flags & CO_FUTURE_PRINT_FUNCTION) ? \ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
793 PyPARSE_PRINT_IS_FUNCTION : 0) \ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
794 | (((flags)->cf_flags & CO_FUTURE_UNICODE_LITERALS) ? \ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
795 PyPARSE_UNICODE_LITERALS : 0) \ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
796 ) : 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
|
797 #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
|
798 |
|
16916
b0456d3a0f1f
Useful future statement support for the interactive interpreter
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16845
diff
changeset
|
799 int |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
800 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
|
801 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
802 PyObject *m, *d, *v, *w; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
803 mod_ty mod; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
804 PyArena *arena; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
805 char *ps1 = "", *ps2 = ""; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
806 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
|
807 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
808 v = PySys_GetObject("ps1"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
809 if (v != NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
810 v = PyObject_Str(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
811 if (v == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
812 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
813 else if (PyString_Check(v)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
814 ps1 = PyString_AsString(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
815 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
816 w = PySys_GetObject("ps2"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
817 if (w != NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
818 w = PyObject_Str(w); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
819 if (w == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
820 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
821 else if (PyString_Check(w)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
822 ps2 = PyString_AsString(w); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
823 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
824 arena = PyArena_New(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
825 if (arena == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
826 Py_XDECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
827 Py_XDECREF(w); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
828 return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
829 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
830 mod = PyParser_ASTFromFile(fp, filename, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
831 Py_single_input, ps1, ps2, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
832 flags, &errcode, arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
833 Py_XDECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
834 Py_XDECREF(w); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
835 if (mod == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
836 PyArena_Free(arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
837 if (errcode == E_EOF) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
838 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
839 return E_EOF; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
840 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
841 PyErr_Print(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
842 return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
843 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
844 m = PyImport_AddModule("__main__"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
845 if (m == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
846 PyArena_Free(arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
847 return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
848 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
849 d = PyModule_GetDict(m); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
850 v = run_mod(mod, filename, d, d, flags, arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
851 PyArena_Free(arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
852 if (v == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
853 PyErr_Print(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
854 return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
855 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
856 Py_DECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
857 if (Py_FlushLine()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
858 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
859 return 0; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
860 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
861 |
|
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
|
862 /* 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
|
863 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
|
864 |
|
76caf0855d1f
Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents:
14637
diff
changeset
|
865 static int |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
866 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
|
867 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
868 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
869 return 1; |
|
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
|
870 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
871 /* Only look into the file if we are allowed to close it, since |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
872 it then should also be seekable. */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
873 if (closeit) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
874 /* Read only two bytes of the magic. If the file was opened in |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
875 text mode, the bytes 3 and 4 of the magic (\r\n) might not |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
876 be read as they are on disk. */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
877 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
878 unsigned char buf[2]; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
879 /* Mess: In case of -x, the stream is NOT at its start now, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
880 and ungetc() was used to push back the first newline, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
881 which makes the current stream position formally undefined, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
882 and a x-platform nightmare. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
883 Unfortunately, we have no direct way to know whether -x |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
884 was specified. So we use a terrible hack: if the current |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
885 stream position is not 0, we assume -x was specified, and |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
886 give up. Bug 132850 on SourceForge spells out the |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
887 hopelessness of trying anything else (fseek and ftell |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
888 don't work predictably x-platform for text-mode files). |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
889 */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
890 int ispyc = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
891 if (ftell(fp) == 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
892 if (fread(buf, 1, 2, fp) == 2 && |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
893 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
894 ispyc = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
895 rewind(fp); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
896 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
897 return ispyc; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
898 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
899 return 0; |
|
28648
0e8416be208e
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
28647
diff
changeset
|
900 } |
|
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
|
901 |
|
14228
20377f15b96a
Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(),
Guido van Rossum <guido@python.org>
parents:
14227
diff
changeset
|
902 int |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
903 PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
904 PyCompilerFlags *flags) |
|
17125
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
905 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
906 PyObject *m, *d, *v; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
907 const char *ext; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
908 int set_file_name = 0, ret, len; |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
909 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
910 m = PyImport_AddModule("__main__"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
911 if (m == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
912 return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
913 d = PyModule_GetDict(m); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
914 if (PyDict_GetItemString(d, "__file__") == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
915 PyObject *f = PyString_FromString(filename); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
916 if (f == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
917 return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
918 if (PyDict_SetItemString(d, "__file__", f) < 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
919 Py_DECREF(f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
920 return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
921 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
922 set_file_name = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
923 Py_DECREF(f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
924 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
925 len = strlen(filename); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
926 ext = filename + len - (len > 4 ? 4 : 0); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
927 if (maybe_pyc_file(fp, filename, ext, closeit)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
928 /* Try to run a pyc file. First, re-open in binary */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
929 if (closeit) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
930 fclose(fp); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
931 if ((fp = fopen(filename, "rb")) == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
932 fprintf(stderr, "python: Can't reopen .pyc file\n"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
933 ret = -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
934 goto done; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
935 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
936 /* Turn on optimization if a .pyo file is given */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
937 if (strcmp(ext, ".pyo") == 0) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
938 Py_OptimizeFlag = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
939 v = run_pyc_file(fp, filename, d, d, flags); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
940 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
941 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
942 closeit, flags); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
943 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
944 if (v == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
945 PyErr_Print(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
946 ret = -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
947 goto done; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
948 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
949 Py_DECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
950 if (Py_FlushLine()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
951 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
952 ret = 0; |
|
41044
c8ed4aea6c58
Patch #703779: unset __file__ in __main__ after running a file. This
Georg Brandl <georg@python.org>
parents:
41043
diff
changeset
|
953 done: |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
954 if (set_file_name && PyDict_DelItemString(d, "__file__")) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
955 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
956 return ret; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
957 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
958 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
959 int |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
960 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
|
961 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
962 PyObject *m, *d, *v; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
963 m = PyImport_AddModule("__main__"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
964 if (m == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
965 return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
966 d = PyModule_GetDict(m); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
967 v = PyRun_StringFlags(command, Py_file_input, d, d, flags); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
968 if (v == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
969 PyErr_Print(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
970 return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
971 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
972 Py_DECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
973 if (Py_FlushLine()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
974 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
975 return 0; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
976 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
977 |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
978 static int |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
979 parse_syntax_error(PyObject *err, PyObject **message, const char **filename, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
980 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
|
981 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
982 long hold; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
983 PyObject *v; |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
984 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
985 /* old style errors */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
986 if (PyTuple_Check(err)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
987 return PyArg_ParseTuple(err, "O(ziiz)", message, filename, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
988 lineno, offset, text); |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
989 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
990 /* new style errors. `err' is an instance */ |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
991 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
992 if (! (v = PyObject_GetAttrString(err, "msg"))) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
993 goto finally; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
994 *message = v; |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
995 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
996 if (!(v = PyObject_GetAttrString(err, "filename"))) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
997 goto finally; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
998 if (v == Py_None) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
999 *filename = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1000 else if (! (*filename = PyString_AsString(v))) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1001 goto finally; |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1002 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1003 Py_DECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1004 if (!(v = PyObject_GetAttrString(err, "lineno"))) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1005 goto finally; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1006 hold = PyInt_AsLong(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1007 Py_DECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1008 v = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1009 if (hold < 0 && PyErr_Occurred()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1010 goto finally; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1011 *lineno = (int)hold; |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1012 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1013 if (!(v = PyObject_GetAttrString(err, "offset"))) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1014 goto finally; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1015 if (v == Py_None) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1016 *offset = -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1017 Py_DECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1018 v = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1019 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1020 hold = PyInt_AsLong(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1021 Py_DECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1022 v = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1023 if (hold < 0 && PyErr_Occurred()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1024 goto finally; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1025 *offset = (int)hold; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1026 } |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1027 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1028 if (!(v = PyObject_GetAttrString(err, "text"))) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1029 goto finally; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1030 if (v == Py_None) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1031 *text = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1032 else if (! (*text = PyString_AsString(v))) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1033 goto finally; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1034 Py_DECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1035 return 1; |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1036 |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1037 finally: |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1038 Py_XDECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1039 return 0; |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1040 } |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1041 |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1042 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
1043 PyErr_Print(void) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1044 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1045 PyErr_PrintEx(1); |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
1046 } |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
1047 |
|
16831
27f04d714ecb
Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16648
diff
changeset
|
1048 static void |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
1049 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
|
1050 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1051 char *nl; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1052 if (offset >= 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1053 if (offset > 0 && offset == (int)strlen(text)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1054 offset--; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1055 for (;;) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1056 nl = strchr(text, '\n'); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1057 if (nl == NULL || nl-text >= offset) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1058 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1059 offset -= (int)(nl+1-text); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1060 text = nl+1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1061 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1062 while (*text == ' ' || *text == '\t') { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1063 text++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1064 offset--; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1065 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1066 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1067 PyFile_WriteString(" ", f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1068 PyFile_WriteString(text, f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1069 if (*text == '\0' || text[strlen(text)-1] != '\n') |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1070 PyFile_WriteString("\n", f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1071 if (offset == -1) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1072 return; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1073 PyFile_WriteString(" ", f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1074 offset--; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1075 while (offset > 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1076 PyFile_WriteString(" ", f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1077 offset--; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1078 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1079 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
|
1080 } |
|
27f04d714ecb
Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16648
diff
changeset
|
1081 |
|
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
|
1082 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
|
1083 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
|
1084 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1085 PyObject *exception, *value, *tb; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1086 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
|
1087 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1088 if (Py_InspectFlag) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1089 /* Don't exit if -i flag was given. This flag is set to 0 |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1090 * when entering interactive mode for inspecting. */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1091 return; |
|
41043
728c60e85efa
Variant of patch #697613: don't exit the interpreter on a SystemExit
Georg Brandl <georg@python.org>
parents:
41018
diff
changeset
|
1092 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1093 PyErr_Fetch(&exception, &value, &tb); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1094 if (Py_FlushLine()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1095 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1096 fflush(stdout); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1097 if (value == NULL || value == Py_None) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1098 goto done; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1099 if (PyExceptionInstance_Check(value)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1100 /* The error code should be in the `code' attribute. */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1101 PyObject *code = PyObject_GetAttrString(value, "code"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1102 if (code) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1103 Py_DECREF(value); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1104 value = code; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1105 if (value == Py_None) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1106 goto done; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1107 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1108 /* If we failed to dig out the 'code' attribute, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1109 just let the else clause below print the error. */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1110 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1111 if (PyInt_Check(value)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1112 exitcode = (int)PyInt_AsLong(value); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1113 else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1114 PyObject_Print(value, stderr, Py_PRINT_RAW); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1115 PySys_WriteStderr("\n"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1116 exitcode = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1117 } |
|
28698
aef01a076ef9
handle_system_exit(): This leaked the current exception info, in
Tim Peters <tim.peters@gmail.com>
parents:
28694
diff
changeset
|
1118 done: |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1119 /* Restore and clear the exception info, in order to properly decref |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1120 * the exception, value, and traceback. If we just exit instead, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1121 * these leak, which confuses PYTHONDUMPREFS output, and may prevent |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1122 * some finalizers from running. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1123 */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1124 PyErr_Restore(exception, value, tb); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1125 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1126 Py_Exit(exitcode); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1127 /* 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
|
1128 } |
|
eb06a02e0507
Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents:
17168
diff
changeset
|
1129 |
|
eb06a02e0507
Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents:
17168
diff
changeset
|
1130 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
1131 PyErr_PrintEx(int set_sys_last_vars) |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
1132 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1133 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
|
1134 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1135 if (PyErr_ExceptionMatches(PyExc_SystemExit)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1136 handle_system_exit(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1137 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1138 PyErr_Fetch(&exception, &v, &tb); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1139 if (exception == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1140 return; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1141 PyErr_NormalizeException(&exception, &v, &tb); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1142 if (exception == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1143 return; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1144 /* Now we know v != NULL too */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1145 if (set_sys_last_vars) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1146 PySys_SetObject("last_type", exception); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1147 PySys_SetObject("last_value", v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1148 PySys_SetObject("last_traceback", tb); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1149 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1150 hook = PySys_GetObject("excepthook"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1151 if (hook) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1152 PyObject *args = PyTuple_Pack(3, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1153 exception, v, tb ? tb : Py_None); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1154 PyObject *result = PyEval_CallObject(hook, args); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1155 if (result == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1156 PyObject *exception2, *v2, *tb2; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1157 if (PyErr_ExceptionMatches(PyExc_SystemExit)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1158 handle_system_exit(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1159 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1160 PyErr_Fetch(&exception2, &v2, &tb2); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1161 PyErr_NormalizeException(&exception2, &v2, &tb2); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1162 /* It should not be possible for exception2 or v2 |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1163 to be NULL. However PyErr_Display() can't |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1164 tolerate NULLs, so just be safe. */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1165 if (exception2 == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1166 exception2 = Py_None; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1167 Py_INCREF(exception2); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1168 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1169 if (v2 == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1170 v2 = Py_None; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1171 Py_INCREF(v2); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1172 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1173 if (Py_FlushLine()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1174 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1175 fflush(stdout); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1176 PySys_WriteStderr("Error in sys.excepthook:\n"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1177 PyErr_Display(exception2, v2, tb2); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1178 PySys_WriteStderr("\nOriginal exception was:\n"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1179 PyErr_Display(exception, v, tb); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1180 Py_DECREF(exception2); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1181 Py_DECREF(v2); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1182 Py_XDECREF(tb2); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1183 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1184 Py_XDECREF(result); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1185 Py_XDECREF(args); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1186 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1187 PySys_WriteStderr("sys.excepthook is missing\n"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1188 PyErr_Display(exception, v, tb); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1189 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1190 Py_XDECREF(exception); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1191 Py_XDECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1192 Py_XDECREF(tb); |
| 17164 | 1193 } |
| 1194 | |
|
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
|
1195 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
|
1196 PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb) |
| 17164 | 1197 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1198 int err = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1199 PyObject *f = PySys_GetObject("stderr"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1200 Py_INCREF(value); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1201 if (f == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1202 fprintf(stderr, "lost sys.stderr\n"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1203 else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1204 if (Py_FlushLine()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1205 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1206 fflush(stdout); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1207 if (tb && tb != Py_None) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1208 err = PyTraceBack_Print(tb, f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1209 if (err == 0 && |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1210 PyObject_HasAttrString(value, "print_file_and_line")) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1211 { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1212 PyObject *message; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1213 const char *filename, *text; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1214 int lineno, offset; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1215 if (!parse_syntax_error(value, &message, &filename, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1216 &lineno, &offset, &text)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1217 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1218 else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1219 char buf[10]; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1220 PyFile_WriteString(" File \"", f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1221 if (filename == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1222 PyFile_WriteString("<string>", f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1223 else |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1224 PyFile_WriteString(filename, f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1225 PyFile_WriteString("\", line ", f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1226 PyOS_snprintf(buf, sizeof(buf), "%d", lineno); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1227 PyFile_WriteString(buf, f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1228 PyFile_WriteString("\n", f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1229 if (text != NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1230 print_error_text(f, offset, text); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1231 Py_DECREF(value); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1232 value = message; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1233 /* Can't be bothered to check all those |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1234 PyFile_WriteString() calls */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1235 if (PyErr_Occurred()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1236 err = -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1237 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1238 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1239 if (err) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1240 /* Don't do anything else */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1241 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1242 else if (PyExceptionClass_Check(exception)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1243 PyObject* moduleName; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1244 char* className = PyExceptionClass_Name(exception); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1245 if (className != NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1246 char *dot = strrchr(className, '.'); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1247 if (dot != NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1248 className = dot+1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1249 } |
|
38455
1a23706139ca
PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents:
38431
diff
changeset
|
1250 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1251 moduleName = PyObject_GetAttrString(exception, "__module__"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1252 if (moduleName == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1253 err = PyFile_WriteString("<unknown>", f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1254 else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1255 char* modstr = PyString_AsString(moduleName); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1256 if (modstr && strcmp(modstr, "exceptions")) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1257 { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1258 err = PyFile_WriteString(modstr, f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1259 err += PyFile_WriteString(".", f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1260 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1261 Py_DECREF(moduleName); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1262 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1263 if (err == 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1264 if (className == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1265 err = PyFile_WriteString("<unknown>", f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1266 else |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1267 err = PyFile_WriteString(className, f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1268 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1269 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1270 else |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1271 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1272 if (err == 0 && (value != Py_None)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1273 PyObject *s = PyObject_Str(value); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1274 /* only print colon if the str() of the |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1275 object is not the empty string |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1276 */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1277 if (s == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1278 err = -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1279 else if (!PyString_Check(s) || |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1280 PyString_GET_SIZE(s) != 0) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1281 err = PyFile_WriteString(": ", f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1282 if (err == 0) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1283 err = PyFile_WriteObject(s, f, Py_PRINT_RAW); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1284 Py_XDECREF(s); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1285 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1286 /* try to write a newline in any case */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1287 err += PyFile_WriteString("\n", f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1288 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1289 Py_DECREF(value); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1290 /* If an error happened here, don't show it. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1291 XXX This is wrong, but too many callers rely on this behavior. */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1292 if (err != 0) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1293 PyErr_Clear(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1294 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1295 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1296 PyObject * |
|
38455
1a23706139ca
PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents:
38431
diff
changeset
|
1297 PyRun_StringFlags(const char *str, int start, PyObject *globals, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1298 PyObject *locals, PyCompilerFlags *flags) |
|
14228
20377f15b96a
Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(),
Guido van Rossum <guido@python.org>
parents:
14227
diff
changeset
|
1299 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1300 PyObject *ret = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1301 mod_ty mod; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1302 PyArena *arena = PyArena_New(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1303 if (arena == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1304 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1305 |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1306 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1307 if (mod != NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1308 ret = run_mod(mod, "<string>", globals, locals, flags, arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1309 PyArena_Free(arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1310 return ret; |
|
17125
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
1311 } |
|
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
1312 |
|
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
1313 PyObject * |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
1314 PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1315 PyObject *locals, int closeit, PyCompilerFlags *flags) |
|
17125
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
1316 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1317 PyObject *ret; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1318 mod_ty mod; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1319 PyArena *arena = PyArena_New(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1320 if (arena == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1321 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1322 |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1323 mod = PyParser_ASTFromFile(fp, filename, start, 0, 0, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1324 flags, NULL, arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1325 if (closeit) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1326 fclose(fp); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1327 if (mod == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1328 PyArena_Free(arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1329 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1330 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1331 ret = run_mod(mod, filename, globals, locals, flags, arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1332 PyArena_Free(arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1333 return ret; |
|
17125
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
1334 } |
|
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
1335 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1336 static PyObject * |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1337 run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1338 PyCompilerFlags *flags, PyArena *arena) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1339 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1340 PyCodeObject *co; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1341 PyObject *v; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1342 co = PyAST_Compile(mod, filename, flags, arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1343 if (co == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1344 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1345 v = PyEval_EvalCode(co, globals, locals); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1346 Py_DECREF(co); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1347 return v; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1348 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
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 static PyObject * |
|
38455
1a23706139ca
PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents:
38431
diff
changeset
|
1351 run_pyc_file(FILE *fp, const char *filename, PyObject *globals, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1352 PyObject *locals, PyCompilerFlags *flags) |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
1353 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1354 PyCodeObject *co; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1355 PyObject *v; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1356 long magic; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1357 long PyImport_GetMagicNumber(void); |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
1358 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1359 magic = PyMarshal_ReadLongFromFile(fp); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1360 if (magic != PyImport_GetMagicNumber()) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1361 PyErr_SetString(PyExc_RuntimeError, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1362 "Bad magic number in .pyc file"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1363 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1364 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1365 (void) PyMarshal_ReadLongFromFile(fp); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1366 v = PyMarshal_ReadLastObjectFromFile(fp); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1367 fclose(fp); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1368 if (v == NULL || !PyCode_Check(v)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1369 Py_XDECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1370 PyErr_SetString(PyExc_RuntimeError, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1371 "Bad code object in .pyc file"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1372 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1373 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1374 co = (PyCodeObject *)v; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1375 v = PyEval_EvalCode(co, globals, locals); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1376 if (v && flags) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1377 flags->cf_flags |= (co->co_flags & PyCF_MASK); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1378 Py_DECREF(co); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1379 return v; |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
1380 } |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
1381 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1382 PyObject * |
|
28648
0e8416be208e
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
28647
diff
changeset
|
1383 Py_CompileStringFlags(const char *str, const char *filename, int start, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1384 PyCompilerFlags *flags) |
|
17125
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
1385 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1386 PyCodeObject *co; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1387 mod_ty mod; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1388 PyArena *arena = PyArena_New(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1389 if (arena == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1390 return NULL; |
|
39135
12e973bdfeee
Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents:
39131
diff
changeset
|
1391 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1392 mod = PyParser_ASTFromString(str, filename, start, flags, arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1393 if (mod == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1394 PyArena_Free(arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1395 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1396 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1397 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1398 PyObject *result = PyAST_mod2obj(mod); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1399 PyArena_Free(arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1400 return result; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1401 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1402 co = PyAST_Compile(mod, filename, flags, arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1403 PyArena_Free(arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1404 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
|
1405 } |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1406 |
|
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 struct symtable * |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
1408 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
|
1409 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1410 struct symtable *st; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1411 mod_ty mod; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1412 PyCompilerFlags flags; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1413 PyArena *arena = PyArena_New(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1414 if (arena == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1415 return NULL; |
|
39135
12e973bdfeee
Fix more memory allocation issues found with failmalloc.
Neal Norwitz <nnorwitz@gmail.com>
parents:
39131
diff
changeset
|
1416 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1417 flags.cf_flags = 0; |
|
46121
d00ded8b2677
Initialize PyCompilerFlags cf_flags with 0
Christian Heimes <christian@cheimes.de>
parents:
46118
diff
changeset
|
1418 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1419 mod = PyParser_ASTFromString(str, filename, start, &flags, arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1420 if (mod == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1421 PyArena_Free(arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1422 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1423 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1424 st = PySymtable_Build(mod, filename, 0); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1425 PyArena_Free(arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1426 return st; |
|
16421
aa844711463a
Move a bunch of definitions that were internal to compile.c to
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16311
diff
changeset
|
1427 } |
|
aa844711463a
Move a bunch of definitions that were internal to compile.c to
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16311
diff
changeset
|
1428 |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1429 /* Preferred access to parser is through AST. */ |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1430 mod_ty |
|
38455
1a23706139ca
PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents:
38431
diff
changeset
|
1431 PyParser_ASTFromString(const char *s, const char *filename, int start, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1432 PyCompilerFlags *flags, PyArena *arena) |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1433 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1434 mod_ty mod; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1435 PyCompilerFlags localflags; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1436 perrdetail err; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1437 int iflags = PARSER_FLAGS(flags); |
|
46118
c78d3586c474
Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents:
46107
diff
changeset
|
1438 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1439 node *n = PyParser_ParseStringFlagsFilenameEx(s, filename, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1440 &_PyParser_Grammar, start, &err, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1441 &iflags); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1442 if (flags == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1443 localflags.cf_flags = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1444 flags = &localflags; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1445 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1446 if (n) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1447 flags->cf_flags |= iflags & PyCF_MASK; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1448 mod = PyAST_FromNode(n, flags, filename, arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1449 PyNode_Free(n); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1450 return mod; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1451 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1452 else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1453 err_input(&err); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1454 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1455 } |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1456 } |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1457 |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1458 mod_ty |
|
38455
1a23706139ca
PyErr_Display(), PyErr_WriteUnraisable(): Coverity found a cut-and-paste
Tim Peters <tim.peters@gmail.com>
parents:
38431
diff
changeset
|
1459 PyParser_ASTFromFile(FILE *fp, const char *filename, int start, char *ps1, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1460 char *ps2, PyCompilerFlags *flags, int *errcode, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1461 PyArena *arena) |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1462 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1463 mod_ty mod; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1464 PyCompilerFlags localflags; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1465 perrdetail err; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1466 int iflags = PARSER_FLAGS(flags); |
|
46118
c78d3586c474
Patch #2477: Added from __future__ import unicode_literals
Christian Heimes <christian@cheimes.de>
parents:
46107
diff
changeset
|
1467 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1468 node *n = PyParser_ParseFileFlagsEx(fp, filename, &_PyParser_Grammar, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1469 start, ps1, ps2, &err, &iflags); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1470 if (flags == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1471 localflags.cf_flags = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1472 flags = &localflags; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1473 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1474 if (n) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1475 flags->cf_flags |= iflags & PyCF_MASK; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1476 mod = PyAST_FromNode(n, flags, filename, arena); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1477 PyNode_Free(n); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1478 return mod; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1479 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1480 else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1481 err_input(&err); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1482 if (errcode) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1483 *errcode = err.error; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1484 return NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1485 } |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1486 } |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1487 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1488 /* 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
|
1489 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1490 node * |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
1491 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
|
1492 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1493 perrdetail err; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1494 node *n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1495 start, NULL, NULL, &err, flags); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1496 if (n == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1497 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
|
1498 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1499 return n; |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1500 } |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1501 |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1502 /* 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
|
1503 |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1504 node * |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
1505 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
|
1506 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1507 perrdetail err; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1508 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1509 start, &err, flags); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1510 if (n == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1511 err_input(&err); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1512 return n; |
|
18615
0a90e5ec61b6
Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents:
18612
diff
changeset
|
1513 } |
|
0a90e5ec61b6
Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents:
18612
diff
changeset
|
1514 |
|
0a90e5ec61b6
Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents:
18612
diff
changeset
|
1515 node * |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
1516 PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1517 int start, int flags) |
|
24159
cb728141ae12
Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents:
24155
diff
changeset
|
1518 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1519 perrdetail err; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1520 node *n = PyParser_ParseStringFlagsFilename(str, filename, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1521 &_PyParser_Grammar, start, &err, flags); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1522 if (n == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1523 err_input(&err); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1524 return n; |
|
24159
cb728141ae12
Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents:
24155
diff
changeset
|
1525 } |
|
cb728141ae12
Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents:
24155
diff
changeset
|
1526 |
|
cb728141ae12
Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents:
24155
diff
changeset
|
1527 node * |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
1528 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
|
1529 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1530 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
|
1531 } |
|
cb728141ae12
Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents:
24155
diff
changeset
|
1532 |
|
28649
04b172843292
A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents:
28648
diff
changeset
|
1533 /* 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
|
1534 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
|
1535 |
|
04b172843292
A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents:
28648
diff
changeset
|
1536 void |
|
04b172843292
A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents:
28648
diff
changeset
|
1537 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
|
1538 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1539 err_input(err); |
|
28649
04b172843292
A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents:
28648
diff
changeset
|
1540 } |
|
04b172843292
A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents:
28648
diff
changeset
|
1541 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1542 /* 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
|
1543 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1544 static void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
1545 err_input(perrdetail *err) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1546 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1547 PyObject *v, *w, *errtype; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1548 PyObject* u = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1549 char *msg = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1550 errtype = PyExc_SyntaxError; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1551 switch (err->error) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1552 case E_ERROR: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1553 return; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1554 case E_SYNTAX: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1555 errtype = PyExc_IndentationError; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1556 if (err->expected == INDENT) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1557 msg = "expected an indented block"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1558 else if (err->token == INDENT) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1559 msg = "unexpected indent"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1560 else if (err->token == DEDENT) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1561 msg = "unexpected unindent"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1562 else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1563 errtype = PyExc_SyntaxError; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1564 msg = "invalid syntax"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1565 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1566 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1567 case E_TOKEN: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1568 msg = "invalid token"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1569 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1570 case E_EOFS: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1571 msg = "EOF while scanning triple-quoted string literal"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1572 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1573 case E_EOLS: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1574 msg = "EOL while scanning string literal"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1575 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1576 case E_INTR: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1577 if (!PyErr_Occurred()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1578 PyErr_SetNone(PyExc_KeyboardInterrupt); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1579 goto cleanup; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1580 case E_NOMEM: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1581 PyErr_NoMemory(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1582 goto cleanup; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1583 case E_EOF: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1584 msg = "unexpected EOF while parsing"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1585 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1586 case E_TABSPACE: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1587 errtype = PyExc_TabError; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1588 msg = "inconsistent use of tabs and spaces in indentation"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1589 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1590 case E_OVERFLOW: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1591 msg = "expression too long"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1592 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1593 case E_DEDENT: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1594 errtype = PyExc_IndentationError; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1595 msg = "unindent does not match any outer indentation level"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1596 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1597 case E_TOODEEP: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1598 errtype = PyExc_IndentationError; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1599 msg = "too many levels of indentation"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1600 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1601 case E_DECODE: { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1602 PyObject *type, *value, *tb; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1603 PyErr_Fetch(&type, &value, &tb); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1604 if (value != NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1605 u = PyObject_Str(value); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1606 if (u != NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1607 msg = PyString_AsString(u); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1608 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1609 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1610 if (msg == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1611 msg = "unknown decode error"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1612 Py_XDECREF(type); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1613 Py_XDECREF(value); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1614 Py_XDECREF(tb); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1615 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1616 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1617 case E_LINECONT: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1618 msg = "unexpected character after line continuation character"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1619 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1620 default: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1621 fprintf(stderr, "error=%d\n", err->error); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1622 msg = "unknown parsing error"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1623 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1624 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1625 v = Py_BuildValue("(ziiz)", err->filename, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1626 err->lineno, err->offset, err->text); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1627 w = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1628 if (v != NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1629 w = Py_BuildValue("(sO)", msg, v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1630 Py_XDECREF(u); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1631 Py_XDECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1632 PyErr_SetObject(errtype, w); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1633 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
|
1634 cleanup: |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1635 if (err->text != NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1636 PyObject_FREE(err->text); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1637 err->text = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1638 } |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1639 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1640 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1641 /* Print fatal error message and abort */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1642 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1643 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
|
1644 Py_FatalError(const char *msg) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1645 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1646 fprintf(stderr, "Fatal Python error: %s\n", msg); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1647 fflush(stderr); /* it helps in Windows debug build */ |
|
52605
e2818b9f964b
Merged revisions 70908 via svnmerge from
Jesse Noller <jnoller@gmail.com>
parents:
50522
diff
changeset
|
1648 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
23252
diff
changeset
|
1649 #ifdef MS_WINDOWS |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1650 { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1651 size_t len = strlen(msg); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1652 WCHAR* buffer; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1653 size_t i; |
|
50522
ee9ced92843a
Merged revisions 68133-68134,68141-68142,68145-68146,68148-68149,68159-68162,68166,68171-68174,68179,68195-68196,68210,68214-68215,68217-68222 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49818
diff
changeset
|
1654 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1655 /* Convert the message to wchar_t. This uses a simple one-to-one |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1656 conversion, assuming that the this error message actually uses ASCII |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1657 only. If this ceases to be true, we will have to convert. */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1658 buffer = alloca( (len+1) * (sizeof *buffer)); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1659 for( i=0; i<=len; ++i) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1660 buffer[i] = msg[i]; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1661 OutputDebugStringW(L"Fatal Python error: "); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1662 OutputDebugStringW(buffer); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1663 OutputDebugStringW(L"\n"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1664 } |
|
8988
070de4d39ddd
Add DebugBreak() call to Py_FatalError() for Mark Hammond (only on
Guido van Rossum <guido@python.org>
parents:
7967
diff
changeset
|
1665 #ifdef _DEBUG |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1666 DebugBreak(); |
|
2529
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
1667 #endif |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
23252
diff
changeset
|
1668 #endif /* MS_WINDOWS */ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1669 abort(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1670 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1671 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1672 /* Clean up and exit */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1673 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1674 #ifdef WITH_THREAD |
|
9203
07dae6fdae79
Renamed thread.h to pythread.h.
Guido van Rossum <guido@python.org>
parents:
9192
diff
changeset
|
1675 #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
|
1676 #endif |
|
a31e07847063
New thread.c from Sjoerd, supports _exit_prog(). Use this in goaway()
Guido van Rossum <guido@python.org>
parents:
941
diff
changeset
|
1677 |
|
56781
2abc3b4bce7c
Merged revisions 75570,75574,75624 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52818
diff
changeset
|
1678 /* Wait until threading._shutdown completes, provided |
|
2abc3b4bce7c
Merged revisions 75570,75574,75624 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52818
diff
changeset
|
1679 the threading module was imported in the first place. |
|
2abc3b4bce7c
Merged revisions 75570,75574,75624 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52818
diff
changeset
|
1680 The shutdown routine will wait until all non-daemon |
|
2abc3b4bce7c
Merged revisions 75570,75574,75624 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52818
diff
changeset
|
1681 "threading" threads have completed. */ |
|
2abc3b4bce7c
Merged revisions 75570,75574,75624 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52818
diff
changeset
|
1682 static void |
|
2abc3b4bce7c
Merged revisions 75570,75574,75624 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52818
diff
changeset
|
1683 wait_for_thread_shutdown(void) |
|
2abc3b4bce7c
Merged revisions 75570,75574,75624 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52818
diff
changeset
|
1684 { |
|
2abc3b4bce7c
Merged revisions 75570,75574,75624 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52818
diff
changeset
|
1685 #ifdef WITH_THREAD |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1686 PyObject *result; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1687 PyThreadState *tstate = PyThreadState_GET(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1688 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1689 "threading"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1690 if (threading == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1691 /* threading not imported */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1692 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1693 return; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1694 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1695 result = PyObject_CallMethod(threading, "_shutdown", ""); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1696 if (result == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1697 PyErr_WriteUnraisable(threading); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1698 else |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1699 Py_DECREF(result); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1700 Py_DECREF(threading); |
|
56781
2abc3b4bce7c
Merged revisions 75570,75574,75624 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52818
diff
changeset
|
1701 #endif |
|
2abc3b4bce7c
Merged revisions 75570,75574,75624 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52818
diff
changeset
|
1702 } |
|
2abc3b4bce7c
Merged revisions 75570,75574,75624 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
52818
diff
changeset
|
1703 |
|
9192
ac6c29d1f10c
On second though, NEXITFUNCS should be defined here and not in
Guido van Rossum <guido@python.org>
parents:
9161
diff
changeset
|
1704 #define NEXITFUNCS 32 |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
1705 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
|
1706 static int nexitfuncs = 0; |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1707 |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
1708 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
|
1709 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1710 if (nexitfuncs >= NEXITFUNCS) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1711 return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1712 exitfuncs[nexitfuncs++] = func; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1713 return 0; |
|
1870
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1714 } |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1715 |
|
5939
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
1716 static void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
1717 call_sys_exitfunc(void) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1718 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1719 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
|
1720 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1721 if (exitfunc) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1722 PyObject *res; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1723 Py_INCREF(exitfunc); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1724 PySys_SetObject("exitfunc", (PyObject *)NULL); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1725 res = PyEval_CallObject(exitfunc, (PyObject *)NULL); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1726 if (res == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1727 if (!PyErr_ExceptionMatches(PyExc_SystemExit)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1728 PySys_WriteStderr("Error in sys.exitfunc:\n"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1729 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1730 PyErr_Print(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1731 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1732 Py_DECREF(exitfunc); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1733 } |
|
1015
f3d5e2c3b9a3
Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents:
961
diff
changeset
|
1734 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1735 if (Py_FlushLine()) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1736 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
|
1737 } |
|
1870
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1738 |
|
5939
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
1739 static void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
1740 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
|
1741 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1742 while (nexitfuncs > 0) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1743 (*exitfuncs[--nexitfuncs])(); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
1744 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1745 fflush(stdout); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1746 fflush(stderr); |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
1747 } |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
1748 |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
1749 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
1750 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
|
1751 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1752 Py_Finalize(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1753 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1754 exit(sts); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1755 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1756 |
|
1319
cd397266dc1c
* Makefile: added all: and default: targets.
Guido van Rossum <guido@python.org>
parents:
1289
diff
changeset
|
1757 static void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
1758 initsigs(void) |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
1759 { |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1760 #ifdef SIGPIPE |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1761 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
|
1762 #endif |
| 19295 | 1763 #ifdef SIGXFZ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1764 PyOS_setsig(SIGXFZ, SIG_IGN); |
| 19295 | 1765 #endif |
| 23252 | 1766 #ifdef SIGXFSZ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1767 PyOS_setsig(SIGXFSZ, SIG_IGN); |
| 23252 | 1768 #endif |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1769 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
|
1770 } |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
1771 |
|
5108
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1772 |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1773 /* |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1774 * 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
|
1775 * 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
|
1776 * 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
|
1777 * 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
|
1778 */ |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1779 int |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
1780 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
|
1781 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1782 if (isatty((int)fileno(fp))) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1783 return 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1784 if (!Py_InteractiveFlag) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1785 return 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1786 return (filename == NULL) || |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1787 (strcmp(filename, "<stdin>") == 0) || |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1788 (strcmp(filename, "???") == 0); |
|
5108
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1789 } |
|
14227
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
1790 |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
1791 |
|
28648
0e8416be208e
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
28647
diff
changeset
|
1792 #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
|
1793 #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
|
1794 |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
1795 /* 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
|
1796 |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
1797 #include <malloc.h> |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
1798 #include <excpt.h> |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
1799 |
|
14278
fb8fb53a2eff
Add a comment explaining the return value of PyOS_CheckStack().
Fred Drake <fdrake@acm.org>
parents:
14231
diff
changeset
|
1800 /* |
|
fb8fb53a2eff
Add a comment explaining the return value of PyOS_CheckStack().
Fred Drake <fdrake@acm.org>
parents:
14231
diff
changeset
|
1801 * 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
|
1802 */ |
|
14227
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
1803 int |
|
14280
68b61aa1aa4a
PyOS_CheckStack(): Better ANSI'fy this while we're at it.
Fred Drake <fdrake@acm.org>
parents:
14278
diff
changeset
|
1804 PyOS_CheckStack(void) |
|
14227
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
1805 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1806 __try { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1807 /* alloca throws a stack overflow exception if there's |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1808 not enough space left on the stack */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1809 alloca(PYOS_STACK_MARGIN * sizeof(void*)); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1810 return 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1811 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ? |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1812 EXCEPTION_EXECUTE_HANDLER : |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1813 EXCEPTION_CONTINUE_SEARCH) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1814 int errcode = _resetstkoflw(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1815 if (errcode == 0) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1816 { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1817 Py_FatalError("Could not reset the stack!"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1818 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1819 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1820 return 1; |
|
14227
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
1821 } |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
1822 |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
1823 #endif /* WIN32 && _MSC_VER */ |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
1824 |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
1825 /* 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
|
1826 |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
1827 #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
|
1828 |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
1829 |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
1830 /* 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
|
1831 |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
1832 PyOS_sighandler_t |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
1833 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
|
1834 { |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
1835 #ifdef HAVE_SIGACTION |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1836 struct sigaction context; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1837 if (sigaction(sig, NULL, &context) == -1) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1838 return SIG_ERR; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1839 return context.sa_handler; |
|
14637
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
1840 #else |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1841 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
|
1842 /* 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
|
1843 #if defined(_MSC_VER) && _MSC_VER >= 1400 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1844 switch (sig) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1845 /* Only these signals are valid */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1846 case SIGINT: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1847 case SIGILL: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1848 case SIGFPE: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1849 case SIGSEGV: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1850 case SIGTERM: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1851 case SIGBREAK: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1852 case SIGABRT: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1853 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1854 /* Don't call signal() with other values or it will assert */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1855 default: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1856 return SIG_ERR; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1857 } |
|
35961
72555a967d6a
Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents:
35742
diff
changeset
|
1858 #endif /* _MSC_VER && _MSC_VER >= 1400 */ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1859 handler = signal(sig, SIG_IGN); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1860 if (handler != SIG_ERR) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1861 signal(sig, handler); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1862 return handler; |
|
14637
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
1863 #endif |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
1864 } |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
1865 |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
1866 PyOS_sighandler_t |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
1867 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
|
1868 { |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
1869 #ifdef HAVE_SIGACTION |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1870 /* Some code in Modules/signalmodule.c depends on sigaction() being |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1871 * used here if HAVE_SIGACTION is defined. Fix that if this code |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1872 * changes to invalidate that assumption. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1873 */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1874 struct sigaction context, ocontext; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1875 context.sa_handler = handler; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1876 sigemptyset(&context.sa_mask); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1877 context.sa_flags = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1878 if (sigaction(sig, &context, &ocontext) == -1) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1879 return SIG_ERR; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1880 return ocontext.sa_handler; |
|
33747
b0ec4c9d595b
Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33715
diff
changeset
|
1881 #else |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1882 PyOS_sighandler_t oldhandler; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1883 oldhandler = signal(sig, handler); |
|
33747
b0ec4c9d595b
Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33715
diff
changeset
|
1884 #ifdef HAVE_SIGINTERRUPT |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1885 siginterrupt(sig, 1); |
|
33747
b0ec4c9d595b
Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33715
diff
changeset
|
1886 #endif |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1887 return oldhandler; |
|
14637
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
1888 #endif |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
1889 } |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1890 |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1891 /* 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
|
1892 |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1893 #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
|
1894 PyAPI_FUNC(node *) |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1895 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
|
1896 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1897 return PyParser_SimpleParseFileFlags(fp, filename, start, 0); |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1898 } |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1899 |
|
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
|
1900 #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
|
1901 PyAPI_FUNC(node *) |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1902 PyParser_SimpleParseString(const char *str, int start) |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1903 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1904 return PyParser_SimpleParseStringFlags(str, start, 0); |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
1905 } |
|
37655
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37638
diff
changeset
|
1906 |
|
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
|
1907 #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
|
1908 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
|
1909 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
|
1910 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1911 return PyRun_AnyFileExFlags(fp, name, 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
|
1912 } |
|
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 |
|
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 #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
|
1915 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
|
1916 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
|
1917 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1918 return PyRun_AnyFileExFlags(fp, name, closeit, 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
|
1919 } |
|
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 |
|
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 #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
|
1922 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
|
1923 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
|
1924 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1925 return PyRun_AnyFileExFlags(fp, name, 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
|
1926 } |
|
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 |
|
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 #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
|
1929 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
|
1930 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
|
1931 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1932 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
|
1933 } |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1934 |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1935 #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
|
1936 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
|
1937 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
|
1938 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1939 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
|
1940 } |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1941 |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1942 #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
|
1943 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
|
1944 PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1945 PyCompilerFlags *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
|
1946 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1947 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
|
1948 } |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1949 |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1950 #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
|
1951 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
|
1952 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
|
1953 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1954 return PyRun_SimpleFileExFlags(f, p, 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
|
1955 } |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1956 |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1957 #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
|
1958 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
|
1959 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
|
1960 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1961 return PyRun_SimpleFileExFlags(f, p, 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
|
1962 } |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1963 |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1964 |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1965 #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
|
1966 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
|
1967 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
|
1968 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1969 return PyRun_StringFlags(str, s, g, l, 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
|
1970 } |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1971 |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1972 #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
|
1973 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
|
1974 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
|
1975 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1976 return PyRun_SimpleStringFlags(s, 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
|
1977 } |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1978 |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1979 #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
|
1980 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
|
1981 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
|
1982 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1983 return Py_CompileStringFlags(str, p, s, 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
|
1984 } |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1985 |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1986 #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
|
1987 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
|
1988 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
|
1989 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1990 return PyRun_InteractiveOneFlags(f, p, 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
|
1991 } |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1992 |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1993 #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
|
1994 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
|
1995 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
|
1996 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61445
diff
changeset
|
1997 return PyRun_InteractiveLoopFlags(f, p, 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
|
1998 } |
|
35f27bbd9ad8
Change those parts of the Python-api that were functions in 2.4, and
Thomas Heller <theller@ctypes.org>
parents:
37831
diff
changeset
|
1999 |
|
37655
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37638
diff
changeset
|
2000 #ifdef __cplusplus |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37638
diff
changeset
|
2001 } |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37638
diff
changeset
|
2002 #endif |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37638
diff
changeset
|
2003 |
