comparison Python/pythonrun.c @ 26601:cc05c2c8660e legacy-trunk

Constify filenames and scripts. Fixes #651362.
author Martin v. Löwis <martin@v.loewis.de>
date Wed, 11 Dec 2002 14:04:59 +0000
parents 244e8fbe4e20
children 02ba4663cad2
comparison
equal deleted inserted replaced
26600:75bfc24fd748 26601:cc05c2c8660e
30 extern grammar _PyParser_Grammar; /* From graminit.c */ 30 extern grammar _PyParser_Grammar; /* From graminit.c */
31 31
32 /* Forward */ 32 /* Forward */
33 static void initmain(void); 33 static void initmain(void);
34 static void initsite(void); 34 static void initsite(void);
35 static PyObject *run_err_node(node *, char *, PyObject *, PyObject *, 35 static PyObject *run_err_node(node *, const char *, PyObject *, PyObject *,
36 PyCompilerFlags *); 36 PyCompilerFlags *);
37 static PyObject *run_node(node *, char *, PyObject *, PyObject *, 37 static PyObject *run_node(node *, const char *, PyObject *, PyObject *,
38 PyCompilerFlags *); 38 PyCompilerFlags *);
39 static PyObject *run_pyc_file(FILE *, char *, PyObject *, PyObject *, 39 static PyObject *run_pyc_file(FILE *, const char *, PyObject *, PyObject *,
40 PyCompilerFlags *); 40 PyCompilerFlags *);
41 static void err_input(perrdetail *); 41 static void err_input(perrdetail *);
42 static void initsigs(void); 42 static void initsigs(void);
43 static void call_sys_exitfunc(void); 43 static void call_sys_exitfunc(void);
44 static void call_ll_exitfuncs(void); 44 static void call_ll_exitfuncs(void);
456 } 456 }
457 457
458 /* Parse input from a file and execute it */ 458 /* Parse input from a file and execute it */
459 459
460 int 460 int
461 PyRun_AnyFile(FILE *fp, char *filename) 461 PyRun_AnyFile(FILE *fp, const char *filename)
462 { 462 {
463 return PyRun_AnyFileExFlags(fp, filename, 0, NULL); 463 return PyRun_AnyFileExFlags(fp, filename, 0, NULL);
464 } 464 }
465 465
466 int 466 int
467 PyRun_AnyFileFlags(FILE *fp, char *filename, PyCompilerFlags *flags) 467 PyRun_AnyFileFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
468 { 468 {
469 return PyRun_AnyFileExFlags(fp, filename, 0, flags); 469 return PyRun_AnyFileExFlags(fp, filename, 0, flags);
470 } 470 }
471 471
472 int 472 int
473 PyRun_AnyFileEx(FILE *fp, char *filename, int closeit) 473 PyRun_AnyFileEx(FILE *fp, const char *filename, int closeit)
474 { 474 {
475 return PyRun_AnyFileExFlags(fp, filename, closeit, NULL); 475 return PyRun_AnyFileExFlags(fp, filename, closeit, NULL);
476 } 476 }
477 477
478 int 478 int
479 PyRun_AnyFileExFlags(FILE *fp, char *filename, int closeit, 479 PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
480 PyCompilerFlags *flags) 480 PyCompilerFlags *flags)
481 { 481 {
482 if (filename == NULL) 482 if (filename == NULL)
483 filename = "???"; 483 filename = "???";
484 if (Py_FdIsInteractive(fp, filename)) { 484 if (Py_FdIsInteractive(fp, filename)) {
490 else 490 else
491 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags); 491 return PyRun_SimpleFileExFlags(fp, filename, closeit, flags);
492 } 492 }
493 493
494 int 494 int
495 PyRun_InteractiveLoop(FILE *fp, char *filename) 495 PyRun_InteractiveLoop(FILE *fp, const char *filename)
496 { 496 {
497 return PyRun_InteractiveLoopFlags(fp, filename, NULL); 497 return PyRun_InteractiveLoopFlags(fp, filename, NULL);
498 } 498 }
499 499
500 int 500 int
501 PyRun_InteractiveLoopFlags(FILE *fp, char *filename, PyCompilerFlags *flags) 501 PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
502 { 502 {
503 PyObject *v; 503 PyObject *v;
504 int ret; 504 int ret;
505 PyCompilerFlags local_flags; 505 PyCompilerFlags local_flags;
506 506
531 */ 531 */
532 } 532 }
533 } 533 }
534 534
535 int 535 int
536 PyRun_InteractiveOne(FILE *fp, char *filename) 536 PyRun_InteractiveOne(FILE *fp, const char *filename)
537 { 537 {
538 return PyRun_InteractiveOneFlags(fp, filename, NULL); 538 return PyRun_InteractiveOneFlags(fp, filename, NULL);
539 } 539 }
540 540
541 /* compute parser flags based on compiler flags */ 541 /* compute parser flags based on compiler flags */
546 #else 546 #else
547 #define PARSER_FLAGS(flags) 0 547 #define PARSER_FLAGS(flags) 0
548 #endif 548 #endif
549 549
550 int 550 int
551 PyRun_InteractiveOneFlags(FILE *fp, char *filename, PyCompilerFlags *flags) 551 PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
552 { 552 {
553 PyObject *m, *d, *v, *w; 553 PyObject *m, *d, *v, *w;
554 node *n; 554 node *n;
555 perrdetail err; 555 perrdetail err;
556 char *ps1 = "", *ps2 = ""; 556 char *ps1 = "", *ps2 = "";
600 PyErr_Clear(); 600 PyErr_Clear();
601 return 0; 601 return 0;
602 } 602 }
603 603
604 int 604 int
605 PyRun_SimpleFile(FILE *fp, char *filename) 605 PyRun_SimpleFile(FILE *fp, const char *filename)
606 { 606 {
607 return PyRun_SimpleFileEx(fp, filename, 0); 607 return PyRun_SimpleFileEx(fp, filename, 0);
608 } 608 }
609 609
610 /* Check whether a file maybe a pyc file: Look at the extension, 610 /* Check whether a file maybe a pyc file: Look at the extension,
611 the file type, and, if we may close it, at the first few bytes. */ 611 the file type, and, if we may close it, at the first few bytes. */
612 612
613 static int 613 static int
614 maybe_pyc_file(FILE *fp, char* filename, char* ext, int closeit) 614 maybe_pyc_file(FILE *fp, const char* filename, const char* ext, int closeit)
615 { 615 {
616 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0) 616 if (strcmp(ext, ".pyc") == 0 || strcmp(ext, ".pyo") == 0)
617 return 1; 617 return 1;
618 618
619 #ifdef macintosh 619 #ifdef macintosh
653 } 653 }
654 return 0; 654 return 0;
655 } 655 }
656 656
657 int 657 int
658 PyRun_SimpleFileEx(FILE *fp, char *filename, int closeit) 658 PyRun_SimpleFileEx(FILE *fp, const char *filename, int closeit)
659 { 659 {
660 return PyRun_SimpleFileExFlags(fp, filename, closeit, NULL); 660 return PyRun_SimpleFileExFlags(fp, filename, closeit, NULL);
661 } 661 }
662 662
663 int 663 int
664 PyRun_SimpleFileExFlags(FILE *fp, char *filename, int closeit, 664 PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
665 PyCompilerFlags *flags) 665 PyCompilerFlags *flags)
666 { 666 {
667 PyObject *m, *d, *v; 667 PyObject *m, *d, *v;
668 char *ext; 668 const char *ext;
669 669
670 m = PyImport_AddModule("__main__"); 670 m = PyImport_AddModule("__main__");
671 if (m == NULL) 671 if (m == NULL)
672 return -1; 672 return -1;
673 d = PyModule_GetDict(m); 673 d = PyModule_GetDict(m);
707 PyErr_Clear(); 707 PyErr_Clear();
708 return 0; 708 return 0;
709 } 709 }
710 710
711 int 711 int
712 PyRun_SimpleString(char *command) 712 PyRun_SimpleString(const char *command)
713 { 713 {
714 return PyRun_SimpleStringFlags(command, NULL); 714 return PyRun_SimpleStringFlags(command, NULL);
715 } 715 }
716 716
717 int 717 int
718 PyRun_SimpleStringFlags(char *command, PyCompilerFlags *flags) 718 PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)
719 { 719 {
720 PyObject *m, *d, *v; 720 PyObject *m, *d, *v;
721 m = PyImport_AddModule("__main__"); 721 m = PyImport_AddModule("__main__");
722 if (m == NULL) 722 if (m == NULL)
723 return -1; 723 return -1;
732 PyErr_Clear(); 732 PyErr_Clear();
733 return 0; 733 return 0;
734 } 734 }
735 735
736 static int 736 static int
737 parse_syntax_error(PyObject *err, PyObject **message, char **filename, 737 parse_syntax_error(PyObject *err, PyObject **message, const char **filename,
738 int *lineno, int *offset, char **text) 738 int *lineno, int *offset, const char **text)
739 { 739 {
740 long hold; 740 long hold;
741 PyObject *v; 741 PyObject *v;
742 742
743 /* old style errors */ 743 /* old style errors */
802 { 802 {
803 PyErr_PrintEx(1); 803 PyErr_PrintEx(1);
804 } 804 }
805 805
806 static void 806 static void
807 print_error_text(PyObject *f, int offset, char *text) 807 print_error_text(PyObject *f, int offset, const char *text)
808 { 808 {
809 char *nl; 809 char *nl;
810 if (offset >= 0) { 810 if (offset >= 0) {
811 if (offset > 0 && offset == (int)strlen(text)) 811 if (offset > 0 && offset == (int)strlen(text))
812 offset--; 812 offset--;
934 err = PyTraceBack_Print(tb, f); 934 err = PyTraceBack_Print(tb, f);
935 if (err == 0 && 935 if (err == 0 &&
936 PyObject_HasAttrString(v, "print_file_and_line")) 936 PyObject_HasAttrString(v, "print_file_and_line"))
937 { 937 {
938 PyObject *message; 938 PyObject *message;
939 char *filename, *text; 939 const char *filename, *text;
940 int lineno, offset; 940 int lineno, offset;
941 if (!parse_syntax_error(v, &message, &filename, 941 if (!parse_syntax_error(v, &message, &filename,
942 &lineno, &offset, &text)) 942 &lineno, &offset, &text))
943 PyErr_Clear(); 943 PyErr_Clear();
944 else { 944 else {
1014 if (err != 0) 1014 if (err != 0)
1015 PyErr_Clear(); 1015 PyErr_Clear();
1016 } 1016 }
1017 1017
1018 PyObject * 1018 PyObject *
1019 PyRun_String(char *str, int start, PyObject *globals, PyObject *locals) 1019 PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals)
1020 { 1020 {
1021 return run_err_node(PyParser_SimpleParseString(str, start), 1021 return run_err_node(PyParser_SimpleParseString(str, start),
1022 "<string>", globals, locals, NULL); 1022 "<string>", globals, locals, NULL);
1023 } 1023 }
1024 1024
1025 PyObject * 1025 PyObject *
1026 PyRun_File(FILE *fp, char *filename, int start, PyObject *globals, 1026 PyRun_File(FILE *fp, const char *filename, int start, PyObject *globals,
1027 PyObject *locals) 1027 PyObject *locals)
1028 { 1028 {
1029 return PyRun_FileEx(fp, filename, start, globals, locals, 0); 1029 return PyRun_FileEx(fp, filename, start, globals, locals, 0);
1030 } 1030 }
1031 1031
1032 PyObject * 1032 PyObject *
1033 PyRun_FileEx(FILE *fp, char *filename, int start, PyObject *globals, 1033 PyRun_FileEx(FILE *fp, const char *filename, int start, PyObject *globals,
1034 PyObject *locals, int closeit) 1034 PyObject *locals, int closeit)
1035 { 1035 {
1036 node *n = PyParser_SimpleParseFile(fp, filename, start); 1036 node *n = PyParser_SimpleParseFile(fp, filename, start);
1037 if (closeit) 1037 if (closeit)
1038 fclose(fp); 1038 fclose(fp);
1039 return run_err_node(n, filename, globals, locals, NULL); 1039 return run_err_node(n, filename, globals, locals, NULL);
1040 } 1040 }
1041 1041
1042 PyObject * 1042 PyObject *
1043 PyRun_StringFlags(char *str, int start, PyObject *globals, PyObject *locals, 1043 PyRun_StringFlags(const char *str, int start, PyObject *globals, PyObject *locals,
1044 PyCompilerFlags *flags) 1044 PyCompilerFlags *flags)
1045 { 1045 {
1046 return run_err_node(PyParser_SimpleParseStringFlags( 1046 return run_err_node(PyParser_SimpleParseStringFlags(
1047 str, start, PARSER_FLAGS(flags)), 1047 str, start, PARSER_FLAGS(flags)),
1048 "<string>", globals, locals, flags); 1048 "<string>", globals, locals, flags);
1049 } 1049 }
1050 1050
1051 PyObject * 1051 PyObject *
1052 PyRun_FileFlags(FILE *fp, char *filename, int start, PyObject *globals, 1052 PyRun_FileFlags(FILE *fp, const char *filename, int start, PyObject *globals,
1053 PyObject *locals, PyCompilerFlags *flags) 1053 PyObject *locals, PyCompilerFlags *flags)
1054 { 1054 {
1055 return PyRun_FileExFlags(fp, filename, start, globals, locals, 0, 1055 return PyRun_FileExFlags(fp, filename, start, globals, locals, 0,
1056 flags); 1056 flags);
1057 } 1057 }
1058 1058
1059 PyObject * 1059 PyObject *
1060 PyRun_FileExFlags(FILE *fp, char *filename, int start, PyObject *globals, 1060 PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals,
1061 PyObject *locals, int closeit, PyCompilerFlags *flags) 1061 PyObject *locals, int closeit, PyCompilerFlags *flags)
1062 { 1062 {
1063 node *n = PyParser_SimpleParseFileFlags(fp, filename, start, 1063 node *n = PyParser_SimpleParseFileFlags(fp, filename, start,
1064 PARSER_FLAGS(flags)); 1064 PARSER_FLAGS(flags));
1065 if (closeit) 1065 if (closeit)
1066 fclose(fp); 1066 fclose(fp);
1067 return run_err_node(n, filename, globals, locals, flags); 1067 return run_err_node(n, filename, globals, locals, flags);
1068 } 1068 }
1069 1069
1070 static PyObject * 1070 static PyObject *
1071 run_err_node(node *n, char *filename, PyObject *globals, PyObject *locals, 1071 run_err_node(node *n, const char *filename, PyObject *globals, PyObject *locals,
1072 PyCompilerFlags *flags) 1072 PyCompilerFlags *flags)
1073 { 1073 {
1074 if (n == NULL) 1074 if (n == NULL)
1075 return NULL; 1075 return NULL;
1076 return run_node(n, filename, globals, locals, flags); 1076 return run_node(n, filename, globals, locals, flags);
1077 } 1077 }
1078 1078
1079 static PyObject * 1079 static PyObject *
1080 run_node(node *n, char *filename, PyObject *globals, PyObject *locals, 1080 run_node(node *n, const char *filename, PyObject *globals, PyObject *locals,
1081 PyCompilerFlags *flags) 1081 PyCompilerFlags *flags)
1082 { 1082 {
1083 PyCodeObject *co; 1083 PyCodeObject *co;
1084 PyObject *v; 1084 PyObject *v;
1085 co = PyNode_CompileFlags(n, filename, flags); 1085 co = PyNode_CompileFlags(n, filename, flags);
1090 Py_DECREF(co); 1090 Py_DECREF(co);
1091 return v; 1091 return v;
1092 } 1092 }
1093 1093
1094 static PyObject * 1094 static PyObject *
1095 run_pyc_file(FILE *fp, char *filename, PyObject *globals, PyObject *locals, 1095 run_pyc_file(FILE *fp, const char *filename, PyObject *globals, PyObject *locals,
1096 PyCompilerFlags *flags) 1096 PyCompilerFlags *flags)
1097 { 1097 {
1098 PyCodeObject *co; 1098 PyCodeObject *co;
1099 PyObject *v; 1099 PyObject *v;
1100 long magic; 1100 long magic;
1122 Py_DECREF(co); 1122 Py_DECREF(co);
1123 return v; 1123 return v;
1124 } 1124 }
1125 1125
1126 PyObject * 1126 PyObject *
1127 Py_CompileString(char *str, char *filename, int start) 1127 Py_CompileString(const char *str, const char *filename, int start)
1128 { 1128 {
1129 return Py_CompileStringFlags(str, filename, start, NULL); 1129 return Py_CompileStringFlags(str, filename, start, NULL);
1130 } 1130 }
1131 1131
1132 PyObject * 1132 PyObject *
1133 Py_CompileStringFlags(char *str, char *filename, int start, 1133 Py_CompileStringFlags(const char *str, const char *filename, int start,
1134 PyCompilerFlags *flags) 1134 PyCompilerFlags *flags)
1135 { 1135 {
1136 node *n; 1136 node *n;
1137 PyCodeObject *co; 1137 PyCodeObject *co;
1138 1138
1144 PyNode_Free(n); 1144 PyNode_Free(n);
1145 return (PyObject *)co; 1145 return (PyObject *)co;
1146 } 1146 }
1147 1147
1148 struct symtable * 1148 struct symtable *
1149 Py_SymtableString(char *str, char *filename, int start) 1149 Py_SymtableString(const char *str, const char *filename, int start)
1150 { 1150 {
1151 node *n; 1151 node *n;
1152 struct symtable *st; 1152 struct symtable *st;
1153 n = PyParser_SimpleParseStringFlagsFilename(str, filename, 1153 n = PyParser_SimpleParseStringFlagsFilename(str, filename,
1154 start, 0); 1154 start, 0);
1160 } 1160 }
1161 1161
1162 /* Simplified interface to parsefile -- return node or set exception */ 1162 /* Simplified interface to parsefile -- return node or set exception */
1163 1163
1164 node * 1164 node *
1165 PyParser_SimpleParseFileFlags(FILE *fp, char *filename, int start, int flags) 1165 PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
1166 { 1166 {
1167 node *n; 1167 node *n;
1168 perrdetail err; 1168 perrdetail err;
1169 n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar, start, 1169 n = PyParser_ParseFileFlags(fp, filename, &_PyParser_Grammar, start,
1170 (char *)0, (char *)0, &err, flags); 1170 (char *)0, (char *)0, &err, flags);
1172 err_input(&err); 1172 err_input(&err);
1173 return n; 1173 return n;
1174 } 1174 }
1175 1175
1176 node * 1176 node *
1177 PyParser_SimpleParseFile(FILE *fp, char *filename, int start) 1177 PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
1178 { 1178 {
1179 return PyParser_SimpleParseFileFlags(fp, filename, start, 0); 1179 return PyParser_SimpleParseFileFlags(fp, filename, start, 0);
1180 } 1180 }
1181 1181
1182 /* Simplified interface to parsestring -- return node or set exception */ 1182 /* Simplified interface to parsestring -- return node or set exception */
1183 1183
1184 node * 1184 node *
1185 PyParser_SimpleParseStringFlags(char *str, int start, int flags) 1185 PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
1186 { 1186 {
1187 node *n; 1187 node *n;
1188 perrdetail err; 1188 perrdetail err;
1189 n = PyParser_ParseStringFlags(str, &_PyParser_Grammar, start, &err, 1189 n = PyParser_ParseStringFlags(str, &_PyParser_Grammar, start, &err,
1190 flags); 1190 flags);
1192 err_input(&err); 1192 err_input(&err);
1193 return n; 1193 return n;
1194 } 1194 }
1195 1195
1196 node * 1196 node *
1197 PyParser_SimpleParseString(char *str, int start) 1197 PyParser_SimpleParseString(const char *str, int start)
1198 { 1198 {
1199 return PyParser_SimpleParseStringFlags(str, start, 0); 1199 return PyParser_SimpleParseStringFlags(str, start, 0);
1200 } 1200 }
1201 1201
1202 node * 1202 node *
1203 PyParser_SimpleParseStringFlagsFilename(char *str, char *filename, 1203 PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename,
1204 int start, int flags) 1204 int start, int flags)
1205 { 1205 {
1206 node *n; 1206 node *n;
1207 perrdetail err; 1207 perrdetail err;
1208 1208
1213 err_input(&err); 1213 err_input(&err);
1214 return n; 1214 return n;
1215 } 1215 }
1216 1216
1217 node * 1217 node *
1218 PyParser_SimpleParseStringFilename(char *str, char *filename, int start) 1218 PyParser_SimpleParseStringFilename(const char *str, const char *filename, int start)
1219 { 1219 {
1220 return PyParser_SimpleParseStringFlagsFilename(str, filename, 1220 return PyParser_SimpleParseStringFlagsFilename(str, filename,
1221 start, 0); 1221 start, 0);
1222 } 1222 }
1223 1223
1427 * a) isatty(fd) is TRUE, or 1427 * a) isatty(fd) is TRUE, or
1428 * b) the -i flag was given, and the filename associated with 1428 * b) the -i flag was given, and the filename associated with
1429 * the descriptor is NULL or "<stdin>" or "???". 1429 * the descriptor is NULL or "<stdin>" or "???".
1430 */ 1430 */
1431 int 1431 int
1432 Py_FdIsInteractive(FILE *fp, char *filename) 1432 Py_FdIsInteractive(FILE *fp, const char *filename)
1433 { 1433 {
1434 if (isatty((int)fileno(fp))) 1434 if (isatty((int)fileno(fp)))
1435 return 1; 1435 return 1;
1436 if (!Py_InteractiveFlag) 1436 if (!Py_InteractiveFlag)
1437 return 0; 1437 return 0;