GLOBAL Node *TypeQualifyNode(Node *node, TypeQual tq) { switch(node->typ) { case Prim: node->u.prim.tq = MergeTypeQuals(node->u.prim.tq, tq, node->coord); break; case Tdef: node->u.tdef.tq = MergeTypeQuals(node->u.tdef.tq, tq, node->coord); break; case Ptr: node->u.ptr.tq = MergeTypeQuals(node->u.ptr.tq, tq, node->coord); break; case Adcl: node->u.adcl.tq = MergeTypeQuals(node->u.adcl.tq, tq, node->coord); break; case Sdcl: node->u.sdcl.tq = MergeTypeQuals(node->u.sdcl.tq, tq, node->coord); break; case Udcl: node->u.udcl.tq = MergeTypeQuals(node->u.udcl.tq, tq, node->coord); break; case Edcl: node->u.edcl.tq = MergeTypeQuals(node->u.edcl.tq, tq, node->coord); break; /* added by Manish 1/31/94 */ case Fdcl: node->u.fdcl.tq = MergeTypeQuals(node->u.fdcl.tq,tq, node->coord); break; default: PrintNode(stdout, node, 0); printf("\n"); /* this assertion always fails */ /*assert(("Unexpected node type", FALSE));*/ assert(FALSE); break; } return(node); }
/* The tq_coord is passed in and the resulting coord is the min of the original coord and the new coord. * That is because in the process of parsing, you can actually have a terminal X that appears after terminal Y and * yet terminal X's coordinate is before terminal Y's coord, and we end up with nonidempotent parsing. * How can this happen? Line directives can make it happen. */ GLOBAL Node *TypeQualifyNode(Node *node, TypeQual tq, Coord *tq_coord) { switch (node->typ) { case Prim: node->u.prim.tq = MergeTypeQuals(node->u.prim.tq, tq, node->coord); break; case Tdef: node->u.tdef.tq = MergeTypeQuals(node->u.tdef.tq, tq, node->coord); break; case Ptr: node->u.ptr.tq = MergeTypeQuals(node->u.ptr.tq, tq, node->coord); break; case Adcl: node->u.adcl.tq = MergeTypeQuals(node->u.adcl.tq, tq, node->coord); break; case Sdcl: node->u.sdcl.tq = MergeTypeQuals(node->u.sdcl.tq, tq, node->coord); break; case Udcl: node->u.udcl.tq = MergeTypeQuals(node->u.udcl.tq, tq, node->coord); break; case Edcl: node->u.edcl.tq = MergeTypeQuals(node->u.edcl.tq, tq, node->coord); break; /* added by Manish 1/31/94 */ case Fdcl: node->u.fdcl.tq = MergeTypeQuals(node->u.fdcl.tq, tq, node->coord); break; default: fPrintNode(stdout, node, 0); printf("\n"); /* this assertion always fails */ FAIL("Unexpected node type"); } if (tq_coord) minf_coord(&node->coord, tq_coord); return (node); }