annotate Python/pythonmain.c @ 145:853b736a6a9e legacy-trunk

Added copyright notice.
author Guido van Rossum <guido@python.org>
date Tue, 19 Feb 1991 12:39:46 +0000
parents dac8625c8d9b
children 43cabac5023d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
1 /***********************************************************
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
2 Copyright 1991 by Stichting Mathematisch Centrum, Amsterdam, The
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
3 Netherlands.
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
4
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
5 All Rights Reserved
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
6
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
7 Permission to use, copy, modify, and distribute this software and its
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
8 documentation for any purpose and without fee is hereby granted,
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
9 provided that the above copyright notice appear in all copies and that
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
10 both that copyright notice and this permission notice appear in
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
11 supporting documentation, and that the names of Stichting Mathematisch
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
12 Centrum or CWI not be used in advertising or publicity pertaining to
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
13 distribution of the software without specific, written prior permission.
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
14
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
15 STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
16 THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
17 FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
18 FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
21 OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
22
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
23 ******************************************************************/
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 94
diff changeset
24
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 /* Python interpreter main program */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
27 #include "allobjects.h"
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 #include "grammar.h"
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 #include "node.h"
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 #include "parsetok.h"
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 #include "graminit.h"
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 #include "errcode.h"
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 #include "sysmodule.h"
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
35 #include "compile.h"
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
36 #include "ceval.h"
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
37 #include "pythonrun.h"
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
38 #include "import.h"
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
39
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
40 extern char *getpythonpath();
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 extern grammar gram; /* From graminit.c */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
44 #ifdef DEBUG
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
45 int debugging; /* Needed by parser.c */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
46 #endif
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 main(argc, argv)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 int argc;
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 char **argv;
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 {
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 char *filename = NULL;
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 FILE *fp = stdin;
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
54
70
a36c348a8e1a Moved configuration-dependent initializations (etc.) to config_*.c
Guido van Rossum <guido@python.org>
parents: 16
diff changeset
55 initargs(&argc, &argv);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 if (argc > 1 && strcmp(argv[1], "-") != 0)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 filename = argv[1];
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
59
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 if (filename != NULL) {
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 if ((fp = fopen(filename, "r")) == NULL) {
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 fprintf(stderr, "python: can't open file '%s'\n",
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 filename);
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 exit(2);
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
68 initall();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
69
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
70 setpythonpath(getpythonpath());
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
71 setpythonargv(argc-1, argv+1);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
72
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
73 goaway(run(fp, filename == NULL ? "<stdin>" : filename));
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
74 /*NOTREACHED*/
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
75 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
76
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
77 /* Initialize all */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
78
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
79 void
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
80 initall()
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
81 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
82 static int inited;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
83
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
84 if (inited)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
85 return;
94
dac8625c8d9b Changes for THINK C 4.0.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
86 inited = 1;
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
87
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
88 initimport();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
89
94
dac8625c8d9b Changes for THINK C 4.0.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
90 /* Modules 'builtin' and 'sys' are initialized here,
dac8625c8d9b Changes for THINK C 4.0.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
91 they are needed by random bits of the interpreter.
dac8625c8d9b Changes for THINK C 4.0.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
92 All other modules are optional and should be initialized
dac8625c8d9b Changes for THINK C 4.0.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
93 by the initcalls() of a specific configuration. */
dac8625c8d9b Changes for THINK C 4.0.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
94
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
95 initbuiltin(); /* Also initializes builtin exceptions */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
96 initsys();
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
97
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
98 initcalls(); /* Configuration-dependent initializations */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
99
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
100 initintr(); /* For intrcheck() */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
101 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
102
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
103 /* Parse input from a file and execute it */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
104
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
105 int
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
106 run(fp, filename)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
107 FILE *fp;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
108 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
109 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
110 if (filename == NULL)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
111 filename = "???";
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
112 if (isatty(fileno(fp)))
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
113 return run_tty_loop(fp, filename);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
114 else
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
115 return run_script(fp, filename);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
116 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
117
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
118 int
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
119 run_tty_loop(fp, filename)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
120 FILE *fp;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
121 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
122 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
123 object *v;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
124 int ret;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
125 v = sysget("ps1");
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
126 if (v == NULL) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
127 sysset("ps1", v = newstringobject(">>> "));
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
128 XDECREF(v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
129 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
130 v = sysget("ps2");
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
131 if (v == NULL) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
132 sysset("ps2", v = newstringobject("... "));
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
133 XDECREF(v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
134 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
135 for (;;) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
136 ret = run_tty_1(fp, filename);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
137 #ifdef REF_DEBUG
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
138 fprintf(stderr, "[%ld refs]\n", ref_total);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
139 #endif
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
140 if (ret == E_EOF)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
141 return 0;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
142 /*
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
143 if (ret == E_NOMEM)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
144 return -1;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
145 */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
146 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
147 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
148
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
149 int
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
150 run_tty_1(fp, filename)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
151 FILE *fp;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
152 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
153 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
154 object *m, *d, *v, *w;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
155 node *n;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
156 char *ps1, *ps2;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
157 int err;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
158 v = sysget("ps1");
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
159 w = sysget("ps2");
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
160 if (v != NULL && is_stringobject(v)) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
161 INCREF(v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
162 ps1 = getstringvalue(v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
163 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
164 else {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
165 v = NULL;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
166 ps1 = "";
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
167 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
168 if (w != NULL && is_stringobject(w)) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
169 INCREF(w);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
170 ps2 = getstringvalue(w);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
171 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
172 else {
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
173 w = NULL;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
174 ps2 = "";
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
175 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
176 err = parsefile(fp, filename, &gram, single_input, ps1, ps2, &n);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
177 XDECREF(v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
178 XDECREF(w);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
179 if (err == E_EOF)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
180 return E_EOF;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
181 if (err != E_DONE) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
182 err_input(err);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
183 print_error();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
184 return err;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
185 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
186 m = add_module("__main__");
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
187 if (m == NULL)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
188 return -1;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
189 d = getmoduledict(m);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
190 v = run_node(n, filename, d, d);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
191 flushline();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
192 if (v == NULL) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
193 print_error();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
194 return -1;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
195 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
196 DECREF(v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
197 return 0;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
198 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
199
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
200 int
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
201 run_script(fp, filename)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
202 FILE *fp;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
203 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
204 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
205 object *m, *d, *v;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
206 m = add_module("__main__");
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
207 if (m == NULL)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
208 return -1;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
209 d = getmoduledict(m);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
210 v = run_file(fp, filename, file_input, d, d);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
211 flushline();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
212 if (v == NULL) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
213 print_error();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
214 return -1;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
215 }
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
216 DECREF(v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
217 return 0;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
218 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
219
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
220 void
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
221 print_error()
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
222 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
223 object *exception, *v;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
224 err_get(&exception, &v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
225 fprintf(stderr, "Unhandled exception: ");
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
226 printobject(exception, stderr, PRINT_RAW);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
227 if (v != NULL && v != None) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
228 fprintf(stderr, ": ");
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
229 printobject(v, stderr, PRINT_RAW);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
230 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
231 fprintf(stderr, "\n");
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
232 XDECREF(exception);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
233 XDECREF(v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
234 printtraceback(stderr);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
235 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
236
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
237 object *
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
238 run_string(str, start, globals, locals)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
239 char *str;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
240 int start;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
241 /*dict*/object *globals, *locals;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
242 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
243 node *n;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
244 int err;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
245 err = parse_string(str, start, &n);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
246 return run_err_node(err, n, "<string>", globals, locals);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
247 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
248
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
249 object *
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
250 run_file(fp, filename, start, globals, locals)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
251 FILE *fp;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
252 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
253 int start;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
254 /*dict*/object *globals, *locals;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
255 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
256 node *n;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
257 int err;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
258 err = parse_file(fp, filename, start, &n);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
259 return run_err_node(err, n, filename, globals, locals);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
260 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
261
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
262 object *
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
263 run_err_node(err, n, filename, globals, locals)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
264 int err;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
265 node *n;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
266 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
267 /*dict*/object *globals, *locals;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
268 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
269 if (err != E_DONE) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
270 err_input(err);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
271 return NULL;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
272 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
273 return run_node(n, filename, globals, locals);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
274 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
275
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
276 object *
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
277 run_node(n, filename, globals, locals)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
278 node *n;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
279 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
280 /*dict*/object *globals, *locals;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
281 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
282 if (globals == NULL) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
283 globals = getglobals();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
284 if (locals == NULL)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
285 locals = getlocals();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
286 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
287 else {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
288 if (locals == NULL)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
289 locals = globals;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
290 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
291 return eval_node(n, filename, globals, locals);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
292 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
293
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
294 object *
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
295 eval_node(n, filename, globals, locals)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
296 node *n;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
297 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
298 object *globals;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
299 object *locals;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
300 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
301 codeobject *co;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
302 object *v;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
303 co = compile(n, filename);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
304 freetree(n);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
305 if (co == NULL)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
306 return NULL;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
307 v = eval_code(co, globals, locals, (object *)NULL);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
308 DECREF(co);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
309 return v;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
310 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
311
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
312 /* Simplified interface to parsefile */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
313
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
314 int
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
315 parse_file(fp, filename, start, n_ret)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
316 FILE *fp;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
317 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
318 int start;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
319 node **n_ret;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
320 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
321 return parsefile(fp, filename, &gram, start,
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
322 (char *)0, (char *)0, n_ret);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
323 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
324
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
325 /* Simplified interface to parsestring */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
326
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
327 int
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
328 parse_string(str, start, n_ret)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
329 char *str;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
330 int start;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
331 node **n_ret;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
332 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
333 int err = parsestring(str, &gram, start, n_ret);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
334 /* Don't confuse early end of string with early end of input */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
335 if (err == E_EOF)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
336 err = E_SYNTAX;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
337 return err;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
338 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
339
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
340 /* Print fatal error message and abort */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
341
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
342 void
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
343 fatal(msg)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
344 char *msg;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
345 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
346 fprintf(stderr, "Fatal error: %s\n", msg);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
347 abort();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
348 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
349
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
350 /* Clean up and exit */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
351
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
352 void
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
353 goaway(sts)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
354 int sts;
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
355 {
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
356 flushline();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
357
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
358 /* XXX Call doneimport() before donecalls(), since donecalls()
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
359 calls wdone(), and doneimport() may close windows */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
360 doneimport();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
361 donecalls();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
362
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
363 err_clear();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
364
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
365 #ifdef REF_DEBUG
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
366 fprintf(stderr, "[%ld refs]\n", ref_total);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
367 #endif
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
368
94
dac8625c8d9b Changes for THINK C 4.0.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
369 #ifdef THINK_C_3_0
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
370 if (sts == 0)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
371 Click_On(0);
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
372 #endif
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
373
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
374 #ifdef TRACE_REFS
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
375 if (askyesno("Print left references?")) {
94
dac8625c8d9b Changes for THINK C 4.0.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
376 #ifdef THINK_C_3_0
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
377 Click_On(1);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
378 #endif
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
379 printrefs(stderr);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
380 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
381 #endif /* TRACE_REFS */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
382
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
383 exit(sts);
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
384 /*NOTREACHED*/
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
385 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
386
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
387 static
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
388 finaloutput()
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
389 {
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
390 #ifdef TRACE_REFS
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
391 if (!askyesno("Print left references?"))
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
392 return;
94
dac8625c8d9b Changes for THINK C 4.0.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
393 #ifdef THINK_C_3_0
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
394 Click_On(1);
94
dac8625c8d9b Changes for THINK C 4.0.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
395 #endif
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
396 printrefs(stderr);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
397 #endif /* TRACE_REFS */
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
398 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
399
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
400 /* Ask a yes/no question */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
401
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
402 static int
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
403 askyesno(prompt)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
404 char *prompt;
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
405 {
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
406 char buf[256];
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
407
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
408 printf("%s [ny] ", prompt);
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
409 if (fgets(buf, sizeof buf, stdin) == NULL)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
410 return 0;
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
411 return buf[0] == 'y' || buf[0] == 'Y';
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
412 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
413
94
dac8625c8d9b Changes for THINK C 4.0.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
414 #ifdef THINK_C_3_0
70
a36c348a8e1a Moved configuration-dependent initializations (etc.) to config_*.c
Guido van Rossum <guido@python.org>
parents: 16
diff changeset
415
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
416 /* Check for file descriptor connected to interactive device.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
417 Pretend that stdin is always interactive, other files never. */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
418
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
419 int
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
420 isatty(fd)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
421 int fd;
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
422 {
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
423 return fd == fileno(stdin);
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
424 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
425
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
426 #endif
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
427
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
428 /* XXX WISH LIST
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
429
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
430 - possible new types:
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
431 - iterator (for range, keys, ...)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
432 - improve interpreter error handling, e.g., true tracebacks
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
433 - save precompiled modules on file?
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
434 - fork threads, locking
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
435 - allow syntax extensions
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
436 */
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
437
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
438 /* "Floccinaucinihilipilification" */