annotate Python/pythonrun.c @ 86966:af822a6c9faf

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