summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils/cc/sub.c112
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)
{