if(p
->vtype
==TYSUBR
) return;
p
->vtype
= p
->leftp
->vtype
;
p
->vtypep
= p
->leftp
->vtypep
;
n
= impltype
[p
->sthead
->namep
[0] - 'a' ];
if(n
==TYREAL
&& p
->vprec
!=0)
sprintf(msg
, "%s implicitly typed %s",p
->sthead
->namep
, types
[n
]);
if(p
->blklevel
>1 && p
->vdclstart
==0)
p
->blklevel
= q
->blklevel
= p
->sthead
->blklevel
= 1;
p
->vdclstart
= q
->vdclstart
= 1;
/* if(p->vclass == CLARG) return; */
/* external names are automatically at block level 1 */
p
->sthead
->varp
->blklevel
= 1;
if(p
->vclass
!=CLUNDEFINED
&& p
->vclass
!=CLARG
)
dclerr("illegal class for procedure", q
);
if(p
->vclass
!=CLARG
&& strlen(q
)>XL
)
dclerr("procedure name too long", q
);
dclerr("procedure name already used", q
);
for(i
=0 ; i
<NFTNTYPES
; ++i
)
p
->vextbase
= p
->vbase
[i
];
else p
->vextbase
= nxtftn();
if(p
->vext
==0 || p
->vclass
!=CLARG
)
for(s
= ftnames
[ p
->vextbase
]; *s
++ = *q
++ ; ) ;
if( ioop(p
->leftp
->sthead
->namep
) )
p
->vtype
= p
->leftp
->vtype
;
p
->vtypep
= p
->leftp
->vtypep
;
cpblock(q
,p
, sizeof(struct exprblock
));
if(inbound
|| p
->vdcldone
) return;
fatal("mkftnp: zero argument");
if(p
->tag
!=TNAME
&& p
->tag
!=TTEMP
)
badtag("mkftnp", p
->tag
);
if(p
->vtype
== TYUNDEFINED
)
p
->vbase
[ eflftn
[p
->vtype
] ] = nxtftn();
k
= p
->vtypep
->basetypes
;
for(i
=0; i
<NFTNTYPES
; ++i
)
fatal1("invalid type for %s", p
->sthead
->namep
);
register struct stentry
**hp
;
for(hp
= hashtab
; hp
<hashend
; ++hp
)
if(*hp
&& (p
= (*hp
)->varp
) )
for(p
= gonelist
; p
; p
= p
->nextp
)
for(p
= hidlist
; p
; p
= p
->nextp
)
if(p
->datap
->tag
== TNAME
) mkft(p
->datap
);
for(p
= tempvarlist
; p
; p
= p
->nextp
)
TEST
fprintf(diagfile
, "Fortran names:\n");
TEST
for(i
=1; i
<=nftnames
; ++i
) fprintf(diagfile
, "%s\n", ftnames
[i
]);
if(p
->vdcldone
==0 && p
!=procname
)
if(p
->vext
&& p
->vtype
==TYUNDEFINED
)
else if(p
->vextbase
==0 && p
->vadjdim
==0 && p
->vclass
!=CLCOMMON
)
warn1("%s never used", p
->sthead
->namep
);
mkftname(p
->vextbase
, p
->sthead
->namep
);
for(i
=0; i
<NFTNTYPES
; ++i
)
if(p
!=procname
&& p
->vextbase
!=0)
s
= ftnames
[p
->vextbase
];
t
= ftnames
[p
->vbase
[i
]];
mkftname(p
->vbase
[i
], p
->sthead
->namep
);
mkftname(p
->vbase
[i
], CHNULL
);
if(ftnames
[n
][0] != '\0') return;
for(i
=0; i
<k
&& i
<(XL
/2) ; ++i
)
for(*c1
= '1' ; *c1
<= '9' ; *c1
+= 1)
for(*c1
= '1' ; *c1
<= '9' ; *c1
+= 1)
for(*c2
= '0' ; *c2
<= '9' ; *c2
+= 1)
fatal1("mkftname: cannot generate fortran name for %s", s
);
if( ++nftnames
< MAXFTNAMES
)
ftnames
[nftnames
][0] = '\0';
fatal("too many Fortran names generated");
for(i
=1 ; i
<=nftnames
; ++i
)
if(equals(ftnames
[i
],s
)) return(i
);
ptr
mkftnblock(type
, name
)
register struct varblock
*p
;
if( (k
= lookftn(name
)) == 0)
strcpy(ftnames
[k
], name
);
p
->vbase
[ eflftn
[type
] ] = k
;