Mercurial > cpython-lru_cache-weakref
annotate Python/pythonrun.c @ 5758:bfe9ba74c19e legacy-trunk
Fix problem discovered by Greg McFarlane: when an imported module
replaces its own entry in sys.module, reference count errors ensue;
even if there is no reference count problem, it would be preferable
for the import to yield the new thing in sys.modules anyway (if only
because that's what later imports will yield). This opens the road to
an official hack to implement a __getattr__ like feature for modules:
stick an instance in sys.modules[__name__].
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Thu, 10 Jul 1997 18:00:45 +0000 |
| parents | 5ed3a21cc122 |
| children | 6f67a1bda15a |
| 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" |
|
3102
692715abbd0b
#undef argument, for the Mac
Guido van Rossum <guido@python.org>
parents:
2877
diff
changeset
|
39 #undef argument /* Avoid conflict on Mac */ |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 #include "errcode.h" |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 #include "compile.h" |
| 926 | 42 #include "eval.h" |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
43 #include "marshal.h" |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 |
| 4596 | 45 #ifdef HAVE_UNISTD_H |
| 46 #include <unistd.h> | |
| 47 #endif | |
| 48 | |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
49 #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
|
50 #include <signal.h> |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
51 #endif |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
52 |
|
4291
1427d61f1307
Rationalized MS ifdefs
Guido van Rossum <guido@python.org>
parents:
3609
diff
changeset
|
53 #ifdef MS_WIN32 |
|
2529
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
54 #undef BYTE |
|
3489
3b6ebf8d2a59
Add'l change for NT (Mark H.).
Guido van Rossum <guido@python.org>
parents:
3235
diff
changeset
|
55 #undef arglist |
|
2529
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
56 #include "windows.h" |
|
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
57 #endif |
|
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
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 char *Py_GetPath(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
61 extern grammar _PyParser_Grammar; /* From graminit.c */ |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
62 |
|
1391
7c3245c18677
* ceval.c, longobject.c, methodobject.c, listnode.c, arraymodule.c,
Guido van Rossum <guido@python.org>
parents:
1347
diff
changeset
|
63 /* 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
|
64 static void initmain Py_PROTO((void)); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
65 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
|
66 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
|
67 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
|
68 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
|
69 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
|
70 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
|
71 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
|
72 static void initsigs Py_PROTO((void)); |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
73 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
74 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
|
75 int Py_VerboseFlag; /* Needed by import.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_SuppressPrintingFlag; /* Needed by ceval.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 */ |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
78 |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
79 /* Initialize the current interpreter; pass in the Python path. */ |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
81 void |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
82 Py_Setup() |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
83 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
84 PyImport_Init(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
85 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
86 /* Modules '__builtin__' and 'sys' are initialized here, |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
87 they are needed by random bits of the interpreter. |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
88 All other modules are optional and are initialized |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
89 when they are first imported. */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
90 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
91 PyBuiltin_Init(); /* Also initializes builtin exceptions */ |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
92 PySys_Init(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
94 PySys_SetPath(Py_GetPath()); |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
95 |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
96 initsigs(); /* Signal handling stuff, including initintr() */ |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
97 |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
98 initmain(); |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
99 } |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
100 |
|
5405
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
101 /* Create and interpreter and thread state and initialize them; |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
102 if we already have an interpreter and thread, do nothing. |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
103 Fatal error if the creation fails. */ |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
104 |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
105 void |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
106 Py_Initialize() |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
107 { |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
108 PyThreadState *tstate; |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
109 PyInterpreterState *interp; |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
110 if (PyThreadState_Get()) |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
111 return; |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
112 interp = PyInterpreterState_New(); |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
113 if (interp == NULL) |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
114 Py_FatalError("PyInterpreterState_New() failed"); |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
115 tstate = PyThreadState_New(interp); |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
116 if (tstate == NULL) |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
117 Py_FatalError("PyThreadState_New() failed"); |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
118 (void) PyThreadState_Swap(tstate); |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
119 |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
120 Py_Setup(); |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
121 |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
122 PySys_SetPath(Py_GetPath()); |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
123 } |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
124 |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
125 /* |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
126 Py_Initialize() |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
127 -- do everything, no-op on second call, call fatal on failure, set path |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
128 |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
129 #2 |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
130 -- create new interp+tstate & make it current, return NULL on failure, |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
131 make it current, do all setup, set path |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
132 |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
133 #3 |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
134 -- #2 without set path |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
135 |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
136 #4 |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
137 -- is there any point to #3 for caller-provided current interp+tstate? |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
138 |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
139 */ |
|
b7871ca930ad
Massive changes for separate thread state management.
Guido van Rossum <guido@python.org>
parents:
5234
diff
changeset
|
140 |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
141 /* Create __main__ module */ |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
142 |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
143 static void |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
144 initmain() |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
145 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
146 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
|
147 m = PyImport_AddModule("__main__"); |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
148 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
|
149 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
|
150 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
|
151 if (PyDict_GetItemString(d, "__builtins__") == NULL) { |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
152 if (PyDict_SetItemString(d, "__builtins__", |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
153 PyEval_GetBuiltins())) |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
154 Py_FatalError("can't add __builtins__ to __main__"); |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
155 } |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
156 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
157 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
158 /* Parse input from a file and execute it */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
159 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
160 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
|
161 PyRun_AnyFile(fp, filename) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
162 FILE *fp; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
163 char *filename; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
164 { |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
165 if (filename == NULL) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
166 filename = "???"; |
|
5108
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
167 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
|
168 return PyRun_InteractiveLoop(fp, filename); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
169 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
|
170 return PyRun_SimpleFile(fp, filename); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
171 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
172 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
173 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
|
174 PyRun_InteractiveLoop(fp, filename) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
175 FILE *fp; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
176 char *filename; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
177 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
178 PyObject *v; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
179 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
|
180 v = PySys_GetObject("ps1"); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
181 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
|
182 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
|
183 Py_XDECREF(v); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
184 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
185 v = PySys_GetObject("ps2"); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
186 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
|
187 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
|
188 Py_XDECREF(v); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
189 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
190 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
|
191 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
|
192 #ifdef Py_REF_DEBUG |
|
2612
ca6b60d4ea90
fix dusty debugging macros
Guido van Rossum <guido@python.org>
parents:
2529
diff
changeset
|
193 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
194 #endif |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
195 if (ret == E_EOF) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
196 return 0; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
197 /* |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
198 if (ret == E_NOMEM) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
199 return -1; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
200 */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
201 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
202 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
203 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
204 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
|
205 PyRun_InteractiveOne(fp, filename) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
206 FILE *fp; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
207 char *filename; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
208 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
209 PyObject *m, *d, *v, *w; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
210 node *n; |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
211 perrdetail err; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
212 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
|
213 v = PySys_GetObject("ps1"); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
214 w = PySys_GetObject("ps2"); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
215 if (v != NULL && PyString_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
|
216 Py_INCREF(v); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
217 ps1 = PyString_AsString(v); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
218 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
219 else { |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
220 v = NULL; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
221 ps1 = ""; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
222 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
223 if (w != NULL && PyString_Check(w)) { |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
224 Py_INCREF(w); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
225 ps2 = PyString_AsString(w); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
226 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
227 else { |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
228 w = NULL; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
229 ps2 = ""; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
230 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
231 Py_BEGIN_ALLOW_THREADS |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
232 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
|
233 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
|
234 Py_END_ALLOW_THREADS |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
235 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
|
236 Py_XDECREF(w); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
237 if (n == NULL) { |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
238 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
|
239 if (err.text) |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
240 free(err.text); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
241 return E_EOF; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
242 } |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
243 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
|
244 PyErr_Print(); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
245 return err.error; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
246 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
247 m = PyImport_AddModule("__main__"); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
248 if (m == NULL) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
249 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
|
250 d = PyModule_GetDict(m); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
251 v = run_node(n, filename, d, d); |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
252 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
|
253 PyErr_Print(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
254 return -1; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
255 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
256 Py_DECREF(v); |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
257 if (Py_FlushLine()) |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
258 PyErr_Clear(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
259 return 0; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
260 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
261 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
262 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
|
263 PyRun_SimpleFile(fp, filename) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
264 FILE *fp; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
265 char *filename; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
266 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
267 PyObject *m, *d, *v; |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
268 char *ext; |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
269 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
270 m = PyImport_AddModule("__main__"); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
271 if (m == NULL) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
272 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
|
273 d = PyModule_GetDict(m); |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
274 ext = filename + strlen(filename) - 4; |
|
5234
07ed52e200db
Allow passing a .pyo file.
Guido van Rossum <guido@python.org>
parents:
5170
diff
changeset
|
275 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0 |
| 2318 | 276 #ifdef macintosh |
| 277 /* 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
|
278 || getfiletype(filename) == 'PYC ' |
|
07ed52e200db
Allow passing a .pyo file.
Guido van Rossum <guido@python.org>
parents:
5170
diff
changeset
|
279 || getfiletype(filename) == 'APPL' |
| 2318 | 280 #endif /* macintosh */ |
|
5234
07ed52e200db
Allow passing a .pyo file.
Guido van Rossum <guido@python.org>
parents:
5170
diff
changeset
|
281 ) { |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
282 /* 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
|
283 /* 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
|
284 if( (fp = fopen(filename, "rb")) == NULL ) { |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
285 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
|
286 return -1; |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
287 } |
|
5234
07ed52e200db
Allow passing a .pyo file.
Guido van Rossum <guido@python.org>
parents:
5170
diff
changeset
|
288 /* 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
|
289 if (strcmp(ext, ".pyo") == 0) |
|
07ed52e200db
Allow passing a .pyo file.
Guido van Rossum <guido@python.org>
parents:
5170
diff
changeset
|
290 Py_OptimizeFlag = 1; |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
291 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
|
292 } 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
|
293 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
|
294 } |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
295 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
|
296 PyErr_Print(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
297 return -1; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
298 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
299 Py_DECREF(v); |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
300 if (Py_FlushLine()) |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
301 PyErr_Clear(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
302 return 0; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
303 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
304 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
305 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
|
306 PyRun_SimpleString(command) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
307 char *command; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
308 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
309 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
|
310 m = PyImport_AddModule("__main__"); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
311 if (m == NULL) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
312 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
|
313 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
|
314 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
|
315 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
|
316 PyErr_Print(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
317 return -1; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
318 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
319 Py_DECREF(v); |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
320 if (Py_FlushLine()) |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
321 PyErr_Clear(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
322 return 0; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
323 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
324 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
325 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
|
326 PyErr_Print() |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
327 { |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
328 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
|
329 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
|
330 PyErr_Fetch(&exception, &v, &tb); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2022
diff
changeset
|
331 if (exception == NULL) |
|
5611
5ed3a21cc122
Can't return 0 from void function...
Guido van Rossum <guido@python.org>
parents:
5607
diff
changeset
|
332 return; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
333 if (exception == PyExc_SystemExit) { |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
334 err = Py_FlushLine(); |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
335 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
|
336 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
|
337 Py_Exit(0); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
338 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
|
339 Py_Exit((int)PyInt_AsLong(v)); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
340 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
|
341 /* 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
|
342 PyObject_Print(v, stderr, Py_PRINT_RAW); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
343 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
|
344 Py_Exit(1); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
345 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
346 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
347 PySys_SetObject("last_type", exception); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
348 PySys_SetObject("last_value", v); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
349 PySys_SetObject("last_traceback", tb); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
350 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
|
351 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
|
352 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
|
353 else { |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
354 err = Py_FlushLine(); |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
355 fflush(stdout); |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
356 if (err == 0) |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
357 err = PyTraceBack_Print(tb, f); |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
358 if (err == 0 && exception == PyExc_SyntaxError) { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
359 PyObject *message; |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
360 char *filename, *text; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
361 int lineno, offset; |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
362 if (!PyArg_Parse(v, "(O(ziiz))", &message, |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
363 &filename, &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
|
364 PyErr_Clear(); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
365 else { |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
366 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
|
367 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
|
368 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
|
369 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
|
370 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
|
371 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
|
372 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
|
373 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
|
374 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
|
375 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
|
376 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
|
377 char *nl; |
|
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
378 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
|
379 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
|
380 offset--; |
|
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
381 for (;;) { |
|
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
382 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
|
383 if (nl == NULL || |
|
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
384 nl-text >= offset) |
|
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
385 break; |
|
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
386 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
|
387 text = nl+1; |
|
20f17b5accbf
* Python/pythonrun.c (print_error): print only last line of
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
388 } |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
389 while (*text == ' ' || *text == '\t') { |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
390 text++; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
391 offset--; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
392 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
393 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
|
394 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
|
395 if (*text == '\0' || |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
396 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
|
397 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
|
398 PyFile_WriteString(" ", f); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
399 offset--; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
400 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
|
401 PyFile_WriteString(" ", f); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
402 offset--; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
403 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
404 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
|
405 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
406 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
|
407 Py_DECREF(v); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
408 v = message; |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
409 /* 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
|
410 PyFile_WriteString() calls */ |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
411 if (PyErr_Occurred()) |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
412 err = -1; |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
413 } |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
414 } |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
415 if (err) { |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
416 /* 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
|
417 } |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
418 else if (PyClass_Check(exception)) { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
419 PyObject* className = |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
420 ((PyClassObject*)exception)->cl_name; |
|
2293
a24146241991
print class name for exceptions that are classes
Guido van Rossum <guido@python.org>
parents:
2279
diff
changeset
|
421 if (className == NULL) |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
422 err = PyFile_WriteString("<unknown>", f); |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
423 else |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
424 err = PyFile_WriteObject(className, f, |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
425 Py_PRINT_RAW); |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
426 } |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
427 else |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
428 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
|
429 if (err == 0) { |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
430 if (v != NULL && v != Py_None) { |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
431 err = PyFile_WriteString(": ", f); |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
432 if (err == 0) |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
433 err = PyFile_WriteObject(v, f, Py_PRINT_RAW); |
|
2293
a24146241991
print class name for exceptions that are classes
Guido van Rossum <guido@python.org>
parents:
2279
diff
changeset
|
434 } |
|
a24146241991
print class name for exceptions that are classes
Guido van Rossum <guido@python.org>
parents:
2279
diff
changeset
|
435 } |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
436 if (err == 0) |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
437 err = PyFile_WriteString("\n", f); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
438 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
439 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
|
440 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
|
441 Py_XDECREF(tb); |
|
5607
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
442 /* 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
|
443 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
|
444 if (err != 0) |
|
cbb4e3cf086e
Py_FlushLine and PyFile_WriteString now return error indicators
Guido van Rossum <guido@python.org>
parents:
5593
diff
changeset
|
445 PyErr_Clear(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
446 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
447 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
448 PyObject * |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
449 PyRun_String(str, start, globals, locals) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
450 char *str; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
451 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
|
452 PyObject *globals, *locals; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
453 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
454 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
|
455 "<string>", globals, locals); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
456 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
457 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
458 PyObject * |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
459 PyRun_File(fp, filename, start, globals, locals) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
460 FILE *fp; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
461 char *filename; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
462 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
|
463 PyObject *globals, *locals; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
464 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
465 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
|
466 filename, globals, locals); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
467 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
468 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
469 static PyObject * |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
470 run_err_node(n, filename, globals, locals) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
471 node *n; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
472 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
|
473 PyObject *globals, *locals; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
474 { |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
475 if (n == NULL) |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
476 return NULL; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
477 return run_node(n, filename, globals, locals); |
|
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 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
480 static PyObject * |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
481 run_node(n, filename, globals, locals) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
482 node *n; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
483 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
|
484 PyObject *globals, *locals; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
485 { |
|
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 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
|
487 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
|
488 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
|
489 PyNode_Free(n); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
490 if (co == NULL) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
491 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
|
492 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
|
493 Py_DECREF(co); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
494 return v; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
495 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
496 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
497 static PyObject * |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
498 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
|
499 FILE *fp; |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
500 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
|
501 PyObject *globals, *locals; |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
502 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
503 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
|
504 PyObject *v; |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
505 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
|
506 long PyImport_GetMagicNumber(); |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
507 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
508 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
|
509 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
|
510 PyErr_SetString(PyExc_RuntimeError, |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
511 "Bad magic number in .pyc file"); |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
512 return NULL; |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
513 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
514 (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
|
515 v = PyMarshal_ReadObjectFromFile(fp); |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
516 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
|
517 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
|
518 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
|
519 PyErr_SetString(PyExc_RuntimeError, |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
520 "Bad code object in .pyc file"); |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
521 return NULL; |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
522 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
523 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
|
524 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
|
525 Py_DECREF(co); |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
526 return v; |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
527 } |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1870
diff
changeset
|
528 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
529 PyObject * |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
530 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
|
531 char *str; |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
532 char *filename; |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
533 int start; |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
534 { |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
535 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
|
536 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
|
537 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
|
538 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
|
539 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
|
540 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
|
541 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
|
542 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
|
543 } |
|
65a1e4e9cd54
* Fixed some subtleties with fastlocals. You can no longer access
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
544 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
545 /* 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
|
546 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
547 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
|
548 PyParser_SimpleParseFile(fp, filename, start) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
549 FILE *fp; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
550 char *filename; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
551 int start; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
552 { |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
553 node *n; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
554 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
|
555 Py_BEGIN_ALLOW_THREADS |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
556 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
|
557 (char *)0, (char *)0, &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
|
558 Py_END_ALLOW_THREADS |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
559 if (n == NULL) |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
560 err_input(&err); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
561 return n; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
562 } |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
563 |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
564 /* 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
|
565 |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
566 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
|
567 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
|
568 char *str; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
569 int start; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
570 { |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
571 node *n; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
572 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
|
573 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
|
574 if (n == NULL) |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
575 err_input(&err); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
576 return n; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
577 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
578 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
579 /* 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
|
580 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
581 static void |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
582 err_input(err) |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
583 perrdetail *err; |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
584 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
585 PyObject *v, *w; |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
586 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
|
587 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
|
588 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
|
589 if (err->text != NULL) { |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
590 free(err->text); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
591 err->text = NULL; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
592 } |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
593 switch (err->error) { |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
594 case E_SYNTAX: |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
595 msg = "invalid syntax"; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
596 break; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
597 case E_TOKEN: |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
598 msg = "invalid token"; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
599 |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
600 break; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
601 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
|
602 PyErr_SetNone(PyExc_KeyboardInterrupt); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
603 return; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
604 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
|
605 PyErr_NoMemory(); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
606 return; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
607 case E_EOF: |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
608 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
|
609 break; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
610 default: |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
611 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
|
612 msg = "unknown parsing error"; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
613 break; |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
614 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
615 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
|
616 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
|
617 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
|
618 Py_XDECREF(w); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
619 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
620 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
621 /* Print fatal error message and abort */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
622 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
623 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
|
624 Py_FatalError(msg) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
625 char *msg; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
626 { |
|
1911
a7f269610ec2
* Python/pythonrun.c: add string "Python" to fatal error message
Guido van Rossum <guido@python.org>
parents:
1898
diff
changeset
|
627 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
|
628 #ifdef macintosh |
|
d3b5be0c872f
make call_pyc_file static
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
629 for (;;); |
|
d3b5be0c872f
make call_pyc_file static
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
630 #endif |
|
4291
1427d61f1307
Rationalized MS ifdefs
Guido van Rossum <guido@python.org>
parents:
3609
diff
changeset
|
631 #ifdef MS_WIN32 |
|
5593
451c7ccf36b6
Added a space in an error message
Guido van Rossum <guido@python.org>
parents:
5438
diff
changeset
|
632 OutputDebugString("Fatal Python error: "); |
|
2529
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
633 OutputDebugString(msg); |
|
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
634 OutputDebugString("\n"); |
|
16ea57c38c4f
In NT, write fatal() msg to debugging device
Guido van Rossum <guido@python.org>
parents:
2318
diff
changeset
|
635 #endif |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
636 abort(); |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
637 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
638 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
639 /* Clean up and exit */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
640 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
641 #ifdef WITH_THREAD |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
642 #include "thread.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
|
643 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
|
644 #endif |
|
a31e07847063
New thread.c from Sjoerd, supports _exit_prog(). Use this in goaway()
Guido van Rossum <guido@python.org>
parents:
941
diff
changeset
|
645 |
|
1870
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
646 #define NEXITFUNCS 32 |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
647 static void (*exitfuncs[NEXITFUNCS])(); |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
648 static int nexitfuncs = 0; |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
649 |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
650 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
|
651 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
|
652 { |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
653 if (nexitfuncs >= NEXITFUNCS) |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
654 return -1; |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
655 exitfuncs[nexitfuncs++] = func; |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
656 return 0; |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
657 } |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
658 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
659 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
|
660 Py_Cleanup() |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
661 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
662 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
|
663 |
|
f3d5e2c3b9a3
Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents:
961
diff
changeset
|
664 if (exitfunc) { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
665 PyObject *res; |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
666 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
|
667 PySys_SetObject("exitfunc", (PyObject *)NULL); |
|
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
668 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
|
669 if (res == NULL) { |
|
f3d5e2c3b9a3
Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents:
961
diff
changeset
|
670 fprintf(stderr, "Error in sys.exitfunc:\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
|
671 PyErr_Print(); |
|
1015
f3d5e2c3b9a3
Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents:
961
diff
changeset
|
672 } |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
673 Py_DECREF(exitfunc); |
|
1015
f3d5e2c3b9a3
Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents:
961
diff
changeset
|
674 } |
|
f3d5e2c3b9a3
Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents:
961
diff
changeset
|
675 |
|
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 Py_FlushLine(); |
|
1870
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
677 |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
678 while (nexitfuncs > 0) |
|
61738ed6cc10
added Py_AtExit() -- register cleanup functions for C modules
Guido van Rossum <guido@python.org>
parents:
1839
diff
changeset
|
679 (*exitfuncs[--nexitfuncs])(); |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
680 } |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
681 |
|
1347
a22a350d3a5d
* Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents:
1319
diff
changeset
|
682 #ifdef COUNT_ALLOCS |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
683 extern void dump_counts Py_PROTO((void)); |
|
1347
a22a350d3a5d
* Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents:
1319
diff
changeset
|
684 #endif |
|
a22a350d3a5d
* Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents:
1319
diff
changeset
|
685 |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
686 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
|
687 Py_Exit(sts) |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
688 int sts; |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
689 { |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
690 Py_Cleanup(); |
| 926 | 691 |
|
1347
a22a350d3a5d
* Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents:
1319
diff
changeset
|
692 #ifdef COUNT_ALLOCS |
|
a22a350d3a5d
* Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents:
1319
diff
changeset
|
693 dump_counts(); |
|
a22a350d3a5d
* Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents:
1319
diff
changeset
|
694 #endif |
|
a22a350d3a5d
* Extended X interface: pixmap objects, colormap objects visual objects,
Sjoerd Mullender <sjoerd@acm.org>
parents:
1319
diff
changeset
|
695 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
696 #ifdef WITH_THREAD |
| 926 | 697 |
| 698 /* Other threads may still be active, so skip most of the | |
| 699 cleanup actions usually done (these are mostly for | |
| 700 debugging anyway). */ | |
| 701 | |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
702 (void) PyEval_SaveThread(); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
703 #ifndef NO_EXIT_PROG |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
704 if (_PyThread_Started) |
|
961
a31e07847063
New thread.c from Sjoerd, supports _exit_prog(). Use this in goaway()
Guido van Rossum <guido@python.org>
parents:
941
diff
changeset
|
705 _exit_prog(sts); |
|
a31e07847063
New thread.c from Sjoerd, supports _exit_prog(). Use this in goaway()
Guido van Rossum <guido@python.org>
parents:
941
diff
changeset
|
706 else |
|
a31e07847063
New thread.c from Sjoerd, supports _exit_prog(). Use this in goaway()
Guido van Rossum <guido@python.org>
parents:
941
diff
changeset
|
707 exit_prog(sts); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
708 #else /* !NO_EXIT_PROG */ |
|
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 if (_PyThread_Started) |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
710 _exit(sts); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
711 else |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
712 exit(sts); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
713 #endif /* !NO_EXIT_PROG */ |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
714 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
715 #else /* WITH_THREAD */ |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
716 |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
717 PyImport_Cleanup(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
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 PyErr_Clear(); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
720 |
|
3575
e2b3a696d69c
Use new names for debug macros. Don't include pythonrun.h.
Guido van Rossum <guido@python.org>
parents:
3489
diff
changeset
|
721 #ifdef Py_REF_DEBUG |
|
2612
ca6b60d4ea90
fix dusty debugging macros
Guido van Rossum <guido@python.org>
parents:
2529
diff
changeset
|
722 fprintf(stderr, "[%ld refs]\n", _Py_RefTotal); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
723 #endif |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
724 |
|
3575
e2b3a696d69c
Use new names for debug macros. Don't include pythonrun.h.
Guido van Rossum <guido@python.org>
parents:
3489
diff
changeset
|
725 #ifdef Py_TRACE_REFS |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
726 if (_Py_AskYesNo("Print left references?")) { |
|
3609
0b0c4ed1936a
rename printrefs, getobjects to _Py_ prefix
Guido van Rossum <guido@python.org>
parents:
3575
diff
changeset
|
727 _Py_PrintReferences(stderr); |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
728 } |
|
3575
e2b3a696d69c
Use new names for debug macros. Don't include pythonrun.h.
Guido van Rossum <guido@python.org>
parents:
3489
diff
changeset
|
729 #endif /* Py_TRACE_REFS */ |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
730 |
|
3235
3df9ab03badf
Moved mac-specific exit handling to macmain.c
Jack Jansen <jack.jansen@cwi.nl>
parents:
3152
diff
changeset
|
731 #ifdef macintosh |
|
3df9ab03badf
Moved mac-specific exit handling to macmain.c
Jack Jansen <jack.jansen@cwi.nl>
parents:
3152
diff
changeset
|
732 PyMac_Exit(sts); |
|
3df9ab03badf
Moved mac-specific exit handling to macmain.c
Jack Jansen <jack.jansen@cwi.nl>
parents:
3152
diff
changeset
|
733 #else |
|
3df9ab03badf
Moved mac-specific exit handling to macmain.c
Jack Jansen <jack.jansen@cwi.nl>
parents:
3152
diff
changeset
|
734 exit(sts); |
|
2269
a8c6da3bd305
Think C mod to suppress pausing at normal exit
Guido van Rossum <guido@python.org>
parents:
2242
diff
changeset
|
735 #endif |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
736 #endif /* WITH_THREAD */ |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
737 /*NOTREACHED*/ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
738 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
739 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
740 #ifdef HAVE_SIGNAL_H |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
741 static RETSIGTYPE |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
742 sighandler(sig) |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
743 int sig; |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
744 { |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
745 signal(sig, SIG_DFL); /* Don't catch recursive signals */ |
|
5170
f5d707ce4223
Greatly renamed. Not a very thorough job -- I'm going to restructure
Guido van Rossum <guido@python.org>
parents:
5108
diff
changeset
|
746 Py_Cleanup(); /* Do essential clean-up */ |
|
5415
596380a567d2
Keep MS compiler happy: use (int)strlen() when comparing; make sure
Guido van Rossum <guido@python.org>
parents:
5405
diff
changeset
|
747 #ifdef HAVE_KILL |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
748 kill(getpid(), sig); /* Pretend the signal killed us */ |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
749 #else |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
750 exit(1); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
751 #endif |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
752 /*NOTREACHED*/ |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
753 } |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
754 #endif |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
755 |
|
1319
cd397266dc1c
* Makefile: added all: and default: targets.
Guido van Rossum <guido@python.org>
parents:
1289
diff
changeset
|
756 static void |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
757 initsigs() |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
758 { |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
759 RETSIGTYPE (*t)(); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
760 #ifdef HAVE_SIGNAL_H |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
761 #ifdef SIGPIPE |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
762 signal(SIGPIPE, SIG_IGN); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
763 #endif |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
764 #ifdef SIGHUP |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
765 t = signal(SIGHUP, SIG_IGN); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
766 if (t == SIG_DFL) |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
767 signal(SIGHUP, sighandler); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
768 else |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
769 signal(SIGHUP, t); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
770 #endif |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
771 #ifdef SIGTERM |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
772 t = signal(SIGTERM, SIG_IGN); |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
773 if (t == SIG_DFL) |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
774 signal(SIGTERM, sighandler); |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
775 else |
|
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
776 signal(SIGTERM, t); |
|
1079
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
777 #endif |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
778 #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
|
779 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
|
780 } |
|
e4c6a0dd5c2b
* bltinmodule.c: added built-in function cmp(a, b)
Guido van Rossum <guido@python.org>
parents:
1073
diff
changeset
|
781 |
|
3575
e2b3a696d69c
Use new names for debug macros. Don't include pythonrun.h.
Guido van Rossum <guido@python.org>
parents:
3489
diff
changeset
|
782 #ifdef Py_TRACE_REFS |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
783 /* Ask a yes/no question */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
784 |
|
1015
f3d5e2c3b9a3
Add sys.exitfunc feature. Make askync non-static.
Guido van Rossum <guido@python.org>
parents:
961
diff
changeset
|
785 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
|
786 _Py_AskYesNo(prompt) |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
787 char *prompt; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
788 { |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
789 char buf[256]; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
790 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
791 printf("%s [ny] ", prompt); |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
792 if (fgets(buf, sizeof buf, stdin) == NULL) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
793 return 0; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
794 return buf[0] == 'y' || buf[0] == 'Y'; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
795 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
796 #endif |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
797 |
|
1839
1f4a86dbcd79
* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
Guido van Rossum <guido@python.org>
parents:
1413
diff
changeset
|
798 #ifdef MPW |
|
923
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
799 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
800 /* Check for file descriptor connected to interactive device. |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
801 Pretend that stdin is always interactive, other files never. */ |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
802 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
803 int |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
804 isatty(fd) |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
805 int fd; |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
806 { |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
807 return fd == fileno(stdin); |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
808 } |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
809 |
|
72aceed365d4
* Makefile adapted to changes below.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
810 #endif |
|
5108
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
811 |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
812 /* |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
813 * 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
|
814 * 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
|
815 * 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
|
816 * 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
|
817 */ |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
818 int |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
819 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
|
820 FILE *fp; |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
821 char *filename; |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
822 { |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
823 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
|
824 return 1; |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
825 if (!Py_InteractiveFlag) |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
826 return 0; |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
827 return (filename == NULL) || |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
828 (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
|
829 (strcmp(filename, "???") == 0); |
|
a9a6d416b945
Added new global flag variable Py_InteractiveFlag and new function
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
830 } |
