annotate Python/pythonrun.c @ 87631:b44dbf07732e

Remove explicit empty tuple reuse in cpickle. PyTuple_New(0) always returns the same empty tuple from its free list anyway, so we are not saving much here. Plus, the code where this was used is on uncommon run paths.
author Alexandre Vassalotti <alexandre@peadrop.com>
date Thu, 28 Nov 2013 15:17:29 -0800
parents 6e2089dbc5ad
children cc8953ea3c7e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 /* Python interpreter top-level routines, including init/exit */
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
4 #include "Python.h"
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
6 #include "Python-ast.h"
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
86999
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
38 _Py_IDENTIFIER(builtins);
86974
954167ce92a3 Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents: 86966
diff changeset
39 _Py_IDENTIFIER(excepthook);
87072
518e3b174120 Issue #19515: Remove identifiers duplicated in the same file.
Victor Stinner <victor.stinner@gmail.com>
parents: 87071
diff changeset
40 _Py_IDENTIFIER(flush);
86999
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
41 _Py_IDENTIFIER(last_traceback);
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
42 _Py_IDENTIFIER(last_type);
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
43 _Py_IDENTIFIER(last_value);
87072
518e3b174120 Issue #19515: Remove identifiers duplicated in the same file.
Victor Stinner <victor.stinner@gmail.com>
parents: 87071
diff changeset
44 _Py_IDENTIFIER(name);
86974
954167ce92a3 Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents: 86966
diff changeset
45 _Py_IDENTIFIER(ps1);
954167ce92a3 Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents: 86966
diff changeset
46 _Py_IDENTIFIER(ps2);
86999
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
47 _Py_IDENTIFIER(stdin);
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
48 _Py_IDENTIFIER(stdout);
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
49 _Py_IDENTIFIER(stderr);
86984
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
50 _Py_static_string(PyId_string, "<string>");
86974
954167ce92a3 Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents: 86966
diff changeset
51
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
52 #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
53 static
6eacc6c134a5 Issue #17832: fix a compilation warning about a function prototype.
Antoine Pitrou <solipsis@pitrou.net>
parents: 82956
diff changeset
54 void _print_total_refs(void) {
86965
55517661a053 Issue #19512: _print_total_refs() now uses an identifier to get "showrefcount"
Victor Stinner <victor.stinner@gmail.com>
parents: 86562
diff changeset
55 PyObject *xoptions, *value;
55517661a053 Issue #19512: _print_total_refs() now uses an identifier to get "showrefcount"
Victor Stinner <victor.stinner@gmail.com>
parents: 86562
diff changeset
56 _Py_IDENTIFIER(showrefcount);
55517661a053 Issue #19512: _print_total_refs() now uses an identifier to get "showrefcount"
Victor Stinner <victor.stinner@gmail.com>
parents: 86562
diff changeset
57
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
58 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
59 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
60 return;
86965
55517661a053 Issue #19512: _print_total_refs() now uses an identifier to get "showrefcount"
Victor Stinner <victor.stinner@gmail.com>
parents: 86562
diff changeset
61 value = _PyDict_GetItemId(xoptions, &PyId_showrefcount);
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
62 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
63 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
64 "[%" 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
65 "%" 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
66 _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
67 }
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
68 #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
69
36837
3a3aed49b245 Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36836
diff changeset
70 #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
71 #define PRINT_TOTAL_REFS()
36837
3a3aed49b245 Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36836
diff changeset
72 #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
73 #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
74 #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
75
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
76 #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
77 extern "C" {
36837
3a3aed49b245 Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36836
diff changeset
78 #endif
3a3aed49b245 Use Py_ssize_t for _Py_RefTotal.
Neal Norwitz <nnorwitz@gmail.com>
parents: 36836
diff changeset
79
46318
22a74eaf6b22 Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents: 46299
diff changeset
80 extern wchar_t *Py_GetPath(void);
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
81
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
82 extern grammar _PyParser_Grammar; /* From graminit.c */
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
83
1391
7c3245c18677 * ceval.c, longobject.c, methodobject.c, listnode.c, arraymodule.c,
Guido van Rossum <guido@python.org>
parents: 1347
diff changeset
84 /* 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
85 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
86 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
87 static void initsite(void);
43605
a2bb76d11d66 Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents: 43569
diff changeset
88 static int initstdio(void);
46395
6196529afd73 Add a NEWS entry for issue2221.
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents: 46318
diff changeset
89 static void flush_io(void);
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
90 static PyObject *run_mod(mod_ty, PyObject *, PyObject *, PyObject *,
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
91 PyCompilerFlags *, PyArena *);
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
92 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
93 PyCompilerFlags *);
13447
a89f7f268de4 Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents: 13256
diff changeset
94 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
95 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
96 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
97 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
98 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
99 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
100 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
101 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
102 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
103 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
104 extern void PyLong_Fini(void);
69070
b0680b5a5215 Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68769
diff changeset
105 extern int _PyFaulthandler_Init(void);
b0680b5a5215 Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68769
diff changeset
106 extern void _PyFaulthandler_Fini(void);
87288
adb471b9cba1 ssue #19183: Implement PEP 456 'secure and interchangeable hash algorithm'.
Christian Heimes <christian@cheimes.de>
parents: 87114
diff changeset
107 extern void _PyHash_Fini(void);
87401
6e2089dbc5ad Issue #18874: Implement the PEP 454 (tracemalloc)
Victor Stinner <victor.stinner@gmail.com>
parents: 87288
diff changeset
108 extern int _PyTraceMalloc_Init(void);
11977
8b88e1bc0e1b Marc-Andre Lemburg: add calls to initialize and finalize Unicode and
Guido van Rossum <guido@python.org>
parents: 11673
diff changeset
109
28694
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28653
diff changeset
110 #ifdef WITH_THREAD
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28653
diff changeset
111 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
112 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
113 #endif /* WITH_THREAD */
a4154dd5939a New PyGILState_ API - implements pep 311, from patch 684256.
Mark Hammond <mhammond@skippinet.com.au>
parents: 28653
diff changeset
114
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
115 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
116 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
117 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
118 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
119 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
120 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
121 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
122 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
123 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
124 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
125 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
126 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
127 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
128 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
129 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
130
69832
2a19d09b08f8 Issue #1856: Avoid crashes and lockups when daemon threads run while the
Antoine Pitrou <solipsis@pitrou.net>
parents: 69708
diff changeset
131 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
132
86561
4c4f31a1b706 Issue #18603: Ensure that PyOS_mystricmp and PyOS_mystrnicmp are in the
Christian Heimes <christian@cheimes.de>
parents: 86332
diff changeset
133 /* Hack to force loading of object files */
4c4f31a1b706 Issue #18603: Ensure that PyOS_mystricmp and PyOS_mystrnicmp are in the
Christian Heimes <christian@cheimes.de>
parents: 86332
diff changeset
134 int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \
4c4f31a1b706 Issue #18603: Ensure that PyOS_mystricmp and PyOS_mystrnicmp are in the
Christian Heimes <christian@cheimes.de>
parents: 86332
diff changeset
135 PyOS_mystrnicmp; /* Python/pystrcmp.o */
4c4f31a1b706 Issue #18603: Ensure that PyOS_mystricmp and PyOS_mystrnicmp are in the
Christian Heimes <christian@cheimes.de>
parents: 86332
diff changeset
136
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
137 /* 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
138 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
139 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
140 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
141 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
142 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
143 }
27958
e07b21ea3c45 Fix bug 683658 - PyErr_Warn may cause import deadlock.
Mark Hammond <mhammond@skippinet.com.au>
parents: 27878
diff changeset
144
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
145 static int initialized = 0;
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
146
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
147 /* 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
148
57045f51dd12 Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents: 6117
diff changeset
149 int
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
150 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
151 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
152 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
153 }
57045f51dd12 Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents: 6117
diff changeset
154
86399
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
155 /* 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
156 * 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
157 */
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
158
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
159 static char *_Py_StandardStreamEncoding = NULL;
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
160 static char *_Py_StandardStreamErrors = NULL;
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
161
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
162 int
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
163 Py_SetStandardStreamEncoding(const char *encoding, const char *errors)
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
164 {
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
165 if (Py_IsInitialized()) {
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
166 /* This is too late to have any effect */
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
167 return -1;
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
168 }
86426
12d7b6171b28 Issue #16129: Py_SetStandardStreamEncoding cleanups
Nick Coghlan <ncoghlan@gmail.com>
parents: 86399
diff changeset
169 /* 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
170 * initialised yet.
12d7b6171b28 Issue #16129: Py_SetStandardStreamEncoding cleanups
Nick Coghlan <ncoghlan@gmail.com>
parents: 86399
diff changeset
171 *
12d7b6171b28 Issue #16129: Py_SetStandardStreamEncoding cleanups
Nick Coghlan <ncoghlan@gmail.com>
parents: 86399
diff changeset
172 * However, the raw memory allocators are initialised appropriately
12d7b6171b28 Issue #16129: Py_SetStandardStreamEncoding cleanups
Nick Coghlan <ncoghlan@gmail.com>
parents: 86399
diff changeset
173 * 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
174 * Py_Initialize hasn't been called yet.
12d7b6171b28 Issue #16129: Py_SetStandardStreamEncoding cleanups
Nick Coghlan <ncoghlan@gmail.com>
parents: 86399
diff changeset
175 */
86399
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
176 if (encoding) {
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
177 _Py_StandardStreamEncoding = _PyMem_RawStrdup(encoding);
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
178 if (!_Py_StandardStreamEncoding) {
86426
12d7b6171b28 Issue #16129: Py_SetStandardStreamEncoding cleanups
Nick Coghlan <ncoghlan@gmail.com>
parents: 86399
diff changeset
179 return -2;
86399
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
180 }
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
181 }
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
182 if (errors) {
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
183 _Py_StandardStreamErrors = _PyMem_RawStrdup(errors);
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
184 if (!_Py_StandardStreamErrors) {
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
185 if (_Py_StandardStreamEncoding) {
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
186 PyMem_RawFree(_Py_StandardStreamEncoding);
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
187 }
86426
12d7b6171b28 Issue #16129: Py_SetStandardStreamEncoding cleanups
Nick Coghlan <ncoghlan@gmail.com>
parents: 86399
diff changeset
188 return -3;
86399
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
189 }
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
190 }
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
191 return 0;
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
192 }
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
193
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
194 /* 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
195 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
196 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
197 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
198 been created.
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
199
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
200 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
201 (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
202 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
203
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
204 */
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
205
20401
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
206 static int
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
207 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
208 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
209 int env = atoi(envs);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
210 if (flag < env)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
211 flag = env;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
212 if (flag < 1)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
213 flag = 1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
214 return flag;
20401
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
215 }
b74610c92d8b SF patch #467455 : Enhanced environment variables, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents: 19633
diff changeset
216
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
217 static char*
64151
687cc854cb4b Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64133
diff changeset
218 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
219 {
64151
687cc854cb4b Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64133
diff changeset
220 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
221 PyObject *codec, *name = 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
222
64151
687cc854cb4b Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64133
diff changeset
223 codec = _PyCodec_Lookup(encoding);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
224 if (!codec)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
225 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
226
72848
81380082d216 Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents: 72835
diff changeset
227 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
228 Py_CLEAR(codec);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
229 if (!name)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
230 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
231
64151
687cc854cb4b Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64133
diff changeset
232 name_utf8 = _PyUnicode_AsString(name);
68769
929aafef5b05 Fix #11586: typo in initfsencoding()
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68257
diff changeset
233 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
234 goto error;
84502
65f2c92ed079 Issue #18203: Add _PyMem_RawStrdup() and _PyMem_Strdup()
Victor Stinner <victor.stinner@gmail.com>
parents: 84489
diff changeset
235 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
236 Py_DECREF(name);
64151
687cc854cb4b Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64133
diff changeset
237 if (name_str == NULL) {
687cc854cb4b Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64133
diff changeset
238 PyErr_NoMemory();
687cc854cb4b Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64133
diff changeset
239 return NULL;
687cc854cb4b Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64133
diff changeset
240 }
687cc854cb4b Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64133
diff changeset
241 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
242
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
243 error:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
244 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
245 Py_XDECREF(name);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
246 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
247 }
64151
687cc854cb4b Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64133
diff changeset
248
687cc854cb4b Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64133
diff changeset
249 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
250 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
251 {
71191
7ce685cda0ae Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70402
diff changeset
252 #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
253 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
254 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
255 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
256 #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
257 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
258 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
259 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
260 return NULL;
687cc854cb4b Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64133
diff changeset
261 }
687cc854cb4b Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64133
diff changeset
262 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
263 #else
7ce685cda0ae Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70402
diff changeset
264 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
265 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
266 #endif
64151
687cc854cb4b Issue #8622: Add PYTHONFSENCODING environment variable to override the
Victor Stinner <victor.stinner@haypocalc.com>
parents: 64133
diff changeset
267 }
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
268
76303
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
269 static void
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
270 import_init(PyInterpreterState *interp, PyObject *sysmod)
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 PyObject *importlib;
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
273 PyObject *impmod;
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
274 PyObject *sys_modules;
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
275 PyObject *value;
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
276
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
277 /* 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
278 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
279 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
280 }
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
281 else if (Py_VerboseFlag) {
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
282 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
283 }
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
284 importlib = PyImport_AddModule("_frozen_importlib");
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
285 if (importlib == NULL) {
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
286 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
287 "sys.modules");
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
288 }
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
289 interp->importlib = importlib;
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
290 Py_INCREF(interp->importlib);
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
291
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
292 /* Install _importlib as __import__ */
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
293 impmod = PyInit_imp();
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
294 if (impmod == NULL) {
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
295 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
296 }
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
297 else if (Py_VerboseFlag) {
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
298 PySys_FormatStderr("import imp # builtin\n");
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
299 }
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
300 sys_modules = PyImport_GetModuleDict();
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
301 if (Py_VerboseFlag) {
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
302 PySys_FormatStderr("import sys # builtin\n");
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
303 }
76331
d777f854a66e Issue #13959: Rename imp to _imp and add Lib/imp.py and begin
Brett Cannon <brett@python.org>
parents: 76314
diff changeset
304 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
305 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
306 }
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
307
76566
57d558f1904d Issue #14605: Make explicit the entries on sys.path_hooks that used to
Brett Cannon <brett@python.org>
parents: 76331
diff changeset
308 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
309 if (value == NULL) {
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
310 PyErr_Print();
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
311 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
312 }
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
313 Py_DECREF(value);
76314
c7bf93802f5d Plug a refleak.
Brett Cannon <brett@python.org>
parents: 76303
diff changeset
314 Py_DECREF(impmod);
76303
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
315
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
316 _PyImportZip_Init();
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
317 }
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
318
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
319
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
320 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
321 _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
322 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
323 PyInterpreterState *interp;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
324 PyThreadState *tstate;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
325 PyObject *bimod, *sysmod, *pstderr;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
326 char *p;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
327 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
328
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
329 if (initialized)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
330 return;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
331 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
332 _Py_Finalizing = NULL;
28648
0e8416be208e Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents: 28647
diff changeset
333
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
334 #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
335 /* 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
336 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
337 locales. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
338 setlocale(LC_CTYPE, "");
42539
43e32b2b4004 Set sys.stdout.encoding properly.
Martin v. Löwis <martin@v.loewis.de>
parents: 42180
diff changeset
339 #endif
43e32b2b4004 Set sys.stdout.encoding properly.
Martin v. Löwis <martin@v.loewis.de>
parents: 42180
diff changeset
340
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
341 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
342 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
343 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
344 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
345 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
346 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
347 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
348 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
349 /* 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
350 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
351 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
352 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
353
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
354 _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
355
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
356 interp = PyInterpreterState_New();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
357 if (interp == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
358 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
359
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
360 tstate = PyThreadState_New(interp);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
361 if (tstate == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
362 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
363 (void) PyThreadState_Swap(tstate);
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
364
64133
686b18bffb86 Issue #8063: Call _PyGILState_Init() earlier in Py_InitializeEx().
Victor Stinner <victor.stinner@haypocalc.com>
parents: 63852
diff changeset
365 #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
366 /* 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
367 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
368 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
369 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
370 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
371 _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
372
38b0d5d0dd30 Issue #9901: Destroying the GIL in Py_Finalize() can fail if some other
Antoine Pitrou <solipsis@pitrou.net>
parents: 64709
diff changeset
373 /* 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
374 _PyGILState_Init(interp, tstate);
686b18bffb86 Issue #8063: Call _PyGILState_Init() earlier in Py_InitializeEx().
Victor Stinner <victor.stinner@haypocalc.com>
parents: 63852
diff changeset
375 #endif /* WITH_THREAD */
686b18bffb86 Issue #8063: Call _PyGILState_Init() earlier in Py_InitializeEx().
Victor Stinner <victor.stinner@haypocalc.com>
parents: 63852
diff changeset
376
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
377 _Py_ReadyTypes();
19040
4df72ea78ae8 - Rename PyType_InitDict() to PyType_Ready().
Guido van Rossum <guido@python.org>
parents: 18933
diff changeset
378
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
379 if (!_PyFrame_Init())
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
380 Py_FatalError("Py_Initialize: can't init frames");
26889
12753e7b15f7 SF #561244, Micro optimizations
Neal Norwitz <nnorwitz@gmail.com>
parents: 26885
diff changeset
381
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
382 if (!_PyLong_Init())
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
383 Py_FatalError("Py_Initialize: can't init longs");
26889
12753e7b15f7 SF #561244, Micro optimizations
Neal Norwitz <nnorwitz@gmail.com>
parents: 26885
diff changeset
384
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
385 if (!PyByteArray_Init())
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 init bytearray");
40978
61fee1853ca8 SF patch #1669633, add methods for bytes from Pete Shinners.
Neal Norwitz <nnorwitz@gmail.com>
parents: 40949
diff changeset
387
84793
fc718c177ee6 Issue #18520: Add a new PyStructSequence_InitType2() function, same than
Victor Stinner <victor.stinner@gmail.com>
parents: 84761
diff changeset
388 if (!_PyFloat_Init())
fc718c177ee6 Issue #18520: Add a new PyStructSequence_InitType2() function, same than
Victor Stinner <victor.stinner@gmail.com>
parents: 84761
diff changeset
389 Py_FatalError("Py_Initialize: can't init float");
34972
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 34834
diff changeset
390
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
391 interp->modules = PyDict_New();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
392 if (interp->modules == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
393 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
394
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
395 /* 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
396 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
397 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
398 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
399 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
400
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
401 bimod = _PyBuiltin_Init();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
402 if (bimod == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
403 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
404 _PyImport_FixupBuiltin(bimod, "builtins");
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
405 interp->builtins = PyModule_GetDict(bimod);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
406 if (interp->builtins == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
407 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
408 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
409
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
410 /* initialize builtin exceptions */
76303
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
411 _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
412
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
413 sysmod = _PySys_Init();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
414 if (sysmod == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
415 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
416 interp->sysdict = PyModule_GetDict(sysmod);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
417 if (interp->sysdict == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
418 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
419 Py_INCREF(interp->sysdict);
65418
fd5135cbd928 _PyImport_FixupExtension() and _PyImport_FindExtension() uses FS encoding
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65400
diff changeset
420 _PyImport_FixupBuiltin(sysmod, "sys");
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
421 PySys_SetPath(Py_GetPath());
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
422 PyDict_SetItemString(interp->sysdict, "modules",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
423 interp->modules);
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
424
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
425 /* 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
426 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
427 pstderr = PyFile_NewStdPrinter(fileno(stderr));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
428 if (pstderr == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
429 Py_FatalError("Py_Initialize: can't set preliminary stderr");
86999
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
430 _PySys_SetObjectId(&PyId_stderr, pstderr);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
431 PySys_SetObject("__stderr__", pstderr);
65763
b03779f00739 Merged revisions 85980 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 65696
diff changeset
432 Py_DECREF(pstderr);
43718
e510b716bd80 Patch 1352 (continued in issue 1329) by Christian Heimes.
Guido van Rossum <guido@python.org>
parents: 43712
diff changeset
433
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
434 _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
435
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
436 _PyImportHooks_Init();
26885
54aacb87beda PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents: 26643
diff changeset
437
61776
3271af035d01 Recorded merge of revisions 81364 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61656
diff changeset
438 /* Initialize _warnings. */
3271af035d01 Recorded merge of revisions 81364 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61656
diff changeset
439 _PyWarnings_Init();
3271af035d01 Recorded merge of revisions 81364 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61656
diff changeset
440
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
441 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
442 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
443
76303
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
444 import_init(interp, sysmod);
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
445
78341
2f1494d243ad Fix initialization of the faulthandler module
Victor Stinner <victor.stinner@gmail.com>
parents: 78117
diff changeset
446 /* initialize the faulthandler module */
2f1494d243ad Fix initialization of the faulthandler module
Victor Stinner <victor.stinner@gmail.com>
parents: 78117
diff changeset
447 if (_PyFaulthandler_Init())
2f1494d243ad Fix initialization of the faulthandler module
Victor Stinner <victor.stinner@gmail.com>
parents: 78117
diff changeset
448 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
449
63757
c16803bbd790 Issue #9079: Added _PyTime_gettimeofday(_PyTime_timeval *tp) to C API
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents: 62389
diff changeset
450 _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
451
69708
2caf82aee7a4 Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69707
diff changeset
452 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
453 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
454
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
455 if (install_sigs)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
456 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
457
87401
6e2089dbc5ad Issue #18874: Implement the PEP 454 (tracemalloc)
Victor Stinner <victor.stinner@gmail.com>
parents: 87288
diff changeset
458 if (_PyTraceMalloc_Init() < 0)
6e2089dbc5ad Issue #18874: Implement the PEP 454 (tracemalloc)
Victor Stinner <victor.stinner@gmail.com>
parents: 87288
diff changeset
459 Py_FatalError("Py_Initialize: can't initialize tracemalloc");
6e2089dbc5ad Issue #18874: Implement the PEP 454 (tracemalloc)
Victor Stinner <victor.stinner@gmail.com>
parents: 87288
diff changeset
460
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
461 initmain(interp); /* Module __main__ */
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
462 if (initstdio() < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
463 Py_FatalError(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
464 "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
465
66137
06f76ef27f86 Issue #10372: Import the warnings module only after the IO library is
Antoine Pitrou <solipsis@pitrou.net>
parents: 65762
diff changeset
466 /* Initialize warnings. */
06f76ef27f86 Issue #10372: Import the warnings module only after the IO library is
Antoine Pitrou <solipsis@pitrou.net>
parents: 65762
diff changeset
467 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
468 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
469 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
470 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
471 PyErr_Print();
06f76ef27f86 Issue #10372: Import the warnings module only after the IO library is
Antoine Pitrou <solipsis@pitrou.net>
parents: 65762
diff changeset
472 }
06f76ef27f86 Issue #10372: Import the warnings module only after the IO library is
Antoine Pitrou <solipsis@pitrou.net>
parents: 65762
diff changeset
473 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
474 }
59865
c2d2e26bcf7f Merged revisions 78872 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 57498
diff changeset
475
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
476 if (!Py_NoSiteFlag)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
477 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
478 }
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
479
33189
de804edf8bcd Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents: 32781
diff changeset
480 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
481 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
482 {
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
483 _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
484 }
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
485
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
486 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
487 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
488 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
489 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
490 }
de804edf8bcd Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents: 32781
diff changeset
491
de804edf8bcd Patch #900727: Add Py_InitializeEx to allow embedding without signals.
Martin v. Löwis <martin@v.loewis.de>
parents: 32781
diff changeset
492
9641
d152adf3f094 Move the prototype for dump_counts() to before where it is used.
Guido van Rossum <guido@python.org>
parents: 9285
diff changeset
493 #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
494 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
495 #endif
d152adf3f094 Move the prototype for dump_counts() to before where it is used.
Guido van Rossum <guido@python.org>
parents: 9285
diff changeset
496
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 /* 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
498
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
499 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
500 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
501 {
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
502 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
503 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
504 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
505 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
506 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
507 }
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
508 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
509 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
510 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
511 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
512 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
513 }
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
514
42893
2c02ba72714b Make some internal functions static
Neal Norwitz <nnorwitz@gmail.com>
parents: 42822
diff changeset
515 static void
42180
9f99ea4f81e9 Silence compiler warning.
Guido van Rossum <guido@python.org>
parents: 42167
diff changeset
516 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
517 {
86999
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
518 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
519 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
520 PyObject *tmp;
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
521
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
522 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
523 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
524 if (tmp == NULL)
63847
77c6f60a1b24 Merged revisions 83854 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 62393
diff changeset
525 PyErr_WriteUnraisable(fout);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
526 else
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
527 Py_DECREF(tmp);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
528 }
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
529
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
530 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
531 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
532 if (tmp == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
533 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
534 else
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
535 Py_DECREF(tmp);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
536 }
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
537 }
29ba6c399090 Upon exit, flush stdout and stderr (twice: before and after the code that
Guido van Rossum <guido@python.org>
parents: 42071
diff changeset
538
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
539 /* 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
540
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
541 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
542 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
543 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
544 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
545
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
546 (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
547 threads.)
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
548
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
549 Locking: as above.
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
550
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
551 */
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
552
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
553 void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
554 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
555 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
556 PyInterpreterState *interp;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
557 PyThreadState *tstate;
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
558
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
559 if (!initialized)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
560 return;
16073
713ed6c6bcb5 Bug #128475: mimetools.encode (sometimes) fails when called from a thread.
Tim Peters <tim.peters@gmail.com>
parents: 15963
diff changeset
561
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
562 wait_for_thread_shutdown();
56652
29b3e126c0c2 Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53994
diff changeset
563
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
564 /* 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
565 * 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
566 * 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
567 * 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
568 * 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
569 * 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
570 * 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
571 * the threads created via Threading.
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
572 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
573 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
574
2a19d09b08f8 Issue #1856: Avoid crashes and lockups when daemon threads run while the
Antoine Pitrou <solipsis@pitrou.net>
parents: 69708
diff changeset
575 /* 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
576 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
577 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
578
2a19d09b08f8 Issue #1856: Avoid crashes and lockups when daemon threads run while the
Antoine Pitrou <solipsis@pitrou.net>
parents: 69708
diff changeset
579 /* 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
580 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
581 _Py_Finalizing = tstate;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
582 initialized = 0;
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
583
87070
c2a13acd5e2b Close #19466: Clear the frames of daemon threads earlier during the Python
Victor Stinner <victor.stinner@gmail.com>
parents: 86999
diff changeset
584 /* Destroy the state of all threads except of the current thread: in
c2a13acd5e2b Close #19466: Clear the frames of daemon threads earlier during the Python
Victor Stinner <victor.stinner@gmail.com>
parents: 86999
diff changeset
585 practice, only daemon threads should still be alive. Clear frames of
c2a13acd5e2b Close #19466: Clear the frames of daemon threads earlier during the Python
Victor Stinner <victor.stinner@gmail.com>
parents: 86999
diff changeset
586 other threads to call objects destructor. Destructors will be called in
c2a13acd5e2b Close #19466: Clear the frames of daemon threads earlier during the Python
Victor Stinner <victor.stinner@gmail.com>
parents: 86999
diff changeset
587 the current Python thread. Since _Py_Finalizing has been set, no other
c2a13acd5e2b Close #19466: Clear the frames of daemon threads earlier during the Python
Victor Stinner <victor.stinner@gmail.com>
parents: 86999
diff changeset
588 Python threads can lock the GIL at this point (if they try, they will
87071
10a8e676b87b Issue #19466: Fix typo. Patch written by Vajrasky Kok.
Victor Stinner <victor.stinner@gmail.com>
parents: 87070
diff changeset
589 exit immediately). */
87070
c2a13acd5e2b Close #19466: Clear the frames of daemon threads earlier during the Python
Victor Stinner <victor.stinner@gmail.com>
parents: 86999
diff changeset
590 _PyThreadState_DeleteExcept(tstate);
6547
724382af5339 Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents: 6376
diff changeset
591
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
592 /* 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
593 * before all modules are destroyed.
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
594 * 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
595 * 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
596 * XXX longer believes it's initialized.
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
597 * 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
598 * 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
599 * 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
600 * 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
601 * 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
602 * 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
603 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
604 PyGC_Collect();
87070
c2a13acd5e2b Close #19466: Clear the frames of daemon threads earlier during the Python
Victor Stinner <victor.stinner@gmail.com>
parents: 86999
diff changeset
605
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
606 #ifdef COUNT_ALLOCS
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
607 /* 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
608 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
609 list, so they become garbage. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
610 while (PyGC_Collect() > 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
611 /* 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
612 #endif
87070
c2a13acd5e2b Close #19466: Clear the frames of daemon threads earlier during the Python
Victor Stinner <victor.stinner@gmail.com>
parents: 86999
diff changeset
613
c2a13acd5e2b Close #19466: Clear the frames of daemon threads earlier during the Python
Victor Stinner <victor.stinner@gmail.com>
parents: 86999
diff changeset
614 /* Flush stdout+stderr */
c2a13acd5e2b Close #19466: Clear the frames of daemon threads earlier during the Python
Victor Stinner <victor.stinner@gmail.com>
parents: 86999
diff changeset
615 flush_std_files();
c2a13acd5e2b Close #19466: Clear the frames of daemon threads earlier during the Python
Victor Stinner <victor.stinner@gmail.com>
parents: 86999
diff changeset
616
c2a13acd5e2b Close #19466: Clear the frames of daemon threads earlier during the Python
Victor Stinner <victor.stinner@gmail.com>
parents: 86999
diff changeset
617 /* Disable signal handling */
c2a13acd5e2b Close #19466: Clear the frames of daemon threads earlier during the Python
Victor Stinner <victor.stinner@gmail.com>
parents: 86999
diff changeset
618 PyOS_FiniInterrupts();
28651
7fda09f751ad - New C API PyGC_Collect(), same as calling gc.collect().
Guido van Rossum <guido@python.org>
parents: 28649
diff changeset
619
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
620 /* Destroy all modules */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
621 PyImport_Cleanup();
6547
724382af5339 Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents: 6376
diff changeset
622
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
623 /* 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
624 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
625
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
626 /* 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
627 * class definitions, for example.
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
628 * 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
629 * 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
630 * 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
631 * 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
632 * 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
633 * 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
634 * 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
635 * 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
636 * 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
637 * 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
638 * 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
639 * XXX Python code getting called.
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
640 */
31057
f69589179c55 Py_Finalize(): disabled the second call of cyclic gc, and added extensive
Tim Peters <tim.peters@gmail.com>
parents: 30979
diff changeset
641 #if 0
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
642 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
643 #endif
28651
7fda09f751ad - New C API PyGC_Collect(), same as calling gc.collect().
Guido van Rossum <guido@python.org>
parents: 28649
diff changeset
644
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
645 /* 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
646 _PyImport_Fini();
6786
bc007cf1d6ba Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents: 6661
diff changeset
647
83623
7de9852cdc0e Fix crash caused by 8c1385205a35
Antoine Pitrou <solipsis@pitrou.net>
parents: 83612
diff changeset
648 /* Cleanup typeobject.c's internal caches. */
7de9852cdc0e Fix crash caused by 8c1385205a35
Antoine Pitrou <solipsis@pitrou.net>
parents: 83612
diff changeset
649 _PyType_Fini();
7de9852cdc0e Fix crash caused by 8c1385205a35
Antoine Pitrou <solipsis@pitrou.net>
parents: 83612
diff changeset
650
69070
b0680b5a5215 Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68769
diff changeset
651 /* unload faulthandler module */
b0680b5a5215 Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68769
diff changeset
652 _PyFaulthandler_Fini();
b0680b5a5215 Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68769
diff changeset
653
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
654 /* Debugging stuff */
6786
bc007cf1d6ba Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents: 6661
diff changeset
655 #ifdef COUNT_ALLOCS
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
656 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
657 #endif
87288
adb471b9cba1 ssue #19183: Implement PEP 456 'secure and interchangeable hash algorithm'.
Christian Heimes <christian@cheimes.de>
parents: 87114
diff changeset
658 /* dump hash stats */
adb471b9cba1 ssue #19183: Implement PEP 456 'secure and interchangeable hash algorithm'.
Christian Heimes <christian@cheimes.de>
parents: 87114
diff changeset
659 _PyHash_Fini();
6786
bc007cf1d6ba Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents: 6661
diff changeset
660
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
661 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
662
28647
9d4e138494fb Py_Finalize(): Reverted recent changes that tried to move the
Tim Peters <tim.peters@gmail.com>
parents: 28616
diff changeset
663 #ifdef Py_TRACE_REFS
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
664 /* 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
665 * __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
666 * 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
667 * up later.
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
668 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
669 if (Py_GETENV("PYTHONDUMPREFS"))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
670 _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
671 #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
672
83623
7de9852cdc0e Fix crash caused by 8c1385205a35
Antoine Pitrou <solipsis@pitrou.net>
parents: 83612
diff changeset
673 /* 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
674 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
675
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
676 /* 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
677 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
678 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
679 raised.
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
680 */
34834
7cfda9898863 Move exception finalisation later in the shutdown process - this
Anthony Baxter <anthonybaxter@gmail.com>
parents: 34664
diff changeset
681
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
682 _PyExc_Fini();
34834
7cfda9898863 Move exception finalisation later in the shutdown process - this
Anthony Baxter <anthonybaxter@gmail.com>
parents: 34664
diff changeset
683
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
684 /* Sundry finalizers */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
685 PyMethod_Fini();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
686 PyFrame_Fini();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
687 PyCFunction_Fini();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
688 PyTuple_Fini();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
689 PyList_Fini();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
690 PySet_Fini();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
691 PyBytes_Fini();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
692 PyByteArray_Fini();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
693 PyLong_Fini();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
694 PyFloat_Fini();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
695 PyDict_Fini();
73617
fa2f8dd077e0 Issue #10227: Add an allocation cache for a single slice object.
Antoine Pitrou <solipsis@pitrou.net>
parents: 72976
diff changeset
696 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
697 _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
698 _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
699
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
700 /* Cleanup Unicode implementation */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
701 _PyUnicode_Fini();
22883
d8bc68cb17e0 Move Unicode finalization further down in the chain.
Marc-André Lemburg <mal@egenix.com>
parents: 22721
diff changeset
702
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
703 /* 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
704 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
705 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
706 Py_FileSystemDefaultEncoding = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
707 }
44064
00048fedbaa0 Partial fix for bug #1306
Christian Heimes <christian@cheimes.de>
parents: 43866
diff changeset
708
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
709 /* XXX Still allocated:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
710 - 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
711 - int and float free list blocks
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
712 - whatever various modules and libraries allocate
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
713 */
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
714
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
715 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
716
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
717 /* 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
718 #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
719 _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
720 #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
721
213d6d7f5979 Issue #18203: Fix Py_Finalize(): destroy the GIL after the last call to
Victor Stinner <victor.stinner@gmail.com>
parents: 83650
diff changeset
722 /* 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
723 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
724 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
725
28653
56006d97bcef _Py_PrintReferences(): Changed to print object address at start of each
Tim Peters <tim.peters@gmail.com>
parents: 28651
diff changeset
726 #ifdef Py_TRACE_REFS
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
727 /* 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
728 * 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
729 * above by _Py_PrintReferences.
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
730 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
731 if (Py_GETENV("PYTHONDUMPREFS"))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
732 _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
733 #endif /* Py_TRACE_REFS */
23020
e2848618bd19 _PyObject_DebugDumpStats: renamed to _PyObject_DebugMallocStats.
Tim Peters <tim.peters@gmail.com>
parents: 22883
diff changeset
734 #ifdef PYMALLOC_DEBUG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
735 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
736 _PyObject_DebugMallocStats(stderr);
23020
e2848618bd19 _PyObject_DebugDumpStats: renamed to _PyObject_DebugMallocStats.
Tim Peters <tim.peters@gmail.com>
parents: 22883
diff changeset
737 #endif
e2848618bd19 _PyObject_DebugDumpStats: renamed to _PyObject_DebugMallocStats.
Tim Peters <tim.peters@gmail.com>
parents: 22883
diff changeset
738
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
739 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
740 }
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
741
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
742 /* 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
743 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
744 first.
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
745
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
746 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
747 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
748 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
749 thread.
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
750
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
751 Locking: as above.
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
752
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
753 */
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
754
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
755 PyThreadState *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
756 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
757 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
758 PyInterpreterState *interp;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
759 PyThreadState *tstate, *save_tstate;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
760 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
761
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
762 if (!initialized)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
763 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
764
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
765 interp = PyInterpreterState_New();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
766 if (interp == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
767 return NULL;
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
768
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
769 tstate = PyThreadState_New(interp);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
770 if (tstate == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
771 PyInterpreterState_Delete(interp);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
772 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
773 }
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
774
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
775 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
776
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
777 /* 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
778
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
779 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
780
65418
fd5135cbd928 _PyImport_FixupExtension() and _PyImport_FindExtension() uses FS encoding
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65400
diff changeset
781 bimod = _PyImport_FindBuiltin("builtins");
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
782 if (bimod != NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
783 interp->builtins = PyModule_GetDict(bimod);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
784 if (interp->builtins == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
785 goto handle_error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
786 Py_INCREF(interp->builtins);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
787 }
49613
efef5fc45a9a Issue 3723: Fixed initialization of subinterpreters
Christian Heimes <christian@cheimes.de>
parents: 49611
diff changeset
788
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
789 /* initialize builtin exceptions */
76303
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
790 _PyExc_Init(bimod);
49613
efef5fc45a9a Issue 3723: Fixed initialization of subinterpreters
Christian Heimes <christian@cheimes.de>
parents: 49611
diff changeset
791
65418
fd5135cbd928 _PyImport_FixupExtension() and _PyImport_FindExtension() uses FS encoding
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65400
diff changeset
792 sysmod = _PyImport_FindBuiltin("sys");
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
793 if (bimod != NULL && sysmod != NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
794 PyObject *pstderr;
76303
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
795
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
796 interp->sysdict = PyModule_GetDict(sysmod);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
797 if (interp->sysdict == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
798 goto handle_error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
799 Py_INCREF(interp->sysdict);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
800 PySys_SetPath(Py_GetPath());
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
801 PyDict_SetItemString(interp->sysdict, "modules",
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
802 interp->modules);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
803 /* 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
804 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
805 pstderr = PyFile_NewStdPrinter(fileno(stderr));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
806 if (pstderr == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
807 Py_FatalError("Py_Initialize: can't set preliminary stderr");
86999
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
808 _PySys_SetObjectId(&PyId_stderr, pstderr);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
809 PySys_SetObject("__stderr__", pstderr);
65763
b03779f00739 Merged revisions 85980 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 65696
diff changeset
810 Py_DECREF(pstderr);
49613
efef5fc45a9a Issue 3723: Fixed initialization of subinterpreters
Christian Heimes <christian@cheimes.de>
parents: 49611
diff changeset
811
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
812 _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
813
76303
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
814 import_init(interp, sysmod);
2dd046be2c88 Issue #2377: Make importlib the implementation of __import__().
Brett Cannon <brett@python.org>
parents: 76085
diff changeset
815
69708
2caf82aee7a4 Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69707
diff changeset
816 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
817 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
818
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
819 if (initstdio() < 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
820 Py_FatalError(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
821 "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
822 initmain(interp);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
823 if (!Py_NoSiteFlag)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
824 initsite();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
825 }
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
826
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
827 if (!PyErr_Occurred())
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
828 return tstate;
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
829
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39610
diff changeset
830 handle_error:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
831 /* 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
832
69707
5a983773c09a Issue #10914: Py_NewInterpreter() uses PyErr_PrintEx(0)
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68769
diff changeset
833 PyErr_PrintEx(0);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
834 PyThreadState_Clear(tstate);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
835 PyThreadState_Swap(save_tstate);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
836 PyThreadState_Delete(tstate);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
837 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
838
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
839 return NULL;
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
840 }
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
841
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
842 /* 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
843 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
844 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
845 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
846
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
847 (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
848 everything, regardless.)
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
849
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
850 Locking: as above.
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
851
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
852 */
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
853
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
854 void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
855 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
856 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
857 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
858
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
859 if (tstate != PyThreadState_GET())
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
860 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
861 if (tstate->frame != NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
862 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
863
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
864 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
865
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
866 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
867 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
868
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
869 PyImport_Cleanup();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
870 PyInterpreterState_Clear(interp);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
871 PyThreadState_Swap(NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
872 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
873 }
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
874
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
875 #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
876 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
877 #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
878 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
879 #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
880
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
881 void
46318
22a74eaf6b22 Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents: 46299
diff changeset
882 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
883 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
884 if (pn && *pn)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
885 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
886 }
6f67a1bda15a Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents: 5611
diff changeset
887
46318
22a74eaf6b22 Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents: 46299
diff changeset
888 wchar_t *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
889 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
890 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
891 return progname;
5405
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
892 }
b7871ca930ad Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents: 5234
diff changeset
893
46318
22a74eaf6b22 Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents: 46299
diff changeset
894 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
895 static wchar_t env_home[MAXPATHLEN+1];
7206
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
896
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
897 void
46318
22a74eaf6b22 Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents: 46299
diff changeset
898 Py_SetPythonHome(wchar_t *home)
7206
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
899 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
900 default_home = home;
7206
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
901 }
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
902
46318
22a74eaf6b22 Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents: 46299
diff changeset
903 wchar_t *
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
904 Py_GetPythonHome(void)
7206
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
905 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
906 wchar_t *home = default_home;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
907 if (home == NULL && !Py_IgnoreEnvironmentFlag) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
908 char* chome = Py_GETENV("PYTHONHOME");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
909 if (chome) {
87113
159e51e5fc2c pythonrun.c: fix Py_GetPythonHome(), use Py_ARRAY_LENGTH() to get the size of
Victor Stinner <victor.stinner@gmail.com>
parents: 86561
diff changeset
910 size_t size = Py_ARRAY_LENGTH(env_home);
159e51e5fc2c pythonrun.c: fix Py_GetPythonHome(), use Py_ARRAY_LENGTH() to get the size of
Victor Stinner <victor.stinner@gmail.com>
parents: 86561
diff changeset
911 size_t r = mbstowcs(env_home, chome, size);
159e51e5fc2c pythonrun.c: fix Py_GetPythonHome(), use Py_ARRAY_LENGTH() to get the size of
Victor Stinner <victor.stinner@gmail.com>
parents: 86561
diff changeset
912 if (r != (size_t)-1 && r < size)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
913 home = env_home;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
914 }
46318
22a74eaf6b22 Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents: 46299
diff changeset
915
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
916 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
917 return home;
7206
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
918 }
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
919
2098
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
920 /* Create __main__ module */
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
921
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
922 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
923 initmain(PyInterpreterState *interp)
2098
b7be0382f9ee __builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
924 {
83619
97b7bd87c44c #17115: I hate you MS for not supporting C99.
Brett Cannon <brett@python.org>
parents: 83613
diff changeset
925 PyObject *m, *d, *loader;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
926 m = PyImport_AddModule("__main__");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
927 if (m == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
928 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
929 d = PyModule_GetDict(m);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
930 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
931 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
932 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
933 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
934 }
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
935 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
936 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
937 }
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
938 Py_DECREF(bimod);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
939 }
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
940 /* 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
941 * 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
942 * 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
943 * 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
944 * 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
945 */
83619
97b7bd87c44c #17115: I hate you MS for not supporting C99.
Brett Cannon <brett@python.org>
parents: 83613
diff changeset
946 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
947 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
948 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
949 "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
950 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
951 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
952 }
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
953 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
954 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
955 }
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
956 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
957 }
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
958 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
959
69708
2caf82aee7a4 Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69707
diff changeset
960 static int
2caf82aee7a4 Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69707
diff changeset
961 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
962 {
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
963 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
964
71191
7ce685cda0ae Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70402
diff changeset
965 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
966 {
7ce685cda0ae Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70402
diff changeset
967 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
968 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
969 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
970
65535
e2ba1249a2f5 initfsencoding(): get_codeset() failure is now a fatal error
Victor Stinner <victor.stinner@haypocalc.com>
parents: 65418
diff changeset
971 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
972 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
973 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
974 }
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
975
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
976 /* 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
977 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
978 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
979 /* 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
980 * 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
981 * etc. */
69708
2caf82aee7a4 Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69707
diff changeset
982 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
983 }
69708
2caf82aee7a4 Issue #10914: Initialize correctly the filesystem codec when creating a new
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69707
diff changeset
984 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
985 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
986 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
987 }
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
988
6201
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
989 /* Import the site module (not into __main__ though) */
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
990
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
991 static void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
992 initsite(void)
6201
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
993 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
994 PyObject *m;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
995 m = PyImport_ImportModule("site");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
996 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
997 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
998 PyErr_Print();
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
999 Py_Finalize();
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
1000 exit(1);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1001 }
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 Py_DECREF(m);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1004 }
6201
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
1005 }
dc974b3a6cf4 Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents: 6197
diff changeset
1006
50666
b98fe8dc8acd Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 50559
diff changeset
1007 static PyObject*
b98fe8dc8acd Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 50559
diff changeset
1008 create_stdio(PyObject* io,
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1009 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
1010 char* encoding, char* errors)
50666
b98fe8dc8acd Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 50559
diff changeset
1011 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1012 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
1013 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
1014 const char* newline;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1015 PyObject *line_buffering;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1016 int buffering, isatty;
72925
7109f31300fb Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents: 72848
diff changeset
1017 _Py_IDENTIFIER(open);
7109f31300fb Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents: 72848
diff changeset
1018 _Py_IDENTIFIER(isatty);
7109f31300fb Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents: 72848
diff changeset
1019 _Py_IDENTIFIER(TextIOWrapper);
72926
db4aa878cea2 Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents: 72925
diff changeset
1020 _Py_IDENTIFIER(mode);
50666
b98fe8dc8acd Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 50559
diff changeset
1021
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1022 /* 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
1023 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
1024 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
1025 buffered streams.
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1026 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1027 if (Py_UnbufferedStdioFlag && write_mode)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1028 buffering = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1029 else
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1030 buffering = -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1031 if (write_mode)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1032 mode = "wb";
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 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
1035 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
1036 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
1037 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
1038 if (buf == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1039 goto error;
50666
b98fe8dc8acd Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 50559
diff changeset
1040
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1041 if (buffering) {
72925
7109f31300fb Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents: 72848
diff changeset
1042 _Py_IDENTIFIER(raw);
72848
81380082d216 Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents: 72835
diff changeset
1043 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
1044 if (raw == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1045 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1046 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1047 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1048 raw = buf;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1049 Py_INCREF(raw);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1050 }
50666
b98fe8dc8acd Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 50559
diff changeset
1051
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1052 text = PyUnicode_FromString(name);
72926
db4aa878cea2 Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents: 72925
diff changeset
1053 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
1054 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
1055 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
1056 if (res == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1057 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1058 isatty = PyObject_IsTrue(res);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1059 Py_DECREF(res);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1060 if (isatty == -1)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1061 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1062 if (isatty || Py_UnbufferedStdioFlag)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1063 line_buffering = Py_True;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1064 else
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1065 line_buffering = Py_False;
50678
9c2bd647b646 Merged revisions 68463 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 50666
diff changeset
1066
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1067 Py_CLEAR(raw);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1068 Py_CLEAR(text);
50666
b98fe8dc8acd Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 50559
diff changeset
1069
78406
09408b990ca5 Close #13119: use "\r\n" newline for sys.stdout/err on Windows
Victor Stinner <victor.stinner@gmail.com>
parents: 77949
diff changeset
1070 #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
1071 /* 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
1072 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
1073 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
1074 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
1075 #else
09408b990ca5 Close #13119: use "\r\n" newline for sys.stdout/err on Windows
Victor Stinner <victor.stinner@gmail.com>
parents: 77949
diff changeset
1076 /* 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
1077 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
1078 newline = "\n";
aba16a5683d3 Issue #11272: Fix input() and sys.stdin for Windows newline
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67347
diff changeset
1079 #endif
aba16a5683d3 Issue #11272: Fix input() and sys.stdin for Windows newline
Victor Stinner <victor.stinner@haypocalc.com>
parents: 67347
diff changeset
1080
72835
5e33219492bc Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents: 72424
diff changeset
1081 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
1082 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
1083 newline, line_buffering);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1084 Py_CLEAR(buf);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1085 if (stream == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1086 goto error;
50666
b98fe8dc8acd Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 50559
diff changeset
1087
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1088 if (write_mode)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1089 mode = "w";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1090 else
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1091 mode = "r";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1092 text = PyUnicode_FromString(mode);
72926
db4aa878cea2 Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents: 72925
diff changeset
1093 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
1094 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1095 Py_CLEAR(text);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1096 return stream;
50666
b98fe8dc8acd Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 50559
diff changeset
1097
b98fe8dc8acd Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 50559
diff changeset
1098 error:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1099 Py_XDECREF(buf);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1100 Py_XDECREF(stream);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1101 Py_XDECREF(text);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1102 Py_XDECREF(raw);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1103 return NULL;
50666
b98fe8dc8acd Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 50559
diff changeset
1104 }
b98fe8dc8acd Merged revisions 68451 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 50559
diff changeset
1105
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
1106 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
1107 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
1108 {
f15943505db0 Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73761
diff changeset
1109 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
1110 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
1111 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
1112 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
1113 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
1114 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
1115 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
1116 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
1117 }
f15943505db0 Issue #7111: Python can now be run without a stdin, stdout or stderr stream.
Antoine Pitrou <solipsis@pitrou.net>
parents: 73761
diff changeset
1118
44098
0889daf6d0d9 #1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents: 44066
diff changeset
1119 /* 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
1120 static int
a2bb76d11d66 Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents: 43569
diff changeset
1121 initstdio(void)
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 PyObject *iomod = NULL, *wrapper;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1124 PyObject *bimod = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1125 PyObject *m;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1126 PyObject *std = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1127 int status = 0, fd;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1128 PyObject * encoding_attr;
85673
c7fdb0637d0b Issue #18818: The "encodingname" part of PYTHONIOENCODING is now optional.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85468
diff changeset
1129 char *pythonioencoding = NULL, *encoding, *errors;
43605
a2bb76d11d66 Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents: 43569
diff changeset
1130
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1131 /* 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
1132 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
1133 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
1134 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1135 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1136 Py_DECREF(m);
43605
a2bb76d11d66 Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents: 43569
diff changeset
1137
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1138 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
1139 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1140 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1141 Py_DECREF(m);
43605
a2bb76d11d66 Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents: 43569
diff changeset
1142
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1143 if (!(bimod = PyImport_ImportModule("builtins"))) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1144 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1145 }
43605
a2bb76d11d66 Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents: 43569
diff changeset
1146
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1147 if (!(iomod = PyImport_ImportModule("io"))) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1148 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1149 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1150 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1151 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1152 }
43605
a2bb76d11d66 Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents: 43569
diff changeset
1153
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1154 /* Set builtins.open */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1155 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
1156 Py_DECREF(wrapper);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1157 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1158 }
66318
6eabf8c1a75c Issue #10255: Fix reference leak in Py_InitializeEx(). Patch by Neil
Antoine Pitrou <solipsis@pitrou.net>
parents: 66137
diff changeset
1159 Py_DECREF(wrapper);
43605
a2bb76d11d66 Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents: 43569
diff changeset
1160
86399
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1161 encoding = _Py_StandardStreamEncoding;
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1162 errors = _Py_StandardStreamErrors;
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1163 if (!encoding || !errors) {
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1164 pythonioencoding = Py_GETENV("PYTHONIOENCODING");
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1165 if (pythonioencoding) {
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1166 char *err;
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1167 pythonioencoding = _PyMem_Strdup(pythonioencoding);
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1168 if (pythonioencoding == NULL) {
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1169 PyErr_NoMemory();
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1170 goto error;
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1171 }
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1172 err = strchr(pythonioencoding, ':');
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1173 if (err) {
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1174 *err = '\0';
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1175 err++;
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1176 if (*err && !errors) {
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1177 errors = err;
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1178 }
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1179 }
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1180 if (*pythonioencoding && !encoding) {
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1181 encoding = pythonioencoding;
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1182 }
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1183 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1184 }
47444
bb2c4bdc3c68 Forward-port PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
1185
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1186 /* Set sys.stdin */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1187 fd = fileno(stdin);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1188 /* 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
1189 * 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
1190 * 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
1191 */
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, 0, "<stdin>", encoding, errors);
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) */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1201 PySys_SetObject("__stdin__", std);
86999
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
1202 _PySys_SetObjectId(&PyId_stdin, std);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1203 Py_DECREF(std);
43605
a2bb76d11d66 Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents: 43569
diff changeset
1204
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1205 /* Set sys.stdout */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1206 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
1207 if (!is_valid_fd(fd)) {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1208 std = Py_None;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1209 Py_INCREF(std);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1210 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1211 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1212 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
1213 if (std == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1214 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1215 } /* if (fd < 0) */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1216 PySys_SetObject("__stdout__", std);
86999
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
1217 _PySys_SetObjectId(&PyId_stdout, std);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1218 Py_DECREF(std);
43605
a2bb76d11d66 Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents: 43569
diff changeset
1219
43777
0d462d789b18 Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents: 43718
diff changeset
1220 #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
1221 /* 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
1222 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
1223 if (!is_valid_fd(fd)) {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1224 std = Py_None;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1225 Py_INCREF(std);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1226 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1227 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1228 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
1229 if (std == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1230 goto error;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1231 } /* 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
1232
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1233 /* 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
1234 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
1235 encoding_attr = PyObject_GetAttrString(std, "encoding");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1236 if (encoding_attr != NULL) {
84502
65f2c92ed079 Issue #18203: Add _PyMem_RawStrdup() and _PyMem_Strdup()
Victor Stinner <victor.stinner@gmail.com>
parents: 84489
diff changeset
1237 const char * std_encoding;
65f2c92ed079 Issue #18203: Add _PyMem_RawStrdup() and _PyMem_Strdup()
Victor Stinner <victor.stinner@gmail.com>
parents: 84489
diff changeset
1238 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
1239 if (std_encoding != NULL) {
65f2c92ed079 Issue #18203: Add _PyMem_RawStrdup() and _PyMem_Strdup()
Victor Stinner <victor.stinner@gmail.com>
parents: 84489
diff changeset
1240 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
1241 Py_XDECREF(codec_info);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1242 }
65763
b03779f00739 Merged revisions 85980 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents: 65696
diff changeset
1243 Py_DECREF(encoding_attr);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1244 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1245 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
1246
84800
a4998e8fd7fc Issue #18520: Fix initstdio(), handle PySys_SetObject() failure
Victor Stinner <victor.stinner@gmail.com>
parents: 84796
diff changeset
1247 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
1248 Py_DECREF(std);
a4998e8fd7fc Issue #18520: Fix initstdio(), handle PySys_SetObject() failure
Victor Stinner <victor.stinner@gmail.com>
parents: 84796
diff changeset
1249 goto error;
a4998e8fd7fc Issue #18520: Fix initstdio(), handle PySys_SetObject() failure
Victor Stinner <victor.stinner@gmail.com>
parents: 84796
diff changeset
1250 }
86999
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
1251 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
84800
a4998e8fd7fc Issue #18520: Fix initstdio(), handle PySys_SetObject() failure
Victor Stinner <victor.stinner@gmail.com>
parents: 84796
diff changeset
1252 Py_DECREF(std);
a4998e8fd7fc Issue #18520: Fix initstdio(), handle PySys_SetObject() failure
Victor Stinner <victor.stinner@gmail.com>
parents: 84796
diff changeset
1253 goto error;
a4998e8fd7fc Issue #18520: Fix initstdio(), handle PySys_SetObject() failure
Victor Stinner <victor.stinner@gmail.com>
parents: 84796
diff changeset
1254 }
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1255 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
1256 #endif
43605
a2bb76d11d66 Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents: 43569
diff changeset
1257
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1258 if (0) {
43605
a2bb76d11d66 Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents: 43569
diff changeset
1259 error:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1260 status = -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1261 }
43605
a2bb76d11d66 Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents: 43569
diff changeset
1262
86399
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1263 /* We won't need them anymore. */
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1264 if (_Py_StandardStreamEncoding) {
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1265 PyMem_RawFree(_Py_StandardStreamEncoding);
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1266 _Py_StandardStreamEncoding = NULL;
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1267 }
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1268 if (_Py_StandardStreamErrors) {
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1269 PyMem_RawFree(_Py_StandardStreamErrors);
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1270 _Py_StandardStreamErrors = NULL;
9cd88b39ef62 Issue #16129: Add `Py_SetStandardStreamEncoding`
Nick Coghlan <ncoghlan@gmail.com>
parents: 86333
diff changeset
1271 }
85673
c7fdb0637d0b Issue #18818: The "encodingname" part of PYTHONIOENCODING is now optional.
Serhiy Storchaka <storchaka@gmail.com>
parents: 85468
diff changeset
1272 PyMem_Free(pythonioencoding);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1273 Py_XDECREF(bimod);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1274 Py_XDECREF(iomod);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1275 return status;
43605
a2bb76d11d66 Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents: 43569
diff changeset
1276 }
a2bb76d11d66 Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents: 43569
diff changeset
1277
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1278 /* Parse input from a file and execute it */
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1279
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1280 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
1281 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
1282 PyCompilerFlags *flags)
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
1283 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1284 if (filename == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1285 filename = "???";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1286 if (Py_FdIsInteractive(fp, filename)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1287 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
1288 if (closeit)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1289 fclose(fp);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1290 return err;
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 else
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1293 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1294 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1295
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1296 int
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1297 PyRun_InteractiveLoopFlags(FILE *fp, const char *filename_str, PyCompilerFlags *flags)
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
1298 {
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1299 PyObject *filename, *v;
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1300 int ret, err;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1301 PyCompilerFlags local_flags;
16916
b0456d3a0f1f Useful future statement support for the interactive interpreter
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16845
diff changeset
1302
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1303 filename = PyUnicode_DecodeFSDefault(filename_str);
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1304 if (filename == NULL) {
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1305 PyErr_Print();
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1306 return -1;
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1307 }
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1308
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1309 if (flags == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1310 flags = &local_flags;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1311 local_flags.cf_flags = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1312 }
86974
954167ce92a3 Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents: 86966
diff changeset
1313 v = _PySys_GetObjectId(&PyId_ps1);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1314 if (v == NULL) {
86974
954167ce92a3 Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents: 86966
diff changeset
1315 _PySys_SetObjectId(&PyId_ps1, v = PyUnicode_FromString(">>> "));
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1316 Py_XDECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1317 }
86974
954167ce92a3 Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents: 86966
diff changeset
1318 v = _PySys_GetObjectId(&PyId_ps2);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1319 if (v == NULL) {
86974
954167ce92a3 Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents: 86966
diff changeset
1320 _PySys_SetObjectId(&PyId_ps2, v = PyUnicode_FromString("... "));
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1321 Py_XDECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1322 }
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1323 err = -1;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1324 for (;;) {
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1325 ret = PyRun_InteractiveOneObject(fp, filename, flags);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1326 PRINT_TOTAL_REFS();
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1327 if (ret == E_EOF) {
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1328 err = 0;
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1329 break;
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1330 }
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1331 /*
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1332 if (ret == E_NOMEM)
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1333 break;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1334 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1335 }
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1336 Py_DECREF(filename);
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1337 return err;
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1338 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1339
22468
eebae4f60d05 Disable the parser hacks that enabled the "yield" keyword using a future
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22121
diff changeset
1340 /* 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
1341 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
1342 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1343 int parser_flags = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1344 if (!flags)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1345 return 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1346 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
1347 parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1348 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
1349 parser_flags |= PyPARSE_IGNORE_COOKIE;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1350 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
1351 parser_flags |= PyPARSE_BARRY_AS_BDFL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1352 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
1353 }
22468
eebae4f60d05 Disable the parser hacks that enabled the "yield" keyword using a future
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents: 22121
diff changeset
1354
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39610
diff changeset
1355 #if 0
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39610
diff changeset
1356 /* 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
1357 #define PARSER_FLAGS(flags) \
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1358 ((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
1359 PyPARSE_DONT_IMPLY_DEDENT : 0) \
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1360 | ((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
1361 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
1362 #endif
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 39610
diff changeset
1363
16916
b0456d3a0f1f Useful future statement support for the interactive interpreter
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16845
diff changeset
1364 int
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1365 PyRun_InteractiveOneObject(FILE *fp, PyObject *filename, PyCompilerFlags *flags)
16916
b0456d3a0f1f Useful future statement support for the interactive interpreter
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16845
diff changeset
1366 {
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1367 PyObject *m, *d, *v, *w, *oenc = NULL, *mod_name;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1368 mod_ty mod;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1369 PyArena *arena;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1370 char *ps1 = "", *ps2 = "", *enc = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1371 int errcode = 0;
72925
7109f31300fb Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents: 72848
diff changeset
1372 _Py_IDENTIFIER(encoding);
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1373 _Py_IDENTIFIER(__main__);
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1374
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1375 mod_name = _PyUnicode_FromId(&PyId___main__); /* borrowed */
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1376 if (mod_name == NULL) {
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1377 PyErr_Print();
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1378 return -1;
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1379 }
18615
0a90e5ec61b6 Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents: 18612
diff changeset
1380
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1381 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
1382 /* Fetch encoding from sys.stdin if possible. */
86999
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
1383 v = _PySys_GetObjectId(&PyId_stdin);
83551
68d1ac152b5d ignore errors when trying to fetch sys.stdin.encoding (closes #17863)
Benjamin Peterson <benjamin@python.org>
parents: 80290
diff changeset
1384 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
1385 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
1386 if (oenc)
68d1ac152b5d ignore errors when trying to fetch sys.stdin.encoding (closes #17863)
Benjamin Peterson <benjamin@python.org>
parents: 80290
diff changeset
1387 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
1388 if (!enc)
68d1ac152b5d ignore errors when trying to fetch sys.stdin.encoding (closes #17863)
Benjamin Peterson <benjamin@python.org>
parents: 80290
diff changeset
1389 PyErr_Clear();
68d1ac152b5d ignore errors when trying to fetch sys.stdin.encoding (closes #17863)
Benjamin Peterson <benjamin@python.org>
parents: 80290
diff changeset
1390 }
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1391 }
86974
954167ce92a3 Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents: 86966
diff changeset
1392 v = _PySys_GetObjectId(&PyId_ps1);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1393 if (v != NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1394 v = PyObject_Str(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1395 if (v == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1396 PyErr_Clear();
61716
942b3c168f15 Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61654
diff changeset
1397 else if (PyUnicode_Check(v)) {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1398 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
1399 if (ps1 == NULL) {
942b3c168f15 Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61654
diff changeset
1400 PyErr_Clear();
942b3c168f15 Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61654
diff changeset
1401 ps1 = "";
942b3c168f15 Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61654
diff changeset
1402 }
942b3c168f15 Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61654
diff changeset
1403 }
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1404 }
86974
954167ce92a3 Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents: 86966
diff changeset
1405 w = _PySys_GetObjectId(&PyId_ps2);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1406 if (w != NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1407 w = PyObject_Str(w);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1408 if (w == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1409 PyErr_Clear();
61716
942b3c168f15 Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61654
diff changeset
1410 else if (PyUnicode_Check(w)) {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1411 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
1412 if (ps2 == NULL) {
942b3c168f15 Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61654
diff changeset
1413 PyErr_Clear();
942b3c168f15 Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61654
diff changeset
1414 ps2 = "";
942b3c168f15 Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61654
diff changeset
1415 }
942b3c168f15 Issue #6697: Check that _PyUnicode_AsString() result is not NULL
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61654
diff changeset
1416 }
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1417 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1418 arena = PyArena_New();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1419 if (arena == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1420 Py_XDECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1421 Py_XDECREF(w);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1422 Py_XDECREF(oenc);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1423 return -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1424 }
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1425 mod = PyParser_ASTFromFileObject(fp, filename, enc,
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1426 Py_single_input, ps1, ps2,
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1427 flags, &errcode, arena);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1428 Py_XDECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1429 Py_XDECREF(w);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1430 Py_XDECREF(oenc);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1431 if (mod == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1432 PyArena_Free(arena);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1433 if (errcode == E_EOF) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1434 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1435 return E_EOF;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1436 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1437 PyErr_Print();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1438 return -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1439 }
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1440 m = PyImport_AddModuleObject(mod_name);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1441 if (m == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1442 PyArena_Free(arena);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1443 return -1;
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 d = PyModule_GetDict(m);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1446 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
1447 PyArena_Free(arena);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1448 flush_io();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1449 if (v == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1450 PyErr_Print();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1451 return -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1452 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1453 Py_DECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1454 return 0;
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1455 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1456
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1457 int
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1458 PyRun_InteractiveOneFlags(FILE *fp, const char *filename_str, PyCompilerFlags *flags)
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1459 {
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1460 PyObject *filename;
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1461 int res;
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1462
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1463 filename = PyUnicode_DecodeFSDefault(filename_str);
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1464 if (filename == NULL) {
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1465 PyErr_Print();
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1466 return -1;
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1467 }
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1468 res = PyRun_InteractiveOneObject(fp, filename, flags);
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1469 Py_DECREF(filename);
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1470 return res;
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1471 }
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1472
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
1473
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
1474 /* 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
1475 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
1476
76caf0855d1f Recognize pyc files even if they don't end in pyc.
Martin v. Löwis <martin@v.loewis.de>
parents: 14637
diff changeset
1477 static int
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
1478 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
1479 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1480 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
1481 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
1482
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1483 /* 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
1484 it then should also be seekable. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1485 if (closeit) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1486 /* 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
1487 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
1488 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
1489 unsigned int halfmagic = PyImport_GetMagicNumber() & 0xFFFF;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1490 unsigned char buf[2];
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1491 /* 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
1492 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
1493 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
1494 and a x-platform nightmare.
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1495 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
1496 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
1497 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
1498 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
1499 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
1500 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
1501 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1502 int ispyc = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1503 if (ftell(fp) == 0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1504 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
1505 ((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
1506 ispyc = 1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1507 rewind(fp);
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 return ispyc;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1510 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1511 return 0;
28648
0e8416be208e Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents: 28647
diff changeset
1512 }
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
1513
84933
31664b304281 Fix style
Antoine Pitrou <solipsis@pitrou.net>
parents: 84800
diff changeset
1514 static int
31664b304281 Fix style
Antoine Pitrou <solipsis@pitrou.net>
parents: 84800
diff changeset
1515 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
1516 {
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
1517 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
1518 PyThreadState *tstate;
80155
02d25098ad57 Issue #16218: Support non ascii characters in python launcher.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 78991
diff changeset
1519 PyObject *filename_obj, *loader_type, *loader;
78117
27e13497d545 Refcounting fixes
Nick Coghlan <ncoghlan@gmail.com>
parents: 78116
diff changeset
1520 int result = 0;
80155
02d25098ad57 Issue #16218: Support non ascii characters in python launcher.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 78991
diff changeset
1521
02d25098ad57 Issue #16218: Support non ascii characters in python launcher.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 78991
diff changeset
1522 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
1523 if (filename_obj == NULL)
02d25098ad57 Issue #16218: Support non ascii characters in python launcher.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 78991
diff changeset
1524 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
1525 /* 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
1526 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
1527 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
1528 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
1529 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
1530 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
1531 return -1;
ba264b26d8d9 Actually initialize __main__.__loader__ with loader instances, not the corresponding type objects
Nick Coghlan <ncoghlan@gmail.com>
parents: 78107
diff changeset
1532 }
80155
02d25098ad57 Issue #16218: Support non ascii characters in python launcher.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 78991
diff changeset
1533 loader = PyObject_CallFunction(loader_type, "sN", "__main__", filename_obj);
78117
27e13497d545 Refcounting fixes
Nick Coghlan <ncoghlan@gmail.com>
parents: 78116
diff changeset
1534 Py_DECREF(loader_type);
27e13497d545 Refcounting fixes
Nick Coghlan <ncoghlan@gmail.com>
parents: 78116
diff changeset
1535 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
1536 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
1537 }
78117
27e13497d545 Refcounting fixes
Nick Coghlan <ncoghlan@gmail.com>
parents: 78116
diff changeset
1538 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
27e13497d545 Refcounting fixes
Nick Coghlan <ncoghlan@gmail.com>
parents: 78116
diff changeset
1539 result = -1;
27e13497d545 Refcounting fixes
Nick Coghlan <ncoghlan@gmail.com>
parents: 78116
diff changeset
1540 }
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
1541 Py_DECREF(loader);
78117
27e13497d545 Refcounting fixes
Nick Coghlan <ncoghlan@gmail.com>
parents: 78116
diff changeset
1542 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
1543 }
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
1544
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
1545 int
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
1546 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
1547 PyCompilerFlags *flags)
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
1548 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1549 PyObject *m, *d, *v;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1550 const char *ext;
80289
b256d054f229 Issue #15001: fix segfault on "del sys.module['__main__']"
Hynek Schlawack <hs@ox.cx>
parents: 78406
diff changeset
1551 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
1552 size_t len;
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
1553
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1554 m = PyImport_AddModule("__main__");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1555 if (m == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1556 return -1;
80289
b256d054f229 Issue #15001: fix segfault on "del sys.module['__main__']"
Hynek Schlawack <hs@ox.cx>
parents: 78406
diff changeset
1557 Py_INCREF(m);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1558 d = PyModule_GetDict(m);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1559 if (PyDict_GetItemString(d, "__file__") == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1560 PyObject *f;
65536
42b84d3188d1 Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 63847
diff changeset
1561 f = PyUnicode_DecodeFSDefault(filename);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1562 if (f == NULL)
80289
b256d054f229 Issue #15001: fix segfault on "del sys.module['__main__']"
Hynek Schlawack <hs@ox.cx>
parents: 78406
diff changeset
1563 goto done;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1564 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
1565 Py_DECREF(f);
80289
b256d054f229 Issue #15001: fix segfault on "del sys.module['__main__']"
Hynek Schlawack <hs@ox.cx>
parents: 78406
diff changeset
1566 goto done;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1567 }
72423
7a48e98915f2 - Issue #13021: Missing decref on an error path. Thanks to Suman Saha for
Barry Warsaw <barry@python.org>
parents: 70133
diff changeset
1568 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
1569 Py_DECREF(f);
80289
b256d054f229 Issue #15001: fix segfault on "del sys.module['__main__']"
Hynek Schlawack <hs@ox.cx>
parents: 78406
diff changeset
1570 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
1571 }
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1572 set_file_name = 1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1573 Py_DECREF(f);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1574 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1575 len = strlen(filename);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1576 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
1577 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
1578 FILE *pyc_fp;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1579 /* 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
1580 if (closeit)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1581 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
1582 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
1583 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
1584 goto done;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1585 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1586 /* 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
1587 if (strcmp(ext, ".pyo") == 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1588 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
1589
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
1590 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
1591 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
1592 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
1593 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
1594 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
1595 }
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
1596 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
1597 fclose(pyc_fp);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1598 } 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
1599 /* 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
1600 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
1601 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
1602 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
1603 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
1604 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
1605 }
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1606 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
1607 closeit, flags);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1608 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1609 flush_io();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1610 if (v == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1611 PyErr_Print();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1612 goto done;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1613 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1614 Py_DECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1615 ret = 0;
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41253
diff changeset
1616 done:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1617 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
1618 PyErr_Clear();
80289
b256d054f229 Issue #15001: fix segfault on "del sys.module['__main__']"
Hynek Schlawack <hs@ox.cx>
parents: 78406
diff changeset
1619 Py_DECREF(m);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1620 return ret;
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1621 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1622
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1623 int
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
1624 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
1625 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1626 PyObject *m, *d, *v;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1627 m = PyImport_AddModule("__main__");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1628 if (m == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1629 return -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1630 d = PyModule_GetDict(m);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1631 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
1632 if (v == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1633 PyErr_Print();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1634 return -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1635 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1636 Py_DECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1637 return 0;
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1638 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1639
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1640 static int
86984
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1641 parse_syntax_error(PyObject *err, PyObject **message, PyObject **filename,
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1642 int *lineno, int *offset, PyObject **text)
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1643 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1644 long hold;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1645 PyObject *v;
72925
7109f31300fb Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents: 72848
diff changeset
1646 _Py_IDENTIFIER(msg);
7109f31300fb Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents: 72848
diff changeset
1647 _Py_IDENTIFIER(filename);
7109f31300fb Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents: 72848
diff changeset
1648 _Py_IDENTIFIER(lineno);
7109f31300fb Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents: 72848
diff changeset
1649 _Py_IDENTIFIER(offset);
7109f31300fb Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents: 72848
diff changeset
1650 _Py_IDENTIFIER(text);
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1651
76084
43606a4085b0 fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents: 75142
diff changeset
1652 *message = NULL;
86984
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1653 *filename = NULL;
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1654
76084
43606a4085b0 fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents: 75142
diff changeset
1655 /* new style errors. `err' is an instance */
76085
ff7587546a1d merge 3.2
Benjamin Peterson <benjamin@python.org>
parents: 75292 76084
diff changeset
1656 *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
1657 if (!*message)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1658 goto finally;
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1659
76085
ff7587546a1d merge 3.2
Benjamin Peterson <benjamin@python.org>
parents: 75292 76084
diff changeset
1660 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
1661 if (!v)
43606a4085b0 fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents: 75142
diff changeset
1662 goto finally;
43606a4085b0 fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents: 75142
diff changeset
1663 if (v == Py_None) {
43606a4085b0 fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents: 75142
diff changeset
1664 Py_DECREF(v);
86984
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1665 *filename = _PyUnicode_FromId(&PyId_string);
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1666 if (*filename == NULL)
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1667 goto finally;
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1668 Py_INCREF(*filename);
76084
43606a4085b0 fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents: 75142
diff changeset
1669 }
43606a4085b0 fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents: 75142
diff changeset
1670 else {
86984
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1671 *filename = v;
76084
43606a4085b0 fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents: 75142
diff changeset
1672 }
43606a4085b0 fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents: 75142
diff changeset
1673
76085
ff7587546a1d merge 3.2
Benjamin Peterson <benjamin@python.org>
parents: 75292 76084
diff changeset
1674 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
1675 if (!v)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1676 goto finally;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1677 hold = PyLong_AsLong(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1678 Py_DECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1679 if (hold < 0 && PyErr_Occurred())
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1680 goto finally;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1681 *lineno = (int)hold;
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1682
76085
ff7587546a1d merge 3.2
Benjamin Peterson <benjamin@python.org>
parents: 75292 76084
diff changeset
1683 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
1684 if (!v)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1685 goto finally;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1686 if (v == Py_None) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1687 *offset = -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1688 Py_DECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1689 } else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1690 hold = PyLong_AsLong(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1691 Py_DECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1692 if (hold < 0 && PyErr_Occurred())
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1693 goto finally;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1694 *offset = (int)hold;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1695 }
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1696
76085
ff7587546a1d merge 3.2
Benjamin Peterson <benjamin@python.org>
parents: 75292 76084
diff changeset
1697 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
1698 if (!v)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1699 goto finally;
76084
43606a4085b0 fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents: 75142
diff changeset
1700 if (v == Py_None) {
43606a4085b0 fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents: 75142
diff changeset
1701 Py_DECREF(v);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1702 *text = NULL;
76084
43606a4085b0 fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents: 75142
diff changeset
1703 }
43606a4085b0 fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents: 75142
diff changeset
1704 else {
86984
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1705 *text = v;
76084
43606a4085b0 fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents: 75142
diff changeset
1706 }
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1707 return 1;
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1708
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1709 finally:
76084
43606a4085b0 fix parse_syntax_error to clean up its resources
Benjamin Peterson <benjamin@python.org>
parents: 75142
diff changeset
1710 Py_XDECREF(*message);
86984
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1711 Py_XDECREF(*filename);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1712 return 0;
6197
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1713 }
7da7ba5c6525 Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents: 6165
diff changeset
1714
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1715 void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
1716 PyErr_Print(void)
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1717 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1718 PyErr_PrintEx(1);
7206
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
1719 }
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
1720
16831
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1721 static void
86984
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1722 print_error_text(PyObject *f, int offset, PyObject *text_obj)
16831
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1723 {
86984
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1724 char *text;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1725 char *nl;
86984
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1726
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1727 text = _PyUnicode_AsString(text_obj);
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1728 if (text == NULL)
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1729 return;
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1730
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1731 if (offset >= 0) {
65696
e8c8400caa99 Merged revisions 85817,85904 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 65615
diff changeset
1732 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
1733 offset--;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1734 for (;;) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1735 nl = strchr(text, '\n');
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1736 if (nl == NULL || nl-text >= offset)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1737 break;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1738 offset -= (int)(nl+1-text);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1739 text = nl+1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1740 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1741 while (*text == ' ' || *text == '\t') {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1742 text++;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1743 offset--;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1744 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1745 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1746 PyFile_WriteString(" ", f);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1747 PyFile_WriteString(text, f);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1748 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
1749 PyFile_WriteString("\n", f);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1750 if (offset == -1)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1751 return;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1752 PyFile_WriteString(" ", f);
65696
e8c8400caa99 Merged revisions 85817,85904 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 65615
diff changeset
1753 while (--offset > 0)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1754 PyFile_WriteString(" ", f);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1755 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
1756 }
27f04d714ecb Print the offending line of code in the traceback for SyntaxErrors
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16648
diff changeset
1757
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
1758 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
1759 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
1760 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1761 PyObject *exception, *value, *tb;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1762 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
1763
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1764 if (Py_InspectFlag)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1765 /* 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
1766 * when entering interactive mode for inspecting. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1767 return;
41554
06145fbc7ab9 Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents: 41253
diff changeset
1768
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1769 PyErr_Fetch(&exception, &value, &tb);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1770 fflush(stdout);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1771 if (value == NULL || value == Py_None)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1772 goto done;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1773 if (PyExceptionInstance_Check(value)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1774 /* 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
1775 _Py_IDENTIFIER(code);
72848
81380082d216 Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents: 72835
diff changeset
1776 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
1777 if (code) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1778 Py_DECREF(value);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1779 value = code;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1780 if (value == Py_None)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1781 goto done;
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 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
1784 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
1785 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1786 if (PyLong_Check(value))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1787 exitcode = (int)PyLong_AsLong(value);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1788 else {
86999
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
1789 PyObject *sys_stderr = _PySys_GetObjectId(&PyId_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
1790 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
1791 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
1792 } 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
1793 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
1794 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
1795 }
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1796 PySys_WriteStderr("\n");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1797 exitcode = 1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1798 }
28698
aef01a076ef9 handle_system_exit(): This leaked the current exception info, in
Tim Peters <tim.peters@gmail.com>
parents: 28694
diff changeset
1799 done:
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1800 /* 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
1801 * 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
1802 * 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
1803 * some finalizers from running.
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1804 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1805 PyErr_Restore(exception, value, tb);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1806 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1807 Py_Exit(exitcode);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1808 /* 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
1809 }
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1810
eb06a02e0507 Allow sys.excepthook and sys.exitfunc to quietly exit with a sys.exit().
Ka-Ping Yee <ping@zesty.ca>
parents: 17168
diff changeset
1811 void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
1812 PyErr_PrintEx(int set_sys_last_vars)
7206
3f255aedf621 Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents: 7113
diff changeset
1813 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1814 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
1815
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1816 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1817 handle_system_exit();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1818 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1819 PyErr_Fetch(&exception, &v, &tb);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1820 if (exception == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1821 return;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1822 PyErr_NormalizeException(&exception, &v, &tb);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1823 if (tb == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1824 tb = Py_None;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1825 Py_INCREF(tb);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1826 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1827 PyException_SetTraceback(v, tb);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1828 if (exception == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1829 return;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1830 /* Now we know v != NULL too */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1831 if (set_sys_last_vars) {
86974
954167ce92a3 Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents: 86966
diff changeset
1832 _PySys_SetObjectId(&PyId_last_type, exception);
954167ce92a3 Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents: 86966
diff changeset
1833 _PySys_SetObjectId(&PyId_last_value, v);
954167ce92a3 Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents: 86966
diff changeset
1834 _PySys_SetObjectId(&PyId_last_traceback, tb);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1835 }
86974
954167ce92a3 Issue #19512: add some common identifiers to only create common strings once,
Victor Stinner <victor.stinner@gmail.com>
parents: 86966
diff changeset
1836 hook = _PySys_GetObjectId(&PyId_excepthook);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1837 if (hook) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1838 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
1839 PyObject *result = PyEval_CallObject(hook, args);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1840 if (result == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1841 PyObject *exception2, *v2, *tb2;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1842 if (PyErr_ExceptionMatches(PyExc_SystemExit)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1843 handle_system_exit();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1844 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1845 PyErr_Fetch(&exception2, &v2, &tb2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1846 PyErr_NormalizeException(&exception2, &v2, &tb2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1847 /* 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
1848 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
1849 tolerate NULLs, so just be safe. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1850 if (exception2 == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1851 exception2 = Py_None;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1852 Py_INCREF(exception2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1853 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1854 if (v2 == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1855 v2 = Py_None;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1856 Py_INCREF(v2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1857 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1858 fflush(stdout);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1859 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
1860 PyErr_Display(exception2, v2, tb2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1861 PySys_WriteStderr("\nOriginal exception was:\n");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1862 PyErr_Display(exception, v, tb);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1863 Py_DECREF(exception2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1864 Py_DECREF(v2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1865 Py_XDECREF(tb2);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1866 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1867 Py_XDECREF(result);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1868 Py_XDECREF(args);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1869 } else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1870 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
1871 PyErr_Display(exception, v, tb);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1872 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1873 Py_XDECREF(exception);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1874 Py_XDECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1875 Py_XDECREF(tb);
17164
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1876 }
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
1877
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
1878 static void
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
1879 print_exception(PyObject *f, PyObject *value)
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
1880 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1881 int err = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1882 PyObject *type, *tb;
72926
db4aa878cea2 Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents: 72925
diff changeset
1883 _Py_IDENTIFIER(print_file_and_line);
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
1884
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1885 if (!PyExceptionInstance_Check(value)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1886 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
1887 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
1888 PyFile_WriteString(" found\n", f);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1889 return;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1890 }
48839
587cd4f66c2d fix #3653 Python could segfault if invalid values were passed to sys.excepthook
Benjamin Peterson <benjamin@python.org>
parents: 48660
diff changeset
1891
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1892 Py_INCREF(value);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1893 fflush(stdout);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1894 type = (PyObject *) Py_TYPE(value);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1895 tb = PyException_GetTraceback(value);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1896 if (tb && tb != Py_None)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1897 err = PyTraceBack_Print(tb, f);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1898 if (err == 0 &&
72926
db4aa878cea2 Port SetAttrString/HasAttrString to SetAttrId/GetAttrId.
Martin v. Löwis <martin@v.loewis.de>
parents: 72925
diff changeset
1899 _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
1900 {
86984
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1901 PyObject *message, *filename, *text;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1902 int lineno, offset;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1903 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
1904 &lineno, &offset, &text))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1905 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1906 else {
86984
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1907 PyObject *line;
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1908
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1909 Py_DECREF(value);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1910 value = message;
86984
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1911
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1912 line = PyUnicode_FromFormat(" File \"%U\", line %d\n",
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1913 filename, lineno);
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1914 Py_DECREF(filename);
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1915 if (line != NULL) {
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1916 PyFile_WriteObject(line, f, Py_PRINT_RAW);
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1917 Py_DECREF(line);
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1918 }
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1919
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1920 if (text != NULL) {
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1921 print_error_text(f, offset, text);
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1922 Py_DECREF(text);
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1923 }
7c71d2f97196 print_error_text() doesn't encode the filename anymore
Victor Stinner <victor.stinner@gmail.com>
parents: 86980
diff changeset
1924
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1925 /* 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
1926 PyFile_WriteString() calls */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1927 if (PyErr_Occurred())
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1928 err = -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1929 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1930 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1931 if (err) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1932 /* Don't do anything else */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1933 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1934 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1935 PyObject* moduleName;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1936 char* className;
72925
7109f31300fb Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents: 72848
diff changeset
1937 _Py_IDENTIFIER(__module__);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1938 assert(PyExceptionClass_Check(type));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1939 className = PyExceptionClass_Name(type);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1940 if (className != NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1941 char *dot = strrchr(className, '.');
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1942 if (dot != NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1943 className = dot+1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1944 }
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
1945
72848
81380082d216 Use identifier API for PyObject_GetAttrString.
Martin v. Löwis <martin@v.loewis.de>
parents: 72835
diff changeset
1946 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
1947 if (moduleName == NULL || !PyUnicode_Check(moduleName))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1948 {
70402
2e72fcfb2527 print_exception(): handle correctly PyObject_GetAttrString() failure
Victor Stinner <victor.stinner@haypocalc.com>
parents: 70134
diff changeset
1949 Py_XDECREF(moduleName);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1950 err = PyFile_WriteString("<unknown>", f);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1951 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1952 else {
86999
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
1953 if (_PyUnicode_CompareWithId(moduleName, &PyId_builtins) != 0)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1954 {
86979
e9a865620788 print_exception(): don't encode the module name to UTF-8
Victor Stinner <victor.stinner@gmail.com>
parents: 86974
diff changeset
1955 err = PyFile_WriteObject(moduleName, f, Py_PRINT_RAW);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1956 err += PyFile_WriteString(".", f);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1957 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1958 Py_DECREF(moduleName);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1959 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1960 if (err == 0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1961 if (className == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1962 err = PyFile_WriteString("<unknown>", f);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1963 else
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1964 err = PyFile_WriteString(className, f);
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 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1967 if (err == 0 && (value != Py_None)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1968 PyObject *s = PyObject_Str(value);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1969 /* 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
1970 object is not the empty string
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1971 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1972 if (s == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1973 err = -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1974 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
1975 PyUnicode_GetLength(s) != 0)
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1976 err = PyFile_WriteString(": ", f);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1977 if (err == 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1978 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
1979 Py_XDECREF(s);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1980 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1981 /* 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
1982 err += PyFile_WriteString("\n", f);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1983 Py_XDECREF(tb);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1984 Py_DECREF(value);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1985 /* 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
1986 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
1987 if (err != 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1988 PyErr_Clear();
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
1989 }
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
1990
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
1991 static const char *cause_message =
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1992 "\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
1993 "of the following exception:\n\n";
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
1994
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
1995 static const char *context_message =
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1996 "\nDuring handling of the above exception, "
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
1997 "another exception occurred:\n\n";
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
1998
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
1999 static void
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
2000 print_exception_recursive(PyObject *f, PyObject *value, PyObject *seen)
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
2001 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2002 int err = 0, res;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2003 PyObject *cause, *context;
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
2004
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2005 if (seen != NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2006 /* Exception chaining */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2007 if (PySet_Add(seen, value) == -1)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2008 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2009 else if (PyExceptionInstance_Check(value)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2010 cause = PyException_GetCause(value);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2011 context = PyException_GetContext(value);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2012 if (cause) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2013 res = PySet_Contains(seen, cause);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2014 if (res == -1)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2015 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2016 if (res == 0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2017 print_exception_recursive(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2018 f, cause, seen);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2019 err |= PyFile_WriteString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2020 cause_message, f);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2021 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2022 }
76942
b0eb7d2a9542 PEP 415: Implement suppression of __context__ display with an exception attribute
Benjamin Peterson <benjamin@python.org>
parents: 76640
diff changeset
2023 else if (context &&
b0eb7d2a9542 PEP 415: Implement suppression of __context__ display with an exception attribute
Benjamin Peterson <benjamin@python.org>
parents: 76640
diff changeset
2024 !((PyBaseExceptionObject *)value)->suppress_context) {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2025 res = PySet_Contains(seen, context);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2026 if (res == -1)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2027 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2028 if (res == 0) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2029 print_exception_recursive(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2030 f, context, seen);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2031 err |= PyFile_WriteString(
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2032 context_message, f);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2033 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2034 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2035 Py_XDECREF(context);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2036 Py_XDECREF(cause);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2037 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2038 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2039 print_exception(f, value);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2040 if (err != 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2041 PyErr_Clear();
48474
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
2042 }
2ee09afee126 implement chained exception tracebacks
Benjamin Peterson <benjamin@python.org>
parents: 47611
diff changeset
2043
38453
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
2044 void
29ae5e0fc348 Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents: 37879
diff changeset
2045 PyErr_Display(PyObject *exception, PyObject *value, PyObject *tb)
17164
b44e77a12978 Add sys.excepthook.
Ka-Ping Yee <ping@zesty.ca>
parents: 17125
diff changeset
2046 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2047 PyObject *seen;
86999
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
2048 PyObject *f = _PySys_GetObjectId(&PyId_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
2049 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
2050 && 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
2051 /* 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
2052 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
2053 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
2054 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
2055 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
2056 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
2057 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
2058 }
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2059 if (f == Py_None) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2060 /* pass */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2061 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2062 else if (f == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2063 _PyObject_Dump(value);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2064 fprintf(stderr, "lost sys.stderr\n");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2065 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2066 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2067 /* 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
2068 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
2069 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2070 seen = PySet_New(NULL);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2071 if (seen == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2072 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2073 print_exception_recursive(f, value, seen);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2074 Py_XDECREF(seen);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2075 }
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2076 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2077
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
2078 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
2079 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
2080 PyObject *locals, PyCompilerFlags *flags)
14228
20377f15b96a Add three new APIs: PyRun_AnyFileEx(), PyRun_SimpleFileEx(),
Guido van Rossum <guido@python.org>
parents: 14227
diff changeset
2081 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2082 PyObject *ret = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2083 mod_ty mod;
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2084 PyArena *arena;
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2085 PyObject *filename;
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2086
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2087 filename = _PyUnicode_FromId(&PyId_string); /* borrowed */
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2088 if (filename == NULL)
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2089 return NULL;
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2090
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2091 arena = PyArena_New();
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2092 if (arena == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2093 return NULL;
43777
0d462d789b18 Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents: 43718
diff changeset
2094
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2095 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
2096 if (mod != NULL)
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2097 ret = run_mod(mod, filename, globals, locals, flags, arena);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2098 PyArena_Free(arena);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2099 return ret;
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
2100 }
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
2101
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
2102 PyObject *
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2103 PyRun_FileExFlags(FILE *fp, const char *filename_str, int start, PyObject *globals,
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2104 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
2105 {
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2106 PyObject *ret = NULL;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2107 mod_ty mod;
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2108 PyArena *arena = NULL;
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2109 PyObject *filename;
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2110
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2111 filename = PyUnicode_DecodeFSDefault(filename_str);
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2112 if (filename == NULL)
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2113 goto exit;
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2114
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2115 arena = PyArena_New();
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2116 if (arena == NULL)
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2117 goto exit;
43777
0d462d789b18 Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents: 43718
diff changeset
2118
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2119 mod = PyParser_ASTFromFileObject(fp, filename, NULL, start, 0, 0,
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2120 flags, NULL, arena);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2121 if (closeit)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2122 fclose(fp);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2123 if (mod == NULL) {
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2124 goto exit;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2125 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2126 ret = run_mod(mod, filename, globals, locals, flags, arena);
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2127
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2128 exit:
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2129 Py_XDECREF(filename);
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2130 if (arena != NULL)
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2131 PyArena_Free(arena);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2132 return ret;
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
2133 }
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
2134
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
2135 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
2136 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
2137 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2138 PyObject *f, *r;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2139 PyObject *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
2140
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2141 /* Save the current exception */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2142 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
2143
86999
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
2144 f = _PySys_GetObjectId(&PyId_stderr);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2145 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
2146 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
2147 if (r)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2148 Py_DECREF(r);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2149 else
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2150 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2151 }
86999
01c4a0af73cf Issue #19512, #19515: remove shared identifiers, move identifiers where they
Victor Stinner <victor.stinner@gmail.com>
parents: 86984
diff changeset
2152 f = _PySys_GetObjectId(&PyId_stdout);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2153 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
2154 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
2155 if (r)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2156 Py_DECREF(r);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2157 else
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2158 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2159 }
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
2160
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2161 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
2162 }
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
2163
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
2164 static PyObject *
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2165 run_mod(mod_ty mod, PyObject *filename, PyObject *globals, PyObject *locals,
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2166 PyCompilerFlags *flags, PyArena *arena)
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2167 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2168 PyCodeObject *co;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2169 PyObject *v;
86966
af822a6c9faf Issue #19512: Add PyRun_InteractiveOneObject() function
Victor Stinner <victor.stinner@gmail.com>
parents: 86965
diff changeset
2170 co = PyAST_CompileObject(mod, filename, flags, -1, arena);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2171 if (co == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2172 return NULL;
66664
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 66556
diff changeset
2173 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
2174 Py_DECREF(co);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2175 return v;
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2176 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2177
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
2178 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
2179 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
2180 PyObject *locals, PyCompilerFlags *flags)
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
2181 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2182 PyCodeObject *co;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2183 PyObject *v;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2184 long magic;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2185 long PyImport_GetMagicNumber(void);
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
2186
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2187 magic = PyMarshal_ReadLongFromFile(fp);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2188 if (magic != PyImport_GetMagicNumber()) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2189 PyErr_SetString(PyExc_RuntimeError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2190 "Bad magic number in .pyc file");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2191 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2192 }
74358
87331661042b Issue #13645: pyc files now contain the size of the corresponding source
Antoine Pitrou <solipsis@pitrou.net>
parents: 73949
diff changeset
2193 /* 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
2194 (void) PyMarshal_ReadLongFromFile(fp);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2195 (void) PyMarshal_ReadLongFromFile(fp);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2196 v = PyMarshal_ReadLastObjectFromFile(fp);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2197 if (v == NULL || !PyCode_Check(v)) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2198 Py_XDECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2199 PyErr_SetString(PyExc_RuntimeError,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2200 "Bad code object in .pyc file");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2201 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2202 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2203 co = (PyCodeObject *)v;
66664
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 66556
diff changeset
2204 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
2205 if (v && flags)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2206 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
2207 Py_DECREF(co);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2208 return v;
1886
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
2209 }
ac6a9f90f6fd * Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents: 1870
diff changeset
2210
5170
f5d707ce4223 Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents: 5108
diff changeset
2211 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
2212 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
2213 PyCompilerFlags *flags, int optimize)
17125
2054cea38754 Extend support for from __future__ import nested_scopes
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16916
diff changeset
2214 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2215 PyCodeObject *co;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2216 mod_ty mod;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2217 PyArena *arena = PyArena_New();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2218 if (arena == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2219 return NULL;
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
2220
85417
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2221 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
2222 if (mod == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2223 PyArena_Free(arena);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2224 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2225 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2226 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
2227 PyObject *result = PyAST_mod2obj(mod);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2228 PyArena_Free(arena);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2229 return result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2230 }
85417
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2231 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
2232 PyArena_Free(arena);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2233 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
2234 }
65a1e4e9cd54 * Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents: 1262
diff changeset
2235
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 PyObject *
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2237 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
2238 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
2239 {
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2240 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
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 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
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 co;
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
66664
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 66556
diff changeset
2249 /* For use in Py_LIMITED_API */
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 66556
diff changeset
2250 #undef Py_CompileString
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 66556
diff changeset
2251 PyObject *
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 66556
diff changeset
2252 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
2253 {
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 66556
diff changeset
2254 return Py_CompileStringFlags(str, filename, start, NULL);
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 66556
diff changeset
2255 }
62b61abd02b8 Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents: 66556
diff changeset
2256
16421
aa844711463a Move a bunch of definitions that were internal to compile.c to
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16311
diff changeset
2257 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
2258 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
2259 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2260 struct symtable *st;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2261 mod_ty mod;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2262 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
2263 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
2264
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2265 arena = PyArena_New();
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2266 if (arena == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2267 return NULL;
39442
654c380cf8b9 Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents: 38669
diff changeset
2268
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2269 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
2270 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
2271 if (mod == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2272 PyArena_Free(arena);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2273 return NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2274 }
85417
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2275 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
2276 PyArena_Free(arena);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2277 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
2278 }
aa844711463a Move a bunch of definitions that were internal to compile.c to
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 16311
diff changeset
2279
85417
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2280 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
2281 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
2282 {
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2283 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
2284 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
2285
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2286 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
2287 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
2288 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
2289 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
2290 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
2291 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
2292 }
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2293
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2294 /* Preferred access to parser is through AST. */
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2295 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
2296 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
2297 PyCompilerFlags *flags, PyArena *arena)
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2298 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2299 mod_ty mod;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2300 PyCompilerFlags localflags;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2301 perrdetail err;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2302 int iflags = PARSER_FLAGS(flags);
46120
78504d604b44 Merged revisions 61952-61953 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45914
diff changeset
2303
85417
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2304 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
2305 &_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
2306 &iflags);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2307 if (flags == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2308 localflags.cf_flags = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2309 flags = &localflags;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2310 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2311 if (n) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2312 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
2313 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
2314 PyNode_Free(n);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2315 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2316 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2317 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
2318 mod = NULL;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2319 }
69147
6e9dc970ac0e Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69100
diff changeset
2320 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
2321 return mod;
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2322 }
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2323
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2324 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
2325 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
2326 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
2327 {
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2328 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
2329 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
2330 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
2331 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
2332 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
2333 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
2334 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
2335 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
2336 }
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2337
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2338 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
2339 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
2340 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
2341 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
2342 PyArena *arena)
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2343 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2344 mod_ty mod;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2345 PyCompilerFlags localflags;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2346 perrdetail err;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2347 int iflags = PARSER_FLAGS(flags);
46120
78504d604b44 Merged revisions 61952-61953 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 45914
diff changeset
2348
85417
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2349 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
2350 &_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
2351 start, ps1, ps2, &err, &iflags);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2352 if (flags == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2353 localflags.cf_flags = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2354 flags = &localflags;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2355 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2356 if (n) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2357 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
2358 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
2359 PyNode_Free(n);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2360 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2361 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2362 err_input(&err);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2363 if (errcode)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2364 *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
2365 mod = NULL;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2366 }
69147
6e9dc970ac0e Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69100
diff changeset
2367 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
2368 return mod;
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2369 }
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2370
85417
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2371 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
2372 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
2373 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
2374 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
2375 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
2376 {
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2377 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
2378 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
2379 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
2380 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
2381 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
2382 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
2383 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
2384 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
2385 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
2386 }
df2fdd42b375 Close #11619: The parser and the import machinery do not encode Unicode
Victor Stinner <victor.stinner@gmail.com>
parents: 85398
diff changeset
2387
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
2388 /* 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
2389
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
2390 node *
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
2391 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
2392 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2393 perrdetail err;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2394 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
2395 &_PyParser_Grammar,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2396 start, NULL, NULL, &err, flags);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2397 if (n == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2398 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
2399 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
2400
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2401 return n;
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
2402 }
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
2403
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
2404 /* 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
2405
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
2406 node *
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
2407 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
2408 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2409 perrdetail err;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2410 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
2411 start, &err, flags);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2412 if (n == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2413 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
2414 err_free(&err);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2415 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
2416 }
0a90e5ec61b6 Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents: 18612
diff changeset
2417
0a90e5ec61b6 Ugly. A pile of new xxxFlags() functions, to communicate to the parser
Tim Peters <tim.peters@gmail.com>
parents: 18612
diff changeset
2418 node *
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
2419 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
2420 int start, int flags)
24159
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
2421 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2422 perrdetail err;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2423 node *n = PyParser_ParseStringFlagsFilename(str, filename,
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2424 &_PyParser_Grammar, start, &err, flags);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2425 if (n == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2426 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
2427 err_free(&err);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2428 return n;
24159
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
2429 }
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
2430
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
2431 node *
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
2432 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
2433 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2434 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
2435 }
cb728141ae12 Fix SF Bug 564931: compile() traceback must include filename.
Thomas Heller <theller@ctypes.org>
parents: 24155
diff changeset
2436
28649
04b172843292 A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents: 28648
diff changeset
2437 /* 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
2438 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
2439
04b172843292 A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents: 28648
diff changeset
2440 void
69147
6e9dc970ac0e Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69100
diff changeset
2441 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
2442 {
6e9dc970ac0e Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69100
diff changeset
2443 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
2444 }
6e9dc970ac0e Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69100
diff changeset
2445
6e9dc970ac0e Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69100
diff changeset
2446 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
2447 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
2448 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2449 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
2450 }
04b172843292 A missing piece of the PEP 269 patch: add PyParser_SetError(), a
Guido van Rossum <guido@python.org>
parents: 28648
diff changeset
2451
69147
6e9dc970ac0e Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69100
diff changeset
2452 static void
6e9dc970ac0e Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69100
diff changeset
2453 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
2454 {
6e9dc970ac0e Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69100
diff changeset
2455 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
2456 }
6e9dc970ac0e Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69100
diff changeset
2457
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
2458 /* 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
2459
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
2460 static void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
2461 err_input(perrdetail *err)
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2462 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2463 PyObject *v, *w, *errtype, *errtext;
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
2464 PyObject *msg_obj = NULL;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2465 char *msg = NULL;
65536
42b84d3188d1 Recorded merge of revisions 85569-85570 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 63847
diff changeset
2466
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2467 errtype = PyExc_SyntaxError;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2468 switch (err->error) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2469 case E_ERROR:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2470 return;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2471 case E_SYNTAX:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2472 errtype = PyExc_IndentationError;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2473 if (err->expected == INDENT)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2474 msg = "expected an indented block";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2475 else if (err->token == INDENT)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2476 msg = "unexpected indent";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2477 else if (err->token == DEDENT)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2478 msg = "unexpected unindent";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2479 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2480 errtype = PyExc_SyntaxError;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2481 msg = "invalid syntax";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2482 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2483 break;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2484 case E_TOKEN:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2485 msg = "invalid token";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2486 break;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2487 case E_EOFS:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2488 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
2489 break;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2490 case E_EOLS:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2491 msg = "EOL while scanning string literal";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2492 break;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2493 case E_INTR:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2494 if (!PyErr_Occurred())
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2495 PyErr_SetNone(PyExc_KeyboardInterrupt);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2496 goto cleanup;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2497 case E_NOMEM:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2498 PyErr_NoMemory();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2499 goto cleanup;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2500 case E_EOF:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2501 msg = "unexpected EOF while parsing";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2502 break;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2503 case E_TABSPACE:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2504 errtype = PyExc_TabError;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2505 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
2506 break;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2507 case E_OVERFLOW:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2508 msg = "expression too long";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2509 break;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2510 case E_DEDENT:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2511 errtype = PyExc_IndentationError;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2512 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
2513 break;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2514 case E_TOODEEP:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2515 errtype = PyExc_IndentationError;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2516 msg = "too many levels of indentation";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2517 break;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2518 case E_DECODE: {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2519 PyObject *type, *value, *tb;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2520 PyErr_Fetch(&type, &value, &tb);
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
2521 msg = "unknown decode error";
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
2522 if (value != NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
2523 msg_obj = PyObject_Str(value);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2524 Py_XDECREF(type);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2525 Py_XDECREF(value);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2526 Py_XDECREF(tb);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2527 break;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2528 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2529 case E_LINECONT:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2530 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
2531 break;
42597
20477cbfd996 Implement PEP 3131. Add isidentifier to str.
Martin v. Löwis <martin@v.loewis.de>
parents: 42539
diff changeset
2532
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2533 case E_IDENTIFIER:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2534 msg = "invalid character in identifier";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2535 break;
74520
2bd7f40108b4 Issue #12705: Raise SyntaxError when compiling multiple statements as single interactive statement
Meador Inge <meadori@gmail.com>
parents: 74497
diff changeset
2536 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
2537 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
2538 break;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2539 default:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2540 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
2541 msg = "unknown parsing error";
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2542 break;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2543 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2544 /* 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
2545 Explicitly convert to an object. */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2546 if (!err->text) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2547 errtext = Py_None;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2548 Py_INCREF(Py_None);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2549 } else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2550 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
2551 "replace");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2552 }
69147
6e9dc970ac0e Issue #10785: Store the filename as Unicode in the Python parser.
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69100
diff changeset
2553 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
2554 err->lineno, err->offset, errtext);
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
2555 if (v != NULL) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
2556 if (msg_obj)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
2557 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
2558 else
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
2559 w = Py_BuildValue("(sO)", msg, v);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
2560 } else
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
2561 w = NULL;
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2562 Py_XDECREF(v);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2563 PyErr_SetObject(errtype, w);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2564 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
2565 cleanup:
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
2566 Py_XDECREF(msg_obj);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2567 if (err->text != NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2568 PyObject_FREE(err->text);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2569 err->text = NULL;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2570 }
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2571 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2572
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2573 /* Print fatal error message and abort */
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2574
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2575 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
2576 Py_FatalError(const char *msg)
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2577 {
69070
b0680b5a5215 Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68769
diff changeset
2578 const int fd = fileno(stderr);
b0680b5a5215 Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68769
diff changeset
2579 PyThreadState *tstate;
b0680b5a5215 Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68769
diff changeset
2580
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2581 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
2582 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
2583 if (PyErr_Occurred()) {
62194
f83f201b1276 Merged revisions 81844 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents: 61776
diff changeset
2584 PyErr_PrintEx(0);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2585 }
69070
b0680b5a5215 Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68769
diff changeset
2586 else {
b0680b5a5215 Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68769
diff changeset
2587 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
2588 if (tstate != NULL) {
b0680b5a5215 Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68769
diff changeset
2589 fputc('\n', stderr);
b0680b5a5215 Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68769
diff changeset
2590 fflush(stderr);
69888
8752a81ada2d faulthandler: dump all threads by default
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69833
diff changeset
2591 _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
2592 }
69100
a4fa79b0d478 Issue #11393: The fault handler handles also SIGABRT
Victor Stinner <victor.stinner@haypocalc.com>
parents: 69070
diff changeset
2593 _PyFaulthandler_Fini();
69070
b0680b5a5215 Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68769
diff changeset
2594 }
b0680b5a5215 Issue #11393: Add the new faulthandler module
Victor Stinner <victor.stinner@haypocalc.com>
parents: 68769
diff changeset
2595
24071
8142f8d668a0 Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents: 23252
diff changeset
2596 #ifdef MS_WINDOWS
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2597 {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2598 size_t len = strlen(msg);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2599 WCHAR* buffer;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2600 size_t i;
50558
fbf7f53f4888 Merged revisions 68175 via svnmerge from
Georg Brandl <georg@python.org>
parents: 49819
diff changeset
2601
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2602 /* 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
2603 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
2604 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
2605 buffer = alloca( (len+1) * (sizeof *buffer));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2606 for( i=0; i<=len; ++i)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2607 buffer[i] = msg[i];
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2608 OutputDebugStringW(L"Fatal Python error: ");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2609 OutputDebugStringW(buffer);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2610 OutputDebugStringW(L"\n");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2611 }
8988
070de4d39ddd Add DebugBreak() call to Py_FatalError() for Mark Hammond (only on
Guido van Rossum <guido@python.org>
parents: 7967
diff changeset
2612 #ifdef _DEBUG
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2613 DebugBreak();
2529
16ea57c38c4f In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents: 2318
diff changeset
2614 #endif
24071
8142f8d668a0 Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents: 23252
diff changeset
2615 #endif /* MS_WINDOWS */
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2616 abort();
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2617 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2618
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2619 /* Clean up and exit */
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2620
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
2621 #ifdef WITH_THREAD
9203
07dae6fdae79 Renamed thread.h to pythread.h.
Guido van Rossum <guido@python.org>
parents: 9192
diff changeset
2622 #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
2623 #endif
a31e07847063 New thread.c from Sjoerd, supports _exit_prog(). Use this in goaway()
Guido van Rossum <guido@python.org>
parents: 941
diff changeset
2624
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
2625 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
2626 /* 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
2627 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
2628 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2629 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
2630 }
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
2631
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
2632 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
2633 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
2634 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2635 if (pyexitfunc == NULL)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2636 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
2637
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2638 (*pyexitfunc)();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2639 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
2640 }
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
2641
56652
29b3e126c0c2 Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53994
diff changeset
2642 /* Wait until threading._shutdown completes, provided
29b3e126c0c2 Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53994
diff changeset
2643 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
2644 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
2645 "threading" threads have completed. */
29b3e126c0c2 Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53994
diff changeset
2646 static void
29b3e126c0c2 Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53994
diff changeset
2647 wait_for_thread_shutdown(void)
29b3e126c0c2 Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53994
diff changeset
2648 {
29b3e126c0c2 Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53994
diff changeset
2649 #ifdef WITH_THREAD
72925
7109f31300fb Rename _Py_identifier to _Py_IDENTIFIER.
Martin v. Löwis <martin@v.loewis.de>
parents: 72848
diff changeset
2650 _Py_IDENTIFIER(_shutdown);
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2651 PyObject *result;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2652 PyThreadState *tstate = PyThreadState_GET();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2653 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
2654 "threading");
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2655 if (threading == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2656 /* threading not imported */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2657 PyErr_Clear();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2658 return;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2659 }
72835
5e33219492bc Add API for static strings, primarily good for identifiers.
Martin v. Löwis <martin@v.loewis.de>
parents: 72424
diff changeset
2660 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
2661 if (result == NULL) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2662 PyErr_WriteUnraisable(threading);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2663 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2664 else {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2665 Py_DECREF(result);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2666 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2667 Py_DECREF(threading);
56652
29b3e126c0c2 Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53994
diff changeset
2668 #endif
29b3e126c0c2 Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53994
diff changeset
2669 }
29b3e126c0c2 Merged revisions 75571,75576-75577 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 53994
diff changeset
2670
9192
ac6c29d1f10c On second though, NEXITFUNCS should be defined here and not in
Guido van Rossum <guido@python.org>
parents: 9161
diff changeset
2671 #define NEXITFUNCS 32
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
2672 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
2673 static int nexitfuncs = 0;
61738ed6cc10 added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents: 1839
diff changeset
2674
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
2675 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
2676 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2677 if (nexitfuncs >= NEXITFUNCS)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2678 return -1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2679 exitfuncs[nexitfuncs++] = func;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2680 return 0;
1870
61738ed6cc10 added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents: 1839
diff changeset
2681 }
61738ed6cc10 added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents: 1839
diff changeset
2682
5939
2c65bb6ab87c Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents: 5926
diff changeset
2683 static void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
2684 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
2685 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2686 while (nexitfuncs > 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2687 (*exitfuncs[--nexitfuncs])();
5926
8d2194e22e67 The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents: 5850
diff changeset
2688
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2689 fflush(stdout);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2690 fflush(stderr);
1079
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
2691 }
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
2692
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
2693 void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
2694 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
2695 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2696 Py_Finalize();
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2697
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2698 exit(sts);
923
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2699 }
72aceed365d4 * Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2700
1319
cd397266dc1c * Makefile: added all: and default: targets.
Guido van Rossum <guido@python.org>
parents: 1289
diff changeset
2701 static void
13658
f79434ee41fa Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents: 13620
diff changeset
2702 initsigs(void)
1079
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
2703 {
1839
1f4a86dbcd79 * Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents: 1413
diff changeset
2704 #ifdef SIGPIPE
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2705 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
2706 #endif
19295
157bbb896198 Bunchathings:
Guido van Rossum <guido@python.org>
parents: 19237
diff changeset
2707 #ifdef SIGXFZ
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2708 PyOS_setsig(SIGXFZ, SIG_IGN);
19295
157bbb896198 Bunchathings:
Guido van Rossum <guido@python.org>
parents: 19237
diff changeset
2709 #endif
23252
4f335ca3f11c Ignore SIGXFSZ.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 23020
diff changeset
2710 #ifdef SIGXFSZ
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2711 PyOS_setsig(SIGXFSZ, SIG_IGN);
23252
4f335ca3f11c Ignore SIGXFSZ.
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 23020
diff changeset
2712 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2713 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
2714 if (PyErr_Occurred()) {
276477d5a548 Issue #18520: Fix initsigs(), handle PyOS_InitInterrupts() error
Victor Stinner <victor.stinner@gmail.com>
parents: 84684
diff changeset
2715 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
2716 }
1079
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
2717 }
e4c6a0dd5c2b * bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents: 1073
diff changeset
2718
5108
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
2719
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
2720 /* 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
2721 *
768722b2ae0a * Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents: 59536
diff changeset
2722 * 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
2723 * 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
2724 * 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
2725 */
768722b2ae0a * Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents: 59536
diff changeset
2726 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
2727 _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
2728 {
768722b2ae0a * Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents: 59536
diff changeset
2729 #ifdef SIGPIPE
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
2730 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
2731 #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
2732 #ifdef SIGXFZ
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
2733 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
2734 #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
2735 #ifdef SIGXFSZ
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61450
diff changeset
2736 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
2737 #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
2738 }
768722b2ae0a * Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents: 59536
diff changeset
2739
768722b2ae0a * Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents: 59536
diff changeset
2740
5108
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
2741 /*
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
2742 * 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
2743 * 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
2744 * 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
2745 * 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
2746 */
a9a6d416b945 Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents: 4596
diff changeset
2747 int
26601
cc05c2c8660e Constify filenames and scripts. Fixes #651362.
Martin v. Löwis <martin@v.loewis.de>
parents: 26263
diff changeset
2748 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
2749 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2750 if (isatty((int)fileno(fp)))
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2751 return 1;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2752 if (!Py_InteractiveFlag)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2753 return 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2754 return (filename == NULL) ||
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2755 (strcmp(filename, "<stdin>") == 0) ||
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2756 (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
2757 }
14227
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
2758
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
2759
28648
0e8416be208e Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents: 28647
diff changeset
2760 #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
2761 #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
2762
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
2763 /* 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
2764
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
2765 #include <malloc.h>
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
2766 #include <excpt.h>
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
2767
14278
fb8fb53a2eff Add a comment explaining the return value of PyOS_CheckStack().
Fred Drake <fdrake@acm.org>
parents: 14231
diff changeset
2768 /*
fb8fb53a2eff Add a comment explaining the return value of PyOS_CheckStack().
Fred Drake <fdrake@acm.org>
parents: 14231
diff changeset
2769 * 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
2770 */
14227
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
2771 int
14280
68b61aa1aa4a PyOS_CheckStack(): Better ANSI'fy this while we're at it.
Fred Drake <fdrake@acm.org>
parents: 14278
diff changeset
2772 PyOS_CheckStack(void)
14227
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
2773 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2774 __try {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2775 /* 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
2776 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
2777 alloca(PYOS_STACK_MARGIN * sizeof(void*));
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2778 return 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2779 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ?
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2780 EXCEPTION_EXECUTE_HANDLER :
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2781 EXCEPTION_CONTINUE_SEARCH) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2782 int errcode = _resetstkoflw();
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2783 if (errcode == 0)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2784 {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2785 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
2786 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2787 }
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2788 return 1;
14227
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
2789 }
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
2790
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
2791 #endif /* WIN32 && _MSC_VER */
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
2792
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
2793 /* 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
2794
9f9f3280dc68 implements PyOS_CheckStack for Windows and MSVC. this fixes a
Fredrik Lundh <fredrik@pythonware.com>
parents: 14195
diff changeset
2795 #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
2796
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
2797
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
2798 /* 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
2799
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
2800 PyOS_sighandler_t
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
2801 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
2802 {
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
2803 #ifdef HAVE_SIGACTION
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2804 struct sigaction context;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2805 if (sigaction(sig, NULL, &context) == -1)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2806 return SIG_ERR;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2807 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
2808 #else
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2809 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
2810 /* 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
2811 #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
2812 switch (sig) {
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2813 /* Only these signals are valid */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2814 case SIGINT:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2815 case SIGILL:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2816 case SIGFPE:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2817 case SIGSEGV:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2818 case SIGTERM:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2819 case SIGBREAK:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2820 case SIGABRT:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2821 break;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2822 /* 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
2823 default:
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2824 return SIG_ERR;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2825 }
35961
72555a967d6a Patch #1350409: Port signal handling to VS 2005.
Martin v. Löwis <martin@v.loewis.de>
parents: 35742
diff changeset
2826 #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
2827 handler = signal(sig, SIG_IGN);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2828 if (handler != SIG_ERR)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2829 signal(sig, handler);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2830 return handler;
14637
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
2831 #endif
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
2832 }
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
2833
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
2834 /*
768722b2ae0a * Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents: 59536
diff changeset
2835 * 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
2836 * 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
2837 * 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
2838 */
14637
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
2839 PyOS_sighandler_t
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
2840 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
2841 {
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
2842 #ifdef HAVE_SIGACTION
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2843 /* 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
2844 * 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
2845 * changes to invalidate that assumption.
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2846 */
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2847 struct sigaction context, ocontext;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2848 context.sa_handler = handler;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2849 sigemptyset(&context.sa_mask);
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2850 context.sa_flags = 0;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2851 if (sigaction(sig, &context, &ocontext) == -1)
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2852 return SIG_ERR;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2853 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
2854 #else
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2855 PyOS_sighandler_t oldhandler;
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2856 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
2857 #ifdef HAVE_SIGINTERRUPT
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2858 siginterrupt(sig, 1);
33747
b0ec4c9d595b Patch #975056 - fixes for restartable signals on *BSD. In addition,
Anthony Baxter <anthonybaxter@gmail.com>
parents: 33715
diff changeset
2859 #endif
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2860 return oldhandler;
14637
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
2861 #endif
37397bd1f8a8 Add PyOS_getsig() and PyOS_setsig() -- wrappers around signal() or
Guido van Rossum <guido@python.org>
parents: 14375
diff changeset
2862 }
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2863
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2864 /* 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
2865
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2866 #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
2867 PyAPI_FUNC(node *)
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2868 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
2869 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2870 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2871 }
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2872
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
2873 #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
2874 PyAPI_FUNC(node *)
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2875 PyParser_SimpleParseString(const char *str, int start)
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2876 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2877 return PyParser_SimpleParseStringFlags(str, start, 0);
35742
1c4d192f1568 Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 35666
diff changeset
2878 }
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
2879
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 #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
2881 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
2882 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
2883 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2884 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
2885 }
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
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 #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
2888 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
2889 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
2890 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2891 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
2892 }
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 #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
2895 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
2896 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
2897 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2898 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
2899 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2900
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2901 #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
2902 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
2903 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
2904 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2905 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
2906 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2907
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2908 #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
2909 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
2910 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
2911 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2912 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
2913 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2914
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2915 #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
2916 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
2917 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
2918 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
2919 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2920 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
2921 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2922
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2923 #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
2924 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
2925 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
2926 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2927 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
2928 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2929
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2930 #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
2931 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
2932 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
2933 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2934 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
2935 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2936
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2937
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2938 #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
2939 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
2940 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
2941 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2942 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
2943 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2944
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2945 #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
2946 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
2947 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
2948 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2949 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
2950 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2951
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2952 #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
2953 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
2954 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
2955 {
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
2956 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
2957 }
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
2958
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
2959 #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
2960 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
2961 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
2962 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
2963 {
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
2964 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
2965 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2966
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2967 #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
2968 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
2969 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
2970 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2971 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
2972 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2973
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2974 #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
2975 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
2976 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
2977 {
61467
f197407bdba2 Recorded merge of revisions 81032 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61452
diff changeset
2978 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
2979 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2980
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2981 #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
2982 }
f731859e9b3b Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents: 37056
diff changeset
2983 #endif