Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
/* 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);
}