]> andersk Git - splint.git/blobdiff - src/ctbase.i
Fixed line counting for #pragma's.
[splint.git] / src / ctbase.i
index de8346e4daf2ba04b9f01d81b719a8453ad01fc4..6fbb3c3d8534697e66535369e9d2b69ea7d46e4b 100644 (file)
@@ -458,7 +458,14 @@ ctbase_typeId (ctbase c)
     {
       if (ctbase_isConj (c)) 
        {
-         return ctbase_typeId (ctype_getCtbase (ctbase_getConjA (c)));
+         if (ctype_isUA (ctbase_getConjA (c))) {
+           return ctbase_typeId (ctype_getCtbase (ctbase_getConjA (c)));
+         } else if (ctype_isUA (ctbase_getConjB (c))) {
+           return ctbase_typeId (ctype_getCtbase (ctbase_getConjB (c)));
+         } else {
+           llcontbug (message ("ctbase_typeId: bad call: %q", ctbase_unparse (c)));
+           return typeId_invalid;
+         }
        }
       else
        {
@@ -501,11 +508,67 @@ ctbase_unparse (ctbase c)
          return (message ("%t *", c->contents.base));
        }
     case CT_FIXEDARRAY:
-      return (message ("%t [%d]", 
-                      c->contents.farray->base, 
-                      (int) c->contents.farray->size));
+      /*
+      ** C prints out array declarations backwards, if
+      ** base is an array need to print out in reverse order.
+      */
+
+      if (ctype_isArray (c->contents.farray->base)) 
+       {
+         ctype base = c->contents.farray->base;
+         cstring res = message ("[%d]", (int) c->contents.farray->size);
+
+         while (ctype_isArray (base)) 
+           {
+             if (ctype_isFixedArray (base)) 
+               {
+                 res = message ("%q[%d]", 
+                                res, (int) ctype_getArraySize (base));
+               }
+             else
+               {
+                 res = message ("%q[]", res);
+               }
+
+             base = ctype_baseArrayPtr (base);
+           }
+
+         return (message ("%t %q", base, res));
+       } 
+      else 
+       {
+         return (message ("%t [%d]", 
+                          c->contents.farray->base, 
+                          (int) c->contents.farray->size));
+       }
     case CT_ARRAY:
-      return (message ("%t []", c->contents.base));
+      if (ctype_isArray (c->contents.base)) 
+       {
+         ctype base = c->contents.base;
+         cstring res = cstring_makeLiteral ("[]");
+
+         while (ctype_isArray (base)) 
+           {
+             if (ctype_isFixedArray (base)) 
+               {
+                 res = message ("%q[%d]", 
+                                res, (int) ctype_getArraySize (base));
+               }
+             else
+               {
+                 res = message ("%q[]", res);
+               }
+
+             base = ctype_baseArrayPtr (base);
+           }
+
+         return (message ("%t %q", base, res));
+
+       }
+      else
+       {
+         return (message ("%t []", c->contents.base));
+       }
     case CT_FCN:
       return (message ("[function (%q) returns %t]",
                       uentryList_unparseParams (c->contents.fcn->params),
@@ -2664,7 +2727,7 @@ int ctbase_getSize (ctbase ct)
            return ctype_getSize (ct->contents.base);
          }
       }
-    case CT_FIXEDARRAY: //!
+    case CT_FIXEDARRAY: 
     case CT_ARRAY:
     case CT_FCN:
     case CT_STRUCT:
This page took 0.065729 seconds and 4 git commands to generate.