annotate Python/pythonmain.c @ 728:76d92ebb4d82 legacy-trunk

Add -v option (verbose) and get rid of finaloutput() function (unused)
author Guido van Rossum <guido@python.org>
date Fri, 27 Mar 1992 17:21:30 +0000
parents 891f98357c04
children 0cd197947d81
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
206
3cc54972ab52 Move allobjects.h to front (needed by THINK C precompiled headers)
Guido van Rossum <guido@python.org>
parents: 179
diff changeset
27 #include "allobjects.h"
156
43cabac5023d Include patchlevel.h (to ensure it is distributed with the rest).
Guido van Rossum <guido@python.org>
parents: 145
diff changeset
28
6
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 int debugging; /* Needed by parser.c */
728
76d92ebb4d82 Add -v option (verbose) and get rid of finaloutput() function (unused)
Guido van Rossum <guido@python.org>
parents: 690
diff changeset
45 int verbose; /* Needed by import.c */
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
46
282
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
47 /* Interface to getopt(): */
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
48 extern int optind;
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
49 extern char *optarg;
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
50 extern int getopt PROTO((int, char **, char *));
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
51
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 main(argc, argv)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 int argc;
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 char **argv;
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 {
282
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
56 int c;
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
57 int sts;
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
58 char *command = NULL;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 char *filename = NULL;
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 FILE *fp = stdin;
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
61
282
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
62 initargs(&argc, &argv); /* Defined in config*.c */
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
63
728
76d92ebb4d82 Add -v option (verbose) and get rid of finaloutput() function (unused)
Guido van Rossum <guido@python.org>
parents: 690
diff changeset
64 while ((c = getopt(argc, argv, "c:dv")) != EOF) {
560
0614d887d10a Stop option processing immediately after "-c command",
Guido van Rossum <guido@python.org>
parents: 547
diff changeset
65 if (c == 'c') {
0614d887d10a Stop option processing immediately after "-c command",
Guido van Rossum <guido@python.org>
parents: 547
diff changeset
66 /* -c is the last option; following arguments
0614d887d10a Stop option processing immediately after "-c command",
Guido van Rossum <guido@python.org>
parents: 547
diff changeset
67 that look like options are left for the
0614d887d10a Stop option processing immediately after "-c command",
Guido van Rossum <guido@python.org>
parents: 547
diff changeset
68 the command to interpret. */
0614d887d10a Stop option processing immediately after "-c command",
Guido van Rossum <guido@python.org>
parents: 547
diff changeset
69 command = malloc(strlen(optarg) + 2);
0614d887d10a Stop option processing immediately after "-c command",
Guido van Rossum <guido@python.org>
parents: 547
diff changeset
70 /* Ignore malloc errors this early... */
0614d887d10a Stop option processing immediately after "-c command",
Guido van Rossum <guido@python.org>
parents: 547
diff changeset
71 strcpy(command, optarg);
0614d887d10a Stop option processing immediately after "-c command",
Guido van Rossum <guido@python.org>
parents: 547
diff changeset
72 strcat(command, "\n");
0614d887d10a Stop option processing immediately after "-c command",
Guido van Rossum <guido@python.org>
parents: 547
diff changeset
73 break;
0614d887d10a Stop option processing immediately after "-c command",
Guido van Rossum <guido@python.org>
parents: 547
diff changeset
74 }
0614d887d10a Stop option processing immediately after "-c command",
Guido van Rossum <guido@python.org>
parents: 547
diff changeset
75
282
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
76 switch (c) {
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
77
618
189ee3beebb5 Added -d option (increments debugging variable); mostly to get rid
Guido van Rossum <guido@python.org>
parents: 593
diff changeset
78 case 'd':
189ee3beebb5 Added -d option (increments debugging variable); mostly to get rid
Guido van Rossum <guido@python.org>
parents: 593
diff changeset
79 debugging++;
189ee3beebb5 Added -d option (increments debugging variable); mostly to get rid
Guido van Rossum <guido@python.org>
parents: 593
diff changeset
80 break;
189ee3beebb5 Added -d option (increments debugging variable); mostly to get rid
Guido van Rossum <guido@python.org>
parents: 593
diff changeset
81
728
76d92ebb4d82 Add -v option (verbose) and get rid of finaloutput() function (unused)
Guido van Rossum <guido@python.org>
parents: 690
diff changeset
82 case 'v':
76d92ebb4d82 Add -v option (verbose) and get rid of finaloutput() function (unused)
Guido van Rossum <guido@python.org>
parents: 690
diff changeset
83 verbose++;
76d92ebb4d82 Add -v option (verbose) and get rid of finaloutput() function (unused)
Guido van Rossum <guido@python.org>
parents: 690
diff changeset
84 break;
76d92ebb4d82 Add -v option (verbose) and get rid of finaloutput() function (unused)
Guido van Rossum <guido@python.org>
parents: 690
diff changeset
85
560
0614d887d10a Stop option processing immediately after "-c command",
Guido van Rossum <guido@python.org>
parents: 547
diff changeset
86 /* This space reserved for other options */
0614d887d10a Stop option processing immediately after "-c command",
Guido van Rossum <guido@python.org>
parents: 547
diff changeset
87
282
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
88 default:
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
89 fprintf(stderr,
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
90 "usage: %s [-c cmd | file | -] [arg] ...\n",
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
91 argv[0]);
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
92 exit(2);
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
93 /*NOTREACHED*/
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
94
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
95 }
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
96 }
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
97
282
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
98 if (command == NULL && optind < argc && strcmp(argv[optind], "-") != 0)
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
99 filename = argv[optind];
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
100
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 if (filename != NULL) {
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 if ((fp = fopen(filename, "r")) == NULL) {
282
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
103 fprintf(stderr, "%s: can't open file '%s'\n",
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
104 argv[0], filename);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 exit(2);
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
108
282
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
109 initall(); /* Defined in config*.c */
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
110
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
111 setpythonpath(getpythonpath());
282
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
112 if (command != NULL) {
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
113 /* Backup optind and force sys.argv[0] = '-c' */
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
114 optind--;
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
115 argv[optind] = "-c";
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
116 }
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
117 setpythonargv(argc-optind, argv+optind);
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
118
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
119 if (command) {
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
120 sts = run_command(command) != 0;
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
121 }
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
122 else {
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
123 sts = run(fp, filename == NULL ? "<stdin>" : filename) != 0;
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
124 }
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
125
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
126 goaway(sts);
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
127 /*NOTREACHED*/
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
128 }
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 /* Initialize all */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
131
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
132 void
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
133 initall()
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 static int inited;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
136
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
137 if (inited)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
138 return;
94
dac8625c8d9b Changes for THINK C 4.0.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
139 inited = 1;
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
140
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
141 initimport();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
142
94
dac8625c8d9b Changes for THINK C 4.0.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
143 /* Modules 'builtin' and 'sys' are initialized here,
dac8625c8d9b Changes for THINK C 4.0.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
144 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
145 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
146 by the initcalls() of a specific configuration. */
dac8625c8d9b Changes for THINK C 4.0.
Guido van Rossum <guido@python.org>
parents: 86
diff changeset
147
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
148 initbuiltin(); /* Also initializes builtin exceptions */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
149 initsys();
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
150
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
151 initcalls(); /* Configuration-dependent initializations */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
152
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
153 initintr(); /* For intrcheck() */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
154 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
155
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
156 /* Parse input from a file and execute it */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
157
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
158 int
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
159 run(fp, filename)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
160 FILE *fp;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
161 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
162 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
163 if (filename == NULL)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
164 filename = "???";
728
76d92ebb4d82 Add -v option (verbose) and get rid of finaloutput() function (unused)
Guido van Rossum <guido@python.org>
parents: 690
diff changeset
165 if (isatty((int)fileno(fp)))
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
166 return run_tty_loop(fp, filename);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
167 else
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
168 return run_script(fp, filename);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
169 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
170
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
171 int
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
172 run_tty_loop(fp, filename)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
173 FILE *fp;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
174 char *filename;
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 object *v;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
177 int ret;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
178 v = sysget("ps1");
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
179 if (v == NULL) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
180 sysset("ps1", v = newstringobject(">>> "));
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
181 XDECREF(v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
182 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
183 v = sysget("ps2");
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
184 if (v == NULL) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
185 sysset("ps2", v = newstringobject("... "));
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
186 XDECREF(v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
187 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
188 for (;;) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
189 ret = run_tty_1(fp, filename);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
190 #ifdef REF_DEBUG
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
191 fprintf(stderr, "[%ld refs]\n", ref_total);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
192 #endif
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
193 if (ret == E_EOF)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
194 return 0;
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 if (ret == E_NOMEM)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
197 return -1;
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 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
201
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
202 int
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
203 run_tty_1(fp, filename)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
204 FILE *fp;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
205 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
206 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
207 object *m, *d, *v, *w;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
208 node *n;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
209 char *ps1, *ps2;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
210 int err;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
211 v = sysget("ps1");
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
212 w = sysget("ps2");
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
213 if (v != NULL && is_stringobject(v)) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
214 INCREF(v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
215 ps1 = getstringvalue(v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
216 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
217 else {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
218 v = NULL;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
219 ps1 = "";
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
220 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
221 if (w != NULL && is_stringobject(w)) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
222 INCREF(w);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
223 ps2 = getstringvalue(w);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
224 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
225 else {
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
226 w = NULL;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
227 ps2 = "";
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
228 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
229 err = parsefile(fp, filename, &gram, single_input, ps1, ps2, &n);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
230 XDECREF(v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
231 XDECREF(w);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
232 if (err == E_EOF)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
233 return E_EOF;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
234 if (err != E_DONE) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
235 err_input(err);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
236 print_error();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
237 return err;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
238 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
239 m = add_module("__main__");
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
240 if (m == NULL)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
241 return -1;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
242 d = getmoduledict(m);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
243 v = run_node(n, filename, d, d);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
244 flushline();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
245 if (v == NULL) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
246 print_error();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
247 return -1;
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 DECREF(v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
250 return 0;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
251 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
252
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
253 int
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
254 run_script(fp, filename)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
255 FILE *fp;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
256 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
257 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
258 object *m, *d, *v;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
259 m = add_module("__main__");
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
260 if (m == NULL)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
261 return -1;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
262 d = getmoduledict(m);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
263 v = run_file(fp, filename, file_input, d, d);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
264 flushline();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
265 if (v == NULL) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
266 print_error();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
267 return -1;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
268 }
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
269 DECREF(v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
270 return 0;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
271 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
272
282
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
273 int
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
274 run_command(command)
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
275 char *command;
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
276 {
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
277 object *m, *d, *v;
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
278 m = add_module("__main__");
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
279 if (m == NULL)
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
280 return -1;
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
281 d = getmoduledict(m);
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
282 v = run_string(command, file_input, d, d);
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
283 flushline();
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
284 if (v == NULL) {
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
285 print_error();
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
286 return -1;
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
287 }
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
288 DECREF(v);
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
289 return 0;
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
290 }
d5c9ae422b41 Add run_command() to implement "-c command".
Guido van Rossum <guido@python.org>
parents: 262
diff changeset
291
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
292 void
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
293 print_error()
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
294 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
295 object *exception, *v;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
296 err_get(&exception, &v);
547
e198cc98a4fd Catch SystemExit and go away if it is caught.
Guido van Rossum <guido@python.org>
parents: 285
diff changeset
297 if (exception == SystemExit) {
e198cc98a4fd Catch SystemExit and go away if it is caught.
Guido van Rossum <guido@python.org>
parents: 285
diff changeset
298 if (v == NULL || v == None)
e198cc98a4fd Catch SystemExit and go away if it is caught.
Guido van Rossum <guido@python.org>
parents: 285
diff changeset
299 goaway(0);
e198cc98a4fd Catch SystemExit and go away if it is caught.
Guido van Rossum <guido@python.org>
parents: 285
diff changeset
300 if (is_intobject(v))
e198cc98a4fd Catch SystemExit and go away if it is caught.
Guido van Rossum <guido@python.org>
parents: 285
diff changeset
301 goaway((int)getintvalue(v));
e198cc98a4fd Catch SystemExit and go away if it is caught.
Guido van Rossum <guido@python.org>
parents: 285
diff changeset
302 else {
e198cc98a4fd Catch SystemExit and go away if it is caught.
Guido van Rossum <guido@python.org>
parents: 285
diff changeset
303 printobject(v, stderr, PRINT_RAW);
e198cc98a4fd Catch SystemExit and go away if it is caught.
Guido van Rossum <guido@python.org>
parents: 285
diff changeset
304 fprintf(stderr, "\n");
e198cc98a4fd Catch SystemExit and go away if it is caught.
Guido van Rossum <guido@python.org>
parents: 285
diff changeset
305 goaway(1);
e198cc98a4fd Catch SystemExit and go away if it is caught.
Guido van Rossum <guido@python.org>
parents: 285
diff changeset
306 }
e198cc98a4fd Catch SystemExit and go away if it is caught.
Guido van Rossum <guido@python.org>
parents: 285
diff changeset
307 }
690
891f98357c04 Set sys.last_{type,value} to characteristics of last unhandled exception.
Guido van Rossum <guido@python.org>
parents: 659
diff changeset
308 sysset("last_type", exception);
891f98357c04 Set sys.last_{type,value} to characteristics of last unhandled exception.
Guido van Rossum <guido@python.org>
parents: 659
diff changeset
309 sysset("last_value", v);
285
85bd7dac13f3 printobject now returns an error code
Guido van Rossum <guido@python.org>
parents: 282
diff changeset
310 if (printobject(exception, stderr, PRINT_RAW) != 0)
85bd7dac13f3 printobject now returns an error code
Guido van Rossum <guido@python.org>
parents: 282
diff changeset
311 err_clear();
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
312 if (v != NULL && v != None) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
313 fprintf(stderr, ": ");
285
85bd7dac13f3 printobject now returns an error code
Guido van Rossum <guido@python.org>
parents: 282
diff changeset
314 if (printobject(v, stderr, PRINT_RAW) != 0)
85bd7dac13f3 printobject now returns an error code
Guido van Rossum <guido@python.org>
parents: 282
diff changeset
315 err_clear();
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
316 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
317 fprintf(stderr, "\n");
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
318 XDECREF(exception);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
319 XDECREF(v);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
320 printtraceback(stderr);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
321 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
322
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
323 object *
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
324 run_string(str, start, globals, locals)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
325 char *str;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
326 int start;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
327 /*dict*/object *globals, *locals;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
328 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
329 node *n;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
330 int err;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
331 err = parse_string(str, start, &n);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
332 return run_err_node(err, n, "<string>", globals, locals);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
333 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
334
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
335 object *
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
336 run_file(fp, filename, start, globals, locals)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
337 FILE *fp;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
338 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
339 int start;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
340 /*dict*/object *globals, *locals;
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 node *n;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
343 int err;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
344 err = parse_file(fp, filename, start, &n);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
345 return run_err_node(err, n, filename, globals, locals);
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
346 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
347
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
348 object *
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
349 run_err_node(err, n, filename, globals, locals)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
350 int err;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
351 node *n;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
352 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
353 /*dict*/object *globals, *locals;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
354 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
355 if (err != E_DONE) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
356 err_input(err);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
357 return NULL;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
358 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
359 return run_node(n, filename, globals, locals);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
360 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
361
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
362 object *
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
363 run_node(n, filename, globals, locals)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
364 node *n;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
365 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
366 /*dict*/object *globals, *locals;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
367 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
368 if (globals == NULL) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
369 globals = getglobals();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
370 if (locals == NULL)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
371 locals = getlocals();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
372 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
373 else {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
374 if (locals == NULL)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
375 locals = globals;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
376 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
377 return eval_node(n, filename, globals, locals);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
378 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
379
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
380 object *
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
381 eval_node(n, filename, globals, locals)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
382 node *n;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
383 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
384 object *globals;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
385 object *locals;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
386 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
387 codeobject *co;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
388 object *v;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
389 co = compile(n, filename);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
390 freetree(n);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
391 if (co == NULL)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
392 return NULL;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
393 v = eval_code(co, globals, locals, (object *)NULL);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
394 DECREF(co);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
395 return v;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
396 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
397
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
398 /* Simplified interface to parsefile */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
399
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
400 int
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
401 parse_file(fp, filename, start, n_ret)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
402 FILE *fp;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
403 char *filename;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
404 int start;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
405 node **n_ret;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
406 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
407 return parsefile(fp, filename, &gram, start,
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
408 (char *)0, (char *)0, n_ret);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
409 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
410
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
411 /* Simplified interface to parsestring */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
412
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
413 int
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
414 parse_string(str, start, n_ret)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
415 char *str;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
416 int start;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
417 node **n_ret;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
418 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
419 int err = parsestring(str, &gram, start, n_ret);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
420 /* 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
421 if (err == E_EOF)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
422 err = E_SYNTAX;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
423 return err;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
424 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
425
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
426 /* Print fatal error message and abort */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
427
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
428 void
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
429 fatal(msg)
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
430 char *msg;
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
431 {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
432 fprintf(stderr, "Fatal error: %s\n", msg);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
433 abort();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
434 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
435
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
436 /* Clean up and exit */
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 void
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
439 goaway(sts)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
440 int sts;
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
441 {
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
442 flushline();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
443
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
444 /* XXX Call doneimport() before donecalls(), since donecalls()
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
445 calls wdone(), and doneimport() may close windows */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
446 doneimport();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
447 donecalls();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
448
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
449 err_clear();
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
450
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
451 #ifdef REF_DEBUG
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
452 fprintf(stderr, "[%ld refs]\n", ref_total);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
453 #endif
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
454
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
455 #ifdef TRACE_REFS
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
456 if (askyesno("Print left references?")) {
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
457 printrefs(stderr);
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
458 }
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
459 #endif /* TRACE_REFS */
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
460
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
461 exit(sts);
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
462 /*NOTREACHED*/
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
463 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
464
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
465 #ifdef TRACE_REFS
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
466 /* Ask a yes/no question */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
467
86
a6934380c6e7 "Compiling" version
Guido van Rossum <guido@python.org>
parents: 81
diff changeset
468 static int
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
469 askyesno(prompt)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
470 char *prompt;
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
471 {
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
472 char buf[256];
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
473
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
474 printf("%s [ny] ", prompt);
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
475 if (fgets(buf, sizeof buf, stdin) == NULL)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
476 return 0;
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
477 return buf[0] == 'y' || buf[0] == 'Y';
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
478 }
728
76d92ebb4d82 Add -v option (verbose) and get rid of finaloutput() function (unused)
Guido van Rossum <guido@python.org>
parents: 690
diff changeset
479 #endif
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
480
262
6acd41a45d8d Removed Think C 3.0 stuff and wish list.
Guido van Rossum <guido@python.org>
parents: 206
diff changeset
481 #ifdef applec /* MPW (also usable for Think C 3.0) */
70
a36c348a8e1a Moved configuration-dependent initializations (etc.) to config_*.c
Guido van Rossum <guido@python.org>
parents: 16
diff changeset
482
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
483 /* Check for file descriptor connected to interactive device.
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
484 Pretend that stdin is always interactive, other files never. */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
485
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
486 int
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
487 isatty(fd)
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
488 int fd;
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
489 {
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
490 return fd == fileno(stdin);
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
491 }
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
492
179
0c355e9ee854 Added isatty() for MPW.
Guido van Rossum <guido@python.org>
parents: 156
diff changeset
493 #endif