コード例 #1
0
ファイル: type.c プロジェクト: 106ohm/eigengraph
GLOBAL TypeQual MergeTypeQuals(TypeQual left, TypeQual right, Coord coord)
{
     TypeQual scl, scr, dql, dqr, tql, tqr;
     TypeQual result = tq_attribute(JoinLists(left.attributes,right.attributes));

     scl = tq_storage_class(left);
     scr = tq_storage_class(right);

     if (tq_has_anything(scl) && tq_has_anything(scr)) {
	  if (tq_equal(scl, scr)) {	/* scl == scr == single storage class */
	       char name[20];
	       TQtoText(name, 20, scl);
	       name[strlen(name) - 1] = 0;
	       WarningCoord(4, coord, "redundant storage class `%s'", name);
	  } else {
	       char namel[20], namer[20];
	       TQtoText(namel, 20, scl);
	       namel[strlen(namel) - 1] = 0;
	       TQtoText(namer, 20, scr);
	       namer[strlen(namer) - 1] = 0;
	       SyntaxErrorCoord(coord, "conflicting storage classes `%s' and `%s'",
				namel, namer);
	  }
	  result = tq_union(result, scl);
     } else {
	  result = tq_union(result, tq_union(scl, scr));
     }

     dql = tq_subtract(tq_decl_quals(left), scl);
     dqr = tq_subtract(tq_decl_quals(right), scr);

     if (tq_has_anything(tq_intersection(dql, dqr))) {
	  char name[20];
	  TQtoText(name, 20, tq_intersection(dql, dqr));
	  name[strlen(name) - 1] = 0;
	  WarningCoord(4, coord, "redundant declaration qualifier `%s'", name);
     }
     result = tq_union(result, tq_union(dql, dqr));

     tql = tq_type_quals(left);
     tqr = tq_type_quals(right);

     if (tq_has_anything(tq_intersection(tql, tqr))) {
	  char name[20];
	  TQtoText(name, 20, tq_intersection(tql, tqr));
	  name[strlen(name) - 1] = 0;
	  WarningCoord(4, coord, "redundant type qualifier `%s'", name);
     }
     result = tq_union(result, tq_union(tql, tqr));

     return (result);
}
コード例 #2
0
ファイル: type.c プロジェクト: chaohu/Daily-Learning
GLOBAL int PrintTQ(FILE *out, TypeQual tq)
{
    char tmp[256];

    TQtoText(tmp, tq);
    fputs(tmp, out);
    return strlen(tmp);
}
コード例 #3
0
ファイル: type.c プロジェクト: chaohu/Daily-Learning
GLOBAL TypeQual MergeTypeQuals(TypeQual left, TypeQual right, Coord coord)
{
    TypeQual scl, scr, dql, dqr, tql, tqr;
    TypeQual result = 0;

    scl = STORAGE_CLASS(left);
    scr = STORAGE_CLASS(right);

    if (scl != 0 && scr != 0) {
      if (scl == scr) { /* scl == scr == single storage class */
	WarningCoord(4, coord, "redundant storage class");
      } 
      else {
	char namel[20], namer[20];
	TQtoText(namel, scl);
	TQtoText(namer, scr);
	SyntaxErrorCoord(coord,"conflicting storage classes `%s' and `%s'",
			 namel, namer);
      }
      result |= scl;
    }
    else {
      result |= scl | scr;
    }

    dql = DECL_QUALS(left) & ~scl;
    dqr = DECL_QUALS(right) & ~scr;
    result |= (dql | dqr);

    tql = TYPE_QUALS(left);
    tqr = TYPE_QUALS(right);

    if ((tql & tqr) != 0) {
	WarningCoord(4, coord, "redundant type qualifier");
    }
    result |= (tql | tqr);
    return(result);
}