Mercurial > emacs
comparison src/regex.c @ 49930:0f71486df5bc
(print_partial_compiled_pattern): Output to stderr.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 23 Feb 2003 15:00:30 +0000 |
parents | 23a1cea22d13 |
children | 695cf19ef79e |
comparison
equal
deleted
inserted
replaced
49929:098268b04ffd | 49930:0f71486df5bc |
---|---|
919 re_char *p = start; | 919 re_char *p = start; |
920 re_char *pend = end; | 920 re_char *pend = end; |
921 | 921 |
922 if (start == NULL) | 922 if (start == NULL) |
923 { | 923 { |
924 printf ("(null)\n"); | 924 fprintf (stderr, "(null)\n"); |
925 return; | 925 return; |
926 } | 926 } |
927 | 927 |
928 /* Loop over pattern commands. */ | 928 /* Loop over pattern commands. */ |
929 while (p < pend) | 929 while (p < pend) |
930 { | 930 { |
931 printf ("%d:\t", p - start); | 931 fprintf (stderr, "%d:\t", p - start); |
932 | 932 |
933 switch ((re_opcode_t) *p++) | 933 switch ((re_opcode_t) *p++) |
934 { | 934 { |
935 case no_op: | 935 case no_op: |
936 printf ("/no_op"); | 936 fprintf (stderr, "/no_op"); |
937 break; | 937 break; |
938 | 938 |
939 case succeed: | 939 case succeed: |
940 printf ("/succeed"); | 940 fprintf (stderr, "/succeed"); |
941 break; | 941 break; |
942 | 942 |
943 case exactn: | 943 case exactn: |
944 mcnt = *p++; | 944 mcnt = *p++; |
945 printf ("/exactn/%d", mcnt); | 945 fprintf (stderr, "/exactn/%d", mcnt); |
946 do | 946 do |
947 { | 947 { |
948 putchar ('/'); | 948 fprintf (stderr, "/%c", *p++); |
949 putchar (*p++); | |
950 } | 949 } |
951 while (--mcnt); | 950 while (--mcnt); |
952 break; | 951 break; |
953 | 952 |
954 case start_memory: | 953 case start_memory: |
955 printf ("/start_memory/%d", *p++); | 954 fprintf (stderr, "/start_memory/%d", *p++); |
956 break; | 955 break; |
957 | 956 |
958 case stop_memory: | 957 case stop_memory: |
959 printf ("/stop_memory/%d", *p++); | 958 fprintf (stderr, "/stop_memory/%d", *p++); |
960 break; | 959 break; |
961 | 960 |
962 case duplicate: | 961 case duplicate: |
963 printf ("/duplicate/%d", *p++); | 962 fprintf (stderr, "/duplicate/%d", *p++); |
964 break; | 963 break; |
965 | 964 |
966 case anychar: | 965 case anychar: |
967 printf ("/anychar"); | 966 fprintf (stderr, "/anychar"); |
968 break; | 967 break; |
969 | 968 |
970 case charset: | 969 case charset: |
971 case charset_not: | 970 case charset_not: |
972 { | 971 { |
973 register int c, last = -100; | 972 register int c, last = -100; |
974 register int in_range = 0; | 973 register int in_range = 0; |
975 int length = CHARSET_BITMAP_SIZE (p - 1); | 974 int length = CHARSET_BITMAP_SIZE (p - 1); |
976 int has_range_table = CHARSET_RANGE_TABLE_EXISTS_P (p - 1); | 975 int has_range_table = CHARSET_RANGE_TABLE_EXISTS_P (p - 1); |
977 | 976 |
978 printf ("/charset [%s", | 977 fprintf (stderr, "/charset [%s", |
979 (re_opcode_t) *(p - 1) == charset_not ? "^" : ""); | 978 (re_opcode_t) *(p - 1) == charset_not ? "^" : ""); |
980 | 979 |
981 assert (p + *p < pend); | 980 assert (p + *p < pend); |
982 | 981 |
983 for (c = 0; c < 256; c++) | 982 for (c = 0; c < 256; c++) |
985 && (p[1 + (c/8)] & (1 << (c % 8)))) | 984 && (p[1 + (c/8)] & (1 << (c % 8)))) |
986 { | 985 { |
987 /* Are we starting a range? */ | 986 /* Are we starting a range? */ |
988 if (last + 1 == c && ! in_range) | 987 if (last + 1 == c && ! in_range) |
989 { | 988 { |
990 putchar ('-'); | 989 fprintf (stderr, "-"); |
991 in_range = 1; | 990 in_range = 1; |
992 } | 991 } |
993 /* Have we broken a range? */ | 992 /* Have we broken a range? */ |
994 else if (last + 1 != c && in_range) | 993 else if (last + 1 != c && in_range) |
995 { | 994 { |
996 putchar (last); | 995 fprintf (stderr, "%c", last); |
997 in_range = 0; | 996 in_range = 0; |
998 } | 997 } |
999 | 998 |
1000 if (! in_range) | 999 if (! in_range) |
1001 putchar (c); | 1000 fprintf (stderr, "%c", c); |
1002 | 1001 |
1003 last = c; | 1002 last = c; |
1004 } | 1003 } |
1005 | 1004 |
1006 if (in_range) | 1005 if (in_range) |
1007 putchar (last); | 1006 fprintf (stderr, "%c", last); |
1008 | 1007 |
1009 putchar (']'); | 1008 fprintf (stderr, "]"); |
1010 | 1009 |
1011 p += 1 + length; | 1010 p += 1 + length; |
1012 | 1011 |
1013 if (has_range_table) | 1012 if (has_range_table) |
1014 { | 1013 { |
1015 int count; | 1014 int count; |
1016 printf ("has-range-table"); | 1015 fprintf (stderr, "has-range-table"); |
1017 | 1016 |
1018 /* ??? Should print the range table; for now, just skip it. */ | 1017 /* ??? Should print the range table; for now, just skip it. */ |
1019 p += 2; /* skip range table bits */ | 1018 p += 2; /* skip range table bits */ |
1020 EXTRACT_NUMBER_AND_INCR (count, p); | 1019 EXTRACT_NUMBER_AND_INCR (count, p); |
1021 p = CHARSET_RANGE_TABLE_END (p, count); | 1020 p = CHARSET_RANGE_TABLE_END (p, count); |
1022 } | 1021 } |
1023 } | 1022 } |
1024 break; | 1023 break; |
1025 | 1024 |
1026 case begline: | 1025 case begline: |
1027 printf ("/begline"); | 1026 fprintf (stderr, "/begline"); |
1028 break; | 1027 break; |
1029 | 1028 |
1030 case endline: | 1029 case endline: |
1031 printf ("/endline"); | 1030 fprintf (stderr, "/endline"); |
1032 break; | 1031 break; |
1033 | 1032 |
1034 case on_failure_jump: | 1033 case on_failure_jump: |
1035 extract_number_and_incr (&mcnt, &p); | 1034 extract_number_and_incr (&mcnt, &p); |
1036 printf ("/on_failure_jump to %d", p + mcnt - start); | 1035 fprintf (stderr, "/on_failure_jump to %d", p + mcnt - start); |
1037 break; | 1036 break; |
1038 | 1037 |
1039 case on_failure_keep_string_jump: | 1038 case on_failure_keep_string_jump: |
1040 extract_number_and_incr (&mcnt, &p); | 1039 extract_number_and_incr (&mcnt, &p); |
1041 printf ("/on_failure_keep_string_jump to %d", p + mcnt - start); | 1040 fprintf (stderr, "/on_failure_keep_string_jump to %d", p + mcnt - start); |
1042 break; | 1041 break; |
1043 | 1042 |
1044 case on_failure_jump_nastyloop: | 1043 case on_failure_jump_nastyloop: |
1045 extract_number_and_incr (&mcnt, &p); | 1044 extract_number_and_incr (&mcnt, &p); |
1046 printf ("/on_failure_jump_nastyloop to %d", p + mcnt - start); | 1045 fprintf (stderr, "/on_failure_jump_nastyloop to %d", p + mcnt - start); |
1047 break; | 1046 break; |
1048 | 1047 |
1049 case on_failure_jump_loop: | 1048 case on_failure_jump_loop: |
1050 extract_number_and_incr (&mcnt, &p); | 1049 extract_number_and_incr (&mcnt, &p); |
1051 printf ("/on_failure_jump_loop to %d", p + mcnt - start); | 1050 fprintf (stderr, "/on_failure_jump_loop to %d", p + mcnt - start); |
1052 break; | 1051 break; |
1053 | 1052 |
1054 case on_failure_jump_smart: | 1053 case on_failure_jump_smart: |
1055 extract_number_and_incr (&mcnt, &p); | 1054 extract_number_and_incr (&mcnt, &p); |
1056 printf ("/on_failure_jump_smart to %d", p + mcnt - start); | 1055 fprintf (stderr, "/on_failure_jump_smart to %d", p + mcnt - start); |
1057 break; | 1056 break; |
1058 | 1057 |
1059 case jump: | 1058 case jump: |
1060 extract_number_and_incr (&mcnt, &p); | 1059 extract_number_and_incr (&mcnt, &p); |
1061 printf ("/jump to %d", p + mcnt - start); | 1060 fprintf (stderr, "/jump to %d", p + mcnt - start); |
1062 break; | 1061 break; |
1063 | 1062 |
1064 case succeed_n: | 1063 case succeed_n: |
1065 extract_number_and_incr (&mcnt, &p); | 1064 extract_number_and_incr (&mcnt, &p); |
1066 extract_number_and_incr (&mcnt2, &p); | 1065 extract_number_and_incr (&mcnt2, &p); |
1067 printf ("/succeed_n to %d, %d times", p - 2 + mcnt - start, mcnt2); | 1066 fprintf (stderr, "/succeed_n to %d, %d times", p - 2 + mcnt - start, mcnt2); |
1068 break; | 1067 break; |
1069 | 1068 |
1070 case jump_n: | 1069 case jump_n: |
1071 extract_number_and_incr (&mcnt, &p); | 1070 extract_number_and_incr (&mcnt, &p); |
1072 extract_number_and_incr (&mcnt2, &p); | 1071 extract_number_and_incr (&mcnt2, &p); |
1073 printf ("/jump_n to %d, %d times", p - 2 + mcnt - start, mcnt2); | 1072 fprintf (stderr, "/jump_n to %d, %d times", p - 2 + mcnt - start, mcnt2); |
1074 break; | 1073 break; |
1075 | 1074 |
1076 case set_number_at: | 1075 case set_number_at: |
1077 extract_number_and_incr (&mcnt, &p); | 1076 extract_number_and_incr (&mcnt, &p); |
1078 extract_number_and_incr (&mcnt2, &p); | 1077 extract_number_and_incr (&mcnt2, &p); |
1079 printf ("/set_number_at location %d to %d", p - 2 + mcnt - start, mcnt2); | 1078 fprintf (stderr, "/set_number_at location %d to %d", p - 2 + mcnt - start, mcnt2); |
1080 break; | 1079 break; |
1081 | 1080 |
1082 case wordbound: | 1081 case wordbound: |
1083 printf ("/wordbound"); | 1082 fprintf (stderr, "/wordbound"); |
1084 break; | 1083 break; |
1085 | 1084 |
1086 case notwordbound: | 1085 case notwordbound: |
1087 printf ("/notwordbound"); | 1086 fprintf (stderr, "/notwordbound"); |
1088 break; | 1087 break; |
1089 | 1088 |
1090 case wordbeg: | 1089 case wordbeg: |
1091 printf ("/wordbeg"); | 1090 fprintf (stderr, "/wordbeg"); |
1092 break; | 1091 break; |
1093 | 1092 |
1094 case wordend: | 1093 case wordend: |
1095 printf ("/wordend"); | 1094 fprintf (stderr, "/wordend"); |
1096 | 1095 |
1097 case syntaxspec: | 1096 case syntaxspec: |
1098 printf ("/syntaxspec"); | 1097 fprintf (stderr, "/syntaxspec"); |
1099 mcnt = *p++; | 1098 mcnt = *p++; |
1100 printf ("/%d", mcnt); | 1099 fprintf (stderr, "/%d", mcnt); |
1101 break; | 1100 break; |
1102 | 1101 |
1103 case notsyntaxspec: | 1102 case notsyntaxspec: |
1104 printf ("/notsyntaxspec"); | 1103 fprintf (stderr, "/notsyntaxspec"); |
1105 mcnt = *p++; | 1104 mcnt = *p++; |
1106 printf ("/%d", mcnt); | 1105 fprintf (stderr, "/%d", mcnt); |
1107 break; | 1106 break; |
1108 | 1107 |
1109 # ifdef emacs | 1108 # ifdef emacs |
1110 case before_dot: | 1109 case before_dot: |
1111 printf ("/before_dot"); | 1110 fprintf (stderr, "/before_dot"); |
1112 break; | 1111 break; |
1113 | 1112 |
1114 case at_dot: | 1113 case at_dot: |
1115 printf ("/at_dot"); | 1114 fprintf (stderr, "/at_dot"); |
1116 break; | 1115 break; |
1117 | 1116 |
1118 case after_dot: | 1117 case after_dot: |
1119 printf ("/after_dot"); | 1118 fprintf (stderr, "/after_dot"); |
1120 break; | 1119 break; |
1121 | 1120 |
1122 case categoryspec: | 1121 case categoryspec: |
1123 printf ("/categoryspec"); | 1122 fprintf (stderr, "/categoryspec"); |
1124 mcnt = *p++; | 1123 mcnt = *p++; |
1125 printf ("/%d", mcnt); | 1124 fprintf (stderr, "/%d", mcnt); |
1126 break; | 1125 break; |
1127 | 1126 |
1128 case notcategoryspec: | 1127 case notcategoryspec: |
1129 printf ("/notcategoryspec"); | 1128 fprintf (stderr, "/notcategoryspec"); |
1130 mcnt = *p++; | 1129 mcnt = *p++; |
1131 printf ("/%d", mcnt); | 1130 fprintf (stderr, "/%d", mcnt); |
1132 break; | 1131 break; |
1133 # endif /* emacs */ | 1132 # endif /* emacs */ |
1134 | 1133 |
1135 case begbuf: | 1134 case begbuf: |
1136 printf ("/begbuf"); | 1135 fprintf (stderr, "/begbuf"); |
1137 break; | 1136 break; |
1138 | 1137 |
1139 case endbuf: | 1138 case endbuf: |
1140 printf ("/endbuf"); | 1139 fprintf (stderr, "/endbuf"); |
1141 break; | 1140 break; |
1142 | 1141 |
1143 default: | 1142 default: |
1144 printf ("?%d", *(p-1)); | 1143 fprintf (stderr, "?%d", *(p-1)); |
1145 } | 1144 } |
1146 | 1145 |
1147 putchar ('\n'); | 1146 fprintf (stderr, "\n"); |
1148 } | 1147 } |
1149 | 1148 |
1150 printf ("%d:\tend of pattern.\n", p - start); | 1149 fprintf (stderr, "%d:\tend of pattern.\n", p - start); |
1151 } | 1150 } |
1152 | 1151 |
1153 | 1152 |
1154 void | 1153 void |
1155 print_compiled_pattern (bufp) | 1154 print_compiled_pattern (bufp) |