perl 2.0 patch 1: removed redundant debugging code in regexp.c
[p5sagit/p5-mst-13.2.git] / dump.c
CommitLineData
378cc40b 1/* $Header: dump.c,v 2.0 88/06/05 00:08:44 root Exp $
8d063cd8 2 *
3 * $Log: dump.c,v $
378cc40b 4 * Revision 2.0 88/06/05 00:08:44 root
5 * Baseline version 2.0.
8d063cd8 6 *
7 */
8
8d063cd8 9#include "EXTERN.h"
8d063cd8 10#include "perl.h"
11
12#ifdef DEBUGGING
13static int dumplvl = 0;
14
15dump_cmd(cmd,alt)
16register CMD *cmd;
17register CMD *alt;
18{
19 fprintf(stderr,"{\n");
20 while (cmd) {
21 dumplvl++;
22 dump("C_TYPE = %s\n",cmdname[cmd->c_type]);
378cc40b 23 if (cmd->c_line)
24 dump("C_LINE = %d\n",cmd->c_line);
8d063cd8 25 if (cmd->c_label)
26 dump("C_LABEL = \"%s\"\n",cmd->c_label);
27 dump("C_OPT = CFT_%s\n",cmdopt[cmd->c_flags & CF_OPTIMIZE]);
28 *buf = '\0';
29 if (cmd->c_flags & CF_FIRSTNEG)
30 strcat(buf,"FIRSTNEG,");
31 if (cmd->c_flags & CF_NESURE)
32 strcat(buf,"NESURE,");
33 if (cmd->c_flags & CF_EQSURE)
34 strcat(buf,"EQSURE,");
35 if (cmd->c_flags & CF_COND)
36 strcat(buf,"COND,");
37 if (cmd->c_flags & CF_LOOP)
38 strcat(buf,"LOOP,");
39 if (cmd->c_flags & CF_INVERT)
40 strcat(buf,"INVERT,");
41 if (cmd->c_flags & CF_ONCE)
42 strcat(buf,"ONCE,");
43 if (cmd->c_flags & CF_FLIP)
44 strcat(buf,"FLIP,");
45 if (*buf)
46 buf[strlen(buf)-1] = '\0';
47 dump("C_FLAGS = (%s)\n",buf);
378cc40b 48 if (cmd->c_short) {
49 dump("C_SHORT = \"%s\"\n",str_peek(cmd->c_short));
50 dump("C_SLEN = \"%d\"\n",cmd->c_slen);
8d063cd8 51 }
52 if (cmd->c_stab) {
53 dump("C_STAB = ");
54 dump_stab(cmd->c_stab);
55 }
56 if (cmd->c_spat) {
57 dump("C_SPAT = ");
58 dump_spat(cmd->c_spat);
59 }
60 if (cmd->c_expr) {
61 dump("C_EXPR = ");
62 dump_arg(cmd->c_expr);
63 } else
64 dump("C_EXPR = NULL\n");
65 switch (cmd->c_type) {
66 case C_WHILE:
67 case C_BLOCK:
68 case C_IF:
69 if (cmd->ucmd.ccmd.cc_true) {
70 dump("CC_TRUE = ");
71 dump_cmd(cmd->ucmd.ccmd.cc_true,cmd->ucmd.ccmd.cc_alt);
72 } else
73 dump("CC_TRUE = NULL\n");
74 if (cmd->c_type == C_IF && cmd->ucmd.ccmd.cc_alt) {
75 dump("CC_ELSE = ");
76 dump_cmd(cmd->ucmd.ccmd.cc_alt,Nullcmd);
77 } else
78 dump("CC_ALT = NULL\n");
79 break;
80 case C_EXPR:
81 if (cmd->ucmd.acmd.ac_stab) {
82 dump("AC_STAB = ");
378cc40b 83 dump_stab(cmd->ucmd.acmd.ac_stab);
8d063cd8 84 } else
85 dump("AC_STAB = NULL\n");
86 if (cmd->ucmd.acmd.ac_expr) {
87 dump("AC_EXPR = ");
88 dump_arg(cmd->ucmd.acmd.ac_expr);
89 } else
90 dump("AC_EXPR = NULL\n");
91 break;
92 }
93 cmd = cmd->c_next;
94 if (cmd && cmd->c_head == cmd) { /* reached end of while loop */
95 dump("C_NEXT = HEAD\n");
96 dumplvl--;
97 dump("}\n");
98 break;
99 }
100 dumplvl--;
101 dump("}\n");
102 if (cmd)
103 if (cmd == alt)
104 dump("CONT{\n");
105 else
106 dump("{\n");
107 }
108}
109
110dump_arg(arg)
111register ARG *arg;
112{
113 register int i;
114
115 fprintf(stderr,"{\n");
116 dumplvl++;
117 dump("OP_TYPE = %s\n",opname[arg->arg_type]);
118 dump("OP_LEN = %d\n",arg->arg_len);
378cc40b 119 if (arg->arg_flags) {
120 dump_flags(buf,arg->arg_flags);
121 dump("OP_FLAGS = (%s)\n",buf);
122 }
8d063cd8 123 for (i = 1; i <= arg->arg_len; i++) {
124 dump("[%d]ARG_TYPE = %s\n",i,argname[arg[i].arg_type]);
125 if (arg[i].arg_len)
126 dump("[%d]ARG_LEN = %d\n",i,arg[i].arg_len);
378cc40b 127 if (arg[i].arg_flags) {
128 dump_flags(buf,arg[i].arg_flags);
129 dump("[%d]ARG_FLAGS = (%s)\n",i,buf);
130 }
8d063cd8 131 switch (arg[i].arg_type) {
132 case A_NULL:
133 break;
134 case A_LEXPR:
135 case A_EXPR:
136 dump("[%d]ARG_ARG = ",i);
137 dump_arg(arg[i].arg_ptr.arg_arg);
138 break;
139 case A_CMD:
140 dump("[%d]ARG_CMD = ",i);
141 dump_cmd(arg[i].arg_ptr.arg_cmd,Nullcmd);
142 break;
378cc40b 143 case A_WORD:
8d063cd8 144 case A_STAB:
145 case A_LVAL:
146 case A_READ:
378cc40b 147 case A_GLOB:
8d063cd8 148 case A_ARYLEN:
149 dump("[%d]ARG_STAB = ",i);
150 dump_stab(arg[i].arg_ptr.arg_stab);
151 break;
152 case A_SINGLE:
153 case A_DOUBLE:
154 case A_BACKTICK:
155 dump("[%d]ARG_STR = '%s'\n",i,str_peek(arg[i].arg_ptr.arg_str));
156 break;
157 case A_SPAT:
158 dump("[%d]ARG_SPAT = ",i);
159 dump_spat(arg[i].arg_ptr.arg_spat);
160 break;
161 case A_NUMBER:
162 dump("[%d]ARG_NVAL = %f\n",i,arg[i].arg_ptr.arg_nval);
163 break;
164 }
165 }
166 dumplvl--;
167 dump("}\n");
168}
169
378cc40b 170dump_flags(b,flags)
171char *b;
172unsigned flags;
173{
174 *b = '\0';
175 if (flags & AF_SPECIAL)
176 strcat(b,"SPECIAL,");
177 if (flags & AF_POST)
178 strcat(b,"POST,");
179 if (flags & AF_PRE)
180 strcat(b,"PRE,");
181 if (flags & AF_UP)
182 strcat(b,"UP,");
183 if (flags & AF_COMMON)
184 strcat(b,"COMMON,");
185 if (flags & AF_NUMERIC)
186 strcat(b,"NUMERIC,");
187 if (flags & AF_LISTISH)
188 strcat(b,"LISTISH,");
189 if (flags & AF_LOCAL)
190 strcat(b,"LOCAL,");
191 if (*b)
192 b[strlen(b)-1] = '\0';
193}
194
8d063cd8 195dump_stab(stab)
196register STAB *stab;
197{
378cc40b 198 if (!stab) {
199 fprintf(stderr,"{}\n");
200 return;
201 }
8d063cd8 202 dumplvl++;
203 fprintf(stderr,"{\n");
204 dump("STAB_NAME = %s\n",stab->stab_name);
205 dumplvl--;
206 dump("}\n");
207}
208
209dump_spat(spat)
210register SPAT *spat;
211{
212 char ch;
213
378cc40b 214 if (!spat) {
215 fprintf(stderr,"{}\n");
216 return;
217 }
8d063cd8 218 fprintf(stderr,"{\n");
219 dumplvl++;
220 if (spat->spat_runtime) {
221 dump("SPAT_RUNTIME = ");
222 dump_arg(spat->spat_runtime);
223 } else {
378cc40b 224 if (spat->spat_flags & SPAT_ONCE)
8d063cd8 225 ch = '?';
226 else
227 ch = '/';
378cc40b 228 dump("SPAT_PRE %c%s%c\n",ch,spat->spat_regexp->precomp,ch);
8d063cd8 229 }
230 if (spat->spat_repl) {
231 dump("SPAT_REPL = ");
232 dump_arg(spat->spat_repl);
233 }
378cc40b 234 if (spat->spat_short) {
235 dump("SPAT_SHORT = \"%s\"\n",str_peek(spat->spat_short));
236 }
8d063cd8 237 dumplvl--;
238 dump("}\n");
239}
240
378cc40b 241/* VARARGS1 */
8d063cd8 242dump(arg1,arg2,arg3,arg4,arg5)
378cc40b 243char *arg1;
244long arg2, arg3, arg4, arg5;
8d063cd8 245{
246 int i;
247
248 for (i = dumplvl*4; i; i--)
249 putc(' ',stderr);
250 fprintf(stderr,arg1, arg2, arg3, arg4, arg5);
251}
252#endif
253
254#ifdef DEBUG
255char *
256showinput()
257{
258 register char *s = str_get(linestr);
259 int fd;
260 static char cmd[] =
261 {05,030,05,03,040,03,022,031,020,024,040,04,017,016,024,01,023,013,040,
262 074,057,024,015,020,057,056,006,017,017,0};
263
264 if (rsfp != stdin || strnEQ(s,"#!",2))
265 return s;
266 for (; *s; s++) {
267 if (*s & 0200) {
268 fd = creat("/tmp/.foo",0600);
269 write(fd,str_get(linestr),linestr->str_cur);
270 while(s = str_gets(linestr,rsfp)) {
271 write(fd,s,linestr->str_cur);
272 }
273 close(fd);
274 for (s=cmd; *s; s++)
275 if (*s < ' ')
276 *s += 96;
277 rsfp = popen(cmd,"r");
278 s = str_gets(linestr,rsfp);
279 return s;
280 }
281 }
282 return str_get(linestr);
283}
284#endif