Mercurial > cpython-lru_cache-weakref
annotate Python/pythonrun.c @ 10534:a4a268b725b2 legacy-trunk
Alas, get rid of the Win specific hack to ask the user to press Return
before exiting when an error happened. This didn't work right when
Python is invoked from a daemon.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Wed, 07 Apr 1999 18:32:51 +0000 |
| parents | caf2c65a6bcf |
| children | be8ec828c072 |
| rev | line source |
|---|---|
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 /*********************************************************** |
|
2062
d0d0a69b5ca3
Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents:
2052
diff
changeset
|
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, |
|
d0d0a69b5ca3
Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents:
2052
diff
changeset
|
3 The Netherlands. |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 All Rights Reserved |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
7 Permission to use, copy, modify, and distribute this software and its |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
8 documentation for any purpose and without fee is hereby granted, |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 provided that the above copyright notice appear in all copies and that |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
10 both that copyright notice and this permission notice appear in |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 supporting documentation, and that the names of Stichting Mathematisch |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
12 Centrum or CWI or Corporation for National Research Initiatives or |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
13 CNRI not be used in advertising or publicity pertaining to |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
14 distribution of the software without specific, written prior |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
15 permission. |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
17 While CWI is the initial source for this software, a modified version |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
18 is made available by the Corporation for National Research Initiatives |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
19 (CNRI) at the Internet address ftp://ftp.python.org. |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
20 |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
21 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
22 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
23 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
24 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
25 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
26 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
27 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4291
diff
changeset
|
28 PERFORMANCE OF THIS SOFTWARE. |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 ******************************************************************/ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 /* Python interpreter top-level routines, including init/exit */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
33 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
34 #include "Python.h" |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 #include "grammar.h" |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 #include "node.h" |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
38 #include "parsetok.h" |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
39 #include "errcode.h" |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 #include "compile.h" |
| 926 | 41 #include "eval.h" |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
42 #include "marshal.h" |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 |
| 4596 | 44 #ifdef HAVE_UNISTD_H |
| 45 #include <unistd.h> | |
| 46 #endif | |
| 47 | |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
48 #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
|
49 #include <signal.h> |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
50 #endif |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
51 |
|
4291
1427d61f1307
Rationalized MS ifdefs
Guido van Rossum <guido@python.org>
parents:
3609
diff
changeset
|
52 #ifdef MS_WIN32 |
|
2529
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
53 #undef BYTE |
|
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
54 #include "windows.h" |
|
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
55 #endif |
|
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
56 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
57 extern char *Py_GetPath(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
59 extern grammar _PyParser_Grammar; /* From graminit.c */ |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 |
|
1391
7c3245c18677
* ceval.c, longobject.c, methodobject.c, listnode.c, arraymodule.c,
Guido van Rossum <guido@python.org>
parents:
1347
diff
changeset
|
61 /* Forward */ |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
62 static void initmain Py_PROTO((void)); |
|
6201
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
63 static void initsite Py_PROTO((void)); |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
64 static PyObject *run_err_node Py_PROTO((node *n, char *filename, |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
65 PyObject *globals, PyObject *locals)); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
66 static PyObject *run_node Py_PROTO((node *n, char *filename, |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
67 PyObject *globals, PyObject *locals)); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
68 static PyObject *run_pyc_file Py_PROTO((FILE *fp, char *filename, |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
69 PyObject *globals, PyObject *locals)); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
70 static void err_input Py_PROTO((perrdetail *)); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
71 static void initsigs Py_PROTO((void)); |
|
5939
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
72 static void call_sys_exitfunc Py_PROTO((void)); |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
73 static void call_ll_exitfuncs Py_PROTO((void)); |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
74 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
75 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
|
76 int Py_VerboseFlag; /* Needed by import.c */ |
|
5108
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
77 int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */ |
|
6201
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
78 int Py_NoSiteFlag; /* Suppress 'import site' */ |
|
6376
1afcac7658e5
Initialize Py_UseClassExceptionsFlag to 1.
Guido van Rossum <guido@python.org>
parents:
6374
diff
changeset
|
79 int Py_UseClassExceptionsFlag = 1; /* Needed by bltinmodule.c */ |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
80 int Py_FrozenFlag; /* Needed by getpath.c */ |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
81 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
82 static int initialized = 0; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
83 |
|
6136
57045f51dd12
Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents:
6117
diff
changeset
|
84 /* API to access the initialized flag -- useful for eroteric use */ |
|
57045f51dd12
Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents:
6117
diff
changeset
|
85 |
|
57045f51dd12
Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents:
6117
diff
changeset
|
86 int |
|
57045f51dd12
Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents:
6117
diff
changeset
|
87 Py_IsInitialized() |
|
57045f51dd12
Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents:
6117
diff
changeset
|
88 { |
|
57045f51dd12
Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents:
6117
diff
changeset
|
89 return initialized; |
|
57045f51dd12
Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents:
6117
diff
changeset
|
90 } |
|
57045f51dd12
Added new Py_IsInitalized() API function to test the 'initialized' flag.
Guido van Rossum <guido@python.org>
parents:
6117
diff
changeset
|
91 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
92 /* 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
|
93 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
|
94 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
|
95 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
|
96 been created. |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
97 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
98 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
|
99 (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
|
100 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
|
101 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
102 */ |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
103 |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
104 void |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
105 Py_Initialize() |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
106 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
107 PyInterpreterState *interp; |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
108 PyThreadState *tstate; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
109 PyObject *bimod, *sysmod; |
|
5850
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
110 char *p; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
111 |
|
6201
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
112 if (initialized) |
|
6117
98a282cfb013
Use a counter instead of a Boolean to check for initialized; n calls
Guido van Rossum <guido@python.org>
parents:
5939
diff
changeset
|
113 return; |
|
6201
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
114 initialized = 1; |
|
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
|
115 |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
116 if ((p = getenv("PYTHONDEBUG")) && *p != '\0') |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
117 Py_DebugFlag = 1; |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
118 if ((p = getenv("PYTHONVERBOSE")) && *p != '\0') |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
119 Py_VerboseFlag = 1; |
|
9285
5156cf8e4269
Support PYTHONOPTIMIZE variable; by Marc Lemburg.
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
120 if ((p = getenv("PYTHONOPTIMIZE")) && *p != '\0') |
|
5156cf8e4269
Support PYTHONOPTIMIZE variable; by Marc Lemburg.
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
121 Py_OptimizeFlag = 1; |
|
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
|
122 |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
123 interp = PyInterpreterState_New(); |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
124 if (interp == NULL) |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
125 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
|
126 |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
127 tstate = PyThreadState_New(interp); |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
128 if (tstate == NULL) |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
129 Py_FatalError("Py_Initialize: can't make first thread"); |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
130 (void) PyThreadState_Swap(tstate); |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
131 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
132 interp->modules = PyDict_New(); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
133 if (interp->modules == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
134 Py_FatalError("Py_Initialize: can't make modules dictionary"); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
135 |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
136 bimod = _PyBuiltin_Init_1(); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
137 if (bimod == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
138 Py_FatalError("Py_Initialize: can't initialize __builtin__"); |
|
6557
b331cd47e0bc
Undo half of the previous change :-(
Guido van Rossum <guido@python.org>
parents:
6547
diff
changeset
|
139 interp->builtins = PyModule_GetDict(bimod); |
|
b331cd47e0bc
Undo half of the previous change :-(
Guido van Rossum <guido@python.org>
parents:
6547
diff
changeset
|
140 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
|
141 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
142 sysmod = _PySys_Init(); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
143 if (sysmod == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
144 Py_FatalError("Py_Initialize: can't initialize sys"); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
145 interp->sysdict = PyModule_GetDict(sysmod); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
146 Py_INCREF(interp->sysdict); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
147 _PyImport_FixupExtension("sys", "sys"); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
148 PySys_SetPath(Py_GetPath()); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
149 PyDict_SetItemString(interp->sysdict, "modules", |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
150 interp->modules); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
151 |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
152 /* phase 2 of builtins */ |
|
6557
b331cd47e0bc
Undo half of the previous change :-(
Guido van Rossum <guido@python.org>
parents:
6547
diff
changeset
|
153 _PyBuiltin_Init_2(interp->builtins); |
|
6328
dfeaf965f48a
Py_Initialize(): move the call to _PyImport_FixupExtension() to after
Barry Warsaw <barry@python.org>
parents:
6322
diff
changeset
|
154 _PyImport_FixupExtension("__builtin__", "__builtin__"); |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
155 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
156 _PyImport_Init(); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
157 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
158 initsigs(); /* Signal handling stuff, including initintr() */ |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
159 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
160 initmain(); /* Module __main__ */ |
|
6201
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
161 if (!Py_NoSiteFlag) |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
162 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
|
163 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
164 |
|
9641
d152adf3f094
Move the prototype for dump_counts() to before where it is used.
Guido van Rossum <guido@python.org>
parents:
9285
diff
changeset
|
165 #ifdef COUNT_ALLOCS |
|
d152adf3f094
Move the prototype for dump_counts() to before where it is used.
Guido van Rossum <guido@python.org>
parents:
9285
diff
changeset
|
166 extern void dump_counts Py_PROTO((void)); |
|
d152adf3f094
Move the prototype for dump_counts() to before where it is used.
Guido van Rossum <guido@python.org>
parents:
9285
diff
changeset
|
167 #endif |
|
d152adf3f094
Move the prototype for dump_counts() to before where it is used.
Guido van Rossum <guido@python.org>
parents:
9285
diff
changeset
|
168 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
169 /* 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
|
170 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
171 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
|
172 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
|
173 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
|
174 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
|
175 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
176 (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
|
177 threads.) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
178 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
179 Locking: as above. |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
180 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
181 */ |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
182 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
183 void |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
184 Py_Finalize() |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
185 { |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
186 PyInterpreterState *interp; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
187 PyThreadState *tstate; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
188 |
|
6201
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
189 if (!initialized) |
|
6117
98a282cfb013
Use a counter instead of a Boolean to check for initialized; n calls
Guido van Rossum <guido@python.org>
parents:
5939
diff
changeset
|
190 return; |
|
6201
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
191 initialized = 0; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
192 |
|
7113
f5f305d7a617
It seems obvious that when Py_Finalize() decides that there's nothing
Guido van Rossum <guido@python.org>
parents:
6786
diff
changeset
|
193 call_sys_exitfunc(); |
|
f5f305d7a617
It seems obvious that when Py_Finalize() decides that there's nothing
Guido van Rossum <guido@python.org>
parents:
6786
diff
changeset
|
194 |
|
6547
724382af5339
Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents:
6376
diff
changeset
|
195 /* Get current thread state and interpreter pointer */ |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
196 tstate = PyThreadState_Get(); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
197 interp = tstate->interp; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
198 |
|
6547
724382af5339
Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents:
6376
diff
changeset
|
199 /* Disable signal handling */ |
|
724382af5339
Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents:
6376
diff
changeset
|
200 PyOS_FiniInterrupts(); |
|
724382af5339
Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents:
6376
diff
changeset
|
201 |
|
724382af5339
Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents:
6376
diff
changeset
|
202 /* Destroy PyExc_MemoryErrorInst */ |
|
724382af5339
Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents:
6376
diff
changeset
|
203 _PyBuiltin_Fini_1(); |
|
724382af5339
Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents:
6376
diff
changeset
|
204 |
|
724382af5339
Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents:
6376
diff
changeset
|
205 /* Destroy all modules */ |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
206 PyImport_Cleanup(); |
|
6547
724382af5339
Two independent changes (alas):
Guido van Rossum <guido@python.org>
parents:
6376
diff
changeset
|
207 |
|
6786
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
208 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */ |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
209 _PyImport_Fini(); |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
210 |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
211 /* Debugging stuff */ |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
212 #ifdef COUNT_ALLOCS |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
213 dump_counts(); |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
214 #endif |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
215 |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
216 #ifdef Py_REF_DEBUG |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
217 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal); |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
218 #endif |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
219 |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
220 #ifdef Py_TRACE_REFS |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
221 if (_Py_AskYesNo("Print left references?")) { |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
222 _Py_PrintReferences(stderr); |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
223 } |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
224 #endif /* Py_TRACE_REFS */ |
|
bc007cf1d6ba
Changed the finalization order again so that the reference count
Guido van Rossum <guido@python.org>
parents:
6661
diff
changeset
|
225 |
|
6557
b331cd47e0bc
Undo half of the previous change :-(
Guido van Rossum <guido@python.org>
parents:
6547
diff
changeset
|
226 /* Delete current thread */ |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
227 PyInterpreterState_Clear(interp); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
228 PyThreadState_Swap(NULL); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
229 PyInterpreterState_Delete(interp); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
230 |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
231 /* Now we decref the exception classes. After this point nothing |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
232 can raise an exception. That's okay, because each Fini() method |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
233 below has been checked to make sure no exceptions are ever |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
234 raised. |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
235 */ |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
236 _PyBuiltin_Fini_2(); |
|
5939
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
237 PyMethod_Fini(); |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
238 PyFrame_Fini(); |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
239 PyCFunction_Fini(); |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
240 PyTuple_Fini(); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
241 PyString_Fini(); |
|
5939
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
242 PyInt_Fini(); |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
243 PyFloat_Fini(); |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
244 |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
245 /* XXX Still allocated: |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
246 - various static ad-hoc pointers to interned strings |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
247 - int and float free list blocks |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
248 - whatever various modules and libraries allocate |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
249 */ |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
250 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
251 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
|
252 |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
253 call_ll_exitfuncs(); |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
254 |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
255 #ifdef Py_TRACE_REFS |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
256 _Py_ResetReferences(); |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
257 #endif /* Py_TRACE_REFS */ |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
258 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
259 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
260 /* 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
|
261 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
|
262 first. |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
263 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
264 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
|
265 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
|
266 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
|
267 thread. |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
268 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
269 Locking: as above. |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
270 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
271 */ |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
272 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
273 PyThreadState * |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
274 Py_NewInterpreter() |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
275 { |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
276 PyInterpreterState *interp; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
277 PyThreadState *tstate, *save_tstate; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
278 PyObject *bimod, *sysmod; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
279 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
280 if (!initialized) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
281 Py_FatalError("Py_NewInterpreter: call Py_Initialize first"); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
282 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
283 interp = PyInterpreterState_New(); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
284 if (interp == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
285 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
286 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
287 tstate = PyThreadState_New(interp); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
288 if (tstate == NULL) { |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
289 PyInterpreterState_Delete(interp); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
290 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
291 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
292 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
293 save_tstate = PyThreadState_Swap(tstate); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
294 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
295 /* XXX The following is lax in error checking */ |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
296 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
297 interp->modules = PyDict_New(); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
298 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
299 bimod = _PyImport_FindExtension("__builtin__", "__builtin__"); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
300 if (bimod != NULL) { |
|
6557
b331cd47e0bc
Undo half of the previous change :-(
Guido van Rossum <guido@python.org>
parents:
6547
diff
changeset
|
301 interp->builtins = PyModule_GetDict(bimod); |
|
b331cd47e0bc
Undo half of the previous change :-(
Guido van Rossum <guido@python.org>
parents:
6547
diff
changeset
|
302 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
|
303 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
304 sysmod = _PyImport_FindExtension("sys", "sys"); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
305 if (bimod != NULL && sysmod != NULL) { |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
306 interp->sysdict = PyModule_GetDict(sysmod); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
307 Py_INCREF(interp->sysdict); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
308 PySys_SetPath(Py_GetPath()); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
309 PyDict_SetItemString(interp->sysdict, "modules", |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
310 interp->modules); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
311 initmain(); |
|
6201
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
312 if (!Py_NoSiteFlag) |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
313 initsite(); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
314 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
315 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
316 if (!PyErr_Occurred()) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
317 return tstate; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
318 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
319 /* Oops, it didn't work. Undo it all. */ |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
320 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
321 PyErr_Print(); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
322 PyThreadState_Clear(tstate); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
323 PyThreadState_Swap(save_tstate); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
324 PyThreadState_Delete(tstate); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
325 PyInterpreterState_Delete(interp); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
326 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
327 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
328 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
329 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
330 /* 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
|
331 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
|
332 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
|
333 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
|
334 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
335 (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
|
336 everything, regardless.) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
337 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
338 Locking: as above. |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
339 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
340 */ |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
341 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
342 void |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
343 Py_EndInterpreter(tstate) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
344 PyThreadState *tstate; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
345 { |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
346 PyInterpreterState *interp = tstate->interp; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
347 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
348 if (tstate != PyThreadState_Get()) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
349 Py_FatalError("Py_EndInterpreter: thread is not current"); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
350 if (tstate->frame != NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
351 Py_FatalError("Py_EndInterpreter: thread still has a frame"); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
352 if (tstate != interp->tstate_head || tstate->next != NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
353 Py_FatalError("Py_EndInterpreter: not the last thread"); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
354 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
355 PyImport_Cleanup(); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
356 PyInterpreterState_Clear(interp); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
357 PyThreadState_Swap(NULL); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
358 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
|
359 } |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
360 |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
361 static char *progname = "python"; |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
362 |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
363 void |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
364 Py_SetProgramName(pn) |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
365 char *pn; |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
366 { |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
367 if (pn && *pn) |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
368 progname = pn; |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
369 } |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
370 |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
371 char * |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
372 Py_GetProgramName() |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
373 { |
|
6f67a1bda15a
Moved some stuff here from main.c (part of a big restructuring - wait
Guido van Rossum <guido@python.org>
parents:
5611
diff
changeset
|
374 return progname; |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
375 } |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
376 |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
377 static char *default_home = NULL; |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
378 |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
379 void |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
380 Py_SetPythonHome(home) |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
381 char *home; |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
382 { |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
383 default_home = home; |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
384 } |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
385 |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
386 char * |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
387 Py_GetPythonHome() |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
388 { |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
389 char *home = default_home; |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
390 if (home == NULL) |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
391 home = getenv("PYTHONHOME"); |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
392 return home; |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
393 } |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
394 |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
395 /* Create __main__ module */ |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
396 |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
397 static void |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
398 initmain() |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
399 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
400 PyObject *m, *d; |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
401 m = PyImport_AddModule("__main__"); |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
402 if (m == NULL) |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
403 Py_FatalError("can't create __main__ module"); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
404 d = PyModule_GetDict(m); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
405 if (PyDict_GetItemString(d, "__builtins__") == NULL) { |
|
6600
83ccf44bf195
Two changes (here we go again :-( ).
Guido van Rossum <guido@python.org>
parents:
6557
diff
changeset
|
406 PyObject *bimod = PyImport_ImportModule("__builtin__"); |
|
83ccf44bf195
Two changes (here we go again :-( ).
Guido van Rossum <guido@python.org>
parents:
6557
diff
changeset
|
407 if (bimod == NULL || |
|
83ccf44bf195
Two changes (here we go again :-( ).
Guido van Rossum <guido@python.org>
parents:
6557
diff
changeset
|
408 PyDict_SetItemString(d, "__builtins__", bimod) != 0) |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
409 Py_FatalError("can't add __builtins__ to __main__"); |
|
10024
caf2c65a6bcf
initmain(): Nailed a memory leak. bimod must be DECREF'd!
Barry Warsaw <barry@python.org>
parents:
9965
diff
changeset
|
410 Py_DECREF(bimod); |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
411 } |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
412 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
413 |
|
6201
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
414 /* Import the site module (not into __main__ though) */ |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
415 |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
416 static void |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
417 initsite() |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
418 { |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
419 PyObject *m, *f; |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
420 m = PyImport_ImportModule("site"); |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
421 if (m == NULL) { |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
422 f = PySys_GetObject("stderr"); |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
423 if (Py_VerboseFlag) { |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
424 PyFile_WriteString( |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
425 "'import site' failed; traceback:\n", f); |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
426 PyErr_Print(); |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
427 } |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
428 else { |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
429 PyFile_WriteString( |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
430 "'import site' failed; use -v for traceback\n", f); |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
431 PyErr_Clear(); |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
432 } |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
433 } |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
434 else { |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
435 Py_DECREF(m); |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
436 } |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
437 } |
|
dc974b3a6cf4
Two independent changes (oops):
Guido van Rossum <guido@python.org>
parents:
6197
diff
changeset
|
438 |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
439 /* Parse input from a file and execute it */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
440 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
441 int |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
442 PyRun_AnyFile(fp, filename) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
443 FILE *fp; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
444 char *filename; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
445 { |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
446 if (filename == NULL) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
447 filename = "???"; |
|
5108
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
448 if (Py_FdIsInteractive(fp, filename)) |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
449 return PyRun_InteractiveLoop(fp, filename); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
450 else |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
451 return PyRun_SimpleFile(fp, filename); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
452 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
453 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
454 int |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
455 PyRun_InteractiveLoop(fp, filename) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
456 FILE *fp; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
457 char *filename; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
458 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
459 PyObject *v; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
460 int ret; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
461 v = PySys_GetObject("ps1"); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
462 if (v == NULL) { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
463 PySys_SetObject("ps1", v = PyString_FromString(">>> ")); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
464 Py_XDECREF(v); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
465 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
466 v = PySys_GetObject("ps2"); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
467 if (v == NULL) { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
468 PySys_SetObject("ps2", v = PyString_FromString("... ")); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
469 Py_XDECREF(v); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
470 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
471 for (;;) { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
472 ret = PyRun_InteractiveOne(fp, filename); |
|
3575
e2b3a696d69c
Use new names for debug macros. Don't include pythonrun.h.
Guido van Rossum <guido@python.org>
parents:
3489
diff
changeset
|
473 #ifdef Py_REF_DEBUG |
|
2612
ca6b60d4ea90
fix dusty debugging macros
Guido van Rossum <guido@python.org>
parents:
2529
diff
changeset
|
474 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
475 #endif |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
476 if (ret == E_EOF) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
477 return 0; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
478 /* |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
479 if (ret == E_NOMEM) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
480 return -1; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
481 */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
482 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
483 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
484 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
485 int |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
486 PyRun_InteractiveOne(fp, filename) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
487 FILE *fp; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
488 char *filename; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
489 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
490 PyObject *m, *d, *v, *w; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
491 node *n; |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
492 perrdetail err; |
|
6661
99955b65408d
Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents:
6600
diff
changeset
|
493 char *ps1 = "", *ps2 = ""; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
494 v = PySys_GetObject("ps1"); |
|
6661
99955b65408d
Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents:
6600
diff
changeset
|
495 if (v != NULL) { |
|
99955b65408d
Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents:
6600
diff
changeset
|
496 v = PyObject_Str(v); |
|
99955b65408d
Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents:
6600
diff
changeset
|
497 if (v == NULL) |
|
99955b65408d
Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents:
6600
diff
changeset
|
498 PyErr_Clear(); |
|
99955b65408d
Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents:
6600
diff
changeset
|
499 else if (PyString_Check(v)) |
|
99955b65408d
Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents:
6600
diff
changeset
|
500 ps1 = PyString_AsString(v); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
501 } |
|
6661
99955b65408d
Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents:
6600
diff
changeset
|
502 w = PySys_GetObject("ps2"); |
|
99955b65408d
Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents:
6600
diff
changeset
|
503 if (w != NULL) { |
|
99955b65408d
Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents:
6600
diff
changeset
|
504 w = PyObject_Str(w); |
|
99955b65408d
Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents:
6600
diff
changeset
|
505 if (w == NULL) |
|
99955b65408d
Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents:
6600
diff
changeset
|
506 PyErr_Clear(); |
|
99955b65408d
Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents:
6600
diff
changeset
|
507 else if (PyString_Check(w)) |
|
99955b65408d
Apply str() to sys.ps1 or sys.ps2 before using them as a prompt, so
Guido van Rossum <guido@python.org>
parents:
6600
diff
changeset
|
508 ps2 = PyString_AsString(w); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
509 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
510 n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar, |
|
5438
e926c331ebbf
Instead of importing graminit.h whenever one of the three grammar 'root'
Guido van Rossum <guido@python.org>
parents:
5415
diff
changeset
|
511 Py_single_input, ps1, ps2, &err); |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
512 Py_XDECREF(v); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
513 Py_XDECREF(w); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
514 if (n == NULL) { |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
515 if (err.error == E_EOF) { |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
516 if (err.text) |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
517 free(err.text); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
518 return E_EOF; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
519 } |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
520 err_input(&err); |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
521 PyErr_Print(); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
522 return err.error; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
523 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
524 m = PyImport_AddModule("__main__"); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
525 if (m == NULL) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
526 return -1; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
527 d = PyModule_GetDict(m); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
528 v = run_node(n, filename, d, d); |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
529 if (v == NULL) { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
530 PyErr_Print(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
531 return -1; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
532 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
533 Py_DECREF(v); |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
534 if (Py_FlushLine()) |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
535 PyErr_Clear(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
536 return 0; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
537 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
538 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
539 int |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
540 PyRun_SimpleFile(fp, filename) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
541 FILE *fp; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
542 char *filename; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
543 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
544 PyObject *m, *d, *v; |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
545 char *ext; |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
546 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
547 m = PyImport_AddModule("__main__"); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
548 if (m == NULL) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
549 return -1; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
550 d = PyModule_GetDict(m); |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
551 ext = filename + strlen(filename) - 4; |
|
5234
07ed52e200db
Allow passing a .pyo file.
Guido van Rossum <guido@python.org>
parents:
5170
diff
changeset
|
552 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0 |
| 2318 | 553 #ifdef macintosh |
| 554 /* On a mac, we also assume a pyc file for types 'PYC ' and 'APPL' */ | |
|
5234
07ed52e200db
Allow passing a .pyo file.
Guido van Rossum <guido@python.org>
parents:
5170
diff
changeset
|
555 || getfiletype(filename) == 'PYC ' |
|
07ed52e200db
Allow passing a .pyo file.
Guido van Rossum <guido@python.org>
parents:
5170
diff
changeset
|
556 || getfiletype(filename) == 'APPL' |
| 2318 | 557 #endif /* macintosh */ |
|
5234
07ed52e200db
Allow passing a .pyo file.
Guido van Rossum <guido@python.org>
parents:
5170
diff
changeset
|
558 ) { |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
559 /* Try to run a pyc file. First, re-open in binary */ |
|
2022
eee3d715f0cf
Removed extraneous fclose() in case of .pyc file argument
Jack Jansen <jack.jansen@cwi.nl>
parents:
1911
diff
changeset
|
560 /* Don't close, done in main: fclose(fp); */ |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
561 if( (fp = fopen(filename, "rb")) == NULL ) { |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
562 fprintf(stderr, "python: Can't reopen .pyc file\n"); |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
563 return -1; |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
564 } |
|
5234
07ed52e200db
Allow passing a .pyo file.
Guido van Rossum <guido@python.org>
parents:
5170
diff
changeset
|
565 /* Turn on optimization if a .pyo file is given */ |
|
07ed52e200db
Allow passing a .pyo file.
Guido van Rossum <guido@python.org>
parents:
5170
diff
changeset
|
566 if (strcmp(ext, ".pyo") == 0) |
|
07ed52e200db
Allow passing a .pyo file.
Guido van Rossum <guido@python.org>
parents:
5170
diff
changeset
|
567 Py_OptimizeFlag = 1; |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
568 v = run_pyc_file(fp, filename, d, d); |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
569 } else { |
|
5438
e926c331ebbf
Instead of importing graminit.h whenever one of the three grammar 'root'
Guido van Rossum <guido@python.org>
parents:
5415
diff
changeset
|
570 v = PyRun_File(fp, filename, Py_file_input, d, d); |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
571 } |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
572 if (v == NULL) { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
573 PyErr_Print(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
574 return -1; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
575 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
576 Py_DECREF(v); |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
577 if (Py_FlushLine()) |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
578 PyErr_Clear(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
579 return 0; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
580 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
581 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
582 int |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
583 PyRun_SimpleString(command) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
584 char *command; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
585 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
586 PyObject *m, *d, *v; |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
587 m = PyImport_AddModule("__main__"); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
588 if (m == NULL) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
589 return -1; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
590 d = PyModule_GetDict(m); |
|
5438
e926c331ebbf
Instead of importing graminit.h whenever one of the three grammar 'root'
Guido van Rossum <guido@python.org>
parents:
5415
diff
changeset
|
591 v = PyRun_String(command, Py_file_input, d, d); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
592 if (v == NULL) { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
593 PyErr_Print(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
594 return -1; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
595 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
596 Py_DECREF(v); |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
597 if (Py_FlushLine()) |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
598 PyErr_Clear(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
599 return 0; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
600 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
601 |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
602 static int |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
603 parse_syntax_error(err, message, filename, lineno, offset, text) |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
604 PyObject* err; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
605 PyObject** message; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
606 char** filename; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
607 int* lineno; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
608 int* offset; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
609 char** text; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
610 { |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
611 long hold; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
612 PyObject *v; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
613 |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
614 /* old style errors */ |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
615 if (PyTuple_Check(err)) |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
616 return PyArg_Parse(err, "(O(ziiz))", message, filename, |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
617 lineno, offset, text); |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
618 |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
619 /* new style errors. `err' is an instance */ |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
620 |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
621 if (! (v = PyObject_GetAttrString(err, "msg"))) |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
622 goto finally; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
623 *message = v; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
624 |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
625 if (!(v = PyObject_GetAttrString(err, "filename"))) |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
626 goto finally; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
627 if (v == Py_None) |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
628 *filename = NULL; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
629 else if (! (*filename = PyString_AsString(v))) |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
630 goto finally; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
631 |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
632 Py_DECREF(v); |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
633 if (!(v = PyObject_GetAttrString(err, "lineno"))) |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
634 goto finally; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
635 hold = PyInt_AsLong(v); |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
636 Py_DECREF(v); |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
637 v = NULL; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
638 if (hold < 0 && PyErr_Occurred()) |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
639 goto finally; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
640 *lineno = (int)hold; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
641 |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
642 if (!(v = PyObject_GetAttrString(err, "offset"))) |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
643 goto finally; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
644 hold = PyInt_AsLong(v); |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
645 Py_DECREF(v); |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
646 v = NULL; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
647 if (hold < 0 && PyErr_Occurred()) |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
648 goto finally; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
649 *offset = (int)hold; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
650 |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
651 if (!(v = PyObject_GetAttrString(err, "text"))) |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
652 goto finally; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
653 if (v == Py_None) |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
654 *text = NULL; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
655 else if (! (*text = PyString_AsString(v))) |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
656 goto finally; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
657 Py_DECREF(v); |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
658 return 1; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
659 |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
660 finally: |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
661 Py_XDECREF(v); |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
662 return 0; |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
663 } |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
664 |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
665 void |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
666 PyErr_Print() |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
667 { |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
668 PyErr_PrintEx(1); |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
669 } |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
670 |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
671 void |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
672 PyErr_PrintEx(set_sys_last_vars) |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
673 int set_sys_last_vars; |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
674 { |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
675 int err = 0; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
676 PyObject *exception, *v, *tb, *f; |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
677 PyErr_Fetch(&exception, &v, &tb); |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
678 PyErr_NormalizeException(&exception, &v, &tb); |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
679 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2022
diff
changeset
|
680 if (exception == NULL) |
|
5611
5ed3a21cc122
Can't return 0 from void function...
Guido van Rossum <guido@python.org>
parents:
5607
diff
changeset
|
681 return; |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
682 |
|
6165
29ddf1049842
PyErr_Print(): Use PyErr_GivenExceptionMatches() instead of pointer
Barry Warsaw <barry@python.org>
parents:
6136
diff
changeset
|
683 if (PyErr_GivenExceptionMatches(exception, PyExc_SystemExit)) { |
|
7509
b5d52c415b15
Fix the handling of errors in Py_FlushLine() in a few places.
Guido van Rossum <guido@python.org>
parents:
7206
diff
changeset
|
684 if (Py_FlushLine()) |
|
b5d52c415b15
Fix the handling of errors in Py_FlushLine() in a few places.
Guido van Rossum <guido@python.org>
parents:
7206
diff
changeset
|
685 PyErr_Clear(); |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
686 fflush(stdout); |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
687 if (v == NULL || v == Py_None) |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
688 Py_Exit(0); |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
689 if (PyInstance_Check(v)) { |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
690 /* we expect the error code to be store in the |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
691 `code' attribute |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
692 */ |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
693 PyObject *code = PyObject_GetAttrString(v, "code"); |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
694 if (code) { |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
695 Py_DECREF(v); |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
696 v = code; |
|
6374
f6ef9af4c8b9
Fix small omission: with all the new code, sys.exit(None) would print
Guido van Rossum <guido@python.org>
parents:
6328
diff
changeset
|
697 if (v == Py_None) |
|
f6ef9af4c8b9
Fix small omission: with all the new code, sys.exit(None) would print
Guido van Rossum <guido@python.org>
parents:
6328
diff
changeset
|
698 Py_Exit(0); |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
699 } |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
700 /* if we failed to dig out the "code" attribute, |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
701 then just let the else clause below print the |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
702 error |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
703 */ |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
704 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
705 if (PyInt_Check(v)) |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
706 Py_Exit((int)PyInt_AsLong(v)); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
707 else { |
|
1073
2c0432fcc270
Modified most (but not yet all) I/O to always go through sys.stdout or
Guido van Rossum <guido@python.org>
parents:
1015
diff
changeset
|
708 /* OK to use real stderr here */ |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
709 PyObject_Print(v, stderr, Py_PRINT_RAW); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
710 fprintf(stderr, "\n"); |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
711 Py_Exit(1); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
712 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
713 } |
|
7206
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
714 if (set_sys_last_vars) { |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
715 PySys_SetObject("last_type", exception); |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
716 PySys_SetObject("last_value", v); |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
717 PySys_SetObject("last_traceback", tb); |
|
3f255aedf621
Ehm, three unrelated changes.
Guido van Rossum <guido@python.org>
parents:
7113
diff
changeset
|
718 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
719 f = PySys_GetObject("stderr"); |
|
1073
2c0432fcc270
Modified most (but not yet all) I/O to always go through sys.stdout or
Guido van Rossum <guido@python.org>
parents:
1015
diff
changeset
|
720 if (f == NULL) |
|
2c0432fcc270
Modified most (but not yet all) I/O to always go through sys.stdout or
Guido van Rossum <guido@python.org>
parents:
1015
diff
changeset
|
721 fprintf(stderr, "lost sys.stderr\n"); |
|
2c0432fcc270
Modified most (but not yet all) I/O to always go through sys.stdout or
Guido van Rossum <guido@python.org>
parents:
1015
diff
changeset
|
722 else { |
|
7509
b5d52c415b15
Fix the handling of errors in Py_FlushLine() in a few places.
Guido van Rossum <guido@python.org>
parents:
7206
diff
changeset
|
723 if (Py_FlushLine()) |
|
b5d52c415b15
Fix the handling of errors in Py_FlushLine() in a few places.
Guido van Rossum <guido@python.org>
parents:
7206
diff
changeset
|
724 PyErr_Clear(); |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
725 fflush(stdout); |
|
7509
b5d52c415b15
Fix the handling of errors in Py_FlushLine() in a few places.
Guido van Rossum <guido@python.org>
parents:
7206
diff
changeset
|
726 err = PyTraceBack_Print(tb, f); |
|
6165
29ddf1049842
PyErr_Print(): Use PyErr_GivenExceptionMatches() instead of pointer
Barry Warsaw <barry@python.org>
parents:
6136
diff
changeset
|
727 if (err == 0 && |
|
29ddf1049842
PyErr_Print(): Use PyErr_GivenExceptionMatches() instead of pointer
Barry Warsaw <barry@python.org>
parents:
6136
diff
changeset
|
728 PyErr_GivenExceptionMatches(exception, PyExc_SyntaxError)) |
|
29ddf1049842
PyErr_Print(): Use PyErr_GivenExceptionMatches() instead of pointer
Barry Warsaw <barry@python.org>
parents:
6136
diff
changeset
|
729 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
730 PyObject *message; |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
731 char *filename, *text; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
732 int lineno, offset; |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
733 if (!parse_syntax_error(v, &message, &filename, |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
734 &lineno, &offset, &text)) |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
735 PyErr_Clear(); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
736 else { |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
737 char buf[10]; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
738 PyFile_WriteString(" File \"", f); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
739 if (filename == NULL) |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
740 PyFile_WriteString("<string>", f); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
741 else |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
742 PyFile_WriteString(filename, f); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
743 PyFile_WriteString("\", line ", f); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
744 sprintf(buf, "%d", lineno); |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
745 PyFile_WriteString(buf, f); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
746 PyFile_WriteString("\n", f); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
747 if (text != NULL) { |
|
1898
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
748 char *nl; |
|
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
749 if (offset > 0 && |
|
5415
596380a567d2
Keep MS compiler happy: use (int)strlen() when comparing; make sure
Guido van Rossum <guido@python.org>
parents:
5405
diff
changeset
|
750 offset == (int)strlen(text)) |
|
1898
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
751 offset--; |
|
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
752 for (;;) { |
|
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
753 nl = strchr(text, '\n'); |
|
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
754 if (nl == NULL || |
|
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
755 nl-text >= offset) |
|
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
756 break; |
|
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
757 offset -= (nl+1-text); |
|
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
758 text = nl+1; |
|
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
759 } |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
760 while (*text == ' ' || *text == '\t') { |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
761 text++; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
762 offset--; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
763 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
764 PyFile_WriteString(" ", f); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
765 PyFile_WriteString(text, f); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
766 if (*text == '\0' || |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
767 text[strlen(text)-1] != '\n') |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
768 PyFile_WriteString("\n", f); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
769 PyFile_WriteString(" ", f); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
770 offset--; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
771 while (offset > 0) { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
772 PyFile_WriteString(" ", f); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
773 offset--; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
774 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
775 PyFile_WriteString("^\n", f); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
776 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
777 Py_INCREF(message); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
778 Py_DECREF(v); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
779 v = message; |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
780 /* Can't be bothered to check all those |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
781 PyFile_WriteString() calls */ |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
782 if (PyErr_Occurred()) |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
783 err = -1; |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
784 } |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
785 } |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
786 if (err) { |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
787 /* Don't do anything else */ |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
788 } |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
789 else if (PyClass_Check(exception)) { |
|
6322
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
790 PyClassObject* exc = (PyClassObject*)exception; |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
791 PyObject* className = exc->cl_name; |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
792 PyObject* moduleName = |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
793 PyDict_GetItemString(exc->cl_dict, "__module__"); |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
794 |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
795 if (moduleName == NULL) |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
796 err = PyFile_WriteString("<unknown>", f); |
|
6322
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
797 else { |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
798 char* modstr = PyString_AsString(moduleName); |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
799 if (modstr && strcmp(modstr, "exceptions")) |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
800 { |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
801 err = PyFile_WriteString(modstr, f); |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
802 err += PyFile_WriteString(".", f); |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
803 } |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
804 } |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
805 if (err == 0) { |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
806 if (className == NULL) |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
807 err = PyFile_WriteString("<unknown>", f); |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
808 else |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
809 err = PyFile_WriteObject(className, f, |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
810 Py_PRINT_RAW); |
|
05d943c4597c
PyErr_Print(): When printing a class exception, try to dig out the
Barry Warsaw <barry@python.org>
parents:
6246
diff
changeset
|
811 } |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
812 } |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
813 else |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
814 err = PyFile_WriteObject(exception, f, Py_PRINT_RAW); |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
815 if (err == 0) { |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
816 if (v != NULL && v != Py_None) { |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
817 PyObject *s = PyObject_Str(v); |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
818 /* only print colon if the str() of the |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
819 object is not the empty string |
|
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
820 */ |
|
6246
4cf20fa883a9
Fixed some details of printing the str() of an exception. This fixes
Guido van Rossum <guido@python.org>
parents:
6201
diff
changeset
|
821 if (s == NULL) |
|
4cf20fa883a9
Fixed some details of printing the str() of an exception. This fixes
Guido van Rossum <guido@python.org>
parents:
6201
diff
changeset
|
822 err = -1; |
|
4cf20fa883a9
Fixed some details of printing the str() of an exception. This fixes
Guido van Rossum <guido@python.org>
parents:
6201
diff
changeset
|
823 else if (!PyString_Check(s) || |
|
4cf20fa883a9
Fixed some details of printing the str() of an exception. This fixes
Guido van Rossum <guido@python.org>
parents:
6201
diff
changeset
|
824 PyString_GET_SIZE(s) != 0) |
|
6197
7da7ba5c6525
Added Py_UseClassExceptionsFlag, the variable containing the state of
Barry Warsaw <barry@python.org>
parents:
6165
diff
changeset
|
825 err = PyFile_WriteString(": ", f); |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
826 if (err == 0) |
|
6246
4cf20fa883a9
Fixed some details of printing the str() of an exception. This fixes
Guido van Rossum <guido@python.org>
parents:
6201
diff
changeset
|
827 err = PyFile_WriteObject(s, f, Py_PRINT_RAW); |
|
4cf20fa883a9
Fixed some details of printing the str() of an exception. This fixes
Guido van Rossum <guido@python.org>
parents:
6201
diff
changeset
|
828 Py_XDECREF(s); |
|
2293
a24146241991
print class name for exceptions that are classes
Guido van Rossum <guido@python.org>
parents:
2279
diff
changeset
|
829 } |
|
a24146241991
print class name for exceptions that are classes
Guido van Rossum <guido@python.org>
parents:
2279
diff
changeset
|
830 } |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
831 if (err == 0) |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
832 err = PyFile_WriteString("\n", f); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
833 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
834 Py_XDECREF(exception); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
835 Py_XDECREF(v); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
836 Py_XDECREF(tb); |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
837 /* If an error happened here, don't show it. |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
838 XXX This is wrong, but too many callers rely on this behavior. */ |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
839 if (err != 0) |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
840 PyErr_Clear(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
841 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
842 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
843 PyObject * |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
844 PyRun_String(str, start, globals, locals) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
845 char *str; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
846 int start; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
847 PyObject *globals, *locals; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
848 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
849 return run_err_node(PyParser_SimpleParseString(str, start), |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
850 "<string>", globals, locals); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
851 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
852 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
853 PyObject * |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
854 PyRun_File(fp, filename, start, globals, locals) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
855 FILE *fp; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
856 char *filename; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
857 int start; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
858 PyObject *globals, *locals; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
859 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
860 return run_err_node(PyParser_SimpleParseFile(fp, filename, start), |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
861 filename, globals, locals); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
862 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
863 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
864 static PyObject * |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
865 run_err_node(n, filename, globals, locals) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
866 node *n; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
867 char *filename; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
868 PyObject *globals, *locals; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
869 { |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
870 if (n == NULL) |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
871 return NULL; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
872 return run_node(n, filename, globals, locals); |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
873 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
874 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
875 static PyObject * |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
876 run_node(n, filename, globals, locals) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
877 node *n; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
878 char *filename; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
879 PyObject *globals, *locals; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
880 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
881 PyCodeObject *co; |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
882 PyObject *v; |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
883 co = PyNode_Compile(n, filename); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
884 PyNode_Free(n); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
885 if (co == NULL) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
886 return NULL; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
887 v = PyEval_EvalCode(co, globals, locals); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
888 Py_DECREF(co); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
889 return v; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
890 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
891 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
892 static PyObject * |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
893 run_pyc_file(fp, filename, globals, locals) |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
894 FILE *fp; |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
895 char *filename; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
896 PyObject *globals, *locals; |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
897 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
898 PyCodeObject *co; |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
899 PyObject *v; |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
900 long magic; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
901 long PyImport_GetMagicNumber(); |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
902 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
903 magic = PyMarshal_ReadLongFromFile(fp); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
904 if (magic != PyImport_GetMagicNumber()) { |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
905 PyErr_SetString(PyExc_RuntimeError, |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
906 "Bad magic number in .pyc file"); |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
907 return NULL; |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
908 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
909 (void) PyMarshal_ReadLongFromFile(fp); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
910 v = PyMarshal_ReadObjectFromFile(fp); |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
911 fclose(fp); |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
912 if (v == NULL || !PyCode_Check(v)) { |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
913 Py_XDECREF(v); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
914 PyErr_SetString(PyExc_RuntimeError, |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
915 "Bad code object in .pyc file"); |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
916 return NULL; |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
917 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
918 co = (PyCodeObject *)v; |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
919 v = PyEval_EvalCode(co, globals, locals); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
920 Py_DECREF(co); |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
921 return v; |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
922 } |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
923 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
924 PyObject * |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
925 Py_CompileString(str, filename, start) |
|
1263
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
926 char *str; |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
927 char *filename; |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
928 int start; |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
929 { |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
930 node *n; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
931 PyCodeObject *co; |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
932 n = PyParser_SimpleParseString(str, start); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
933 if (n == NULL) |
|
1263
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
934 return NULL; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
935 co = PyNode_Compile(n, filename); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
936 PyNode_Free(n); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
937 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
|
938 } |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
939 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
940 /* 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
|
941 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
942 node * |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
943 PyParser_SimpleParseFile(fp, filename, start) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
944 FILE *fp; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
945 char *filename; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
946 int start; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
947 { |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
948 node *n; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
949 perrdetail err; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
950 n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar, start, |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
951 (char *)0, (char *)0, &err); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
952 if (n == NULL) |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
953 err_input(&err); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
954 return n; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
955 } |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
956 |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
957 /* 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
|
958 |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
959 node * |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
960 PyParser_SimpleParseString(str, start) |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
961 char *str; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
962 int start; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
963 { |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
964 node *n; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
965 perrdetail err; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
966 n = PyParser_ParseString(str, &_PyParser_Grammar, start, &err); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
967 if (n == NULL) |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
968 err_input(&err); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
969 return n; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
970 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
971 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
972 /* 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
|
973 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
974 static void |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
975 err_input(err) |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
976 perrdetail *err; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
977 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
978 PyObject *v, *w; |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
979 char *msg = NULL; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
980 v = Py_BuildValue("(ziiz)", err->filename, |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
981 err->lineno, err->offset, err->text); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
982 if (err->text != NULL) { |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
983 free(err->text); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
984 err->text = NULL; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
985 } |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
986 switch (err->error) { |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
987 case E_SYNTAX: |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
988 msg = "invalid syntax"; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
989 break; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
990 case E_TOKEN: |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
991 msg = "invalid token"; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
992 break; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
993 case E_INTR: |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
994 PyErr_SetNone(PyExc_KeyboardInterrupt); |
|
9965
c1091e82e5aa
err_input(): Nailed a small memory leak. If the error is E_INTR, the
Barry Warsaw <barry@python.org>
parents:
9819
diff
changeset
|
995 Py_XDECREF(v); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
996 return; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
997 case E_NOMEM: |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
998 PyErr_NoMemory(); |
|
9965
c1091e82e5aa
err_input(): Nailed a small memory leak. If the error is E_INTR, the
Barry Warsaw <barry@python.org>
parents:
9819
diff
changeset
|
999 Py_XDECREF(v); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1000 return; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1001 case E_EOF: |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1002 msg = "unexpected EOF while parsing"; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1003 break; |
|
7967
bbd2b5d8d0b6
Translate E_INDENT to the clearest error message I can think of.
Guido van Rossum <guido@python.org>
parents:
7847
diff
changeset
|
1004 case E_INDENT: |
|
bbd2b5d8d0b6
Translate E_INDENT to the clearest error message I can think of.
Guido van Rossum <guido@python.org>
parents:
7847
diff
changeset
|
1005 msg = "inconsistent use of tabs and spaces in indentation"; |
|
bbd2b5d8d0b6
Translate E_INDENT to the clearest error message I can think of.
Guido van Rossum <guido@python.org>
parents:
7847
diff
changeset
|
1006 break; |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1007 default: |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1008 fprintf(stderr, "error=%d\n", err->error); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1009 msg = "unknown parsing error"; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1010 break; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1011 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1012 w = Py_BuildValue("(sO)", msg, v); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1013 Py_XDECREF(v); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1014 PyErr_SetObject(PyExc_SyntaxError, w); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1015 Py_XDECREF(w); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1016 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1017 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1018 /* Print fatal error message and abort */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1019 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1020 void |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1021 Py_FatalError(msg) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1022 char *msg; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1023 { |
|
1911
a7f269610ec2
* Python/pythonrun.c: add string "Python" to fatal error message
Guido van Rossum <guido@python.org>
parents:
1898
diff
changeset
|
1024 fprintf(stderr, "Fatal Python error: %s\n", msg); |
|
2242
d3b5be0c872f
make call_pyc_file static
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1025 #ifdef macintosh |
|
d3b5be0c872f
make call_pyc_file static
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1026 for (;;); |
|
d3b5be0c872f
make call_pyc_file static
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1027 #endif |
|
4291
1427d61f1307
Rationalized MS ifdefs
Guido van Rossum <guido@python.org>
parents:
3609
diff
changeset
|
1028 #ifdef MS_WIN32 |
|
5593
451c7ccf36b6
Added a space in an error message
Guido van Rossum <guido@python.org>
parents:
5438
diff
changeset
|
1029 OutputDebugString("Fatal Python error: "); |
|
2529
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
1030 OutputDebugString(msg); |
|
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
1031 OutputDebugString("\n"); |
|
8988
070de4d39ddd
Add DebugBreak() call to Py_FatalError() for Mark Hammond (only on
Guido van Rossum <guido@python.org>
parents:
7967
diff
changeset
|
1032 #ifdef _DEBUG |
|
070de4d39ddd
Add DebugBreak() call to Py_FatalError() for Mark Hammond (only on
Guido van Rossum <guido@python.org>
parents:
7967
diff
changeset
|
1033 DebugBreak(); |
|
2529
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
1034 #endif |
|
8988
070de4d39ddd
Add DebugBreak() call to Py_FatalError() for Mark Hammond (only on
Guido van Rossum <guido@python.org>
parents:
7967
diff
changeset
|
1035 #endif /* MS_WIN32 */ |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1036 abort(); |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1037 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1038 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1039 /* Clean up and exit */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1040 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1041 #ifdef WITH_THREAD |
|
9203
07dae6fdae79
Renamed thread.h to pythread.h.
Guido van Rossum <guido@python.org>
parents:
9192
diff
changeset
|
1042 #include "pythread.h" |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1043 int _PyThread_Started = 0; /* Set by threadmodule.c and maybe others */ |
|
961
a31e07847063
New thread.c from Sjoerd, supports _exit_prog(). Use this in goaway()
Guido van Rossum <guido@python.org>
parents:
941
diff
changeset
|
1044 #endif |
|
a31e07847063
New thread.c from Sjoerd, supports _exit_prog(). Use this in goaway()
Guido van Rossum <guido@python.org>
parents:
941
diff
changeset
|
1045 |
|
9192
ac6c29d1f10c
On second though, NEXITFUNCS should be defined here and not in
Guido van Rossum <guido@python.org>
parents:
9161
diff
changeset
|
1046 #define NEXITFUNCS 32 |
|
1870
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1047 static void (*exitfuncs[NEXITFUNCS])(); |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1048 static int nexitfuncs = 0; |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1049 |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1050 int Py_AtExit(func) |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1051 void (*func) Py_PROTO((void)); |
|
1870
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1052 { |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1053 if (nexitfuncs >= NEXITFUNCS) |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1054 return -1; |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1055 exitfuncs[nexitfuncs++] = func; |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1056 return 0; |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1057 } |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1058 |
|
5939
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
1059 static void |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
1060 call_sys_exitfunc() |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1061 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1062 PyObject *exitfunc = PySys_GetObject("exitfunc"); |
|
1015
f3d5e2c3b9a3
Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents:
961
diff
changeset
|
1063 |
|
f3d5e2c3b9a3
Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents:
961
diff
changeset
|
1064 if (exitfunc) { |
|
7847
3c4f736d5e01
Make sure that the message "Error in sys.exitfunc:" goes to sys.stderr
Guido van Rossum <guido@python.org>
parents:
7509
diff
changeset
|
1065 PyObject *res, *f; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1066 Py_INCREF(exitfunc); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1067 PySys_SetObject("exitfunc", (PyObject *)NULL); |
|
7847
3c4f736d5e01
Make sure that the message "Error in sys.exitfunc:" goes to sys.stderr
Guido van Rossum <guido@python.org>
parents:
7509
diff
changeset
|
1068 f = PySys_GetObject("stderr"); |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1069 res = PyEval_CallObject(exitfunc, (PyObject *)NULL); |
|
1015
f3d5e2c3b9a3
Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents:
961
diff
changeset
|
1070 if (res == NULL) { |
|
7847
3c4f736d5e01
Make sure that the message "Error in sys.exitfunc:" goes to sys.stderr
Guido van Rossum <guido@python.org>
parents:
7509
diff
changeset
|
1071 if (f) |
|
3c4f736d5e01
Make sure that the message "Error in sys.exitfunc:" goes to sys.stderr
Guido van Rossum <guido@python.org>
parents:
7509
diff
changeset
|
1072 PyFile_WriteString("Error in sys.exitfunc:\n", f); |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1073 PyErr_Print(); |
|
1015
f3d5e2c3b9a3
Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents:
961
diff
changeset
|
1074 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1075 Py_DECREF(exitfunc); |
|
1015
f3d5e2c3b9a3
Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents:
961
diff
changeset
|
1076 } |
|
f3d5e2c3b9a3
Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents:
961
diff
changeset
|
1077 |
|
7509
b5d52c415b15
Fix the handling of errors in Py_FlushLine() in a few places.
Guido van Rossum <guido@python.org>
parents:
7206
diff
changeset
|
1078 if (Py_FlushLine()) |
|
b5d52c415b15
Fix the handling of errors in Py_FlushLine() in a few places.
Guido van Rossum <guido@python.org>
parents:
7206
diff
changeset
|
1079 PyErr_Clear(); |
|
5939
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
1080 } |
|
1870
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1081 |
|
5939
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
1082 static void |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
1083 call_ll_exitfuncs() |
|
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
1084 { |
|
1870
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1085 while (nexitfuncs > 0) |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
1086 (*exitfuncs[--nexitfuncs])(); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
1087 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
1088 fflush(stdout); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5850
diff
changeset
|
1089 fflush(stderr); |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
1090 } |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
1091 |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
1092 void |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1093 Py_Exit(sts) |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
1094 int sts; |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
1095 { |
|
5939
2c65bb6ab87c
Merge Py_Cleanup() into Py_Finalize(). Call the various small Fini()
Guido van Rossum <guido@python.org>
parents:
5926
diff
changeset
|
1096 Py_Finalize(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1097 |
|
3235
3df9ab03badf
Moved mac-specific exit handling to macmain.c
Jack Jansen <jack.jansen@cwi.nl>
parents:
3152
diff
changeset
|
1098 #ifdef macintosh |
|
3df9ab03badf
Moved mac-specific exit handling to macmain.c
Jack Jansen <jack.jansen@cwi.nl>
parents:
3152
diff
changeset
|
1099 PyMac_Exit(sts); |
|
3df9ab03badf
Moved mac-specific exit handling to macmain.c
Jack Jansen <jack.jansen@cwi.nl>
parents:
3152
diff
changeset
|
1100 #else |
|
3df9ab03badf
Moved mac-specific exit handling to macmain.c
Jack Jansen <jack.jansen@cwi.nl>
parents:
3152
diff
changeset
|
1101 exit(sts); |
|
2269
a8c6da3bd305
Think C mod to suppress pausing at normal exit
Guido van Rossum <guido@python.org>
parents:
2242
diff
changeset
|
1102 #endif |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1103 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1104 |
|
1319
cd397266dc1c
* Makefile: added all: and default: targets.
Guido van Rossum <guido@python.org>
parents:
1289
diff
changeset
|
1105 static void |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
1106 initsigs() |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
1107 { |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1108 #ifdef HAVE_SIGNAL_H |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1109 #ifdef SIGPIPE |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1110 signal(SIGPIPE, SIG_IGN); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1111 #endif |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1112 #endif /* HAVE_SIGNAL_H */ |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1113 PyOS_InitInterrupts(); /* May imply initsignal() */ |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
1114 } |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
1115 |
|
3575
e2b3a696d69c
Use new names for debug macros. Don't include pythonrun.h.
Guido van Rossum <guido@python.org>
parents:
3489
diff
changeset
|
1116 #ifdef Py_TRACE_REFS |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1117 /* Ask a yes/no question */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1118 |
|
1015
f3d5e2c3b9a3
Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents:
961
diff
changeset
|
1119 int |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
1120 _Py_AskYesNo(prompt) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1121 char *prompt; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1122 { |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1123 char buf[256]; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1124 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1125 printf("%s [ny] ", prompt); |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1126 if (fgets(buf, sizeof buf, stdin) == NULL) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1127 return 0; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1128 return buf[0] == 'y' || buf[0] == 'Y'; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1129 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1130 #endif |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1131 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
1132 #ifdef MPW |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1133 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1134 /* Check for file descriptor connected to interactive device. |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1135 Pretend that stdin is always interactive, other files never. */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1136 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1137 int |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1138 isatty(fd) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1139 int fd; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1140 { |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1141 return fd == fileno(stdin); |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1142 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1143 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1144 #endif |
|
5108
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1145 |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1146 /* |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1147 * 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
|
1148 * 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
|
1149 * 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
|
1150 * 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
|
1151 */ |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1152 int |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1153 Py_FdIsInteractive(fp, filename) |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1154 FILE *fp; |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1155 char *filename; |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1156 { |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1157 if (isatty((int)fileno(fp))) |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1158 return 1; |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1159 if (!Py_InteractiveFlag) |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1160 return 0; |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1161 return (filename == NULL) || |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1162 (strcmp(filename, "<stdin>") == 0) || |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1163 (strcmp(filename, "???") == 0); |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
1164 } |
