Mercurial > cpython-lru_cache-weakref
annotate Python/pythonrun.c @ 86426:12d7b6171b28
Issue #16129: Py_SetStandardStreamEncoding cleanups
- don't call PyErr_NoMemory with interpreter is not initialised
- note that it's OK to call _PyMem_RawStrDup here
- don't include this in the limited API
- capitalise "IO"
- be explicit that a non-zero return indicates an error
- include versionadded marker in docs
| author | Nick Coghlan <ncoghlan@gmail.com> |
|---|---|
| date | Fri, 18 Oct 2013 23:11:47 +1000 |
| parents | 9cd88b39ef62 |
| children | b5cc822d5bf0 |
| 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" |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
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" |
|
16421
aa844711463a
Move a bunch of definitions that were internal to compile.c to
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16311
diff
changeset
|
14 #include "symtable.h" |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
15 #include "ast.h" |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
16 #include "marshal.h" |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
46299
diff
changeset
|
17 #include "osdefs.h" |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
19 #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
|
20 #include <signal.h> |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
21 #endif |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
22 |
|
50559
6f30b97148b6
Merged revisions 68178 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50558
diff
changeset
|
23 #ifdef MS_WINDOWS |
|
50558
fbf7f53f4888
Merged revisions 68175 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49819
diff
changeset
|
24 #include "malloc.h" /* for alloca */ |
|
50559
6f30b97148b6
Merged revisions 68178 via svnmerge from
Georg Brandl <georg@python.org>
parents:
50558
diff
changeset
|
25 #endif |
|
50558
fbf7f53f4888
Merged revisions 68175 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49819
diff
changeset
|
26 |
|
28174
3f90d21debe9
Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize,
Martin v. Löwis <martin@v.loewis.de>
parents:
28065
diff
changeset
|
27 #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
|
28 #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
|
29 #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
|
30 #endif |
|
3f90d21debe9
Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize,
Martin v. Löwis <martin@v.loewis.de>
parents:
28065
diff
changeset
|
31 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
23252
diff
changeset
|
32 #ifdef MS_WINDOWS |
|
2529
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
33 #undef BYTE |
|
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
34 #include "windows.h" |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
46299
diff
changeset
|
35 #define PATH_MAX MAXPATHLEN |
|
2529
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
36 #endif |
|
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
37 |
|
82956
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
38 #ifdef Py_REF_DEBUG |
|
83515
6eacc6c134a5
Issue #17832: fix a compilation warning about a function prototype.
Antoine Pitrou <solipsis@pitrou.net>
parents:
82956
diff
changeset
|
39 static |
|
6eacc6c134a5
Issue #17832: fix a compilation warning about a function prototype.
Antoine Pitrou <solipsis@pitrou.net>
parents:
82956
diff
changeset
|
40 void _print_total_refs(void) { |
|
82956
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
41 PyObject *xoptions, *key, *value; |
|
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
42 xoptions = PySys_GetXOptions(); |
|
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
43 if (xoptions == NULL) |
|
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
44 return; |
|
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
45 key = PyUnicode_FromString("showrefcount"); |
|
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
46 if (key == NULL) |
|
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
47 return; |
|
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
48 value = PyDict_GetItem(xoptions, key); |
|
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
49 Py_DECREF(key); |
|
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
50 if (value == Py_True) |
|
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
51 fprintf(stderr, |
|
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
52 "[%" PY_FORMAT_SIZE_T "d refs, " |
|
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
53 "%" PY_FORMAT_SIZE_T "d blocks]\n", |
|
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
54 _Py_GetRefTotal(), _Py_GetAllocatedBlocks()); |
|
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
55 } |
|
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
56 #endif |
|
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
57 |
|
36837
3a3aed49b245
Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36836
diff
changeset
|
58 #ifndef Py_REF_DEBUG |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
59 #define PRINT_TOTAL_REFS() |
|
36837
3a3aed49b245
Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36836
diff
changeset
|
60 #else /* Py_REF_DEBUG */ |
|
82956
367167f93c30
#17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
80777
diff
changeset
|
61 #define PRINT_TOTAL_REFS() _print_total_refs() |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
62 #endif |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
63 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
64 #ifdef __cplusplus |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
65 extern "C" { |
|
36837
3a3aed49b245
Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36836
diff
changeset
|
66 #endif |
|
3a3aed49b245
Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36836
diff
changeset
|
67 |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
46299
diff
changeset
|
68 extern wchar_t *Py_GetPath(void); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
70 extern grammar _PyParser_Grammar; /* From graminit.c */ |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
71 |
|
1391
7c3245c18677
* ceval.c, longobject.c, methodobject.c, listnode.c, arraymodule.c,
Guido van Rossum <guido@python.org>
parents:
1347
diff
changeset
|
72 /* Forward */ |
|
78107
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
73 static void initmain(PyInterpreterState *interp); |
|
69708
2caf82aee7a4
Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69707
diff
changeset
|
74 static int initfsencoding(PyInterpreterState *interp); |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13256
diff
changeset
|
75 static void initsite(void); |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
76 static int initstdio(void); |
|
46395
6196529afd73
Add a NEWS entry for issue2221.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46318
diff
changeset
|
77 static void flush_io(void); |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
78 static PyObject *run_mod(mod_ty, const char *, PyObject *, PyObject *, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
79 PyCompilerFlags *, PyArena *); |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
80 static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
81 PyCompilerFlags *); |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13256
diff
changeset
|
82 static void err_input(perrdetail *); |
|
69147
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
83 static void err_free(perrdetail *); |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13256
diff
changeset
|
84 static void initsigs(void); |
|
41253
f29f1a8b7869
Patch #1680961: remove sys.exitfunc and replace it with a private C API. Also, reimplement atexit in C so it can take advantage of this private API.
Collin Winter <collinw@gmail.com>
parents:
40978
diff
changeset
|
85 static void call_py_exitfuncs(void); |
|
56652
29b3e126c0c2
Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53994
diff
changeset
|
86 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
|
87 static void call_ll_exitfuncs(void); |
|
72976
af0800b986b7
Issue #12281: Rewrite the MBCS codec to handle correctly replace and ignore
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72926
diff
changeset
|
88 extern int _PyUnicode_Init(void); |
|
84684
af18829a7754
Close #18469: Replace PyDict_GetItemString() with _PyDict_GetItemId() in structseq.c
Victor Stinner <victor.stinner@gmail.com>
parents:
84502
diff
changeset
|
89 extern int _PyStructSequence_Init(void); |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
90 extern void _PyUnicode_Fini(void); |
|
40626
4aee3f672f77
Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents:
40450
diff
changeset
|
91 extern int _PyLong_Init(void); |
|
4aee3f672f77
Merged the int/long unification branch, by very crude means (sorry Thomas!).
Guido van Rossum <guido@python.org>
parents:
40450
diff
changeset
|
92 extern void PyLong_Fini(void); |
|
69070
b0680b5a5215
Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
93 extern int _PyFaulthandler_Init(void); |
|
b0680b5a5215
Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
94 extern void _PyFaulthandler_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
|
95 |
|
28694
a4154dd5939a
New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents:
28653
diff
changeset
|
96 #ifdef WITH_THREAD |
|
a4154dd5939a
New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents:
28653
diff
changeset
|
97 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
|
98 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
|
99 #endif /* WITH_THREAD */ |
|
a4154dd5939a
New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents:
28653
diff
changeset
|
100 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
101 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
|
102 int Py_VerboseFlag; /* Needed by import.c */ |
|
67193
b7be652daf6e
Add sys.flags.quiet attribute for the new -q option, as noted missing by Eric in #1772833.
Georg Brandl <georg@python.org>
parents:
66685
diff
changeset
|
103 int Py_QuietFlag; /* Needed by sysmodule.c */ |
|
5108
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
104 int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */ |
|
70132
0311f62714f7
Closes #6498: fix several misspellings of "SystemExit" as "SystemError".
Georg Brandl <georg@python.org>
parents:
65763
diff
changeset
|
105 int Py_InspectFlag; /* Needed to determine whether to exit at SystemExit */ |
|
6201
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
106 int Py_NoSiteFlag; /* Suppress 'import site' */ |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43718
diff
changeset
|
107 int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */ |
|
44587
fb5a6330f71b
Merged revisions 59822-59841 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44486
diff
changeset
|
108 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
|
109 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
|
110 int Py_FrozenFlag; /* Needed by getpath.c */ |
|
18808
a8b1acc7a21f
Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
18630
diff
changeset
|
111 int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */ |
|
46708
74b9c85361f8
Merged revisions 62774-62775,62785,62787-62788 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46694
diff
changeset
|
112 int Py_NoUserSiteDirectory = 0; /* for -s and site.py */ |
|
50666
b98fe8dc8acd
Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50559
diff
changeset
|
113 int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */ |
|
75066
f4b7ecf8a5f8
Issue #13703: add a way to randomize the hash values of basic types (str, bytes, datetime)
Georg Brandl <georg@python.org>
parents:
70132
diff
changeset
|
114 int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */ |
|
85081
dd0d751cc7f1
Issue #16400: Add command line option for isolated mode.
Christian Heimes <christian@cheimes.de>
parents:
84933
diff
changeset
|
115 int Py_IsolatedFlag = 0; /* for -I, isolate from user's env */ |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
116 |
|
69832
2a19d09b08f8
Issue #1856: Avoid crashes and lockups when daemon threads run while the
Antoine Pitrou <solipsis@pitrou.net>
parents:
69708
diff
changeset
|
117 PyThreadState *_Py_Finalizing = NULL; |
|
2a19d09b08f8
Issue #1856: Avoid crashes and lockups when daemon threads run while the
Antoine Pitrou <solipsis@pitrou.net>
parents:
69708
diff
changeset
|
118 |
|
46430
47d9bbe10897
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46395
diff
changeset
|
119 /* PyModule_GetWarningsModule is no longer necessary as of 2.6 |
|
47d9bbe10897
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46395
diff
changeset
|
120 since _warnings is builtin. This API should not be used. */ |
|
47d9bbe10897
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46395
diff
changeset
|
121 PyObject * |
|
47d9bbe10897
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46395
diff
changeset
|
122 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
|
123 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
124 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
|
125 } |
|
27958
e07b21ea3c45
Fix bug 683658 - PyErr_Warn may cause import deadlock.
Mark Hammond <mhammond@skippinet.com.au>
parents:
27878
diff
changeset
|
126 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
127 static int initialized = 0; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
128 |
|
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
|
129 /* 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
|
130 |
|
57045f51dd12
Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents:
6117
diff
changeset
|
131 int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
132 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
|
133 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
134 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
|
135 } |
|
57045f51dd12
Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents:
6117
diff
changeset
|
136 |
|
86399
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
137 /* Helper to allow an embedding application to override the normal |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
138 * mechanism that attempts to figure out an appropriate IO encoding |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
139 */ |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
140 |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
141 static char *_Py_StandardStreamEncoding = NULL; |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
142 static char *_Py_StandardStreamErrors = NULL; |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
143 |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
144 int |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
145 Py_SetStandardStreamEncoding(const char *encoding, const char *errors) |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
146 { |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
147 if (Py_IsInitialized()) { |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
148 /* This is too late to have any effect */ |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
149 return -1; |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
150 } |
|
86426
12d7b6171b28
Issue #16129: Py_SetStandardStreamEncoding cleanups
Nick Coghlan <ncoghlan@gmail.com>
parents:
86399
diff
changeset
|
151 /* Can't call PyErr_NoMemory() on errors, as Python hasn't been |
|
12d7b6171b28
Issue #16129: Py_SetStandardStreamEncoding cleanups
Nick Coghlan <ncoghlan@gmail.com>
parents:
86399
diff
changeset
|
152 * initialised yet. |
|
12d7b6171b28
Issue #16129: Py_SetStandardStreamEncoding cleanups
Nick Coghlan <ncoghlan@gmail.com>
parents:
86399
diff
changeset
|
153 * |
|
12d7b6171b28
Issue #16129: Py_SetStandardStreamEncoding cleanups
Nick Coghlan <ncoghlan@gmail.com>
parents:
86399
diff
changeset
|
154 * However, the raw memory allocators are initialised appropriately |
|
12d7b6171b28
Issue #16129: Py_SetStandardStreamEncoding cleanups
Nick Coghlan <ncoghlan@gmail.com>
parents:
86399
diff
changeset
|
155 * as C static variables, so _PyMem_RawStrdup is OK even though |
|
12d7b6171b28
Issue #16129: Py_SetStandardStreamEncoding cleanups
Nick Coghlan <ncoghlan@gmail.com>
parents:
86399
diff
changeset
|
156 * Py_Initialize hasn't been called yet. |
|
12d7b6171b28
Issue #16129: Py_SetStandardStreamEncoding cleanups
Nick Coghlan <ncoghlan@gmail.com>
parents:
86399
diff
changeset
|
157 */ |
|
86399
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
158 if (encoding) { |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
159 _Py_StandardStreamEncoding = _PyMem_RawStrdup(encoding); |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
160 if (!_Py_StandardStreamEncoding) { |
|
86426
12d7b6171b28
Issue #16129: Py_SetStandardStreamEncoding cleanups
Nick Coghlan <ncoghlan@gmail.com>
parents:
86399
diff
changeset
|
161 return -2; |
|
86399
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
162 } |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
163 } |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
164 if (errors) { |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
165 _Py_StandardStreamErrors = _PyMem_RawStrdup(errors); |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
166 if (!_Py_StandardStreamErrors) { |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
167 if (_Py_StandardStreamEncoding) { |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
168 PyMem_RawFree(_Py_StandardStreamEncoding); |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
169 } |
|
86426
12d7b6171b28
Issue #16129: Py_SetStandardStreamEncoding cleanups
Nick Coghlan <ncoghlan@gmail.com>
parents:
86399
diff
changeset
|
170 return -3; |
|
86399
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
171 } |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
172 } |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
173 return 0; |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
174 } |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
175 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
176 /* 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
|
177 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
|
178 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
|
179 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
|
180 been created. |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
181 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
182 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
|
183 (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
|
184 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
|
185 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
186 */ |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
187 |
|
20401
b74610c92d8b
SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
19633
diff
changeset
|
188 static int |
|
b74610c92d8b
SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
19633
diff
changeset
|
189 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
|
190 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
191 int env = atoi(envs); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
192 if (flag < env) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
193 flag = env; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
194 if (flag < 1) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
195 flag = 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
196 return flag; |
|
20401
b74610c92d8b
SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
19633
diff
changeset
|
197 } |
|
b74610c92d8b
SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
19633
diff
changeset
|
198 |
|
49611
9fc573fbaf5e
Issue #4213: The file system encoding is now normalized by the codec subsystem, for example UTF-8 is turned into utf-8.
Christian Heimes <christian@cheimes.de>
parents:
49035
diff
changeset
|
199 static char* |
|
64151
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
200 get_codec_name(const char *encoding) |
|
49611
9fc573fbaf5e
Issue #4213: The file system encoding is now normalized by the codec subsystem, for example UTF-8 is turned into utf-8.
Christian Heimes <christian@cheimes.de>
parents:
49035
diff
changeset
|
201 { |
|
64151
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
202 char *name_utf8, *name_str; |
|
61716
942b3c168f15
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61654
diff
changeset
|
203 PyObject *codec, *name = NULL; |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
204 _Py_IDENTIFIER(name); |
|
49611
9fc573fbaf5e
Issue #4213: The file system encoding is now normalized by the codec subsystem, for example UTF-8 is turned into utf-8.
Christian Heimes <christian@cheimes.de>
parents:
49035
diff
changeset
|
205 |
|
64151
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
206 codec = _PyCodec_Lookup(encoding); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
207 if (!codec) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
208 goto error; |
|
49611
9fc573fbaf5e
Issue #4213: The file system encoding is now normalized by the codec subsystem, for example UTF-8 is turned into utf-8.
Christian Heimes <christian@cheimes.de>
parents:
49035
diff
changeset
|
209 |
|
72848
81380082d216
Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents:
72835
diff
changeset
|
210 name = _PyObject_GetAttrId(codec, &PyId_name); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
211 Py_CLEAR(codec); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
212 if (!name) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
213 goto error; |
|
49611
9fc573fbaf5e
Issue #4213: The file system encoding is now normalized by the codec subsystem, for example UTF-8 is turned into utf-8.
Christian Heimes <christian@cheimes.de>
parents:
49035
diff
changeset
|
214 |
|
64151
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
215 name_utf8 = _PyUnicode_AsString(name); |
|
68769
929aafef5b05
Fix #11586: typo in initfsencoding()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68257
diff
changeset
|
216 if (name_utf8 == NULL) |
|
61716
942b3c168f15
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61654
diff
changeset
|
217 goto error; |
|
84502
65f2c92ed079
Issue #18203: Add _PyMem_RawStrdup() and _PyMem_Strdup()
Victor Stinner <victor.stinner@gmail.com>
parents:
84489
diff
changeset
|
218 name_str = _PyMem_RawStrdup(name_utf8); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
219 Py_DECREF(name); |
|
64151
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
220 if (name_str == NULL) { |
|
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
221 PyErr_NoMemory(); |
|
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
222 return NULL; |
|
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
223 } |
|
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
224 return name_str; |
|
49611
9fc573fbaf5e
Issue #4213: The file system encoding is now normalized by the codec subsystem, for example UTF-8 is turned into utf-8.
Christian Heimes <christian@cheimes.de>
parents:
49035
diff
changeset
|
225 |
|
9fc573fbaf5e
Issue #4213: The file system encoding is now normalized by the codec subsystem, for example UTF-8 is turned into utf-8.
Christian Heimes <christian@cheimes.de>
parents:
49035
diff
changeset
|
226 error: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
227 Py_XDECREF(codec); |
|
61716
942b3c168f15
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61654
diff
changeset
|
228 Py_XDECREF(name); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
229 return NULL; |
|
49611
9fc573fbaf5e
Issue #4213: The file system encoding is now normalized by the codec subsystem, for example UTF-8 is turned into utf-8.
Christian Heimes <christian@cheimes.de>
parents:
49035
diff
changeset
|
230 } |
|
64151
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
231 |
|
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
232 static char* |
|
71191
7ce685cda0ae
Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70402
diff
changeset
|
233 get_locale_encoding(void) |
|
64151
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
234 { |
|
71191
7ce685cda0ae
Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70402
diff
changeset
|
235 #ifdef MS_WINDOWS |
|
7ce685cda0ae
Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70402
diff
changeset
|
236 char codepage[100]; |
|
7ce685cda0ae
Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70402
diff
changeset
|
237 PyOS_snprintf(codepage, sizeof(codepage), "cp%d", GetACP()); |
|
7ce685cda0ae
Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70402
diff
changeset
|
238 return get_codec_name(codepage); |
|
7ce685cda0ae
Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70402
diff
changeset
|
239 #elif defined(HAVE_LANGINFO_H) && defined(CODESET) |
|
64151
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
240 char* codeset = nl_langinfo(CODESET); |
|
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
241 if (!codeset || codeset[0] == '\0') { |
|
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
242 PyErr_SetString(PyExc_ValueError, "CODESET is not set or empty"); |
|
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
243 return NULL; |
|
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
244 } |
|
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
245 return get_codec_name(codeset); |
|
71191
7ce685cda0ae
Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70402
diff
changeset
|
246 #else |
|
7ce685cda0ae
Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70402
diff
changeset
|
247 PyErr_SetNone(PyExc_NotImplementedError); |
|
7ce685cda0ae
Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70402
diff
changeset
|
248 return NULL; |
|
7ce685cda0ae
Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70402
diff
changeset
|
249 #endif |
|
64151
687cc854cb4b
Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64133
diff
changeset
|
250 } |
|
49611
9fc573fbaf5e
Issue #4213: The file system encoding is now normalized by the codec subsystem, for example UTF-8 is turned into utf-8.
Christian Heimes <christian@cheimes.de>
parents:
49035
diff
changeset
|
251 |
|
76303
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
252 static void |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
253 import_init(PyInterpreterState *interp, PyObject *sysmod) |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
254 { |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
255 PyObject *importlib; |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
256 PyObject *impmod; |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
257 PyObject *sys_modules; |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
258 PyObject *value; |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
259 |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
260 /* Import _importlib through its frozen version, _frozen_importlib. */ |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
261 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) { |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
262 Py_FatalError("Py_Initialize: can't import _frozen_importlib"); |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
263 } |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
264 else if (Py_VerboseFlag) { |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
265 PySys_FormatStderr("import _frozen_importlib # frozen\n"); |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
266 } |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
267 importlib = PyImport_AddModule("_frozen_importlib"); |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
268 if (importlib == NULL) { |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
269 Py_FatalError("Py_Initialize: couldn't get _frozen_importlib from " |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
270 "sys.modules"); |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
271 } |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
272 interp->importlib = importlib; |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
273 Py_INCREF(interp->importlib); |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
274 |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
275 /* Install _importlib as __import__ */ |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
276 impmod = PyInit_imp(); |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
277 if (impmod == NULL) { |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
278 Py_FatalError("Py_Initialize: can't import imp"); |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
279 } |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
280 else if (Py_VerboseFlag) { |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
281 PySys_FormatStderr("import imp # builtin\n"); |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
282 } |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
283 sys_modules = PyImport_GetModuleDict(); |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
284 if (Py_VerboseFlag) { |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
285 PySys_FormatStderr("import sys # builtin\n"); |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
286 } |
|
76331
d777f854a66e
Issue #13959: Rename imp to _imp and add Lib/imp.py and begin
Brett Cannon <brett@python.org>
parents:
76314
diff
changeset
|
287 if (PyDict_SetItemString(sys_modules, "_imp", impmod) < 0) { |
|
d777f854a66e
Issue #13959: Rename imp to _imp and add Lib/imp.py and begin
Brett Cannon <brett@python.org>
parents:
76314
diff
changeset
|
288 Py_FatalError("Py_Initialize: can't save _imp to sys.modules"); |
|
76303
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
289 } |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
290 |
|
76566
57d558f1904d
Issue #14605: Make explicit the entries on sys.path_hooks that used to
Brett Cannon <brett@python.org>
parents:
76331
diff
changeset
|
291 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod); |
|
76303
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
292 if (value == NULL) { |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
293 PyErr_Print(); |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
294 Py_FatalError("Py_Initialize: importlib install failed"); |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
295 } |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
296 Py_DECREF(value); |
| 76314 | 297 Py_DECREF(impmod); |
|
76303
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
298 |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
299 _PyImportZip_Init(); |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
300 } |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
301 |
|
49611
9fc573fbaf5e
Issue #4213: The file system encoding is now normalized by the codec subsystem, for example UTF-8 is turned into utf-8.
Christian Heimes <christian@cheimes.de>
parents:
49035
diff
changeset
|
302 |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
303 void |
|
77519
c3616595dada
Issue #14928: Fix importlib bootstrap issues by using a custom executable (Modules/_freeze_importlib) to build Python/importlib.h.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76942
diff
changeset
|
304 _Py_InitializeEx_Private(int install_sigs, int install_importlib) |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
305 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
306 PyInterpreterState *interp; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
307 PyThreadState *tstate; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
308 PyObject *bimod, *sysmod, *pstderr; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
309 char *p; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
310 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
|
311 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
312 if (initialized) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
313 return; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
314 initialized = 1; |
|
69832
2a19d09b08f8
Issue #1856: Avoid crashes and lockups when daemon threads run while the
Antoine Pitrou <solipsis@pitrou.net>
parents:
69708
diff
changeset
|
315 _Py_Finalizing = NULL; |
|
28648
0e8416be208e
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
28647
diff
changeset
|
316 |
|
59041
9b5806a008e7
#4532: fixes to make 3.x compile on QNX 6.3.2 (reported by Matt Kraai)
Andrew M. Kuchling <amk@amk.ca>
parents:
57498
diff
changeset
|
317 #if defined(HAVE_LANGINFO_H) && defined(HAVE_SETLOCALE) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
318 /* Set up the LC_CTYPE locale, so we can obtain |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
319 the locale's charset without having to switch |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
320 locales. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
321 setlocale(LC_CTYPE, ""); |
|
42539
43e32b2b4004
Set sys.stdout.encoding properly.
Martin v. Löwis <martin@v.loewis.de>
parents:
42180
diff
changeset
|
322 #endif |
|
43e32b2b4004
Set sys.stdout.encoding properly.
Martin v. Löwis <martin@v.loewis.de>
parents:
42180
diff
changeset
|
323 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
324 if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0') |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
325 Py_DebugFlag = add_flag(Py_DebugFlag, p); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
326 if ((p = Py_GETENV("PYTHONVERBOSE")) && *p != '\0') |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
327 Py_VerboseFlag = add_flag(Py_VerboseFlag, p); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
328 if ((p = Py_GETENV("PYTHONOPTIMIZE")) && *p != '\0') |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
329 Py_OptimizeFlag = add_flag(Py_OptimizeFlag, p); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
330 if ((p = Py_GETENV("PYTHONDONTWRITEBYTECODE")) && *p != '\0') |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
331 Py_DontWriteBytecodeFlag = add_flag(Py_DontWriteBytecodeFlag, p); |
|
75066
f4b7ecf8a5f8
Issue #13703: add a way to randomize the hash values of basic types (str, bytes, datetime)
Georg Brandl <georg@python.org>
parents:
70132
diff
changeset
|
332 /* The variable is only tested for existence here; _PyRandom_Init will |
|
f4b7ecf8a5f8
Issue #13703: add a way to randomize the hash values of basic types (str, bytes, datetime)
Georg Brandl <georg@python.org>
parents:
70132
diff
changeset
|
333 check its value further. */ |
|
f4b7ecf8a5f8
Issue #13703: add a way to randomize the hash values of basic types (str, bytes, datetime)
Georg Brandl <georg@python.org>
parents:
70132
diff
changeset
|
334 if ((p = Py_GETENV("PYTHONHASHSEED")) && *p != '\0') |
|
f4b7ecf8a5f8
Issue #13703: add a way to randomize the hash values of basic types (str, bytes, datetime)
Georg Brandl <georg@python.org>
parents:
70132
diff
changeset
|
335 Py_HashRandomizationFlag = add_flag(Py_HashRandomizationFlag, p); |
|
f4b7ecf8a5f8
Issue #13703: add a way to randomize the hash values of basic types (str, bytes, datetime)
Georg Brandl <georg@python.org>
parents:
70132
diff
changeset
|
336 |
|
f4b7ecf8a5f8
Issue #13703: add a way to randomize the hash values of basic types (str, bytes, datetime)
Georg Brandl <georg@python.org>
parents:
70132
diff
changeset
|
337 _PyRandom_Init(); |
|
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
|
338 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
339 interp = PyInterpreterState_New(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
340 if (interp == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
341 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
|
342 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
343 tstate = PyThreadState_New(interp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
344 if (tstate == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
345 Py_FatalError("Py_Initialize: can't make first thread"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
346 (void) PyThreadState_Swap(tstate); |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
347 |
|
64133
686b18bffb86
Issue #8063: Call _PyGILState_Init() earlier in Py_InitializeEx().
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63852
diff
changeset
|
348 #ifdef WITH_THREAD |
|
64857
38b0d5d0dd30
Issue #9901: Destroying the GIL in Py_Finalize() can fail if some other
Antoine Pitrou <solipsis@pitrou.net>
parents:
64709
diff
changeset
|
349 /* We can't call _PyEval_FiniThreads() in Py_Finalize because |
|
38b0d5d0dd30
Issue #9901: Destroying the GIL in Py_Finalize() can fail if some other
Antoine Pitrou <solipsis@pitrou.net>
parents:
64709
diff
changeset
|
350 destroying the GIL might fail when it is being referenced from |
|
38b0d5d0dd30
Issue #9901: Destroying the GIL in Py_Finalize() can fail if some other
Antoine Pitrou <solipsis@pitrou.net>
parents:
64709
diff
changeset
|
351 another running thread (see issue #9901). |
|
38b0d5d0dd30
Issue #9901: Destroying the GIL in Py_Finalize() can fail if some other
Antoine Pitrou <solipsis@pitrou.net>
parents:
64709
diff
changeset
|
352 Instead we destroy the previously created GIL here, which ensures |
|
38b0d5d0dd30
Issue #9901: Destroying the GIL in Py_Finalize() can fail if some other
Antoine Pitrou <solipsis@pitrou.net>
parents:
64709
diff
changeset
|
353 that we can call Py_Initialize / Py_Finalize multiple times. */ |
|
38b0d5d0dd30
Issue #9901: Destroying the GIL in Py_Finalize() can fail if some other
Antoine Pitrou <solipsis@pitrou.net>
parents:
64709
diff
changeset
|
354 _PyEval_FiniThreads(); |
|
38b0d5d0dd30
Issue #9901: Destroying the GIL in Py_Finalize() can fail if some other
Antoine Pitrou <solipsis@pitrou.net>
parents:
64709
diff
changeset
|
355 |
|
38b0d5d0dd30
Issue #9901: Destroying the GIL in Py_Finalize() can fail if some other
Antoine Pitrou <solipsis@pitrou.net>
parents:
64709
diff
changeset
|
356 /* Auto-thread-state API */ |
|
64133
686b18bffb86
Issue #8063: Call _PyGILState_Init() earlier in Py_InitializeEx().
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63852
diff
changeset
|
357 _PyGILState_Init(interp, tstate); |
|
686b18bffb86
Issue #8063: Call _PyGILState_Init() earlier in Py_InitializeEx().
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63852
diff
changeset
|
358 #endif /* WITH_THREAD */ |
|
686b18bffb86
Issue #8063: Call _PyGILState_Init() earlier in Py_InitializeEx().
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63852
diff
changeset
|
359 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
360 _Py_ReadyTypes(); |
|
19040
4df72ea78ae8
- Rename PyType_InitDict() to PyType_Ready().
Guido van Rossum <guido@python.org>
parents:
18933
diff
changeset
|
361 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
362 if (!_PyFrame_Init()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
363 Py_FatalError("Py_Initialize: can't init frames"); |
|
26889
12753e7b15f7
SF #561244, Micro optimizations
Neal Norwitz <nnorwitz@gmail.com>
parents:
26885
diff
changeset
|
364 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
365 if (!_PyLong_Init()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
366 Py_FatalError("Py_Initialize: can't init longs"); |
|
26889
12753e7b15f7
SF #561244, Micro optimizations
Neal Norwitz <nnorwitz@gmail.com>
parents:
26885
diff
changeset
|
367 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
368 if (!PyByteArray_Init()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
369 Py_FatalError("Py_Initialize: can't init bytearray"); |
|
40978
61fee1853ca8
SF patch #1669633, add methods for bytes from Pete Shinners.
Neal Norwitz <nnorwitz@gmail.com>
parents:
40949
diff
changeset
|
370 |
|
84793
fc718c177ee6
Issue #18520: Add a new PyStructSequence_InitType2() function, same than
Victor Stinner <victor.stinner@gmail.com>
parents:
84761
diff
changeset
|
371 if (!_PyFloat_Init()) |
|
fc718c177ee6
Issue #18520: Add a new PyStructSequence_InitType2() function, same than
Victor Stinner <victor.stinner@gmail.com>
parents:
84761
diff
changeset
|
372 Py_FatalError("Py_Initialize: can't init float"); |
| 34972 | 373 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
374 interp->modules = PyDict_New(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
375 if (interp->modules == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
376 Py_FatalError("Py_Initialize: can't make modules dictionary"); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
377 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
378 /* Init Unicode implementation; relies on the codec registry */ |
|
72976
af0800b986b7
Issue #12281: Rewrite the MBCS codec to handle correctly replace and ignore
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72926
diff
changeset
|
379 if (_PyUnicode_Init() < 0) |
|
af0800b986b7
Issue #12281: Rewrite the MBCS codec to handle correctly replace and ignore
Victor Stinner <victor.stinner@haypocalc.com>
parents:
72926
diff
changeset
|
380 Py_FatalError("Py_Initialize: can't initialize unicode"); |
|
84684
af18829a7754
Close #18469: Replace PyDict_GetItemString() with _PyDict_GetItemId() in structseq.c
Victor Stinner <victor.stinner@gmail.com>
parents:
84502
diff
changeset
|
381 if (_PyStructSequence_Init() < 0) |
|
af18829a7754
Close #18469: Replace PyDict_GetItemString() with _PyDict_GetItemId() in structseq.c
Victor Stinner <victor.stinner@gmail.com>
parents:
84502
diff
changeset
|
382 Py_FatalError("Py_Initialize: can't initialize structseq"); |
|
11977
8b88e1bc0e1b
Marc-Andre Lemburg: add calls to initialize and finalize Unicode and
Guido van Rossum <guido@python.org>
parents:
11673
diff
changeset
|
383 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
384 bimod = _PyBuiltin_Init(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
385 if (bimod == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
386 Py_FatalError("Py_Initialize: can't initialize builtins modules"); |
|
65418
fd5135cbd928
_PyImport_FixupExtension() and _PyImport_FindExtension() uses FS encoding
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65400
diff
changeset
|
387 _PyImport_FixupBuiltin(bimod, "builtins"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
388 interp->builtins = PyModule_GetDict(bimod); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
389 if (interp->builtins == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
390 Py_FatalError("Py_Initialize: can't initialize builtins dict"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
391 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
|
392 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
393 /* initialize builtin exceptions */ |
|
76303
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
394 _PyExc_Init(bimod); |
|
43848
e162e881ea5f
Moved the initalization of the exception before the initialization of sys.
Christian Heimes <christian@cheimes.de>
parents:
43842
diff
changeset
|
395 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
396 sysmod = _PySys_Init(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
397 if (sysmod == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
398 Py_FatalError("Py_Initialize: can't initialize sys"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
399 interp->sysdict = PyModule_GetDict(sysmod); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
400 if (interp->sysdict == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
401 Py_FatalError("Py_Initialize: can't initialize sys dict"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
402 Py_INCREF(interp->sysdict); |
|
65418
fd5135cbd928
_PyImport_FixupExtension() and _PyImport_FindExtension() uses FS encoding
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65400
diff
changeset
|
403 _PyImport_FixupBuiltin(sysmod, "sys"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
404 PySys_SetPath(Py_GetPath()); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
405 PyDict_SetItemString(interp->sysdict, "modules", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
406 interp->modules); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
407 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
408 /* Set up a preliminary stderr printer until we have enough |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
409 infrastructure for the io module in place. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
410 pstderr = PyFile_NewStdPrinter(fileno(stderr)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
411 if (pstderr == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
412 Py_FatalError("Py_Initialize: can't set preliminary stderr"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
413 PySys_SetObject("stderr", pstderr); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
414 PySys_SetObject("__stderr__", pstderr); |
|
65763
b03779f00739
Merged revisions 85980 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
65696
diff
changeset
|
415 Py_DECREF(pstderr); |
|
43718
e510b716bd80
Patch 1352 (continued in issue 1329) by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43712
diff
changeset
|
416 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
417 _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
|
418 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
419 _PyImportHooks_Init(); |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26643
diff
changeset
|
420 |
|
61776
3271af035d01
Recorded merge of revisions 81364 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61656
diff
changeset
|
421 /* Initialize _warnings. */ |
|
3271af035d01
Recorded merge of revisions 81364 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61656
diff
changeset
|
422 _PyWarnings_Init(); |
|
3271af035d01
Recorded merge of revisions 81364 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61656
diff
changeset
|
423 |
|
77519
c3616595dada
Issue #14928: Fix importlib bootstrap issues by using a custom executable (Modules/_freeze_importlib) to build Python/importlib.h.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76942
diff
changeset
|
424 if (!install_importlib) |
|
c3616595dada
Issue #14928: Fix importlib bootstrap issues by using a custom executable (Modules/_freeze_importlib) to build Python/importlib.h.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76942
diff
changeset
|
425 return; |
|
c3616595dada
Issue #14928: Fix importlib bootstrap issues by using a custom executable (Modules/_freeze_importlib) to build Python/importlib.h.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76942
diff
changeset
|
426 |
|
76303
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
427 import_init(interp, sysmod); |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
428 |
|
78341
2f1494d243ad
Fix initialization of the faulthandler module
Victor Stinner <victor.stinner@gmail.com>
parents:
78117
diff
changeset
|
429 /* initialize the faulthandler module */ |
|
2f1494d243ad
Fix initialization of the faulthandler module
Victor Stinner <victor.stinner@gmail.com>
parents:
78117
diff
changeset
|
430 if (_PyFaulthandler_Init()) |
|
2f1494d243ad
Fix initialization of the faulthandler module
Victor Stinner <victor.stinner@gmail.com>
parents:
78117
diff
changeset
|
431 Py_FatalError("Py_Initialize: can't initialize faulthandler"); |
|
2f1494d243ad
Fix initialization of the faulthandler module
Victor Stinner <victor.stinner@gmail.com>
parents:
78117
diff
changeset
|
432 |
|
63757
c16803bbd790
Issue #9079: Added _PyTime_gettimeofday(_PyTime_timeval *tp) to C API
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
62389
diff
changeset
|
433 _PyTime_Init(); |
|
53767
ac209f132b17
Issue #5915: Implement PEP 383, Non-decodable Bytes in
Martin v. Löwis <martin@v.loewis.de>
parents:
52819
diff
changeset
|
434 |
|
69708
2caf82aee7a4
Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69707
diff
changeset
|
435 if (initfsencoding(interp) < 0) |
|
2caf82aee7a4
Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69707
diff
changeset
|
436 Py_FatalError("Py_Initialize: unable to load the file system codec"); |
|
53767
ac209f132b17
Issue #5915: Implement PEP 383, Non-decodable Bytes in
Martin v. Löwis <martin@v.loewis.de>
parents:
52819
diff
changeset
|
437 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
438 if (install_sigs) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
439 initsigs(); /* Signal handling stuff, including initintr() */ |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
440 |
|
78107
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
441 initmain(interp); /* Module __main__ */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
442 if (initstdio() < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
443 Py_FatalError( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
444 "Py_Initialize: can't initialize sys standard streams"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
445 |
|
66137
06f76ef27f86
Issue #10372: Import the warnings module only after the IO library is
Antoine Pitrou <solipsis@pitrou.net>
parents:
65762
diff
changeset
|
446 /* Initialize warnings. */ |
|
06f76ef27f86
Issue #10372: Import the warnings module only after the IO library is
Antoine Pitrou <solipsis@pitrou.net>
parents:
65762
diff
changeset
|
447 if (PySys_HasWarnOptions()) { |
|
06f76ef27f86
Issue #10372: Import the warnings module only after the IO library is
Antoine Pitrou <solipsis@pitrou.net>
parents:
65762
diff
changeset
|
448 PyObject *warnings_module = PyImport_ImportModule("warnings"); |
|
06f76ef27f86
Issue #10372: Import the warnings module only after the IO library is
Antoine Pitrou <solipsis@pitrou.net>
parents:
65762
diff
changeset
|
449 if (warnings_module == NULL) { |
|
06f76ef27f86
Issue #10372: Import the warnings module only after the IO library is
Antoine Pitrou <solipsis@pitrou.net>
parents:
65762
diff
changeset
|
450 fprintf(stderr, "'import warnings' failed; traceback:\n"); |
|
06f76ef27f86
Issue #10372: Import the warnings module only after the IO library is
Antoine Pitrou <solipsis@pitrou.net>
parents:
65762
diff
changeset
|
451 PyErr_Print(); |
|
06f76ef27f86
Issue #10372: Import the warnings module only after the IO library is
Antoine Pitrou <solipsis@pitrou.net>
parents:
65762
diff
changeset
|
452 } |
|
06f76ef27f86
Issue #10372: Import the warnings module only after the IO library is
Antoine Pitrou <solipsis@pitrou.net>
parents:
65762
diff
changeset
|
453 Py_XDECREF(warnings_module); |
|
06f76ef27f86
Issue #10372: Import the warnings module only after the IO library is
Antoine Pitrou <solipsis@pitrou.net>
parents:
65762
diff
changeset
|
454 } |
|
59865
c2d2e26bcf7f
Merged revisions 78872 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
57498
diff
changeset
|
455 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
456 if (!Py_NoSiteFlag) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
457 initsite(); /* Module site */ |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
458 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
459 |
|
33189
de804edf8bcd
Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents:
32781
diff
changeset
|
460 void |
|
77519
c3616595dada
Issue #14928: Fix importlib bootstrap issues by using a custom executable (Modules/_freeze_importlib) to build Python/importlib.h.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76942
diff
changeset
|
461 Py_InitializeEx(int install_sigs) |
|
c3616595dada
Issue #14928: Fix importlib bootstrap issues by using a custom executable (Modules/_freeze_importlib) to build Python/importlib.h.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76942
diff
changeset
|
462 { |
|
c3616595dada
Issue #14928: Fix importlib bootstrap issues by using a custom executable (Modules/_freeze_importlib) to build Python/importlib.h.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76942
diff
changeset
|
463 _Py_InitializeEx_Private(install_sigs, 1); |
|
c3616595dada
Issue #14928: Fix importlib bootstrap issues by using a custom executable (Modules/_freeze_importlib) to build Python/importlib.h.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76942
diff
changeset
|
464 } |
|
c3616595dada
Issue #14928: Fix importlib bootstrap issues by using a custom executable (Modules/_freeze_importlib) to build Python/importlib.h.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76942
diff
changeset
|
465 |
|
c3616595dada
Issue #14928: Fix importlib bootstrap issues by using a custom executable (Modules/_freeze_importlib) to build Python/importlib.h.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76942
diff
changeset
|
466 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
|
467 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
|
468 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
469 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
|
470 } |
|
de804edf8bcd
Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents:
32781
diff
changeset
|
471 |
|
de804edf8bcd
Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents:
32781
diff
changeset
|
472 |
|
9641
d152adf3f094
Move the prototype for dump_counts() to before where it is used.
Guido van Rossum <guido@python.org>
parents:
9285
diff
changeset
|
473 #ifdef COUNT_ALLOCS |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
474 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
|
475 #endif |
|
d152adf3f094
Move the prototype for dump_counts() to before where it is used.
Guido van Rossum <guido@python.org>
parents:
9285
diff
changeset
|
476 |
|
42167
29ba6c399090
Upon exit, flush stdout and stderr (twice: before and after the code that
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
477 /* Flush stdout and stderr */ |
|
29ba6c399090
Upon exit, flush stdout and stderr (twice: before and after the code that
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
478 |
|
73761
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
479 static int |
|
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
480 file_is_closed(PyObject *fobj) |
|
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
481 { |
|
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
482 int r; |
|
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
483 PyObject *tmp = PyObject_GetAttrString(fobj, "closed"); |
|
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
484 if (tmp == NULL) { |
|
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
485 PyErr_Clear(); |
|
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
486 return 0; |
|
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
487 } |
|
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
488 r = PyObject_IsTrue(tmp); |
|
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
489 Py_DECREF(tmp); |
|
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
490 if (r < 0) |
|
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
491 PyErr_Clear(); |
|
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
492 return r > 0; |
|
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
493 } |
|
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
494 |
|
42893
2c02ba72714b
Make some internal functions static
Neal Norwitz <nnorwitz@gmail.com>
parents:
42822
diff
changeset
|
495 static void |
|
42180
9f99ea4f81e9
Silence compiler warning.
Guido van Rossum <guido@python.org>
parents:
42167
diff
changeset
|
496 flush_std_files(void) |
|
42167
29ba6c399090
Upon exit, flush stdout and stderr (twice: before and after the code that
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
497 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
498 PyObject *fout = PySys_GetObject("stdout"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
499 PyObject *ferr = PySys_GetObject("stderr"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
500 PyObject *tmp; |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
501 _Py_IDENTIFIER(flush); |
|
42167
29ba6c399090
Upon exit, flush stdout and stderr (twice: before and after the code that
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
502 |
|
73761
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
503 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) { |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72424
diff
changeset
|
504 tmp = _PyObject_CallMethodId(fout, &PyId_flush, ""); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
505 if (tmp == NULL) |
|
63847
77c6f60a1b24
Merged revisions 83854 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
62393
diff
changeset
|
506 PyErr_WriteUnraisable(fout); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
507 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
508 Py_DECREF(tmp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
509 } |
|
42167
29ba6c399090
Upon exit, flush stdout and stderr (twice: before and after the code that
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
510 |
|
73761
150e096095e5
Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72423
diff
changeset
|
511 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) { |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72424
diff
changeset
|
512 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, ""); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
513 if (tmp == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
514 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
515 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
516 Py_DECREF(tmp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
517 } |
|
42167
29ba6c399090
Upon exit, flush stdout and stderr (twice: before and after the code that
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
518 } |
|
29ba6c399090
Upon exit, flush stdout and stderr (twice: before and after the code that
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
519 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
520 /* 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
|
521 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
522 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
|
523 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
|
524 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
|
525 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
|
526 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
527 (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
|
528 threads.) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
529 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
530 Locking: as above. |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
531 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
532 */ |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
533 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
534 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
535 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
|
536 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
537 PyInterpreterState *interp; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
538 PyThreadState *tstate; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
539 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
540 if (!initialized) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
541 return; |
|
16073
713ed6c6bcb5
Bug #128475: mimetools.encode (sometimes) fails when called from a thread.
Tim Peters <tim.peters@gmail.com>
parents:
15963
diff
changeset
|
542 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
543 wait_for_thread_shutdown(); |
|
56652
29b3e126c0c2
Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53994
diff
changeset
|
544 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
545 /* The interpreter is still entirely intact at this point, and the |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
546 * exit funcs may be relying on that. In particular, if some thread |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
547 * or exit func is still waiting to do an import, the import machinery |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
548 * expects Py_IsInitialized() to return true. So don't say the |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
549 * interpreter is uninitialized until after the exit funcs have run. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
550 * Note that Threading.py uses an exit func to do a join on all the |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
551 * threads created thru it, so this also protects pending imports in |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
552 * the threads created via Threading. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
553 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
554 call_py_exitfuncs(); |
|
69832
2a19d09b08f8
Issue #1856: Avoid crashes and lockups when daemon threads run while the
Antoine Pitrou <solipsis@pitrou.net>
parents:
69708
diff
changeset
|
555 |
|
2a19d09b08f8
Issue #1856: Avoid crashes and lockups when daemon threads run while the
Antoine Pitrou <solipsis@pitrou.net>
parents:
69708
diff
changeset
|
556 /* Get current thread state and interpreter pointer */ |
|
2a19d09b08f8
Issue #1856: Avoid crashes and lockups when daemon threads run while the
Antoine Pitrou <solipsis@pitrou.net>
parents:
69708
diff
changeset
|
557 tstate = PyThreadState_GET(); |
|
2a19d09b08f8
Issue #1856: Avoid crashes and lockups when daemon threads run while the
Antoine Pitrou <solipsis@pitrou.net>
parents:
69708
diff
changeset
|
558 interp = tstate->interp; |
|
2a19d09b08f8
Issue #1856: Avoid crashes and lockups when daemon threads run while the
Antoine Pitrou <solipsis@pitrou.net>
parents:
69708
diff
changeset
|
559 |
|
2a19d09b08f8
Issue #1856: Avoid crashes and lockups when daemon threads run while the
Antoine Pitrou <solipsis@pitrou.net>
parents:
69708
diff
changeset
|
560 /* Remaining threads (e.g. daemon threads) will automatically exit |
|
2a19d09b08f8
Issue #1856: Avoid crashes and lockups when daemon threads run while the
Antoine Pitrou <solipsis@pitrou.net>
parents:
69708
diff
changeset
|
561 after taking the GIL (in PyEval_RestoreThread()). */ |
|
2a19d09b08f8
Issue #1856: Avoid crashes and lockups when daemon threads run while the
Antoine Pitrou <solipsis@pitrou.net>
parents:
69708
diff
changeset
|
562 _Py_Finalizing = tstate; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
563 initialized = 0; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
564 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
565 /* Flush stdout+stderr */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
566 flush_std_files(); |
|
42167
29ba6c399090
Upon exit, flush stdout and stderr (twice: before and after the code that
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
567 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
568 /* Disable signal handling */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
569 PyOS_FiniInterrupts(); |
|
6547
724382af5339
Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents:
6376
diff
changeset
|
570 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
571 /* Collect garbage. This may call finalizers; it's nice to call these |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
572 * before all modules are destroyed. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
573 * XXX If a __del__ or weakref callback is triggered here, and tries to |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
574 * XXX import a module, bad things can happen, because Python no |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
575 * XXX longer believes it's initialized. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
576 * XXX Fatal Python error: Interpreter not initialized (version mismatch?) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
577 * XXX is easy to provoke that way. I've also seen, e.g., |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
578 * XXX Exception exceptions.ImportError: 'No module named sha' |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
579 * XXX in <function callback at 0x008F5718> ignored |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
580 * XXX but I'm unclear on exactly how that one happens. In any case, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
581 * XXX I haven't seen a real-life report of either of these. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
582 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
583 PyGC_Collect(); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
584 #ifdef COUNT_ALLOCS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
585 /* With COUNT_ALLOCS, it helps to run GC multiple times: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
586 each collection might release some types from the type |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
587 list, so they become garbage. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
588 while (PyGC_Collect() > 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
589 /* nothing */; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
590 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
591 /* Destroy all modules */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
592 PyImport_Cleanup(); |
|
6547
724382af5339
Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents:
6376
diff
changeset
|
593 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
594 /* Flush stdout+stderr (again, in case more was printed) */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
595 flush_std_files(); |
|
42167
29ba6c399090
Upon exit, flush stdout and stderr (twice: before and after the code that
Guido van Rossum <guido@python.org>
parents:
42071
diff
changeset
|
596 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
597 /* Collect final garbage. This disposes of cycles created by |
|
73949
021e5bb297d1
Issue #13575: there is only one class type.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
73776
diff
changeset
|
598 * class definitions, for example. |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
599 * XXX This is disabled because it caused too many problems. If |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
600 * XXX a __del__ or weakref callback triggers here, Python code has |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
601 * XXX a hard time running, because even the sys module has been |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
602 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc). |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
603 * XXX One symptom is a sequence of information-free messages |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
604 * XXX coming from threads (if a __del__ or callback is invoked, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
605 * XXX other threads can execute too, and any exception they encounter |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
606 * XXX triggers a comedy of errors as subsystem after subsystem |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
607 * XXX fails to find what it *expects* to find in sys to help report |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
608 * XXX the exception and consequent unexpected failures). I've also |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
609 * XXX seen segfaults then, after adding print statements to the |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
610 * XXX Python code getting called. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
611 */ |
|
31057
f69589179c55
Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents:
30979
diff
changeset
|
612 #if 0 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
613 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
|
614 #endif |
|
28651
7fda09f751ad
- New C API PyGC_Collect(), same as calling gc.collect().
Guido van Rossum <guido@python.org>
parents:
28649
diff
changeset
|
615 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
616 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
617 _PyImport_Fini(); |
|
6786
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
618 |
|
83623
7de9852cdc0e
Fix crash caused by 8c1385205a35
Antoine Pitrou <solipsis@pitrou.net>
parents:
83612
diff
changeset
|
619 /* Cleanup typeobject.c's internal caches. */ |
|
7de9852cdc0e
Fix crash caused by 8c1385205a35
Antoine Pitrou <solipsis@pitrou.net>
parents:
83612
diff
changeset
|
620 _PyType_Fini(); |
|
7de9852cdc0e
Fix crash caused by 8c1385205a35
Antoine Pitrou <solipsis@pitrou.net>
parents:
83612
diff
changeset
|
621 |
|
69070
b0680b5a5215
Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
622 /* unload faulthandler module */ |
|
b0680b5a5215
Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
623 _PyFaulthandler_Fini(); |
|
b0680b5a5215
Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
624 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
625 /* Debugging stuff */ |
|
6786
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
626 #ifdef COUNT_ALLOCS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
627 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
|
628 #endif |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
629 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
630 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
|
631 |
|
28647
9d4e138494fb
Py_Finalize(): Reverted recent changes that tried to move the
Tim Peters <tim.peters@gmail.com>
parents:
28616
diff
changeset
|
632 #ifdef Py_TRACE_REFS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
633 /* Display all objects still alive -- this can invoke arbitrary |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
634 * __repr__ overrides, so requires a mostly-intact interpreter. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
635 * Alas, a lot of stuff may still be alive now that will be cleaned |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
636 * up later. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
637 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
638 if (Py_GETENV("PYTHONDUMPREFS")) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
639 _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
|
640 #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
|
641 |
|
83623
7de9852cdc0e
Fix crash caused by 8c1385205a35
Antoine Pitrou <solipsis@pitrou.net>
parents:
83612
diff
changeset
|
642 /* Clear interpreter state and all thread states. */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
643 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
|
644 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
645 /* Now we decref the exception classes. After this point nothing |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
646 can raise an exception. That's okay, because each Fini() method |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
647 below has been checked to make sure no exceptions are ever |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
648 raised. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
649 */ |
|
34834
7cfda9898863
Move exception finalisation later in the shutdown process - this
Anthony Baxter <anthonybaxter@gmail.com>
parents:
34664
diff
changeset
|
650 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
651 _PyExc_Fini(); |
|
34834
7cfda9898863
Move exception finalisation later in the shutdown process - this
Anthony Baxter <anthonybaxter@gmail.com>
parents:
34664
diff
changeset
|
652 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
653 /* Sundry finalizers */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
654 PyMethod_Fini(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
655 PyFrame_Fini(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
656 PyCFunction_Fini(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
657 PyTuple_Fini(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
658 PyList_Fini(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
659 PySet_Fini(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
660 PyBytes_Fini(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
661 PyByteArray_Fini(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
662 PyLong_Fini(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
663 PyFloat_Fini(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
664 PyDict_Fini(); |
|
73617
fa2f8dd077e0
Issue #10227: Add an allocation cache for a single slice object.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72976
diff
changeset
|
665 PySlice_Fini(); |
|
83650
f0833e6ff2d2
Issue #1545463: Global variables caught in reference cycles are now garbage-collected at shutdown.
Antoine Pitrou <solipsis@pitrou.net>
parents:
83624
diff
changeset
|
666 _PyGC_Fini(); |
|
85468
acc7439b1406
Issue #18756: os.urandom() now uses a lazily-opened persistent file descriptor, so as to avoid using many file descriptors when run in parallel from multiple threads.
Antoine Pitrou <solipsis@pitrou.net>
parents:
85423
diff
changeset
|
667 _PyRandom_Fini(); |
|
5939
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
668 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
669 /* Cleanup Unicode implementation */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
670 _PyUnicode_Fini(); |
|
22883
d8bc68cb17e0
Move Unicode finalization further down in the chain.
Marc-André Lemburg <mal@egenix.com>
parents:
22721
diff
changeset
|
671 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
672 /* reset file system default encoding */ |
|
61593
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61566
diff
changeset
|
673 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) { |
|
84502
65f2c92ed079
Issue #18203: Add _PyMem_RawStrdup() and _PyMem_Strdup()
Victor Stinner <victor.stinner@gmail.com>
parents:
84489
diff
changeset
|
674 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
675 Py_FileSystemDefaultEncoding = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
676 } |
|
44064
00048fedbaa0
Partial fix for bug #1306
Christian Heimes <christian@cheimes.de>
parents:
43866
diff
changeset
|
677 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
678 /* XXX Still allocated: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
679 - various static ad-hoc pointers to interned strings |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
680 - int and float free list blocks |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
681 - whatever various modules and libraries allocate |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
682 */ |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
683 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
684 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
|
685 |
|
84489
213d6d7f5979
Issue #18203: Fix Py_Finalize(): destroy the GIL after the last call to
Victor Stinner <victor.stinner@gmail.com>
parents:
83650
diff
changeset
|
686 /* Cleanup auto-thread-state */ |
|
213d6d7f5979
Issue #18203: Fix Py_Finalize(): destroy the GIL after the last call to
Victor Stinner <victor.stinner@gmail.com>
parents:
83650
diff
changeset
|
687 #ifdef WITH_THREAD |
|
213d6d7f5979
Issue #18203: Fix Py_Finalize(): destroy the GIL after the last call to
Victor Stinner <victor.stinner@gmail.com>
parents:
83650
diff
changeset
|
688 _PyGILState_Fini(); |
|
213d6d7f5979
Issue #18203: Fix Py_Finalize(): destroy the GIL after the last call to
Victor Stinner <victor.stinner@gmail.com>
parents:
83650
diff
changeset
|
689 #endif /* WITH_THREAD */ |
|
213d6d7f5979
Issue #18203: Fix Py_Finalize(): destroy the GIL after the last call to
Victor Stinner <victor.stinner@gmail.com>
parents:
83650
diff
changeset
|
690 |
|
213d6d7f5979
Issue #18203: Fix Py_Finalize(): destroy the GIL after the last call to
Victor Stinner <victor.stinner@gmail.com>
parents:
83650
diff
changeset
|
691 /* Delete current thread. After this, many C API calls become crashy. */ |
|
213d6d7f5979
Issue #18203: Fix Py_Finalize(): destroy the GIL after the last call to
Victor Stinner <victor.stinner@gmail.com>
parents:
83650
diff
changeset
|
692 PyThreadState_Swap(NULL); |
|
213d6d7f5979
Issue #18203: Fix Py_Finalize(): destroy the GIL after the last call to
Victor Stinner <victor.stinner@gmail.com>
parents:
83650
diff
changeset
|
693 PyInterpreterState_Delete(interp); |
|
213d6d7f5979
Issue #18203: Fix Py_Finalize(): destroy the GIL after the last call to
Victor Stinner <victor.stinner@gmail.com>
parents:
83650
diff
changeset
|
694 |
|
28653
56006d97bcef
_Py_PrintReferences(): Changed to print object address at start of each
Tim Peters <tim.peters@gmail.com>
parents:
28651
diff
changeset
|
695 #ifdef Py_TRACE_REFS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
696 /* Display addresses (& refcnts) of all objects still alive. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
697 * An address can be used to find the repr of the object, printed |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
698 * above by _Py_PrintReferences. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
699 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
700 if (Py_GETENV("PYTHONDUMPREFS")) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
701 _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
|
702 #endif /* Py_TRACE_REFS */ |
|
23020
e2848618bd19
_PyObject_DebugDumpStats: renamed to _PyObject_DebugMallocStats.
Tim Peters <tim.peters@gmail.com>
parents:
22883
diff
changeset
|
703 #ifdef PYMALLOC_DEBUG |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
704 if (Py_GETENV("PYTHONMALLOCSTATS")) |
|
77577
d63a80abfbec
Issue #14785: Add sys._debugmallocstats() to help debug low-level memory allocation issues
David Malcolm <dmalcolm@redhat.com>
parents:
77519
diff
changeset
|
705 _PyObject_DebugMallocStats(stderr); |
|
23020
e2848618bd19
_PyObject_DebugDumpStats: renamed to _PyObject_DebugMallocStats.
Tim Peters <tim.peters@gmail.com>
parents:
22883
diff
changeset
|
706 #endif |
|
e2848618bd19
_PyObject_DebugDumpStats: renamed to _PyObject_DebugMallocStats.
Tim Peters <tim.peters@gmail.com>
parents:
22883
diff
changeset
|
707 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
708 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
|
709 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
710 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
711 /* 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
|
712 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
|
713 first. |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
714 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
715 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
|
716 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
|
717 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
|
718 thread. |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
719 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
720 Locking: as above. |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
721 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
722 */ |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
723 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
724 PyThreadState * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
725 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
|
726 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
727 PyInterpreterState *interp; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
728 PyThreadState *tstate, *save_tstate; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
729 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
|
730 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
731 if (!initialized) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
732 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
|
733 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
734 interp = PyInterpreterState_New(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
735 if (interp == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
736 return NULL; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
737 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
738 tstate = PyThreadState_New(interp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
739 if (tstate == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
740 PyInterpreterState_Delete(interp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
741 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
742 } |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
743 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
744 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
|
745 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
746 /* 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
|
747 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
748 interp->modules = PyDict_New(); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
749 |
|
65418
fd5135cbd928
_PyImport_FixupExtension() and _PyImport_FindExtension() uses FS encoding
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65400
diff
changeset
|
750 bimod = _PyImport_FindBuiltin("builtins"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
751 if (bimod != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
752 interp->builtins = PyModule_GetDict(bimod); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
753 if (interp->builtins == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
754 goto handle_error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
755 Py_INCREF(interp->builtins); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
756 } |
|
49613
efef5fc45a9a
Issue 3723: Fixed initialization of subinterpreters
Christian Heimes <christian@cheimes.de>
parents:
49611
diff
changeset
|
757 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
758 /* initialize builtin exceptions */ |
|
76303
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
759 _PyExc_Init(bimod); |
|
49613
efef5fc45a9a
Issue 3723: Fixed initialization of subinterpreters
Christian Heimes <christian@cheimes.de>
parents:
49611
diff
changeset
|
760 |
|
65418
fd5135cbd928
_PyImport_FixupExtension() and _PyImport_FindExtension() uses FS encoding
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65400
diff
changeset
|
761 sysmod = _PyImport_FindBuiltin("sys"); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
762 if (bimod != NULL && sysmod != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
763 PyObject *pstderr; |
|
76303
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
764 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
765 interp->sysdict = PyModule_GetDict(sysmod); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
766 if (interp->sysdict == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
767 goto handle_error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
768 Py_INCREF(interp->sysdict); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
769 PySys_SetPath(Py_GetPath()); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
770 PyDict_SetItemString(interp->sysdict, "modules", |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
771 interp->modules); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
772 /* Set up a preliminary stderr printer until we have enough |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
773 infrastructure for the io module in place. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
774 pstderr = PyFile_NewStdPrinter(fileno(stderr)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
775 if (pstderr == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
776 Py_FatalError("Py_Initialize: can't set preliminary stderr"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
777 PySys_SetObject("stderr", pstderr); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
778 PySys_SetObject("__stderr__", pstderr); |
|
65763
b03779f00739
Merged revisions 85980 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
65696
diff
changeset
|
779 Py_DECREF(pstderr); |
|
49613
efef5fc45a9a
Issue 3723: Fixed initialization of subinterpreters
Christian Heimes <christian@cheimes.de>
parents:
49611
diff
changeset
|
780 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
781 _PyImportHooks_Init(); |
|
69708
2caf82aee7a4
Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69707
diff
changeset
|
782 |
|
76303
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
783 import_init(interp, sysmod); |
|
2dd046be2c88
Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents:
76085
diff
changeset
|
784 |
|
69708
2caf82aee7a4
Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69707
diff
changeset
|
785 if (initfsencoding(interp) < 0) |
|
2caf82aee7a4
Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69707
diff
changeset
|
786 goto handle_error; |
|
2caf82aee7a4
Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69707
diff
changeset
|
787 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
788 if (initstdio() < 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
789 Py_FatalError( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
790 "Py_Initialize: can't initialize sys standard streams"); |
|
78107
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
791 initmain(interp); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
792 if (!Py_NoSiteFlag) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
793 initsite(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
794 } |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
795 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
796 if (!PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
797 return tstate; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
798 |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
799 handle_error: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
800 /* 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
|
801 |
|
69707
5a983773c09a
Issue #10914: Py_NewInterpreter() uses PyErr_PrintEx(0)
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
802 PyErr_PrintEx(0); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
803 PyThreadState_Clear(tstate); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
804 PyThreadState_Swap(save_tstate); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
805 PyThreadState_Delete(tstate); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
806 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
|
807 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
808 return NULL; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
809 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
810 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
811 /* 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
|
812 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
|
813 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
|
814 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
|
815 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
816 (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
|
817 everything, regardless.) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
818 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
819 Locking: as above. |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
820 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
821 */ |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
822 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
823 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
824 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
|
825 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
826 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
|
827 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
828 if (tstate != PyThreadState_GET()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
829 Py_FatalError("Py_EndInterpreter: thread is not current"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
830 if (tstate->frame != NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
831 Py_FatalError("Py_EndInterpreter: thread still has a frame"); |
|
85398
becbb65074e1
Issue #18808: Non-daemon threads are now automatically joined when a sub-interpreter is shutdown (it would previously dump a fatal error).
Antoine Pitrou <solipsis@pitrou.net>
parents:
85081
diff
changeset
|
832 |
|
becbb65074e1
Issue #18808: Non-daemon threads are now automatically joined when a sub-interpreter is shutdown (it would previously dump a fatal error).
Antoine Pitrou <solipsis@pitrou.net>
parents:
85081
diff
changeset
|
833 wait_for_thread_shutdown(); |
|
becbb65074e1
Issue #18808: Non-daemon threads are now automatically joined when a sub-interpreter is shutdown (it would previously dump a fatal error).
Antoine Pitrou <solipsis@pitrou.net>
parents:
85081
diff
changeset
|
834 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
835 if (tstate != interp->tstate_head || tstate->next != NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
836 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
|
837 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
838 PyImport_Cleanup(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
839 PyInterpreterState_Clear(interp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
840 PyThreadState_Swap(NULL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
841 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
|
842 } |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
843 |
|
77949
c97d78415f5a
Issue #15020: The program name used to search for Python's path is now "python3" under Unix, not "python".
Antoine Pitrou <solipsis@pitrou.net>
parents:
76084
diff
changeset
|
844 #ifdef MS_WINDOWS |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
46299
diff
changeset
|
845 static wchar_t *progname = L"python"; |
|
77949
c97d78415f5a
Issue #15020: The program name used to search for Python's path is now "python3" under Unix, not "python".
Antoine Pitrou <solipsis@pitrou.net>
parents:
76084
diff
changeset
|
846 #else |
|
c97d78415f5a
Issue #15020: The program name used to search for Python's path is now "python3" under Unix, not "python".
Antoine Pitrou <solipsis@pitrou.net>
parents:
76084
diff
changeset
|
847 static wchar_t *progname = L"python3"; |
|
c97d78415f5a
Issue #15020: The program name used to search for Python's path is now "python3" under Unix, not "python".
Antoine Pitrou <solipsis@pitrou.net>
parents:
76084
diff
changeset
|
848 #endif |
|
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
|
849 |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
850 void |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
46299
diff
changeset
|
851 Py_SetProgramName(wchar_t *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
|
852 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
853 if (pn && *pn) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
854 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
|
855 } |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
856 |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
46299
diff
changeset
|
857 wchar_t * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
858 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
|
859 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
860 return progname; |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
861 } |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
862 |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
46299
diff
changeset
|
863 static wchar_t *default_home = NULL; |
|
85423
0424f4761500
pythonrun.c: use MAXPATHLEN instead of PATH_MAX
Victor Stinner <victor.stinner@gmail.com>
parents:
85420
diff
changeset
|
864 static wchar_t env_home[MAXPATHLEN+1]; |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
865 |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
866 void |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
46299
diff
changeset
|
867 Py_SetPythonHome(wchar_t *home) |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
868 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
869 default_home = home; |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
870 } |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
871 |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
46299
diff
changeset
|
872 wchar_t * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
873 Py_GetPythonHome(void) |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
874 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
875 wchar_t *home = default_home; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
876 if (home == NULL && !Py_IgnoreEnvironmentFlag) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
877 char* chome = Py_GETENV("PYTHONHOME"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
878 if (chome) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
879 size_t r = mbstowcs(env_home, chome, PATH_MAX+1); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
880 if (r != (size_t)-1 && r <= PATH_MAX) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
881 home = env_home; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
882 } |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
46299
diff
changeset
|
883 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
884 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
885 return home; |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
886 } |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
887 |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
888 /* Create __main__ module */ |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
889 |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
890 static void |
|
78107
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
891 initmain(PyInterpreterState *interp) |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
892 { |
|
83619
97b7bd87c44c
#17115: I hate you MS for not supporting C99.
Brett Cannon <brett@python.org>
parents:
83613
diff
changeset
|
893 PyObject *m, *d, *loader; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
894 m = PyImport_AddModule("__main__"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
895 if (m == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
896 Py_FatalError("can't create __main__ module"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
897 d = PyModule_GetDict(m); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
898 if (PyDict_GetItemString(d, "__builtins__") == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
899 PyObject *bimod = PyImport_ImportModule("builtins"); |
|
78107
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
900 if (bimod == NULL) { |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
901 Py_FatalError("Failed to retrieve builtins module"); |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
902 } |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
903 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) { |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
904 Py_FatalError("Failed to initialize __main__.__builtins__"); |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
905 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
906 Py_DECREF(bimod); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
907 } |
|
78107
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
908 /* Main is a little special - imp.is_builtin("__main__") will return |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
909 * False, but BuiltinImporter is still the most appropriate initial |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
910 * setting for its __loader__ attribute. A more suitable value will |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
911 * be set if __main__ gets further initialized later in the startup |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
912 * process. |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
913 */ |
|
83619
97b7bd87c44c
#17115: I hate you MS for not supporting C99.
Brett Cannon <brett@python.org>
parents:
83613
diff
changeset
|
914 loader = PyDict_GetItemString(d, "__loader__"); |
|
83607
e39a8f8ceb9f
#17115,17116: Have modules initialize the __package__ and __loader__
Brett Cannon <brett@python.org>
parents:
83552
diff
changeset
|
915 if (loader == NULL || loader == Py_None) { |
|
78107
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
916 PyObject *loader = PyObject_GetAttrString(interp->importlib, |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
917 "BuiltinImporter"); |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
918 if (loader == NULL) { |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
919 Py_FatalError("Failed to retrieve BuiltinImporter"); |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
920 } |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
921 if (PyDict_SetItemString(d, "__loader__", loader) < 0) { |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
922 Py_FatalError("Failed to initialize __main__.__loader__"); |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
923 } |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
924 Py_DECREF(loader); |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
925 } |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
926 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
927 |
|
69708
2caf82aee7a4
Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69707
diff
changeset
|
928 static int |
|
2caf82aee7a4
Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69707
diff
changeset
|
929 initfsencoding(PyInterpreterState *interp) |
|
61593
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61566
diff
changeset
|
930 { |
|
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61566
diff
changeset
|
931 PyObject *codec; |
|
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61566
diff
changeset
|
932 |
|
71191
7ce685cda0ae
Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70402
diff
changeset
|
933 if (Py_FileSystemDefaultEncoding == NULL) |
|
7ce685cda0ae
Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70402
diff
changeset
|
934 { |
|
7ce685cda0ae
Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70402
diff
changeset
|
935 Py_FileSystemDefaultEncoding = get_locale_encoding(); |
|
7ce685cda0ae
Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70402
diff
changeset
|
936 if (Py_FileSystemDefaultEncoding == NULL) |
|
65535
e2ba1249a2f5
initfsencoding(): get_codeset() failure is now a fatal error
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65418
diff
changeset
|
937 Py_FatalError("Py_Initialize: Unable to get the locale encoding"); |
|
62231
72f774903772
Issue #8965: initfsencoding() doesn't change the encoding on Mac OS X
Victor Stinner <victor.stinner@haypocalc.com>
parents:
62192
diff
changeset
|
938 |
|
65535
e2ba1249a2f5
initfsencoding(): get_codeset() failure is now a fatal error
Victor Stinner <victor.stinner@haypocalc.com>
parents:
65418
diff
changeset
|
939 Py_HasFileSystemDefaultEncoding = 0; |
|
69708
2caf82aee7a4
Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69707
diff
changeset
|
940 interp->fscodec_initialized = 1; |
|
2caf82aee7a4
Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69707
diff
changeset
|
941 return 0; |
|
61593
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61566
diff
changeset
|
942 } |
|
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61566
diff
changeset
|
943 |
|
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61566
diff
changeset
|
944 /* the encoding is mbcs, utf-8 or ascii */ |
|
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61566
diff
changeset
|
945 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding); |
|
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61566
diff
changeset
|
946 if (!codec) { |
|
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61566
diff
changeset
|
947 /* Such error can only occurs in critical situations: no more |
|
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61566
diff
changeset
|
948 * memory, import a module of the standard library failed, |
|
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61566
diff
changeset
|
949 * etc. */ |
|
69708
2caf82aee7a4
Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69707
diff
changeset
|
950 return -1; |
|
61593
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61566
diff
changeset
|
951 } |
|
69708
2caf82aee7a4
Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69707
diff
changeset
|
952 Py_DECREF(codec); |
|
2caf82aee7a4
Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69707
diff
changeset
|
953 interp->fscodec_initialized = 1; |
|
2caf82aee7a4
Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69707
diff
changeset
|
954 return 0; |
|
61593
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61566
diff
changeset
|
955 } |
|
47b4da86b9b9
Issue #8610: Load file system codec at startup, and display a fatal error on
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61566
diff
changeset
|
956 |
|
6201
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
957 /* Import the site module (not into __main__ though) */ |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
958 |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
959 static void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
960 initsite(void) |
|
6201
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
961 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
962 PyObject *m; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
963 m = PyImport_ImportModule("site"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
964 if (m == NULL) { |
|
84796
d38348173c46
Issue #18520: initsite() is a little bit more verbose when import site fails
Victor Stinner <victor.stinner@gmail.com>
parents:
84793
diff
changeset
|
965 fprintf(stderr, "Failed to import the site module\n"); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
966 PyErr_Print(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
967 Py_Finalize(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
968 exit(1); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
969 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
970 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
971 Py_DECREF(m); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
972 } |
|
6201
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
973 } |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
974 |
|
50666
b98fe8dc8acd
Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50559
diff
changeset
|
975 static PyObject* |
|
b98fe8dc8acd
Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50559
diff
changeset
|
976 create_stdio(PyObject* io, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
977 int fd, int write_mode, char* name, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
978 char* encoding, char* errors) |
|
50666
b98fe8dc8acd
Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50559
diff
changeset
|
979 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
980 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
981 const char* mode; |
|
68118
aba16a5683d3
Issue #11272: Fix input() and sys.stdin for Windows newline
Victor Stinner <victor.stinner@haypocalc.com>
parents:
67347
diff
changeset
|
982 const char* newline; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
983 PyObject *line_buffering; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
984 int buffering, isatty; |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
985 _Py_IDENTIFIER(open); |
|
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
986 _Py_IDENTIFIER(isatty); |
|
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
987 _Py_IDENTIFIER(TextIOWrapper); |
|
72926
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
988 _Py_IDENTIFIER(name); |
|
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
989 _Py_IDENTIFIER(mode); |
|
50666
b98fe8dc8acd
Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50559
diff
changeset
|
990 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
991 /* stdin is always opened in buffered mode, first because it shouldn't |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
992 make a difference in common use cases, second because TextIOWrapper |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
993 depends on the presence of a read1() method which only exists on |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
994 buffered streams. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
995 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
996 if (Py_UnbufferedStdioFlag && write_mode) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
997 buffering = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
998 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
999 buffering = -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1000 if (write_mode) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1001 mode = "wb"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1002 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1003 mode = "rb"; |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72424
diff
changeset
|
1004 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi", |
|
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72424
diff
changeset
|
1005 fd, mode, buffering, |
|
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72424
diff
changeset
|
1006 Py_None, Py_None, Py_None, 0); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1007 if (buf == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1008 goto error; |
|
50666
b98fe8dc8acd
Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50559
diff
changeset
|
1009 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1010 if (buffering) { |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
1011 _Py_IDENTIFIER(raw); |
|
72848
81380082d216
Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents:
72835
diff
changeset
|
1012 raw = _PyObject_GetAttrId(buf, &PyId_raw); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1013 if (raw == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1014 goto error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1015 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1016 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1017 raw = buf; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1018 Py_INCREF(raw); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1019 } |
|
50666
b98fe8dc8acd
Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50559
diff
changeset
|
1020 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1021 text = PyUnicode_FromString(name); |
|
72926
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
1022 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1023 goto error; |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72424
diff
changeset
|
1024 res = _PyObject_CallMethodId(raw, &PyId_isatty, ""); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1025 if (res == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1026 goto error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1027 isatty = PyObject_IsTrue(res); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1028 Py_DECREF(res); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1029 if (isatty == -1) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1030 goto error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1031 if (isatty || Py_UnbufferedStdioFlag) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1032 line_buffering = Py_True; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1033 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1034 line_buffering = Py_False; |
|
50678
9c2bd647b646
Merged revisions 68463 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50666
diff
changeset
|
1035 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1036 Py_CLEAR(raw); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1037 Py_CLEAR(text); |
|
50666
b98fe8dc8acd
Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50559
diff
changeset
|
1038 |
|
78406
09408b990ca5
Close #13119: use "\r\n" newline for sys.stdout/err on Windows
Victor Stinner <victor.stinner@gmail.com>
parents:
77949
diff
changeset
|
1039 #ifdef MS_WINDOWS |
|
09408b990ca5
Close #13119: use "\r\n" newline for sys.stdout/err on Windows
Victor Stinner <victor.stinner@gmail.com>
parents:
77949
diff
changeset
|
1040 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r" |
|
09408b990ca5
Close #13119: use "\r\n" newline for sys.stdout/err on Windows
Victor Stinner <victor.stinner@gmail.com>
parents:
77949
diff
changeset
|
1041 newlines to "\n". |
|
09408b990ca5
Close #13119: use "\r\n" newline for sys.stdout/err on Windows
Victor Stinner <victor.stinner@gmail.com>
parents:
77949
diff
changeset
|
1042 sys.stdout and sys.stderr: translate "\n" to "\r\n". */ |
|
09408b990ca5
Close #13119: use "\r\n" newline for sys.stdout/err on Windows
Victor Stinner <victor.stinner@gmail.com>
parents:
77949
diff
changeset
|
1043 newline = NULL; |
|
09408b990ca5
Close #13119: use "\r\n" newline for sys.stdout/err on Windows
Victor Stinner <victor.stinner@gmail.com>
parents:
77949
diff
changeset
|
1044 #else |
|
09408b990ca5
Close #13119: use "\r\n" newline for sys.stdout/err on Windows
Victor Stinner <victor.stinner@gmail.com>
parents:
77949
diff
changeset
|
1045 /* sys.stdin: split lines at "\n". |
|
09408b990ca5
Close #13119: use "\r\n" newline for sys.stdout/err on Windows
Victor Stinner <victor.stinner@gmail.com>
parents:
77949
diff
changeset
|
1046 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */ |
|
68118
aba16a5683d3
Issue #11272: Fix input() and sys.stdin for Windows newline
Victor Stinner <victor.stinner@haypocalc.com>
parents:
67347
diff
changeset
|
1047 newline = "\n"; |
|
aba16a5683d3
Issue #11272: Fix input() and sys.stdin for Windows newline
Victor Stinner <victor.stinner@haypocalc.com>
parents:
67347
diff
changeset
|
1048 #endif |
|
aba16a5683d3
Issue #11272: Fix input() and sys.stdin for Windows newline
Victor Stinner <victor.stinner@haypocalc.com>
parents:
67347
diff
changeset
|
1049 |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72424
diff
changeset
|
1050 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssO", |
|
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72424
diff
changeset
|
1051 buf, encoding, errors, |
|
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72424
diff
changeset
|
1052 newline, line_buffering); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1053 Py_CLEAR(buf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1054 if (stream == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1055 goto error; |
|
50666
b98fe8dc8acd
Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50559
diff
changeset
|
1056 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1057 if (write_mode) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1058 mode = "w"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1059 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1060 mode = "r"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1061 text = PyUnicode_FromString(mode); |
|
72926
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
1062 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1063 goto error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1064 Py_CLEAR(text); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1065 return stream; |
|
50666
b98fe8dc8acd
Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50559
diff
changeset
|
1066 |
|
b98fe8dc8acd
Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50559
diff
changeset
|
1067 error: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1068 Py_XDECREF(buf); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1069 Py_XDECREF(stream); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1070 Py_XDECREF(text); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1071 Py_XDECREF(raw); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1072 return NULL; |
|
50666
b98fe8dc8acd
Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50559
diff
changeset
|
1073 } |
|
b98fe8dc8acd
Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
50559
diff
changeset
|
1074 |
|
73775
f15943505db0
Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73761
diff
changeset
|
1075 static int |
|
f15943505db0
Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73761
diff
changeset
|
1076 is_valid_fd(int fd) |
|
f15943505db0
Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73761
diff
changeset
|
1077 { |
|
f15943505db0
Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73761
diff
changeset
|
1078 int dummy_fd; |
|
f15943505db0
Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73761
diff
changeset
|
1079 if (fd < 0 || !_PyVerify_fd(fd)) |
|
f15943505db0
Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73761
diff
changeset
|
1080 return 0; |
|
f15943505db0
Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73761
diff
changeset
|
1081 dummy_fd = dup(fd); |
|
f15943505db0
Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73761
diff
changeset
|
1082 if (dummy_fd < 0) |
|
f15943505db0
Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73761
diff
changeset
|
1083 return 0; |
|
f15943505db0
Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73761
diff
changeset
|
1084 close(dummy_fd); |
|
f15943505db0
Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73761
diff
changeset
|
1085 return 1; |
|
f15943505db0
Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73761
diff
changeset
|
1086 } |
|
f15943505db0
Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73761
diff
changeset
|
1087 |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
44066
diff
changeset
|
1088 /* Initialize sys.stdin, stdout, stderr and builtins.open */ |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1089 static int |
|
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1090 initstdio(void) |
|
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1091 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1092 PyObject *iomod = NULL, *wrapper; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1093 PyObject *bimod = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1094 PyObject *m; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1095 PyObject *std = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1096 int status = 0, fd; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1097 PyObject * encoding_attr; |
|
85673
c7fdb0637d0b
Issue #18818: The "encodingname" part of PYTHONIOENCODING is now optional.
Serhiy Storchaka <storchaka@gmail.com>
parents:
85468
diff
changeset
|
1098 char *pythonioencoding = NULL, *encoding, *errors; |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1099 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1100 /* Hack to avoid a nasty recursion issue when Python is invoked |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1101 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1102 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1103 goto error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1104 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1105 Py_DECREF(m); |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1106 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1107 if (!(m = PyImport_ImportModule("encodings.latin_1"))) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1108 goto error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1109 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1110 Py_DECREF(m); |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1111 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1112 if (!(bimod = PyImport_ImportModule("builtins"))) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1113 goto error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1114 } |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1115 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1116 if (!(iomod = PyImport_ImportModule("io"))) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1117 goto error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1118 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1119 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1120 goto error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1121 } |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1122 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1123 /* Set builtins.open */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1124 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) { |
|
66318
6eabf8c1a75c
Issue #10255: Fix reference leak in Py_InitializeEx(). Patch by Neil
Antoine Pitrou <solipsis@pitrou.net>
parents:
66137
diff
changeset
|
1125 Py_DECREF(wrapper); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1126 goto error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1127 } |
|
66318
6eabf8c1a75c
Issue #10255: Fix reference leak in Py_InitializeEx(). Patch by Neil
Antoine Pitrou <solipsis@pitrou.net>
parents:
66137
diff
changeset
|
1128 Py_DECREF(wrapper); |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1129 |
|
86399
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1130 encoding = _Py_StandardStreamEncoding; |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1131 errors = _Py_StandardStreamErrors; |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1132 if (!encoding || !errors) { |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1133 pythonioencoding = Py_GETENV("PYTHONIOENCODING"); |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1134 if (pythonioencoding) { |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1135 char *err; |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1136 pythonioencoding = _PyMem_Strdup(pythonioencoding); |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1137 if (pythonioencoding == NULL) { |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1138 PyErr_NoMemory(); |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1139 goto error; |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1140 } |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1141 err = strchr(pythonioencoding, ':'); |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1142 if (err) { |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1143 *err = '\0'; |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1144 err++; |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1145 if (*err && !errors) { |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1146 errors = err; |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1147 } |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1148 } |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1149 if (*pythonioencoding && !encoding) { |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1150 encoding = pythonioencoding; |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1151 } |
|
84502
65f2c92ed079
Issue #18203: Add _PyMem_RawStrdup() and _PyMem_Strdup()
Victor Stinner <victor.stinner@gmail.com>
parents:
84489
diff
changeset
|
1152 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1153 } |
|
47444
bb2c4bdc3c68
Forward-port PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
1154 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1155 /* Set sys.stdin */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1156 fd = fileno(stdin); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1157 /* Under some conditions stdin, stdout and stderr may not be connected |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1158 * and fileno() may point to an invalid file descriptor. For example |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1159 * GUI apps don't have valid standard streams by default. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1160 */ |
|
73775
f15943505db0
Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73761
diff
changeset
|
1161 if (!is_valid_fd(fd)) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1162 std = Py_None; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1163 Py_INCREF(std); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1164 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1165 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1166 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1167 if (std == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1168 goto error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1169 } /* if (fd < 0) */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1170 PySys_SetObject("__stdin__", std); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1171 PySys_SetObject("stdin", std); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1172 Py_DECREF(std); |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1173 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1174 /* Set sys.stdout */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1175 fd = fileno(stdout); |
|
73775
f15943505db0
Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73761
diff
changeset
|
1176 if (!is_valid_fd(fd)) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1177 std = Py_None; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1178 Py_INCREF(std); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1179 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1180 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1181 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1182 if (std == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1183 goto error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1184 } /* if (fd < 0) */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1185 PySys_SetObject("__stdout__", std); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1186 PySys_SetObject("stdout", std); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1187 Py_DECREF(std); |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1188 |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43718
diff
changeset
|
1189 #if 1 /* Disable this if you have trouble debugging bootstrap stuff */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1190 /* Set sys.stderr, replaces the preliminary stderr */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1191 fd = fileno(stderr); |
|
73775
f15943505db0
Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73761
diff
changeset
|
1192 if (!is_valid_fd(fd)) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1193 std = Py_None; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1194 Py_INCREF(std); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1195 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1196 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1197 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1198 if (std == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1199 goto error; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1200 } /* if (fd < 0) */ |
|
45914
4284718fb631
Issue2297: Fix a stack overflow in Windows caused by -v and -vv. When python is invoked with -v or -vv under Windows, the process of importing the codec for sys.stderr causes a message to be written to stderr, which in turn causes the codec to be recursively imported. Sometimes the stack overflow exception is swallowed, other times it is not. The bug depends on the particular locale settings of the Windows machine.
Trent Nelson <trent.nelson@snakebite.org>
parents:
45399
diff
changeset
|
1201 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1202 /* Same as hack above, pre-import stderr's codec to avoid recursion |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1203 when import.c tries to write to stderr in verbose mode. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1204 encoding_attr = PyObject_GetAttrString(std, "encoding"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1205 if (encoding_attr != NULL) { |
|
84502
65f2c92ed079
Issue #18203: Add _PyMem_RawStrdup() and _PyMem_Strdup()
Victor Stinner <victor.stinner@gmail.com>
parents:
84489
diff
changeset
|
1206 const char * std_encoding; |
|
65f2c92ed079
Issue #18203: Add _PyMem_RawStrdup() and _PyMem_Strdup()
Victor Stinner <victor.stinner@gmail.com>
parents:
84489
diff
changeset
|
1207 std_encoding = _PyUnicode_AsString(encoding_attr); |
|
65f2c92ed079
Issue #18203: Add _PyMem_RawStrdup() and _PyMem_Strdup()
Victor Stinner <victor.stinner@gmail.com>
parents:
84489
diff
changeset
|
1208 if (std_encoding != NULL) { |
|
65f2c92ed079
Issue #18203: Add _PyMem_RawStrdup() and _PyMem_Strdup()
Victor Stinner <victor.stinner@gmail.com>
parents:
84489
diff
changeset
|
1209 PyObject *codec_info = _PyCodec_Lookup(std_encoding); |
|
74496
93e86b9318f7
Fix a memory leak when initializing the standard I/O streams.
Antoine Pitrou <solipsis@pitrou.net>
parents:
73775
diff
changeset
|
1210 Py_XDECREF(codec_info); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1211 } |
|
65763
b03779f00739
Merged revisions 85980 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
65696
diff
changeset
|
1212 Py_DECREF(encoding_attr); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1213 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1214 PyErr_Clear(); /* Not a fatal error if codec isn't available */ |
|
45914
4284718fb631
Issue2297: Fix a stack overflow in Windows caused by -v and -vv. When python is invoked with -v or -vv under Windows, the process of importing the codec for sys.stderr causes a message to be written to stderr, which in turn causes the codec to be recursively imported. Sometimes the stack overflow exception is swallowed, other times it is not. The bug depends on the particular locale settings of the Windows machine.
Trent Nelson <trent.nelson@snakebite.org>
parents:
45399
diff
changeset
|
1215 |
|
84800
a4998e8fd7fc
Issue #18520: Fix initstdio(), handle PySys_SetObject() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84796
diff
changeset
|
1216 if (PySys_SetObject("__stderr__", std) < 0) { |
|
a4998e8fd7fc
Issue #18520: Fix initstdio(), handle PySys_SetObject() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84796
diff
changeset
|
1217 Py_DECREF(std); |
|
a4998e8fd7fc
Issue #18520: Fix initstdio(), handle PySys_SetObject() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84796
diff
changeset
|
1218 goto error; |
|
a4998e8fd7fc
Issue #18520: Fix initstdio(), handle PySys_SetObject() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84796
diff
changeset
|
1219 } |
|
a4998e8fd7fc
Issue #18520: Fix initstdio(), handle PySys_SetObject() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84796
diff
changeset
|
1220 if (PySys_SetObject("stderr", std) < 0) { |
|
a4998e8fd7fc
Issue #18520: Fix initstdio(), handle PySys_SetObject() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84796
diff
changeset
|
1221 Py_DECREF(std); |
|
a4998e8fd7fc
Issue #18520: Fix initstdio(), handle PySys_SetObject() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84796
diff
changeset
|
1222 goto error; |
|
a4998e8fd7fc
Issue #18520: Fix initstdio(), handle PySys_SetObject() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
84796
diff
changeset
|
1223 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1224 Py_DECREF(std); |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43718
diff
changeset
|
1225 #endif |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1226 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1227 if (0) { |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1228 error: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1229 status = -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1230 } |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1231 |
|
86399
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1232 /* We won't need them anymore. */ |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1233 if (_Py_StandardStreamEncoding) { |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1234 PyMem_RawFree(_Py_StandardStreamEncoding); |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1235 _Py_StandardStreamEncoding = NULL; |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1236 } |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1237 if (_Py_StandardStreamErrors) { |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1238 PyMem_RawFree(_Py_StandardStreamErrors); |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1239 _Py_StandardStreamErrors = NULL; |
|
9cd88b39ef62
Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents:
86333
diff
changeset
|
1240 } |
|
85673
c7fdb0637d0b
Issue #18818: The "encodingname" part of PYTHONIOENCODING is now optional.
Serhiy Storchaka <storchaka@gmail.com>
parents:
85468
diff
changeset
|
1241 PyMem_Free(pythonioencoding); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1242 Py_XDECREF(bimod); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1243 Py_XDECREF(iomod); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1244 return status; |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1245 } |
|
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
1246 |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1247 /* Parse input from a file and execute it */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1248 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1249 int |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1250 PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1251 PyCompilerFlags *flags) |
|
17125
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
1252 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1253 if (filename == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1254 filename = "???"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1255 if (Py_FdIsInteractive(fp, filename)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1256 int err = PyRun_InteractiveLoopFlags(fp, filename, flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1257 if (closeit) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1258 fclose(fp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1259 return err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1260 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1261 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1262 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1263 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1264 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1265 int |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
1266 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
|
1267 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1268 PyObject *v; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1269 int ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1270 PyCompilerFlags local_flags; |
|
16916
b0456d3a0f1f
Useful future statement support for the interactive interpreter
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16845
diff
changeset
|
1271 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1272 if (flags == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1273 flags = &local_flags; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1274 local_flags.cf_flags = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1275 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1276 v = PySys_GetObject("ps1"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1277 if (v == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1278 PySys_SetObject("ps1", v = PyUnicode_FromString(">>> ")); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1279 Py_XDECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1280 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1281 v = PySys_GetObject("ps2"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1282 if (v == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1283 PySys_SetObject("ps2", v = PyUnicode_FromString("... ")); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1284 Py_XDECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1285 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1286 for (;;) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1287 ret = PyRun_InteractiveOneFlags(fp, filename, flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1288 PRINT_TOTAL_REFS(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1289 if (ret == E_EOF) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1290 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1291 /* |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1292 if (ret == E_NOMEM) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1293 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1294 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1295 } |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1296 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1297 |
|
22468
eebae4f60d05
Disable the parser hacks that enabled the "yield" keyword using a future
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
22121
diff
changeset
|
1298 /* compute parser flags based on compiler flags */ |
|
51956
8fe2988cf550
ignore the coding cookie in compile(), exec(), and eval() if the source is a string #4626
Benjamin Peterson <benjamin@python.org>
parents:
51082
diff
changeset
|
1299 static int PARSER_FLAGS(PyCompilerFlags *flags) |
|
8fe2988cf550
ignore the coding cookie in compile(), exec(), and eval() if the source is a string #4626
Benjamin Peterson <benjamin@python.org>
parents:
51082
diff
changeset
|
1300 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1301 int parser_flags = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1302 if (!flags) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1303 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1304 if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1305 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1306 if (flags->cf_flags & PyCF_IGNORE_COOKIE) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1307 parser_flags |= PyPARSE_IGNORE_COOKIE; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1308 if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1309 parser_flags |= PyPARSE_BARRY_AS_BDFL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1310 return parser_flags; |
|
51956
8fe2988cf550
ignore the coding cookie in compile(), exec(), and eval() if the source is a string #4626
Benjamin Peterson <benjamin@python.org>
parents:
51082
diff
changeset
|
1311 } |
|
22468
eebae4f60d05
Disable the parser hacks that enabled the "yield" keyword using a future
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
22121
diff
changeset
|
1312 |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
1313 #if 0 |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
1314 /* Keep an example of flags with future keyword support. */ |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
1315 #define PARSER_FLAGS(flags) \ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1316 ((flags) ? ((((flags)->cf_flags & PyCF_DONT_IMPLY_DEDENT) ? \ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1317 PyPARSE_DONT_IMPLY_DEDENT : 0) \ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1318 | ((flags)->cf_flags & CO_FUTURE_WITH_STATEMENT ? \ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1319 PyPARSE_WITH_IS_KEYWORD : 0)) : 0) |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
1320 #endif |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39610
diff
changeset
|
1321 |
|
16916
b0456d3a0f1f
Useful future statement support for the interactive interpreter
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16845
diff
changeset
|
1322 int |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
1323 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
|
1324 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1325 PyObject *m, *d, *v, *w, *oenc = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1326 mod_ty mod; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1327 PyArena *arena; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1328 char *ps1 = "", *ps2 = "", *enc = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1329 int errcode = 0; |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
1330 _Py_IDENTIFIER(encoding); |
|
18615
0a90e5ec61b6
Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents:
18612
diff
changeset
|
1331 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1332 if (fp == stdin) { |
|
83551
68d1ac152b5d
ignore errors when trying to fetch sys.stdin.encoding (closes #17863)
Benjamin Peterson <benjamin@python.org>
parents:
80290
diff
changeset
|
1333 /* Fetch encoding from sys.stdin if possible. */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1334 v = PySys_GetObject("stdin"); |
|
83551
68d1ac152b5d
ignore errors when trying to fetch sys.stdin.encoding (closes #17863)
Benjamin Peterson <benjamin@python.org>
parents:
80290
diff
changeset
|
1335 if (v && v != Py_None) { |
|
68d1ac152b5d
ignore errors when trying to fetch sys.stdin.encoding (closes #17863)
Benjamin Peterson <benjamin@python.org>
parents:
80290
diff
changeset
|
1336 oenc = _PyObject_GetAttrId(v, &PyId_encoding); |
|
68d1ac152b5d
ignore errors when trying to fetch sys.stdin.encoding (closes #17863)
Benjamin Peterson <benjamin@python.org>
parents:
80290
diff
changeset
|
1337 if (oenc) |
|
68d1ac152b5d
ignore errors when trying to fetch sys.stdin.encoding (closes #17863)
Benjamin Peterson <benjamin@python.org>
parents:
80290
diff
changeset
|
1338 enc = _PyUnicode_AsString(oenc); |
|
68d1ac152b5d
ignore errors when trying to fetch sys.stdin.encoding (closes #17863)
Benjamin Peterson <benjamin@python.org>
parents:
80290
diff
changeset
|
1339 if (!enc) |
|
68d1ac152b5d
ignore errors when trying to fetch sys.stdin.encoding (closes #17863)
Benjamin Peterson <benjamin@python.org>
parents:
80290
diff
changeset
|
1340 PyErr_Clear(); |
|
68d1ac152b5d
ignore errors when trying to fetch sys.stdin.encoding (closes #17863)
Benjamin Peterson <benjamin@python.org>
parents:
80290
diff
changeset
|
1341 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1342 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1343 v = PySys_GetObject("ps1"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1344 if (v != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1345 v = PyObject_Str(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1346 if (v == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1347 PyErr_Clear(); |
|
61716
942b3c168f15
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61654
diff
changeset
|
1348 else if (PyUnicode_Check(v)) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1349 ps1 = _PyUnicode_AsString(v); |
|
61716
942b3c168f15
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61654
diff
changeset
|
1350 if (ps1 == NULL) { |
|
942b3c168f15
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61654
diff
changeset
|
1351 PyErr_Clear(); |
|
942b3c168f15
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61654
diff
changeset
|
1352 ps1 = ""; |
|
942b3c168f15
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61654
diff
changeset
|
1353 } |
|
942b3c168f15
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61654
diff
changeset
|
1354 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1355 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1356 w = PySys_GetObject("ps2"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1357 if (w != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1358 w = PyObject_Str(w); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1359 if (w == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1360 PyErr_Clear(); |
|
61716
942b3c168f15
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61654
diff
changeset
|
1361 else if (PyUnicode_Check(w)) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1362 ps2 = _PyUnicode_AsString(w); |
|
61716
942b3c168f15
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61654
diff
changeset
|
1363 if (ps2 == NULL) { |
|
942b3c168f15
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61654
diff
changeset
|
1364 PyErr_Clear(); |
|
942b3c168f15
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61654
diff
changeset
|
1365 ps2 = ""; |
|
942b3c168f15
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61654
diff
changeset
|
1366 } |
|
942b3c168f15
Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61654
diff
changeset
|
1367 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1368 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1369 arena = PyArena_New(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1370 if (arena == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1371 Py_XDECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1372 Py_XDECREF(w); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1373 Py_XDECREF(oenc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1374 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1375 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1376 mod = PyParser_ASTFromFile(fp, filename, enc, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1377 Py_single_input, ps1, ps2, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1378 flags, &errcode, arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1379 Py_XDECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1380 Py_XDECREF(w); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1381 Py_XDECREF(oenc); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1382 if (mod == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1383 PyArena_Free(arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1384 if (errcode == E_EOF) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1385 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1386 return E_EOF; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1387 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1388 PyErr_Print(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1389 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1390 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1391 m = PyImport_AddModule("__main__"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1392 if (m == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1393 PyArena_Free(arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1394 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1395 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1396 d = PyModule_GetDict(m); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1397 v = run_mod(mod, filename, d, d, flags, arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1398 PyArena_Free(arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1399 flush_io(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1400 if (v == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1401 PyErr_Print(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1402 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1403 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1404 Py_DECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1405 return 0; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1406 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1407 |
|
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
|
1408 /* 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
|
1409 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
|
1410 |
|
76caf0855d1f
Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents:
14637
diff
changeset
|
1411 static int |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
1412 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
|
1413 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1414 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1415 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
|
1416 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1417 /* Only look into the file if we are allowed to close it, since |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1418 it then should also be seekable. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1419 if (closeit) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1420 /* Read only two bytes of the magic. If the file was opened in |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1421 text mode, the bytes 3 and 4 of the magic (\r\n) might not |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1422 be read as they are on disk. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1423 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1424 unsigned char buf[2]; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1425 /* Mess: In case of -x, the stream is NOT at its start now, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1426 and ungetc() was used to push back the first newline, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1427 which makes the current stream position formally undefined, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1428 and a x-platform nightmare. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1429 Unfortunately, we have no direct way to know whether -x |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1430 was specified. So we use a terrible hack: if the current |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1431 stream position is not 0, we assume -x was specified, and |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1432 give up. Bug 132850 on SourceForge spells out the |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1433 hopelessness of trying anything else (fseek and ftell |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1434 don't work predictably x-platform for text-mode files). |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1435 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1436 int ispyc = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1437 if (ftell(fp) == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1438 if (fread(buf, 1, 2, fp) == 2 && |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1439 ((unsigned int)buf[1]<<8 | buf[0]) == halfmagic) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1440 ispyc = 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1441 rewind(fp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1442 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1443 return ispyc; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1444 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1445 return 0; |
|
28648
0e8416be208e
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
28647
diff
changeset
|
1446 } |
|
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
|
1447 |
| 84933 | 1448 static int |
| 1449 set_main_loader(PyObject *d, const char *filename, const char *loader_name) | |
|
78107
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1450 { |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1451 PyInterpreterState *interp; |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1452 PyThreadState *tstate; |
|
80155
02d25098ad57
Issue #16218: Support non ascii characters in python launcher.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
78991
diff
changeset
|
1453 PyObject *filename_obj, *loader_type, *loader; |
| 78117 | 1454 int result = 0; |
|
80155
02d25098ad57
Issue #16218: Support non ascii characters in python launcher.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
78991
diff
changeset
|
1455 |
|
02d25098ad57
Issue #16218: Support non ascii characters in python launcher.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
78991
diff
changeset
|
1456 filename_obj = PyUnicode_DecodeFSDefault(filename); |
|
02d25098ad57
Issue #16218: Support non ascii characters in python launcher.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
78991
diff
changeset
|
1457 if (filename_obj == NULL) |
|
02d25098ad57
Issue #16218: Support non ascii characters in python launcher.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
78991
diff
changeset
|
1458 return -1; |
|
78107
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1459 /* Get current thread state and interpreter pointer */ |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1460 tstate = PyThreadState_GET(); |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1461 interp = tstate->interp; |
|
78110
ba264b26d8d9
Actually initialize __main__.__loader__ with loader instances, not the corresponding type objects
Nick Coghlan <ncoghlan@gmail.com>
parents:
78107
diff
changeset
|
1462 loader_type = PyObject_GetAttrString(interp->importlib, loader_name); |
|
ba264b26d8d9
Actually initialize __main__.__loader__ with loader instances, not the corresponding type objects
Nick Coghlan <ncoghlan@gmail.com>
parents:
78107
diff
changeset
|
1463 if (loader_type == NULL) { |
|
80155
02d25098ad57
Issue #16218: Support non ascii characters in python launcher.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
78991
diff
changeset
|
1464 Py_DECREF(filename_obj); |
|
78110
ba264b26d8d9
Actually initialize __main__.__loader__ with loader instances, not the corresponding type objects
Nick Coghlan <ncoghlan@gmail.com>
parents:
78107
diff
changeset
|
1465 return -1; |
|
ba264b26d8d9
Actually initialize __main__.__loader__ with loader instances, not the corresponding type objects
Nick Coghlan <ncoghlan@gmail.com>
parents:
78107
diff
changeset
|
1466 } |
|
80155
02d25098ad57
Issue #16218: Support non ascii characters in python launcher.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
78991
diff
changeset
|
1467 loader = PyObject_CallFunction(loader_type, "sN", "__main__", filename_obj); |
| 78117 | 1468 Py_DECREF(loader_type); |
| 1469 if (loader == NULL) { | |
|
78107
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1470 return -1; |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1471 } |
| 78117 | 1472 if (PyDict_SetItemString(d, "__loader__", loader) < 0) { |
| 1473 result = -1; | |
| 1474 } | |
|
78107
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1475 Py_DECREF(loader); |
| 78117 | 1476 return result; |
|
78107
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1477 } |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1478 |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1479 int |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
1480 PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1481 PyCompilerFlags *flags) |
|
17125
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
1482 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1483 PyObject *m, *d, *v; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1484 const char *ext; |
|
80289
b256d054f229
Issue #15001: fix segfault on "del sys.module['__main__']"
Hynek Schlawack <hs@ox.cx>
parents:
78406
diff
changeset
|
1485 int set_file_name = 0, ret = -1; |
|
67347
3bf4d9f1660a
Issue #9566: use Py_ssize_t instead of int
Victor Stinner <victor.stinner@haypocalc.com>
parents:
67193
diff
changeset
|
1486 size_t len; |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
1487 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1488 m = PyImport_AddModule("__main__"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1489 if (m == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1490 return -1; |
|
80289
b256d054f229
Issue #15001: fix segfault on "del sys.module['__main__']"
Hynek Schlawack <hs@ox.cx>
parents:
78406
diff
changeset
|
1491 Py_INCREF(m); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1492 d = PyModule_GetDict(m); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1493 if (PyDict_GetItemString(d, "__file__") == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1494 PyObject *f; |
|
65536
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63847
diff
changeset
|
1495 f = PyUnicode_DecodeFSDefault(filename); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1496 if (f == NULL) |
|
80289
b256d054f229
Issue #15001: fix segfault on "del sys.module['__main__']"
Hynek Schlawack <hs@ox.cx>
parents:
78406
diff
changeset
|
1497 goto done; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1498 if (PyDict_SetItemString(d, "__file__", f) < 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1499 Py_DECREF(f); |
|
80289
b256d054f229
Issue #15001: fix segfault on "del sys.module['__main__']"
Hynek Schlawack <hs@ox.cx>
parents:
78406
diff
changeset
|
1500 goto done; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1501 } |
|
72423
7a48e98915f2
- Issue #13021: Missing decref on an error path. Thanks to Suman Saha for
Barry Warsaw <barry@python.org>
parents:
70133
diff
changeset
|
1502 if (PyDict_SetItemString(d, "__cached__", Py_None) < 0) { |
|
7a48e98915f2
- Issue #13021: Missing decref on an error path. Thanks to Suman Saha for
Barry Warsaw <barry@python.org>
parents:
70133
diff
changeset
|
1503 Py_DECREF(f); |
|
80289
b256d054f229
Issue #15001: fix segfault on "del sys.module['__main__']"
Hynek Schlawack <hs@ox.cx>
parents:
78406
diff
changeset
|
1504 goto done; |
|
72423
7a48e98915f2
- Issue #13021: Missing decref on an error path. Thanks to Suman Saha for
Barry Warsaw <barry@python.org>
parents:
70133
diff
changeset
|
1505 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1506 set_file_name = 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1507 Py_DECREF(f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1508 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1509 len = strlen(filename); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1510 ext = filename + len - (len > 4 ? 4 : 0); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1511 if (maybe_pyc_file(fp, filename, ext, closeit)) { |
|
78991
c3539eb02470
Issue #15895: my analysis was slightly off. The FILE pointer is only leaked when set_main_loader() fails for a pyc file with closeit=0. In the success case run_pyc_file() does its own cleanup of the fp. I've changed the code to use another FILE ptr for pyc files and moved the fclose() to PyRun_SimpleFileExFlags() to make it more obvious what's happening.
Christian Heimes <christian@cheimes.de>
parents:
78990
diff
changeset
|
1512 FILE *pyc_fp; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1513 /* Try to run a pyc file. First, re-open in binary */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1514 if (closeit) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1515 fclose(fp); |
|
85420
ef889c3d5dc6
Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents:
85417
diff
changeset
|
1516 if ((pyc_fp = _Py_fopen(filename, "rb")) == NULL) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1517 fprintf(stderr, "python: Can't reopen .pyc file\n"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1518 goto done; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1519 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1520 /* Turn on optimization if a .pyo file is given */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1521 if (strcmp(ext, ".pyo") == 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1522 Py_OptimizeFlag = 1; |
|
78107
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1523 |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1524 if (set_main_loader(d, filename, "SourcelessFileLoader") < 0) { |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1525 fprintf(stderr, "python: failed to set __main__.__loader__\n"); |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1526 ret = -1; |
|
78991
c3539eb02470
Issue #15895: my analysis was slightly off. The FILE pointer is only leaked when set_main_loader() fails for a pyc file with closeit=0. In the success case run_pyc_file() does its own cleanup of the fp. I've changed the code to use another FILE ptr for pyc files and moved the fclose() to PyRun_SimpleFileExFlags() to make it more obvious what's happening.
Christian Heimes <christian@cheimes.de>
parents:
78990
diff
changeset
|
1527 fclose(pyc_fp); |
|
78107
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1528 goto done; |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1529 } |
|
78991
c3539eb02470
Issue #15895: my analysis was slightly off. The FILE pointer is only leaked when set_main_loader() fails for a pyc file with closeit=0. In the success case run_pyc_file() does its own cleanup of the fp. I've changed the code to use another FILE ptr for pyc files and moved the fclose() to PyRun_SimpleFileExFlags() to make it more obvious what's happening.
Christian Heimes <christian@cheimes.de>
parents:
78990
diff
changeset
|
1530 v = run_pyc_file(pyc_fp, filename, d, d, flags); |
|
c3539eb02470
Issue #15895: my analysis was slightly off. The FILE pointer is only leaked when set_main_loader() fails for a pyc file with closeit=0. In the success case run_pyc_file() does its own cleanup of the fp. I've changed the code to use another FILE ptr for pyc files and moved the fclose() to PyRun_SimpleFileExFlags() to make it more obvious what's happening.
Christian Heimes <christian@cheimes.de>
parents:
78990
diff
changeset
|
1531 fclose(pyc_fp); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1532 } else { |
|
78107
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1533 /* When running from stdin, leave __main__.__loader__ alone */ |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1534 if (strcmp(filename, "<stdin>") != 0 && |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1535 set_main_loader(d, filename, "SourceFileLoader") < 0) { |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1536 fprintf(stderr, "python: failed to set __main__.__loader__\n"); |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1537 ret = -1; |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1538 goto done; |
|
3987667bf98f
Take the first step in resolving the messy pkgutil vs importlib edge cases by basing pkgutil explicitly on importlib, deprecating its internal import emulation and setting __main__.__loader__ correctly so that runpy still works (Affects #15343, #15314, #15357)
Nick Coghlan <ncoghlan@gmail.com>
parents:
77950
diff
changeset
|
1539 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1540 v = PyRun_FileExFlags(fp, filename, Py_file_input, d, d, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1541 closeit, flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1542 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1543 flush_io(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1544 if (v == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1545 PyErr_Print(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1546 goto done; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1547 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1548 Py_DECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1549 ret = 0; |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
1550 done: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1551 if (set_file_name && PyDict_DelItemString(d, "__file__")) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1552 PyErr_Clear(); |
|
80289
b256d054f229
Issue #15001: fix segfault on "del sys.module['__main__']"
Hynek Schlawack <hs@ox.cx>
parents:
78406
diff
changeset
|
1553 Py_DECREF(m); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1554 return ret; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1555 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1556 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1557 int |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
1558 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
|
1559 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1560 PyObject *m, *d, *v; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1561 m = PyImport_AddModule("__main__"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1562 if (m == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1563 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1564 d = PyModule_GetDict(m); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1565 v = PyRun_StringFlags(command, Py_file_input, d, d, flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1566 if (v == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1567 PyErr_Print(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1568 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1569 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1570 Py_DECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1571 return 0; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1572 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1573 |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1574 static int |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
1575 parse_syntax_error(PyObject *err, PyObject **message, const char **filename, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1576 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
|
1577 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1578 long hold; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1579 PyObject *v; |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
1580 _Py_IDENTIFIER(msg); |
|
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
1581 _Py_IDENTIFIER(filename); |
|
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
1582 _Py_IDENTIFIER(lineno); |
|
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
1583 _Py_IDENTIFIER(offset); |
|
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
1584 _Py_IDENTIFIER(text); |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1585 |
|
76084
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1586 *message = NULL; |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1587 |
|
76084
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1588 /* new style errors. `err' is an instance */ |
| 76085 | 1589 *message = _PyObject_GetAttrId(err, &PyId_msg); |
|
76084
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1590 if (!*message) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1591 goto finally; |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1592 |
| 76085 | 1593 v = _PyObject_GetAttrId(err, &PyId_filename); |
|
76084
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1594 if (!v) |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1595 goto finally; |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1596 if (v == Py_None) { |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1597 Py_DECREF(v); |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1598 *filename = NULL; |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1599 } |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1600 else { |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1601 *filename = _PyUnicode_AsString(v); |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1602 Py_DECREF(v); |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1603 if (!*filename) |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1604 goto finally; |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1605 } |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1606 |
| 76085 | 1607 v = _PyObject_GetAttrId(err, &PyId_lineno); |
|
76084
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1608 if (!v) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1609 goto finally; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1610 hold = PyLong_AsLong(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1611 Py_DECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1612 if (hold < 0 && PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1613 goto finally; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1614 *lineno = (int)hold; |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1615 |
| 76085 | 1616 v = _PyObject_GetAttrId(err, &PyId_offset); |
|
76084
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1617 if (!v) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1618 goto finally; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1619 if (v == Py_None) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1620 *offset = -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1621 Py_DECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1622 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1623 hold = PyLong_AsLong(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1624 Py_DECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1625 if (hold < 0 && PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1626 goto finally; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1627 *offset = (int)hold; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1628 } |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1629 |
| 76085 | 1630 v = _PyObject_GetAttrId(err, &PyId_text); |
|
76084
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1631 if (!v) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1632 goto finally; |
|
76084
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1633 if (v == Py_None) { |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1634 Py_DECREF(v); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1635 *text = NULL; |
|
76084
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1636 } |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1637 else { |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1638 *text = _PyUnicode_AsString(v); |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1639 Py_DECREF(v); |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1640 if (!*text) |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1641 goto finally; |
|
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1642 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1643 return 1; |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1644 |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1645 finally: |
|
76084
43606a4085b0
fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents:
75142
diff
changeset
|
1646 Py_XDECREF(*message); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1647 return 0; |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1648 } |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
1649 |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1650 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
1651 PyErr_Print(void) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1652 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1653 PyErr_PrintEx(1); |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
1654 } |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
1655 |
|
16831
27f04d714ecb
Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16648
diff
changeset
|
1656 static void |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
1657 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
|
1658 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1659 char *nl; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1660 if (offset >= 0) { |
|
65696
e8c8400caa99
Merged revisions 85817,85904 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
65615
diff
changeset
|
1661 if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n') |
|
e8c8400caa99
Merged revisions 85817,85904 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
65615
diff
changeset
|
1662 offset--; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1663 for (;;) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1664 nl = strchr(text, '\n'); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1665 if (nl == NULL || nl-text >= offset) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1666 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1667 offset -= (int)(nl+1-text); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1668 text = nl+1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1669 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1670 while (*text == ' ' || *text == '\t') { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1671 text++; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1672 offset--; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1673 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1674 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1675 PyFile_WriteString(" ", f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1676 PyFile_WriteString(text, f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1677 if (*text == '\0' || text[strlen(text)-1] != '\n') |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1678 PyFile_WriteString("\n", f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1679 if (offset == -1) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1680 return; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1681 PyFile_WriteString(" ", f); |
|
65696
e8c8400caa99
Merged revisions 85817,85904 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
65615
diff
changeset
|
1682 while (--offset > 0) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1683 PyFile_WriteString(" ", f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1684 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
|
1685 } |
|
27f04d714ecb
Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16648
diff
changeset
|
1686 |
|
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
|
1687 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
|
1688 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
|
1689 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1690 PyObject *exception, *value, *tb; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1691 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
|
1692 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1693 if (Py_InspectFlag) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1694 /* Don't exit if -i flag was given. This flag is set to 0 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1695 * when entering interactive mode for inspecting. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1696 return; |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
1697 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1698 PyErr_Fetch(&exception, &value, &tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1699 fflush(stdout); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1700 if (value == NULL || value == Py_None) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1701 goto done; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1702 if (PyExceptionInstance_Check(value)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1703 /* The error code should be in the `code' attribute. */ |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
1704 _Py_IDENTIFIER(code); |
|
72848
81380082d216
Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents:
72835
diff
changeset
|
1705 PyObject *code = _PyObject_GetAttrId(value, &PyId_code); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1706 if (code) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1707 Py_DECREF(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1708 value = code; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1709 if (value == Py_None) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1710 goto done; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1711 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1712 /* If we failed to dig out the 'code' attribute, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1713 just let the else clause below print the error. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1714 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1715 if (PyLong_Check(value)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1716 exitcode = (int)PyLong_AsLong(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1717 else { |
|
61656
ca81646dd29c
Merged revisions 81250-81253 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61567
diff
changeset
|
1718 PyObject *sys_stderr = PySys_GetObject("stderr"); |
|
61846
815ba3872f85
Issue #3798: sys.exit(message) writes the message to sys.stderr file, instead
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61757
diff
changeset
|
1719 if (sys_stderr != NULL && sys_stderr != Py_None) { |
|
815ba3872f85
Issue #3798: sys.exit(message) writes the message to sys.stderr file, instead
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61757
diff
changeset
|
1720 PyFile_WriteObject(value, sys_stderr, Py_PRINT_RAW); |
|
815ba3872f85
Issue #3798: sys.exit(message) writes the message to sys.stderr file, instead
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61757
diff
changeset
|
1721 } else { |
|
815ba3872f85
Issue #3798: sys.exit(message) writes the message to sys.stderr file, instead
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61757
diff
changeset
|
1722 PyObject_Print(value, stderr, Py_PRINT_RAW); |
|
815ba3872f85
Issue #3798: sys.exit(message) writes the message to sys.stderr file, instead
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61757
diff
changeset
|
1723 fflush(stderr); |
|
815ba3872f85
Issue #3798: sys.exit(message) writes the message to sys.stderr file, instead
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61757
diff
changeset
|
1724 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1725 PySys_WriteStderr("\n"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1726 exitcode = 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1727 } |
|
28698
aef01a076ef9
handle_system_exit(): This leaked the current exception info, in
Tim Peters <tim.peters@gmail.com>
parents:
28694
diff
changeset
|
1728 done: |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1729 /* Restore and clear the exception info, in order to properly decref |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1730 * the exception, value, and traceback. If we just exit instead, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1731 * these leak, which confuses PYTHONDUMPREFS output, and may prevent |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1732 * some finalizers from running. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1733 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1734 PyErr_Restore(exception, value, tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1735 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1736 Py_Exit(exitcode); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1737 /* 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
|
1738 } |
|
eb06a02e0507
Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents:
17168
diff
changeset
|
1739 |
|
eb06a02e0507
Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents:
17168
diff
changeset
|
1740 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
1741 PyErr_PrintEx(int set_sys_last_vars) |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
1742 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1743 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
|
1744 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1745 if (PyErr_ExceptionMatches(PyExc_SystemExit)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1746 handle_system_exit(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1747 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1748 PyErr_Fetch(&exception, &v, &tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1749 if (exception == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1750 return; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1751 PyErr_NormalizeException(&exception, &v, &tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1752 if (tb == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1753 tb = Py_None; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1754 Py_INCREF(tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1755 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1756 PyException_SetTraceback(v, tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1757 if (exception == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1758 return; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1759 /* Now we know v != NULL too */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1760 if (set_sys_last_vars) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1761 PySys_SetObject("last_type", exception); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1762 PySys_SetObject("last_value", v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1763 PySys_SetObject("last_traceback", tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1764 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1765 hook = PySys_GetObject("excepthook"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1766 if (hook) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1767 PyObject *args = PyTuple_Pack(3, exception, v, tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1768 PyObject *result = PyEval_CallObject(hook, args); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1769 if (result == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1770 PyObject *exception2, *v2, *tb2; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1771 if (PyErr_ExceptionMatches(PyExc_SystemExit)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1772 handle_system_exit(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1773 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1774 PyErr_Fetch(&exception2, &v2, &tb2); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1775 PyErr_NormalizeException(&exception2, &v2, &tb2); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1776 /* It should not be possible for exception2 or v2 |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1777 to be NULL. However PyErr_Display() can't |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1778 tolerate NULLs, so just be safe. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1779 if (exception2 == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1780 exception2 = Py_None; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1781 Py_INCREF(exception2); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1782 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1783 if (v2 == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1784 v2 = Py_None; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1785 Py_INCREF(v2); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1786 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1787 fflush(stdout); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1788 PySys_WriteStderr("Error in sys.excepthook:\n"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1789 PyErr_Display(exception2, v2, tb2); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1790 PySys_WriteStderr("\nOriginal exception was:\n"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1791 PyErr_Display(exception, v, tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1792 Py_DECREF(exception2); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1793 Py_DECREF(v2); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1794 Py_XDECREF(tb2); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1795 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1796 Py_XDECREF(result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1797 Py_XDECREF(args); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1798 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1799 PySys_WriteStderr("sys.excepthook is missing\n"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1800 PyErr_Display(exception, v, tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1801 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1802 Py_XDECREF(exception); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1803 Py_XDECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1804 Py_XDECREF(tb); |
| 17164 | 1805 } |
| 1806 | |
|
48474
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1807 static void |
|
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1808 print_exception(PyObject *f, PyObject *value) |
|
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1809 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1810 int err = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1811 PyObject *type, *tb; |
|
72926
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
1812 _Py_IDENTIFIER(print_file_and_line); |
|
48474
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1813 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1814 if (!PyExceptionInstance_Check(value)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1815 PyFile_WriteString("TypeError: print_exception(): Exception expected for value, ", f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1816 PyFile_WriteString(Py_TYPE(value)->tp_name, f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1817 PyFile_WriteString(" found\n", f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1818 return; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1819 } |
|
48839
587cd4f66c2d
fix #3653 Python could segfault if invalid values were passed to sys.excepthook
Benjamin Peterson <benjamin@python.org>
parents:
48660
diff
changeset
|
1820 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1821 Py_INCREF(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1822 fflush(stdout); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1823 type = (PyObject *) Py_TYPE(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1824 tb = PyException_GetTraceback(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1825 if (tb && tb != Py_None) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1826 err = PyTraceBack_Print(tb, f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1827 if (err == 0 && |
|
72926
db4aa878cea2
Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents:
72925
diff
changeset
|
1828 _PyObject_HasAttrId(value, &PyId_print_file_and_line)) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1829 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1830 PyObject *message; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1831 const char *filename, *text; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1832 int lineno, offset; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1833 if (!parse_syntax_error(value, &message, &filename, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1834 &lineno, &offset, &text)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1835 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1836 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1837 char buf[10]; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1838 PyFile_WriteString(" File \"", f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1839 if (filename == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1840 PyFile_WriteString("<string>", f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1841 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1842 PyFile_WriteString(filename, f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1843 PyFile_WriteString("\", line ", f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1844 PyOS_snprintf(buf, sizeof(buf), "%d", lineno); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1845 PyFile_WriteString(buf, f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1846 PyFile_WriteString("\n", f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1847 if (text != NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1848 print_error_text(f, offset, text); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1849 Py_DECREF(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1850 value = message; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1851 /* Can't be bothered to check all those |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1852 PyFile_WriteString() calls */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1853 if (PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1854 err = -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1855 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1856 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1857 if (err) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1858 /* Don't do anything else */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1859 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1860 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1861 PyObject* moduleName; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1862 char* className; |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
1863 _Py_IDENTIFIER(__module__); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1864 assert(PyExceptionClass_Check(type)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1865 className = PyExceptionClass_Name(type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1866 if (className != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1867 char *dot = strrchr(className, '.'); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1868 if (dot != NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1869 className = dot+1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1870 } |
|
48474
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1871 |
|
72848
81380082d216
Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents:
72835
diff
changeset
|
1872 moduleName = _PyObject_GetAttrId(type, &PyId___module__); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1873 if (moduleName == NULL || !PyUnicode_Check(moduleName)) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1874 { |
|
70402
2e72fcfb2527
print_exception(): handle correctly PyObject_GetAttrString() failure
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70134
diff
changeset
|
1875 Py_XDECREF(moduleName); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1876 err = PyFile_WriteString("<unknown>", f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1877 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1878 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1879 char* modstr = _PyUnicode_AsString(moduleName); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1880 if (modstr && strcmp(modstr, "builtins")) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1881 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1882 err = PyFile_WriteString(modstr, f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1883 err += PyFile_WriteString(".", f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1884 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1885 Py_DECREF(moduleName); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1886 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1887 if (err == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1888 if (className == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1889 err = PyFile_WriteString("<unknown>", f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1890 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1891 err = PyFile_WriteString(className, f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1892 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1893 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1894 if (err == 0 && (value != Py_None)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1895 PyObject *s = PyObject_Str(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1896 /* only print colon if the str() of the |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1897 object is not the empty string |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1898 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1899 if (s == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1900 err = -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1901 else if (!PyUnicode_Check(s) || |
|
73640
c4c1c8af0115
print_exception() uses PyUnicode_GetLength() instead of PyUnicode_GetSize()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
73617
diff
changeset
|
1902 PyUnicode_GetLength(s) != 0) |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1903 err = PyFile_WriteString(": ", f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1904 if (err == 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1905 err = PyFile_WriteObject(s, f, Py_PRINT_RAW); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1906 Py_XDECREF(s); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1907 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1908 /* try to write a newline in any case */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1909 err += PyFile_WriteString("\n", f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1910 Py_XDECREF(tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1911 Py_DECREF(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1912 /* If an error happened here, don't show it. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1913 XXX This is wrong, but too many callers rely on this behavior. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1914 if (err != 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1915 PyErr_Clear(); |
|
48474
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1916 } |
|
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1917 |
|
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1918 static const char *cause_message = |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1919 "\nThe above exception was the direct cause " |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1920 "of the following exception:\n\n"; |
|
48474
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1921 |
|
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1922 static const char *context_message = |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1923 "\nDuring handling of the above exception, " |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1924 "another exception occurred:\n\n"; |
|
48474
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1925 |
|
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1926 static void |
|
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1927 print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen) |
|
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1928 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1929 int err = 0, res; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1930 PyObject *cause, *context; |
|
48474
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1931 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1932 if (seen != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1933 /* Exception chaining */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1934 if (PySet_Add(seen, value) == -1) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1935 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1936 else if (PyExceptionInstance_Check(value)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1937 cause = PyException_GetCause(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1938 context = PyException_GetContext(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1939 if (cause) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1940 res = PySet_Contains(seen, cause); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1941 if (res == -1) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1942 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1943 if (res == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1944 print_exception_recursive( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1945 f, cause, seen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1946 err |= PyFile_WriteString( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1947 cause_message, f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1948 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1949 } |
|
76942
b0eb7d2a9542
PEP 415: Implement suppression of __context__ display with an exception attribute
Benjamin Peterson <benjamin@python.org>
parents:
76640
diff
changeset
|
1950 else if (context && |
|
b0eb7d2a9542
PEP 415: Implement suppression of __context__ display with an exception attribute
Benjamin Peterson <benjamin@python.org>
parents:
76640
diff
changeset
|
1951 !((PyBaseExceptionObject *)value)->suppress_context) { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1952 res = PySet_Contains(seen, context); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1953 if (res == -1) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1954 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1955 if (res == 0) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1956 print_exception_recursive( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1957 f, context, seen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1958 err |= PyFile_WriteString( |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1959 context_message, f); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1960 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1961 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1962 Py_XDECREF(context); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1963 Py_XDECREF(cause); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1964 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1965 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1966 print_exception(f, value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1967 if (err != 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1968 PyErr_Clear(); |
|
48474
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1969 } |
|
2ee09afee126
implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents:
47611
diff
changeset
|
1970 |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1971 void |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1972 PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb) |
| 17164 | 1973 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1974 PyObject *seen; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1975 PyObject *f = PySys_GetObject("stderr"); |
|
86332
19ce90930e8b
Issue #18776: atexit callbacks now display their full traceback when they raise an exception.
Antoine Pitrou <solipsis@pitrou.net>
parents:
83623
diff
changeset
|
1976 if (PyExceptionInstance_Check(value) |
|
19ce90930e8b
Issue #18776: atexit callbacks now display their full traceback when they raise an exception.
Antoine Pitrou <solipsis@pitrou.net>
parents:
83623
diff
changeset
|
1977 && tb != NULL && PyTraceBack_Check(tb)) { |
|
19ce90930e8b
Issue #18776: atexit callbacks now display their full traceback when they raise an exception.
Antoine Pitrou <solipsis@pitrou.net>
parents:
83623
diff
changeset
|
1978 /* Put the traceback on the exception, otherwise it won't get |
|
19ce90930e8b
Issue #18776: atexit callbacks now display their full traceback when they raise an exception.
Antoine Pitrou <solipsis@pitrou.net>
parents:
83623
diff
changeset
|
1979 displayed. See issue #18776. */ |
|
19ce90930e8b
Issue #18776: atexit callbacks now display their full traceback when they raise an exception.
Antoine Pitrou <solipsis@pitrou.net>
parents:
83623
diff
changeset
|
1980 PyObject *cur_tb = PyException_GetTraceback(value); |
|
19ce90930e8b
Issue #18776: atexit callbacks now display their full traceback when they raise an exception.
Antoine Pitrou <solipsis@pitrou.net>
parents:
83623
diff
changeset
|
1981 if (cur_tb == NULL) |
|
19ce90930e8b
Issue #18776: atexit callbacks now display their full traceback when they raise an exception.
Antoine Pitrou <solipsis@pitrou.net>
parents:
83623
diff
changeset
|
1982 PyException_SetTraceback(value, tb); |
|
19ce90930e8b
Issue #18776: atexit callbacks now display their full traceback when they raise an exception.
Antoine Pitrou <solipsis@pitrou.net>
parents:
83623
diff
changeset
|
1983 else |
|
19ce90930e8b
Issue #18776: atexit callbacks now display their full traceback when they raise an exception.
Antoine Pitrou <solipsis@pitrou.net>
parents:
83623
diff
changeset
|
1984 Py_DECREF(cur_tb); |
|
19ce90930e8b
Issue #18776: atexit callbacks now display their full traceback when they raise an exception.
Antoine Pitrou <solipsis@pitrou.net>
parents:
83623
diff
changeset
|
1985 } |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1986 if (f == Py_None) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1987 /* pass */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1988 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1989 else if (f == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1990 _PyObject_Dump(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1991 fprintf(stderr, "lost sys.stderr\n"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1992 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1993 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1994 /* We choose to ignore seen being possibly NULL, and report |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1995 at least the main exception (it could be a MemoryError). |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1996 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1997 seen = PySet_New(NULL); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1998 if (seen == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
1999 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2000 print_exception_recursive(f, value, seen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2001 Py_XDECREF(seen); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2002 } |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2003 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2004 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
2005 PyObject * |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
2006 PyRun_StringFlags(const char *str, int start, PyObject *globals, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2007 PyObject *locals, PyCompilerFlags *flags) |
|
14228
20377f15b96a
Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(),
Guido van Rossum <guido@python.org>
parents:
14227
diff
changeset
|
2008 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2009 PyObject *ret = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2010 mod_ty mod; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2011 PyArena *arena = PyArena_New(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2012 if (arena == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2013 return NULL; |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43718
diff
changeset
|
2014 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2015 mod = PyParser_ASTFromString(str, "<string>", start, flags, arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2016 if (mod != NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2017 ret = run_mod(mod, "<string>", globals, locals, flags, arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2018 PyArena_Free(arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2019 return ret; |
|
17125
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
2020 } |
|
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
2021 |
|
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
2022 PyObject * |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
2023 PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2024 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
|
2025 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2026 PyObject *ret; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2027 mod_ty mod; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2028 PyArena *arena = PyArena_New(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2029 if (arena == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2030 return NULL; |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43718
diff
changeset
|
2031 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2032 mod = PyParser_ASTFromFile(fp, filename, NULL, start, 0, 0, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2033 flags, NULL, arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2034 if (closeit) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2035 fclose(fp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2036 if (mod == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2037 PyArena_Free(arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2038 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2039 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2040 ret = run_mod(mod, filename, globals, locals, flags, arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2041 PyArena_Free(arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2042 return ret; |
|
17125
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
2043 } |
|
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
2044 |
|
44162
ef5399b353c9
Solve issue 1400 at least in part -- whenever we run Python code, at the end
Guido van Rossum <guido@python.org>
parents:
44134
diff
changeset
|
2045 static void |
|
ef5399b353c9
Solve issue 1400 at least in part -- whenever we run Python code, at the end
Guido van Rossum <guido@python.org>
parents:
44134
diff
changeset
|
2046 flush_io(void) |
|
ef5399b353c9
Solve issue 1400 at least in part -- whenever we run Python code, at the end
Guido van Rossum <guido@python.org>
parents:
44134
diff
changeset
|
2047 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2048 PyObject *f, *r; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2049 PyObject *type, *value, *traceback; |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
2050 _Py_IDENTIFIER(flush); |
|
46299
e8916c64df4c
Issue2221: in Idle, exec('xx') raised a SystemError('error return without exception set')
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46126
diff
changeset
|
2051 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2052 /* Save the current exception */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2053 PyErr_Fetch(&type, &value, &traceback); |
|
46299
e8916c64df4c
Issue2221: in Idle, exec('xx') raised a SystemError('error return without exception set')
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46126
diff
changeset
|
2054 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2055 f = PySys_GetObject("stderr"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2056 if (f != NULL) { |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72424
diff
changeset
|
2057 r = _PyObject_CallMethodId(f, &PyId_flush, ""); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2058 if (r) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2059 Py_DECREF(r); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2060 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2061 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2062 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2063 f = PySys_GetObject("stdout"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2064 if (f != NULL) { |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72424
diff
changeset
|
2065 r = _PyObject_CallMethodId(f, &PyId_flush, ""); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2066 if (r) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2067 Py_DECREF(r); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2068 else |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2069 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2070 } |
|
46299
e8916c64df4c
Issue2221: in Idle, exec('xx') raised a SystemError('error return without exception set')
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
46126
diff
changeset
|
2071 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2072 PyErr_Restore(type, value, traceback); |
|
44162
ef5399b353c9
Solve issue 1400 at least in part -- whenever we run Python code, at the end
Guido van Rossum <guido@python.org>
parents:
44134
diff
changeset
|
2073 } |
|
ef5399b353c9
Solve issue 1400 at least in part -- whenever we run Python code, at the end
Guido van Rossum <guido@python.org>
parents:
44134
diff
changeset
|
2074 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
2075 static PyObject * |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2076 run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2077 PyCompilerFlags *flags, PyArena *arena) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2078 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2079 PyCodeObject *co; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2080 PyObject *v; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2081 co = PyAST_Compile(mod, filename, flags, arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2082 if (co == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2083 return NULL; |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
66556
diff
changeset
|
2084 v = PyEval_EvalCode((PyObject*)co, globals, locals); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2085 Py_DECREF(co); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2086 return v; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2087 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2088 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
2089 static PyObject * |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
2090 run_pyc_file(FILE *fp, const char *filename, PyObject *globals, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2091 PyObject *locals, PyCompilerFlags *flags) |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
2092 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2093 PyCodeObject *co; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2094 PyObject *v; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2095 long magic; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2096 long PyImport_GetMagicNumber(void); |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
2097 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2098 magic = PyMarshal_ReadLongFromFile(fp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2099 if (magic != PyImport_GetMagicNumber()) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2100 PyErr_SetString(PyExc_RuntimeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2101 "Bad magic number in .pyc file"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2102 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2103 } |
|
74358
87331661042b
Issue #13645: pyc files now contain the size of the corresponding source
Antoine Pitrou <solipsis@pitrou.net>
parents:
73949
diff
changeset
|
2104 /* Skip mtime and size */ |
|
87331661042b
Issue #13645: pyc files now contain the size of the corresponding source
Antoine Pitrou <solipsis@pitrou.net>
parents:
73949
diff
changeset
|
2105 (void) PyMarshal_ReadLongFromFile(fp); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2106 (void) PyMarshal_ReadLongFromFile(fp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2107 v = PyMarshal_ReadLastObjectFromFile(fp); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2108 if (v == NULL || !PyCode_Check(v)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2109 Py_XDECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2110 PyErr_SetString(PyExc_RuntimeError, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2111 "Bad code object in .pyc file"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2112 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2113 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2114 co = (PyCodeObject *)v; |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
66556
diff
changeset
|
2115 v = PyEval_EvalCode((PyObject*)co, globals, locals); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2116 if (v && flags) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2117 flags->cf_flags |= (co->co_flags & PyCF_MASK); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2118 Py_DECREF(co); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2119 return v; |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
2120 } |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
2121 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
2122 PyObject * |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2123 Py_CompileStringObject(const char *str, PyObject *filename, int start, |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2124 PyCompilerFlags *flags, int optimize) |
|
17125
2054cea38754
Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16916
diff
changeset
|
2125 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2126 PyCodeObject *co; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2127 mod_ty mod; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2128 PyArena *arena = PyArena_New(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2129 if (arena == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2130 return NULL; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
2131 |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2132 mod = PyParser_ASTFromStringObject(str, filename, start, flags, arena); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2133 if (mod == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2134 PyArena_Free(arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2135 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2136 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2137 if (flags && (flags->cf_flags & PyCF_ONLY_AST)) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2138 PyObject *result = PyAST_mod2obj(mod); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2139 PyArena_Free(arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2140 return result; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2141 } |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2142 co = PyAST_CompileObject(mod, filename, flags, optimize, arena); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2143 PyArena_Free(arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2144 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
|
2145 } |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
2146 |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2147 PyObject * |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2148 Py_CompileStringExFlags(const char *str, const char *filename_str, int start, |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2149 PyCompilerFlags *flags, int optimize) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2150 { |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2151 PyObject *filename, *co; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2152 filename = PyUnicode_DecodeFSDefault(filename_str); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2153 if (filename == NULL) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2154 return NULL; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2155 co = Py_CompileStringObject(str, filename, start, flags, optimize); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2156 Py_DECREF(filename); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2157 return co; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2158 } |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2159 |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
66556
diff
changeset
|
2160 /* For use in Py_LIMITED_API */ |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
66556
diff
changeset
|
2161 #undef Py_CompileString |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
66556
diff
changeset
|
2162 PyObject * |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
66556
diff
changeset
|
2163 PyCompileString(const char *str, const char *filename, int start) |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
66556
diff
changeset
|
2164 { |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
66556
diff
changeset
|
2165 return Py_CompileStringFlags(str, filename, start, NULL); |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
66556
diff
changeset
|
2166 } |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
66556
diff
changeset
|
2167 |
|
16421
aa844711463a
Move a bunch of definitions that were internal to compile.c to
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16311
diff
changeset
|
2168 struct symtable * |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2169 Py_SymtableStringObject(const char *str, PyObject *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
|
2170 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2171 struct symtable *st; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2172 mod_ty mod; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2173 PyCompilerFlags flags; |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2174 PyArena *arena; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2175 |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2176 arena = PyArena_New(); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2177 if (arena == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2178 return NULL; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
2179 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2180 flags.cf_flags = 0; |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2181 mod = PyParser_ASTFromStringObject(str, filename, start, &flags, arena); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2182 if (mod == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2183 PyArena_Free(arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2184 return NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2185 } |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2186 st = PySymtable_BuildObject(mod, filename, 0); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2187 PyArena_Free(arena); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2188 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
|
2189 } |
|
aa844711463a
Move a bunch of definitions that were internal to compile.c to
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16311
diff
changeset
|
2190 |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2191 struct symtable * |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2192 Py_SymtableString(const char *str, const char *filename_str, int start) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2193 { |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2194 PyObject *filename; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2195 struct symtable *st; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2196 |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2197 filename = PyUnicode_DecodeFSDefault(filename_str); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2198 if (filename == NULL) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2199 return NULL; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2200 st = Py_SymtableStringObject(str, filename, start); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2201 Py_DECREF(filename); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2202 return st; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2203 } |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2204 |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2205 /* Preferred access to parser is through AST. */ |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2206 mod_ty |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2207 PyParser_ASTFromStringObject(const char *s, PyObject *filename, int start, |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2208 PyCompilerFlags *flags, PyArena *arena) |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2209 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2210 mod_ty mod; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2211 PyCompilerFlags localflags; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2212 perrdetail err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2213 int iflags = PARSER_FLAGS(flags); |
|
46120
78504d604b44
Merged revisions 61952-61953 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45914
diff
changeset
|
2214 |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2215 node *n = PyParser_ParseStringObject(s, filename, |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2216 &_PyParser_Grammar, start, &err, |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2217 &iflags); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2218 if (flags == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2219 localflags.cf_flags = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2220 flags = &localflags; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2221 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2222 if (n) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2223 flags->cf_flags |= iflags & PyCF_MASK; |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2224 mod = PyAST_FromNodeObject(n, flags, filename, arena); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2225 PyNode_Free(n); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2226 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2227 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2228 err_input(&err); |
|
69147
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2229 mod = NULL; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2230 } |
|
69147
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2231 err_free(&err); |
|
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2232 return mod; |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2233 } |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2234 |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2235 mod_ty |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2236 PyParser_ASTFromString(const char *s, const char *filename_str, int start, |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2237 PyCompilerFlags *flags, PyArena *arena) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2238 { |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2239 PyObject *filename; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2240 mod_ty mod; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2241 filename = PyUnicode_DecodeFSDefault(filename_str); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2242 if (filename == NULL) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2243 return NULL; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2244 mod = PyParser_ASTFromStringObject(s, filename, start, flags, arena); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2245 Py_DECREF(filename); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2246 return mod; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2247 } |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2248 |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2249 mod_ty |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2250 PyParser_ASTFromFileObject(FILE *fp, PyObject *filename, const char* enc, |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2251 int start, char *ps1, |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2252 char *ps2, PyCompilerFlags *flags, int *errcode, |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2253 PyArena *arena) |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2254 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2255 mod_ty mod; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2256 PyCompilerFlags localflags; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2257 perrdetail err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2258 int iflags = PARSER_FLAGS(flags); |
|
46120
78504d604b44
Merged revisions 61952-61953 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45914
diff
changeset
|
2259 |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2260 node *n = PyParser_ParseFileObject(fp, filename, enc, |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2261 &_PyParser_Grammar, |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2262 start, ps1, ps2, &err, &iflags); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2263 if (flags == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2264 localflags.cf_flags = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2265 flags = &localflags; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2266 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2267 if (n) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2268 flags->cf_flags |= iflags & PyCF_MASK; |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2269 mod = PyAST_FromNodeObject(n, flags, filename, arena); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2270 PyNode_Free(n); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2271 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2272 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2273 err_input(&err); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2274 if (errcode) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2275 *errcode = err.error; |
|
69147
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2276 mod = NULL; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2277 } |
|
69147
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2278 err_free(&err); |
|
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2279 return mod; |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2280 } |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2281 |
|
85417
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2282 mod_ty |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2283 PyParser_ASTFromFile(FILE *fp, const char *filename_str, const char* enc, |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2284 int start, char *ps1, |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2285 char *ps2, PyCompilerFlags *flags, int *errcode, |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2286 PyArena *arena) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2287 { |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2288 mod_ty mod; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2289 PyObject *filename; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2290 filename = PyUnicode_DecodeFSDefault(filename_str); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2291 if (filename == NULL) |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2292 return NULL; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2293 mod = PyParser_ASTFromFileObject(fp, filename, enc, start, ps1, ps2, |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2294 flags, errcode, arena); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2295 Py_DECREF(filename); |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2296 return mod; |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2297 } |
|
df2fdd42b375
Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents:
85398
diff
changeset
|
2298 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
2299 /* 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
|
2300 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
2301 node * |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
2302 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
|
2303 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2304 perrdetail err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2305 node *n = PyParser_ParseFileFlags(fp, filename, NULL, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2306 &_PyParser_Grammar, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2307 start, NULL, NULL, &err, flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2308 if (n == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2309 err_input(&err); |
|
69147
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2310 err_free(&err); |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
2311 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2312 return n; |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
2313 } |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
2314 |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
2315 /* 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
|
2316 |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
2317 node * |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
2318 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
|
2319 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2320 perrdetail err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2321 node *n = PyParser_ParseStringFlags(str, &_PyParser_Grammar, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2322 start, &err, flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2323 if (n == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2324 err_input(&err); |
|
69147
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2325 err_free(&err); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2326 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
|
2327 } |
|
0a90e5ec61b6
Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents:
18612
diff
changeset
|
2328 |
|
0a90e5ec61b6
Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents:
18612
diff
changeset
|
2329 node * |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
2330 PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2331 int start, int flags) |
|
24159
cb728141ae12
Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents:
24155
diff
changeset
|
2332 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2333 perrdetail err; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2334 node *n = PyParser_ParseStringFlagsFilename(str, filename, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2335 &_PyParser_Grammar, start, &err, flags); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2336 if (n == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2337 err_input(&err); |
|
69147
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2338 err_free(&err); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2339 return n; |
|
24159
cb728141ae12
Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents:
24155
diff
changeset
|
2340 } |
|
cb728141ae12
Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents:
24155
diff
changeset
|
2341 |
|
cb728141ae12
Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents:
24155
diff
changeset
|
2342 node * |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
2343 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
|
2344 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2345 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
|
2346 } |
|
cb728141ae12
Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents:
24155
diff
changeset
|
2347 |
|
28649
04b172843292
A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents:
28648
diff
changeset
|
2348 /* 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
|
2349 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
|
2350 |
|
04b172843292
A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents:
28648
diff
changeset
|
2351 void |
|
69147
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2352 PyParser_ClearError(perrdetail *err) |
|
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2353 { |
|
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2354 err_free(err); |
|
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2355 } |
|
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2356 |
|
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2357 void |
|
28649
04b172843292
A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents:
28648
diff
changeset
|
2358 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
|
2359 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2360 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
|
2361 } |
|
04b172843292
A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents:
28648
diff
changeset
|
2362 |
|
69147
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2363 static void |
|
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2364 err_free(perrdetail *err) |
|
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2365 { |
|
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2366 Py_CLEAR(err->filename); |
|
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2367 } |
|
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2368 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
2369 /* 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
|
2370 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
2371 static void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
2372 err_input(perrdetail *err) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2373 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2374 PyObject *v, *w, *errtype, *errtext; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
2375 PyObject *msg_obj = NULL; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2376 char *msg = NULL; |
|
65536
42b84d3188d1
Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63847
diff
changeset
|
2377 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2378 errtype = PyExc_SyntaxError; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2379 switch (err->error) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2380 case E_ERROR: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2381 return; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2382 case E_SYNTAX: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2383 errtype = PyExc_IndentationError; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2384 if (err->expected == INDENT) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2385 msg = "expected an indented block"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2386 else if (err->token == INDENT) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2387 msg = "unexpected indent"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2388 else if (err->token == DEDENT) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2389 msg = "unexpected unindent"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2390 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2391 errtype = PyExc_SyntaxError; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2392 msg = "invalid syntax"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2393 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2394 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2395 case E_TOKEN: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2396 msg = "invalid token"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2397 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2398 case E_EOFS: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2399 msg = "EOF while scanning triple-quoted string literal"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2400 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2401 case E_EOLS: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2402 msg = "EOL while scanning string literal"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2403 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2404 case E_INTR: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2405 if (!PyErr_Occurred()) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2406 PyErr_SetNone(PyExc_KeyboardInterrupt); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2407 goto cleanup; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2408 case E_NOMEM: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2409 PyErr_NoMemory(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2410 goto cleanup; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2411 case E_EOF: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2412 msg = "unexpected EOF while parsing"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2413 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2414 case E_TABSPACE: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2415 errtype = PyExc_TabError; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2416 msg = "inconsistent use of tabs and spaces in indentation"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2417 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2418 case E_OVERFLOW: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2419 msg = "expression too long"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2420 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2421 case E_DEDENT: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2422 errtype = PyExc_IndentationError; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2423 msg = "unindent does not match any outer indentation level"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2424 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2425 case E_TOODEEP: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2426 errtype = PyExc_IndentationError; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2427 msg = "too many levels of indentation"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2428 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2429 case E_DECODE: { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2430 PyObject *type, *value, *tb; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2431 PyErr_Fetch(&type, &value, &tb); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
2432 msg = "unknown decode error"; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
2433 if (value != NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
2434 msg_obj = PyObject_Str(value); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2435 Py_XDECREF(type); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2436 Py_XDECREF(value); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2437 Py_XDECREF(tb); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2438 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2439 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2440 case E_LINECONT: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2441 msg = "unexpected character after line continuation character"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2442 break; |
|
42597
20477cbfd996
Implement PEP 3131. Add isidentifier to str.
Martin v. Löwis <martin@v.loewis.de>
parents:
42539
diff
changeset
|
2443 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2444 case E_IDENTIFIER: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2445 msg = "invalid character in identifier"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2446 break; |
|
74520
2bd7f40108b4
Issue #12705: Raise SyntaxError when compiling multiple statements as single interactive statement
Meador Inge <meadori@gmail.com>
parents:
74497
diff
changeset
|
2447 case E_BADSINGLE: |
|
2bd7f40108b4
Issue #12705: Raise SyntaxError when compiling multiple statements as single interactive statement
Meador Inge <meadori@gmail.com>
parents:
74497
diff
changeset
|
2448 msg = "multiple statements found while compiling a single statement"; |
|
2bd7f40108b4
Issue #12705: Raise SyntaxError when compiling multiple statements as single interactive statement
Meador Inge <meadori@gmail.com>
parents:
74497
diff
changeset
|
2449 break; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2450 default: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2451 fprintf(stderr, "error=%d\n", err->error); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2452 msg = "unknown parsing error"; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2453 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2454 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2455 /* err->text may not be UTF-8 in case of decoding errors. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2456 Explicitly convert to an object. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2457 if (!err->text) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2458 errtext = Py_None; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2459 Py_INCREF(Py_None); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2460 } else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2461 errtext = PyUnicode_DecodeUTF8(err->text, strlen(err->text), |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2462 "replace"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2463 } |
|
69147
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2464 v = Py_BuildValue("(OiiN)", err->filename, |
|
6e9dc970ac0e
Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69100
diff
changeset
|
2465 err->lineno, err->offset, errtext); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
2466 if (v != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
2467 if (msg_obj) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
2468 w = Py_BuildValue("(OO)", msg_obj, v); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
2469 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
2470 w = Py_BuildValue("(sO)", msg, v); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
2471 } else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
2472 w = NULL; |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2473 Py_XDECREF(v); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2474 PyErr_SetObject(errtype, w); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2475 Py_XDECREF(w); |
|
48563
b51cd5d3795c
Merged revisions 65012,65035,65037-65040,65048,65057,65077,65091-65095,65097-65099,65127-65128,65131,65133-65136,65139,65149-65151,65155,65158-65159,65176-65178,65183-65184,65187-65190,65192,65194 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48494
diff
changeset
|
2476 cleanup: |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
2477 Py_XDECREF(msg_obj); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2478 if (err->text != NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2479 PyObject_FREE(err->text); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2480 err->text = NULL; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2481 } |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2482 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2483 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2484 /* Print fatal error message and abort */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2485 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2486 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
|
2487 Py_FatalError(const char *msg) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2488 { |
|
69070
b0680b5a5215
Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
2489 const int fd = fileno(stderr); |
|
b0680b5a5215
Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
2490 PyThreadState *tstate; |
|
b0680b5a5215
Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
2491 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2492 fprintf(stderr, "Fatal Python error: %s\n", msg); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2493 fflush(stderr); /* it helps in Windows debug build */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2494 if (PyErr_Occurred()) { |
|
62194
f83f201b1276
Merged revisions 81844 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61776
diff
changeset
|
2495 PyErr_PrintEx(0); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2496 } |
|
69070
b0680b5a5215
Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
2497 else { |
|
b0680b5a5215
Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
2498 tstate = _Py_atomic_load_relaxed(&_PyThreadState_Current); |
|
b0680b5a5215
Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
2499 if (tstate != NULL) { |
|
b0680b5a5215
Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
2500 fputc('\n', stderr); |
|
b0680b5a5215
Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
2501 fflush(stderr); |
|
69888
8752a81ada2d
faulthandler: dump all threads by default
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69833
diff
changeset
|
2502 _Py_DumpTracebackThreads(fd, tstate->interp, tstate); |
|
69070
b0680b5a5215
Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
2503 } |
|
69100
a4fa79b0d478
Issue #11393: The fault handler handles also SIGABRT
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69070
diff
changeset
|
2504 _PyFaulthandler_Fini(); |
|
69070
b0680b5a5215
Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
2505 } |
|
b0680b5a5215
Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents:
68769
diff
changeset
|
2506 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
23252
diff
changeset
|
2507 #ifdef MS_WINDOWS |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2508 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2509 size_t len = strlen(msg); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2510 WCHAR* buffer; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2511 size_t i; |
|
50558
fbf7f53f4888
Merged revisions 68175 via svnmerge from
Georg Brandl <georg@python.org>
parents:
49819
diff
changeset
|
2512 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2513 /* Convert the message to wchar_t. This uses a simple one-to-one |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2514 conversion, assuming that the this error message actually uses ASCII |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2515 only. If this ceases to be true, we will have to convert. */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2516 buffer = alloca( (len+1) * (sizeof *buffer)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2517 for( i=0; i<=len; ++i) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2518 buffer[i] = msg[i]; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2519 OutputDebugStringW(L"Fatal Python error: "); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2520 OutputDebugStringW(buffer); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2521 OutputDebugStringW(L"\n"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2522 } |
|
8988
070de4d39ddd
Add DebugBreak() call to Py_FatalError() for Mark Hammond (only on
Guido van Rossum <guido@python.org>
parents:
7967
diff
changeset
|
2523 #ifdef _DEBUG |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2524 DebugBreak(); |
|
2529
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
2525 #endif |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
23252
diff
changeset
|
2526 #endif /* MS_WINDOWS */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2527 abort(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2528 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2529 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2530 /* Clean up and exit */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2531 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
2532 #ifdef WITH_THREAD |
|
9203
07dae6fdae79
Renamed thread.h to pythread.h.
Guido van Rossum <guido@python.org>
parents:
9192
diff
changeset
|
2533 #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
|
2534 #endif |
|
a31e07847063
New thread.c from Sjoerd, supports _exit_prog(). Use this in goaway()
Guido van Rossum <guido@python.org>
parents:
941
diff
changeset
|
2535 |
|
41253
f29f1a8b7869
Patch #1680961: remove sys.exitfunc and replace it with a private C API. Also, reimplement atexit in C so it can take advantage of this private API.
Collin Winter <collinw@gmail.com>
parents:
40978
diff
changeset
|
2536 static void (*pyexitfunc)(void) = NULL; |
|
f29f1a8b7869
Patch #1680961: remove sys.exitfunc and replace it with a private C API. Also, reimplement atexit in C so it can take advantage of this private API.
Collin Winter <collinw@gmail.com>
parents:
40978
diff
changeset
|
2537 /* For the atexit module. */ |
|
f29f1a8b7869
Patch #1680961: remove sys.exitfunc and replace it with a private C API. Also, reimplement atexit in C so it can take advantage of this private API.
Collin Winter <collinw@gmail.com>
parents:
40978
diff
changeset
|
2538 void _Py_PyAtExit(void (*func)(void)) |
|
f29f1a8b7869
Patch #1680961: remove sys.exitfunc and replace it with a private C API. Also, reimplement atexit in C so it can take advantage of this private API.
Collin Winter <collinw@gmail.com>
parents:
40978
diff
changeset
|
2539 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2540 pyexitfunc = func; |
|
41253
f29f1a8b7869
Patch #1680961: remove sys.exitfunc and replace it with a private C API. Also, reimplement atexit in C so it can take advantage of this private API.
Collin Winter <collinw@gmail.com>
parents:
40978
diff
changeset
|
2541 } |
|
f29f1a8b7869
Patch #1680961: remove sys.exitfunc and replace it with a private C API. Also, reimplement atexit in C so it can take advantage of this private API.
Collin Winter <collinw@gmail.com>
parents:
40978
diff
changeset
|
2542 |
|
f29f1a8b7869
Patch #1680961: remove sys.exitfunc and replace it with a private C API. Also, reimplement atexit in C so it can take advantage of this private API.
Collin Winter <collinw@gmail.com>
parents:
40978
diff
changeset
|
2543 static void |
|
f29f1a8b7869
Patch #1680961: remove sys.exitfunc and replace it with a private C API. Also, reimplement atexit in C so it can take advantage of this private API.
Collin Winter <collinw@gmail.com>
parents:
40978
diff
changeset
|
2544 call_py_exitfuncs(void) |
|
f29f1a8b7869
Patch #1680961: remove sys.exitfunc and replace it with a private C API. Also, reimplement atexit in C so it can take advantage of this private API.
Collin Winter <collinw@gmail.com>
parents:
40978
diff
changeset
|
2545 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2546 if (pyexitfunc == NULL) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2547 return; |
|
41253
f29f1a8b7869
Patch #1680961: remove sys.exitfunc and replace it with a private C API. Also, reimplement atexit in C so it can take advantage of this private API.
Collin Winter <collinw@gmail.com>
parents:
40978
diff
changeset
|
2548 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2549 (*pyexitfunc)(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2550 PyErr_Clear(); |
|
41253
f29f1a8b7869
Patch #1680961: remove sys.exitfunc and replace it with a private C API. Also, reimplement atexit in C so it can take advantage of this private API.
Collin Winter <collinw@gmail.com>
parents:
40978
diff
changeset
|
2551 } |
|
f29f1a8b7869
Patch #1680961: remove sys.exitfunc and replace it with a private C API. Also, reimplement atexit in C so it can take advantage of this private API.
Collin Winter <collinw@gmail.com>
parents:
40978
diff
changeset
|
2552 |
|
56652
29b3e126c0c2
Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53994
diff
changeset
|
2553 /* Wait until threading._shutdown completes, provided |
|
29b3e126c0c2
Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53994
diff
changeset
|
2554 the threading module was imported in the first place. |
|
29b3e126c0c2
Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53994
diff
changeset
|
2555 The shutdown routine will wait until all non-daemon |
|
29b3e126c0c2
Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53994
diff
changeset
|
2556 "threading" threads have completed. */ |
|
29b3e126c0c2
Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53994
diff
changeset
|
2557 static void |
|
29b3e126c0c2
Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53994
diff
changeset
|
2558 wait_for_thread_shutdown(void) |
|
29b3e126c0c2
Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53994
diff
changeset
|
2559 { |
|
29b3e126c0c2
Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53994
diff
changeset
|
2560 #ifdef WITH_THREAD |
|
72925
7109f31300fb
Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents:
72848
diff
changeset
|
2561 _Py_IDENTIFIER(_shutdown); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2562 PyObject *result; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2563 PyThreadState *tstate = PyThreadState_GET(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2564 PyObject *threading = PyMapping_GetItemString(tstate->interp->modules, |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2565 "threading"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2566 if (threading == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2567 /* threading not imported */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2568 PyErr_Clear(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2569 return; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2570 } |
|
72835
5e33219492bc
Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents:
72424
diff
changeset
|
2571 result = _PyObject_CallMethodId(threading, &PyId__shutdown, ""); |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2572 if (result == NULL) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2573 PyErr_WriteUnraisable(threading); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2574 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2575 else { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2576 Py_DECREF(result); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2577 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2578 Py_DECREF(threading); |
|
56652
29b3e126c0c2
Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53994
diff
changeset
|
2579 #endif |
|
29b3e126c0c2
Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53994
diff
changeset
|
2580 } |
|
29b3e126c0c2
Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
53994
diff
changeset
|
2581 |
|
9192
ac6c29d1f10c
On second though, NEXITFUNCS should be defined here and not in
Guido van Rossum <guido@python.org>
parents:
9161
diff
changeset
|
2582 #define NEXITFUNCS 32 |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
2583 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
|
2584 static int nexitfuncs = 0; |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
2585 |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
2586 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
|
2587 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2588 if (nexitfuncs >= NEXITFUNCS) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2589 return -1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2590 exitfuncs[nexitfuncs++] = func; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2591 return 0; |
|
1870
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
2592 } |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
2593 |
|
5939
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
2594 static void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
2595 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
|
2596 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2597 while (nexitfuncs > 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2598 (*exitfuncs[--nexitfuncs])(); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
2599 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2600 fflush(stdout); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2601 fflush(stderr); |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
2602 } |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
2603 |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
2604 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
2605 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
|
2606 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2607 Py_Finalize(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2608 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2609 exit(sts); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2610 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2611 |
|
1319
cd397266dc1c
* Makefile: added all: and default: targets.
Guido van Rossum <guido@python.org>
parents:
1289
diff
changeset
|
2612 static void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13620
diff
changeset
|
2613 initsigs(void) |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
2614 { |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
2615 #ifdef SIGPIPE |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2616 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
|
2617 #endif |
| 19295 | 2618 #ifdef SIGXFZ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2619 PyOS_setsig(SIGXFZ, SIG_IGN); |
| 19295 | 2620 #endif |
| 23252 | 2621 #ifdef SIGXFSZ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2622 PyOS_setsig(SIGXFSZ, SIG_IGN); |
| 23252 | 2623 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2624 PyOS_InitInterrupts(); /* May imply initsignal() */ |
|
84761
276477d5a548
Issue #18520: Fix initsigs(), handle PyOS_InitInterrupts() error
Victor Stinner <victor.stinner@gmail.com>
parents:
84684
diff
changeset
|
2625 if (PyErr_Occurred()) { |
|
276477d5a548
Issue #18520: Fix initsigs(), handle PyOS_InitInterrupts() error
Victor Stinner <victor.stinner@gmail.com>
parents:
84684
diff
changeset
|
2626 Py_FatalError("Py_Initialize: can't import signal"); |
|
276477d5a548
Issue #18520: Fix initsigs(), handle PyOS_InitInterrupts() error
Victor Stinner <victor.stinner@gmail.com>
parents:
84684
diff
changeset
|
2627 } |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
2628 } |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
2629 |
|
5108
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
2630 |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2631 /* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL. |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2632 * |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2633 * All of the code in this function must only use async-signal-safe functions, |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2634 * listed at `man 7 signal` or |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2635 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html. |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2636 */ |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2637 void |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2638 _Py_RestoreSignals(void) |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2639 { |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2640 #ifdef SIGPIPE |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
2641 PyOS_setsig(SIGPIPE, SIG_DFL); |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2642 #endif |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2643 #ifdef SIGXFZ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
2644 PyOS_setsig(SIGXFZ, SIG_DFL); |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2645 #endif |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2646 #ifdef SIGXFSZ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61450
diff
changeset
|
2647 PyOS_setsig(SIGXFSZ, SIG_DFL); |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2648 #endif |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2649 } |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2650 |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2651 |
|
5108
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
2652 /* |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
2653 * 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
|
2654 * 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
|
2655 * 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
|
2656 * 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
|
2657 */ |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
2658 int |
|
26601
cc05c2c8660e
Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents:
26263
diff
changeset
|
2659 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
|
2660 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2661 if (isatty((int)fileno(fp))) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2662 return 1; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2663 if (!Py_InteractiveFlag) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2664 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2665 return (filename == NULL) || |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2666 (strcmp(filename, "<stdin>") == 0) || |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2667 (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
|
2668 } |
|
14227
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
2669 |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
2670 |
|
28648
0e8416be208e
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
28647
diff
changeset
|
2671 #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
|
2672 #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
|
2673 |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
2674 /* 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
|
2675 |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
2676 #include <malloc.h> |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
2677 #include <excpt.h> |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
2678 |
|
14278
fb8fb53a2eff
Add a comment explaining the return value of PyOS_CheckStack().
Fred Drake <fdrake@acm.org>
parents:
14231
diff
changeset
|
2679 /* |
|
fb8fb53a2eff
Add a comment explaining the return value of PyOS_CheckStack().
Fred Drake <fdrake@acm.org>
parents:
14231
diff
changeset
|
2680 * 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
|
2681 */ |
|
14227
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
2682 int |
|
14280
68b61aa1aa4a
PyOS_CheckStack(): Better ANSI'fy this while we're at it.
Fred Drake <fdrake@acm.org>
parents:
14278
diff
changeset
|
2683 PyOS_CheckStack(void) |
|
14227
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
2684 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2685 __try { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2686 /* alloca throws a stack overflow exception if there's |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2687 not enough space left on the stack */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2688 alloca(PYOS_STACK_MARGIN * sizeof(void*)); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2689 return 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2690 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ? |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2691 EXCEPTION_EXECUTE_HANDLER : |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2692 EXCEPTION_CONTINUE_SEARCH) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2693 int errcode = _resetstkoflw(); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2694 if (errcode == 0) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2695 { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2696 Py_FatalError("Could not reset the stack!"); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2697 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2698 } |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2699 return 1; |
|
14227
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
2700 } |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
2701 |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
2702 #endif /* WIN32 && _MSC_VER */ |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
2703 |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
2704 /* 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
|
2705 |
|
9f9f3280dc68
implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents:
14195
diff
changeset
|
2706 #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
|
2707 |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
2708 |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
2709 /* 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
|
2710 |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
2711 PyOS_sighandler_t |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
2712 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
|
2713 { |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
2714 #ifdef HAVE_SIGACTION |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2715 struct sigaction context; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2716 if (sigaction(sig, NULL, &context) == -1) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2717 return SIG_ERR; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2718 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
|
2719 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2720 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
|
2721 /* 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
|
2722 #if defined(_MSC_VER) && _MSC_VER >= 1400 |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2723 switch (sig) { |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2724 /* Only these signals are valid */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2725 case SIGINT: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2726 case SIGILL: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2727 case SIGFPE: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2728 case SIGSEGV: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2729 case SIGTERM: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2730 case SIGBREAK: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2731 case SIGABRT: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2732 break; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2733 /* Don't call signal() with other values or it will assert */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2734 default: |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2735 return SIG_ERR; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2736 } |
|
35961
72555a967d6a
Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents:
35742
diff
changeset
|
2737 #endif /* _MSC_VER && _MSC_VER >= 1400 */ |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2738 handler = signal(sig, SIG_IGN); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2739 if (handler != SIG_ERR) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2740 signal(sig, handler); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2741 return handler; |
|
14637
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
2742 #endif |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
2743 } |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
2744 |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2745 /* |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2746 * All of the code in this function must only use async-signal-safe functions, |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2747 * listed at `man 7 signal` or |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2748 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html. |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59536
diff
changeset
|
2749 */ |
|
14637
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
2750 PyOS_sighandler_t |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
2751 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
|
2752 { |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
2753 #ifdef HAVE_SIGACTION |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2754 /* Some code in Modules/signalmodule.c depends on sigaction() being |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2755 * used here if HAVE_SIGACTION is defined. Fix that if this code |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2756 * changes to invalidate that assumption. |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2757 */ |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2758 struct sigaction context, ocontext; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2759 context.sa_handler = handler; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2760 sigemptyset(&context.sa_mask); |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2761 context.sa_flags = 0; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2762 if (sigaction(sig, &context, &ocontext) == -1) |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2763 return SIG_ERR; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2764 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
|
2765 #else |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2766 PyOS_sighandler_t oldhandler; |
|
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2767 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
|
2768 #ifdef HAVE_SIGINTERRUPT |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2769 siginterrupt(sig, 1); |
|
33747
b0ec4c9d595b
Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents:
33715
diff
changeset
|
2770 #endif |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2771 return oldhandler; |
|
14637
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
2772 #endif |
|
37397bd1f8a8
Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
2773 } |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2774 |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2775 /* 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
|
2776 |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2777 #undef PyParser_SimpleParseFile |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2778 PyAPI_FUNC(node *) |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2779 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
|
2780 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2781 return PyParser_SimpleParseFileFlags(fp, filename, start, 0); |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2782 } |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2783 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2784 #undef PyParser_SimpleParseString |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2785 PyAPI_FUNC(node *) |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2786 PyParser_SimpleParseString(const char *str, int start) |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2787 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2788 return PyParser_SimpleParseStringFlags(str, start, 0); |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35666
diff
changeset
|
2789 } |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2790 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2791 #undef PyRun_AnyFile |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2792 PyAPI_FUNC(int) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2793 PyRun_AnyFile(FILE *fp, const char *name) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2794 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2795 return PyRun_AnyFileExFlags(fp, name, 0, NULL); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2796 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2797 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2798 #undef PyRun_AnyFileEx |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2799 PyAPI_FUNC(int) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2800 PyRun_AnyFileEx(FILE *fp, const char *name, int closeit) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2801 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2802 return PyRun_AnyFileExFlags(fp, name, closeit, NULL); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2803 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2804 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2805 #undef PyRun_AnyFileFlags |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2806 PyAPI_FUNC(int) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2807 PyRun_AnyFileFlags(FILE *fp, const char *name, PyCompilerFlags *flags) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2808 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2809 return PyRun_AnyFileExFlags(fp, name, 0, flags); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2810 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2811 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2812 #undef PyRun_File |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2813 PyAPI_FUNC(PyObject *) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2814 PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2815 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2816 return PyRun_FileExFlags(fp, p, s, g, l, 0, NULL); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2817 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2818 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2819 #undef PyRun_FileEx |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2820 PyAPI_FUNC(PyObject *) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2821 PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2822 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2823 return PyRun_FileExFlags(fp, p, s, g, l, c, NULL); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2824 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2825 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2826 #undef PyRun_FileFlags |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2827 PyAPI_FUNC(PyObject *) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2828 PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2829 PyCompilerFlags *flags) |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2830 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2831 return PyRun_FileExFlags(fp, p, s, g, l, 0, flags); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2832 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2833 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2834 #undef PyRun_SimpleFile |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2835 PyAPI_FUNC(int) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2836 PyRun_SimpleFile(FILE *f, const char *p) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2837 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2838 return PyRun_SimpleFileExFlags(f, p, 0, NULL); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2839 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2840 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2841 #undef PyRun_SimpleFileEx |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2842 PyAPI_FUNC(int) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2843 PyRun_SimpleFileEx(FILE *f, const char *p, int c) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2844 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2845 return PyRun_SimpleFileExFlags(f, p, c, NULL); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2846 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2847 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2848 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2849 #undef PyRun_String |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2850 PyAPI_FUNC(PyObject *) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2851 PyRun_String(const char *str, int s, PyObject *g, PyObject *l) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2852 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2853 return PyRun_StringFlags(str, s, g, l, NULL); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2854 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2855 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2856 #undef PyRun_SimpleString |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2857 PyAPI_FUNC(int) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2858 PyRun_SimpleString(const char *s) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2859 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2860 return PyRun_SimpleStringFlags(s, NULL); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2861 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2862 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2863 #undef Py_CompileString |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2864 PyAPI_FUNC(PyObject *) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2865 Py_CompileString(const char *str, const char *p, int s) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2866 { |
|
66685
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
2867 return Py_CompileStringExFlags(str, p, s, NULL, -1); |
|
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
2868 } |
|
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
2869 |
|
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
2870 #undef Py_CompileStringFlags |
|
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
2871 PyAPI_FUNC(PyObject *) |
|
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
2872 Py_CompileStringFlags(const char *str, const char *p, int s, |
|
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
2873 PyCompilerFlags *flags) |
|
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
2874 { |
|
713c6b6ca5ce
Add an "optimize" parameter to compile() to control the optimization level, and provide an interface to it in py_compile, compileall and PyZipFile.
Georg Brandl <georg@python.org>
parents:
66664
diff
changeset
|
2875 return Py_CompileStringExFlags(str, p, s, flags, -1); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2876 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2877 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2878 #undef PyRun_InteractiveOne |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2879 PyAPI_FUNC(int) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2880 PyRun_InteractiveOne(FILE *f, const char *p) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2881 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2882 return PyRun_InteractiveOneFlags(f, p, NULL); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2883 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2884 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2885 #undef PyRun_InteractiveLoop |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2886 PyAPI_FUNC(int) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2887 PyRun_InteractiveLoop(FILE *f, const char *p) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2888 { |
|
61467
f197407bdba2
Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
61452
diff
changeset
|
2889 return PyRun_InteractiveLoopFlags(f, p, NULL); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2890 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2891 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2892 #ifdef __cplusplus |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2893 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37056
diff
changeset
|
2894 #endif |
