Mercurial > cpython-lru_cache-weakref
annotate Python/frozenmain.c @ 86301:500b4b62c19a
Issue #19219 Remove a lot of "retval = NULL" statements, now that retval
is pre-initialized to that value. Test show a 5% speedup as a bonus.
| author | Kristján Valur Jónsson <kristjan@ccpgames.com> |
|---|---|
| date | Sun, 13 Oct 2013 13:41:59 +0000 |
| parents | e408e821d6c8 |
| children |
| rev | line source |
|---|---|
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 |
|
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 /* Python interpreter main program for frozen scripts */ |
|
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 |
| 2624 | 4 #include "Python.h" |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
5 #include <locale.h> |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
7 #ifdef MS_WINDOWS |
|
13663
29da35543833
ANSIfy as many declarations as possible.
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
8 extern void PyWinFreeze_ExeInit(void); |
|
29da35543833
ANSIfy as many declarations as possible.
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
9 extern void PyWinFreeze_ExeTerm(void); |
|
29da35543833
ANSIfy as many declarations as possible.
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
10 extern int PyInitFrozenExtensions(void); |
|
7846
6c6a48bc5817
Make calls into ../PC/frozen_dllmain.c on MS_WIN32.
Guido van Rossum <guido@python.org>
parents:
7210
diff
changeset
|
11 #endif |
|
6c6a48bc5817
Make calls into ../PC/frozen_dllmain.c on MS_WIN32.
Guido van Rossum <guido@python.org>
parents:
7210
diff
changeset
|
12 |
|
2892
33b154b6c61b
moved stuff around to resemble main.c
Guido van Rossum <guido@python.org>
parents:
2624
diff
changeset
|
13 /* Main program */ |
|
33b154b6c61b
moved stuff around to resemble main.c
Guido van Rossum <guido@python.org>
parents:
2624
diff
changeset
|
14 |
|
33b154b6c61b
moved stuff around to resemble main.c
Guido van Rossum <guido@python.org>
parents:
2624
diff
changeset
|
15 int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13256
diff
changeset
|
16 Py_FrozenMain(int argc, char **argv) |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
18 char *p; |
|
84861
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
19 int i, n, sts = 1; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
20 int inspect = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
21 int unbuffered = 0; |
|
84861
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
22 char *oldloc = NULL; |
|
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
23 wchar_t **argv_copy = NULL; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
24 /* We need a second copies, as Python might modify the first one. */ |
|
84861
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
25 wchar_t **argv_copy2 = NULL; |
|
84857
ab8121466785
Issue #15893: frozenmain.c now handles PyMem_Malloc() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
61466
diff
changeset
|
26 |
|
84861
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
27 argv_copy = PyMem_RawMalloc(sizeof(wchar_t*) * argc); |
|
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
28 argv_copy2 = PyMem_RawMalloc(sizeof(wchar_t*) * argc); |
|
84857
ab8121466785
Issue #15893: frozenmain.c now handles PyMem_Malloc() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
61466
diff
changeset
|
29 if (!argv_copy || !argv_copy2) { |
|
ab8121466785
Issue #15893: frozenmain.c now handles PyMem_Malloc() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
61466
diff
changeset
|
30 fprintf(stderr, "out of memory\n"); |
|
84861
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
31 goto error; |
|
84857
ab8121466785
Issue #15893: frozenmain.c now handles PyMem_Malloc() failure
Victor Stinner <victor.stinner@gmail.com>
parents:
61466
diff
changeset
|
32 } |
|
1848
b724599401ff
Merge back to main trunk
Guido van Rossum <guido@python.org>
parents:
1396
diff
changeset
|
33 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
34 Py_FrozenFlag = 1; /* Suppress errors from getpath.c */ |
|
7210
bccdeca81669
Set Py_FrozenFlag, to suppress error messages from getpath.c.
Guido van Rossum <guido@python.org>
parents:
7116
diff
changeset
|
35 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
36 if ((p = Py_GETENV("PYTHONINSPECT")) && *p != '\0') |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
37 inspect = 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
38 if ((p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0') |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
39 unbuffered = 1; |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1270
diff
changeset
|
40 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
41 if (unbuffered) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
42 setbuf(stdin, (char *)NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
43 setbuf(stdout, (char *)NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
44 setbuf(stderr, (char *)NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
45 } |
|
1848
b724599401ff
Merge back to main trunk
Guido van Rossum <guido@python.org>
parents:
1396
diff
changeset
|
46 |
|
84861
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
47 oldloc = _PyMem_RawStrdup(setlocale(LC_ALL, NULL)); |
|
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
48 if (!oldloc) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
49 fprintf(stderr, "out of memory\n"); |
|
84861
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
50 goto error; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
51 } |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
52 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
53 setlocale(LC_ALL, ""); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
54 for (i = 0; i < argc; i++) { |
|
84860
0001c4100823
Py_FrozenMain() now uses _Py_char2wchar() to decode command line arguments, as
Victor Stinner <victor.stinner@gmail.com>
parents:
84859
diff
changeset
|
55 argv_copy[i] = _Py_char2wchar(argv[i], NULL); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
56 argv_copy2[i] = argv_copy[i]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
57 if (!argv_copy[i]) { |
|
84860
0001c4100823
Py_FrozenMain() now uses _Py_char2wchar() to decode command line arguments, as
Victor Stinner <victor.stinner@gmail.com>
parents:
84859
diff
changeset
|
58 fprintf(stderr, "Unable to decode the command line argument #%i\n", |
|
0001c4100823
Py_FrozenMain() now uses _Py_char2wchar() to decode command line arguments, as
Victor Stinner <victor.stinner@gmail.com>
parents:
84859
diff
changeset
|
59 i + 1); |
|
84861
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
60 argc = i; |
|
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
61 goto error; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
62 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
63 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
64 setlocale(LC_ALL, oldloc); |
|
84861
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
65 PyMem_RawFree(oldloc); |
|
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
66 oldloc = NULL; |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
24071
diff
changeset
|
67 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
68 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
69 PyInitFrozenExtensions(); |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
70 #endif /* MS_WINDOWS */ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
71 Py_SetProgramName(argv_copy[0]); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
72 Py_Initialize(); |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
73 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
74 PyWinFreeze_ExeInit(); |
|
7846
6c6a48bc5817
Make calls into ../PC/frozen_dllmain.c on MS_WIN32.
Guido van Rossum <guido@python.org>
parents:
7210
diff
changeset
|
75 #endif |
|
5852
4a4778e61c14
Tracking changes to Py_Main():
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
76 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
77 if (Py_VerboseFlag) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
78 fprintf(stderr, "Python %s\n%s\n", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
79 Py_GetVersion(), Py_GetCopyright()); |
|
5852
4a4778e61c14
Tracking changes to Py_Main():
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
80 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
81 PySys_SetArgv(argc, argv_copy); |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1270
diff
changeset
|
82 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
83 n = PyImport_ImportFrozenModule("__main__"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
84 if (n == 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
85 Py_FatalError("__main__ not frozen"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
86 if (n < 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
87 PyErr_Print(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
88 sts = 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
89 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
90 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
91 sts = 0; |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1270
diff
changeset
|
92 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
93 if (inspect && isatty((int)fileno(stdin))) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
94 sts = PyRun_AnyFile(stdin, "<stdin>") != 0; |
|
1318
92e6a8cf14be
* pythonmain.c: -k option, usage message, more environment flags.
Guido van Rossum <guido@python.org>
parents:
1270
diff
changeset
|
95 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
96 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
97 PyWinFreeze_ExeTerm(); |
|
7846
6c6a48bc5817
Make calls into ../PC/frozen_dllmain.c on MS_WIN32.
Guido van Rossum <guido@python.org>
parents:
7210
diff
changeset
|
98 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
99 Py_Finalize(); |
|
84861
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
100 |
|
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
101 error: |
|
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
102 PyMem_RawFree(argv_copy); |
|
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
103 if (argv_copy2) { |
|
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
104 for (i = 0; i < argc; i++) |
|
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
105 PyMem_RawFree(argv_copy2[i]); |
|
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
106 PyMem_RawFree(argv_copy2); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
107 } |
|
84861
47c6aa17fd90
Issue #15893: Improve error handling in main() and Py_FrozenMain()
Victor Stinner <victor.stinner@gmail.com>
parents:
84860
diff
changeset
|
108 PyMem_RawFree(oldloc); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
49467
diff
changeset
|
109 return sts; |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
110 } |
