diff options
Diffstat (limited to 'utils/cc')
| -rw-r--r-- | utils/cc/sub.c | 112 |
1 files changed, 62 insertions, 50 deletions
diff --git a/utils/cc/sub.c b/utils/cc/sub.c index f1572291..46e0cada 100644 --- a/utils/cc/sub.c +++ b/utils/cc/sub.c @@ -9,7 +9,12 @@ new(int t, Node *l, Node *r) n->op = t; n->left = l; n->right = r; - n->lineno = lineno; + if(l && t != OGOTO) + n->lineno = l->lineno; + else if(r) + n->lineno = r->lineno; + else + n->lineno = lineno; newflag = 1; return n; } @@ -103,7 +108,7 @@ prtree1(Node *n, int d, int f) print(" %T", n->type); if(n->complex != 0) print(" (%d)", n->complex); - print("\n"); + print(" %L\n", n->lineno); if(i & 2) prtree1(n->left, d, 1); if(i & 1) @@ -1819,7 +1824,7 @@ urk(char *name, int max, int i) void tinit(void) { - int i; + int *ip; Init *p; for(p=thashinit; p->code >= 0; p++) { @@ -1850,66 +1855,66 @@ tinit(void) urk("onames", nelem(onames), p->code); onames[p->code] = p->s; } - for(i=0; typeiinit[i] >= 0; i++) { - urk("typei", nelem(typei), typeiinit[i]); - typei[typeiinit[i]] = 1; + for(ip=typeiinit; *ip>=0; ip++) { + urk("typei", nelem(typei), *ip); + typei[*ip] = 1; } - for(i=0; typeuinit[i] >= 0; i++) { - urk("typeu", nelem(typeu), typeuinit[i]); - typeu[typeuinit[i]] = 1; + for(ip=typeuinit; *ip>=0; ip++) { + urk("typeu", nelem(typeu), *ip); + typeu[*ip] = 1; } - for(i=0; typesuvinit[i] >= 0; i++) { - urk("typesuv", nelem(typesuv), typesuvinit[i]); - typesuv[typesuvinit[i]] = 1; + for(ip=typesuvinit; *ip>=0; ip++) { + urk("typesuv", nelem(typesuv), *ip); + typesuv[*ip] = 1; } - for(i=0; typeilpinit[i] >= 0; i++) { - urk("typeilp", nelem(typeilp), typeilpinit[i]); - typeilp[typeilpinit[i]] = 1; + for(ip=typeilpinit; *ip>=0; ip++) { + urk("typeilp", nelem(typeilp), *ip); + typeilp[*ip] = 1; } - for(i=0; typechlinit[i] >= 0; i++) { - urk("typechl", nelem(typechl), typechlinit[i]); - typechl[typechlinit[i]] = 1; - typechlv[typechlinit[i]] = 1; - typechlvp[typechlinit[i]] = 1; + for(ip=typechlinit; *ip>=0; ip++) { + urk("typechl", nelem(typechl), *ip); + typechl[*ip] = 1; + typechlv[*ip] = 1; + typechlvp[*ip] = 1; } - for(i=0; typechlpinit[i] >= 0; i++) { - urk("typechlp", nelem(typechlp), typechlpinit[i]); - typechlp[typechlpinit[i]] = 1; - typechlvp[typechlinit[i]] = 1; + for(ip=typechlpinit; *ip>=0; ip++) { + urk("typechlp", nelem(typechlp), *ip); + typechlp[*ip] = 1; + typechlvp[*ip] = 1; } - for(i=0; typechlpfdinit[i] >= 0; i++) { - urk("typechlpfd", nelem(typechlpfd), typechlpfdinit[i]); - typechlpfd[typechlpfdinit[i]] = 1; + for(ip=typechlpfdinit; *ip>=0; ip++) { + urk("typechlpfd", nelem(typechlpfd), *ip); + typechlpfd[*ip] = 1; } - for(i=0; typecinit[i] >= 0; i++) { - urk("typec", nelem(typec), typecinit[i]); - typec[typecinit[i]] = 1; + for(ip=typecinit; *ip>=0; ip++) { + urk("typec", nelem(typec), *ip); + typec[*ip] = 1; } - for(i=0; typehinit[i] >= 0; i++) { - urk("typeh", nelem(typeh), typehinit[i]); - typeh[typehinit[i]] = 1; + for(ip=typehinit; *ip>=0; ip++) { + urk("typeh", nelem(typeh), *ip); + typeh[*ip] = 1; } - for(i=0; typeilinit[i] >= 0; i++) { - urk("typeil", nelem(typeil), typeilinit[i]); - typeil[typeilinit[i]] = 1; + for(ip=typeilinit; *ip>=0; ip++) { + urk("typeil", nelem(typeil), *ip); + typeil[*ip] = 1; } - for(i=0; typevinit[i] >= 0; i++) { - urk("typev", nelem(typev), typevinit[i]); - typev[typevinit[i]] = 1; - typechlv[typevinit[i]] = 1; - typechlvp[typechlinit[i]] = 1; + for(ip=typevinit; *ip>=0; ip++) { + urk("typev", nelem(typev), *ip); + typev[*ip] = 1; + typechlv[*ip] = 1; + typechlvp[*ip] = 1; } - for(i=0; typefdinit[i] >= 0; i++) { - urk("typefd", nelem(typefd), typefdinit[i]); - typefd[typefdinit[i]] = 1; + for(ip=typefdinit; *ip>=0; ip++) { + urk("typefd", nelem(typefd), *ip); + typefd[*ip] = 1; } - for(i=0; typeafinit[i] >= 0; i++) { - urk("typeaf", nelem(typeaf), typeafinit[i]); - typeaf[typeafinit[i]] = 1; + for(ip=typeafinit; *ip>=0; ip++) { + urk("typeaf", nelem(typeaf), *ip); + typeaf[*ip] = 1; } - for(i=0; typesuinit[i] >= 0; i++) { - urk("typesu", nelem(typesu), typesuinit[i]); - typesu[typesuinit[i]] = 1; + for(ip=typesuinit; *ip >= 0; ip++) { + urk("typesu", nelem(typesu), *ip); + typesu[*ip] = 1; } for(p=tasigninit; p->code >= 0; p++) { urk("tasign", nelem(tasign), p->code); @@ -1943,8 +1948,15 @@ tinit(void) urk("trel", nelem(trel), p->code); trel[p->code] = p->value; } + + /* 32-bit defaults */ + typeword = typechlp; + typecmplx = typesuv; } +/* + * return 1 if it is impossible to jump into the middle of n. + */ static int deadhead(Node *n, int caseok) { |
