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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
6341a4c0082b renaming phase 3
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
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 }