|
|
1.1 root 1: #include "awk.def"
2: #include "stdio.h"
3: #include "awk.h"
4: #define printit(n) printf(printname[n-FIRSTTOKEN]);
5: extern char *printname[];
6: extern cell fldtab[];
7:
8: dump(a,b) node *a, *b;
9: {
10: #ifdef DEBUG
11: node *x;
12: if(a==nullstat) return;
13: for(x=a;x!=NULL;x=x->nnext)
14: {
15: if(x==b) printf(" *** ");
16: if(x->ntype==NVALUE)
17: { switch(x->subtype)
18: {
19: default: runerror();
20: case CCON: case CVAR:
21: printf("%s",x->nobj->nval);
22: continue;
23: case CFLD:
24: if(x->nobj->nval==0) printf("$%d",x->nobj - fldtab);
25: else printf("$0");
26: continue;
27: }
28: }
29: else if(x->ntype==PASTAT2)
30: { pa2dump(x,b);
31: continue;
32: }
33: switch(x->nobj)
34: {
35: default: runerror();
36: case LE: case LT: case EQ:
37: case NE: case GT: case GE:
38: case MATCH: case NOTMATCH:
39: case ADD: case MINUS: case MULT:
40: case DIVIDE: case MOD: case ASGNOP:
41: case BOR: case AND: case CAT:
42: dump(x->narg[0], b);
43: printit(x->nobj);
44: if(x->nobj!=MATCH && x->nobj!=NOTMATCH)
45: dump(x->narg[1]);
46: else printf("regex");
47: break;
48: case UMINUS: case FNCN: case INCR:
49: case DECR: case INDIRECT:
50: printit(x->nobj);
51: dump(x->narg[0], b);
52: break;
53: case PRINT: case PRINTF: case SPRINTF:
54: case SPLIT:
55: printit(x->nobj);
56: dump(x->narg[0], b);
57: if(x->nobj==SPLIT || x->nobj==SPRINTF) break;
58: if(x->narg[1]==0) break;
59: printit((int)x->narg[1]);
60: dump(x->narg[2], b);
61: break;
62: case IF: case WHILE:
63: printit(x->nobj);
64: dump(x->narg[0], b);
65: printf(") ");
66: dump(x->narg[1], b);
67: if(x->narg[2]==NULL) break;
68: printit(ELSE);
69: dump(x->narg[2], b);
70: break;
71: case FOR:
72: printit(x->nobj);
73: dump(x->narg[0], b);
74: putchar(';');
75: dump(x->narg[1], b);
76: putchar(';');
77: dump(x->narg[2], b);
78: printf(") ");
79: dump(x->narg[3], b);
80: break;
81: case NEXT: case EXIT: case BREAK: case CONTINUE:
82: printit(x->nobj);
83: break;
84: case PROGRAM:
85: if(x->narg[0]!=NULL)
86: { printf("BEGIN {");
87: dump(x->narg[0], b);
88: printf("}\n");
89: }
90: dump(x->narg[1], b);
91: if(x->narg[2]!=NULL)
92: { printf("END {");
93: dump(x->narg[2], b);
94: printf("}\n");
95: }
96: break;
97: case PASTAT:
98: dump(x->narg[0], b);
99: printf("{");
100: dump(x->narg[1], b);
101: printf("}\n");
102: break;
103: case ARRAY:
104: printf(x->nval);
105: printf("[");
106: dump(x->narg[1], b);
107: printf("]");
108: break;
109: case SUBSTR:
110: printit(x->nobj);
111: dump(x->narg[0], b);
112: putchar(',');
113: dump(x->narg[1], b);
114: if(x->narg[2]!=NULL)
115: { putchar(',');
116: dump(x->narg[2], b);
117: }
118: putchar(')');
119: break;
120: }
121: if(x->ntype == NSTAT) putchar('\n');
122: }
123: #endif
124: }
125: pa2dump(a, b) node *a, *b;
126: {
127: #ifdef DEBUG
128: dump(a->narg[0], b);
129: printf(", ");
130: dump(a->narg[1], b);
131: printf(" {");
132: dump(a->narg[2], b);
133: printf("}\n");
134: #endif
135: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.