newer version

This commit is contained in:
ceriel
1986-04-23 22:12:22 +00:00
parent e8977ebb57
commit c11efeb1fe
11 changed files with 437 additions and 299 deletions

View File

@@ -33,27 +33,33 @@ number(struct node **p;)
qualident(int types; struct def **pdf; char *str; struct node **p;)
{
register struct def *df;
register struct node **pnd;
struct node *nd;
} :
IDENT { nd = MkNode(Name, NULLNODE, NULLNODE, &dot);
pnd = &nd;
}
[
selector(pnd)
selector(&nd)
]*
{ if (types) {
findname(nd);
assert(nd->nd_class == Def);
*pdf = df = nd->nd_def;
if ( !((types|D_ERROR) & df->df_kind)) {
if (df->df_kind == D_FORWARD) {
node_error(*pnd,"%s \"%s\" not declared", str, df->df_idf->id_text);
}
else {
node_error(*pnd,"identifier \"%s\" is not a %s", df->df_idf->id_text, str);
df = ill_df;
if (chk_designator(nd, QUALONLY)) {
if (nd->nd_class != Def) {
node_error(nd, "%s expected", str);
}
else {
df = nd->nd_def;
if ( !((types|D_ERROR) & df->df_kind)) {
if (df->df_kind == D_FORWARD) {
node_error(nd,"%s \"%s\" not declared", str, df->df_idf->id_text);
}
else {
node_error(nd,"identifier \"%s\" is not a %s", df->df_idf->id_text, str);
}
}
}
}
*pdf = df;
}
if (!p) FreeNode(nd);
else *p = nd;