Revert "Eliminate bitfield enum members."

This reverts commit 56702e6d60883f2d1e33641b907680a852cdb15a.
diff --git a/src/compiler/Intermediate.cpp b/src/compiler/Intermediate.cpp
index a25fc08..21098f0 100644
--- a/src/compiler/Intermediate.cpp
+++ b/src/compiler/Intermediate.cpp
@@ -1262,12 +1262,12 @@
                     return 0;
                 }
 
-                const char leftCols = getCols();
-                const char leftRows = getRows();
-                const char rightCols = constantNode->getType().getCols();
-                const char rightRows = constantNode->getType().getRows();
-                const char resultCols = rightCols;
-                const char resultRows = leftRows;
+                const int leftCols = getCols();
+                const int leftRows = getRows();
+                const int rightCols = constantNode->getType().getCols();
+                const int rightRows = constantNode->getType().getRows();
+                const int resultCols = rightCols;
+                const int resultRows = leftRows;
 
                 tempConstArray = new ConstantUnion[resultCols*resultRows];
                 for (int row = 0; row < resultRows; row++)
@@ -1347,8 +1347,8 @@
                     return 0;
                 }
 
-                const char matrixCols = getCols();
-                const char matrixRows = getRows();
+                const int matrixCols = getCols();
+                const int matrixRows = getRows();
 
                 tempConstArray = new ConstantUnion[matrixRows];
 
@@ -1378,8 +1378,8 @@
                     return 0;
                 }
 
-                const char matrixCols = constantNode->getType().getCols();
-                const char matrixRows = constantNode->getType().getRows();
+                const int matrixCols = constantNode->getType().getCols();
+                const int matrixRows = constantNode->getType().getRows();
 
                 tempConstArray = new ConstantUnion[matrixCols];
 
diff --git a/src/compiler/Types.h b/src/compiler/Types.h
index c0eccbf..c71a053 100644
--- a/src/compiler/Types.h
+++ b/src/compiler/Types.h
@@ -140,7 +140,7 @@
 public:
     POOL_ALLOCATOR_NEW_DELETE(GlobalPoolAllocator)
     TType() {}
-    TType(TBasicType t, TPrecision p, TQualifier q = EvqTemporary, char ps = 1, char ss = 1, bool a = false) :
+    TType(TBasicType t, TPrecision p, TQualifier q = EvqTemporary, int ps = 1, int ss = 1, bool a = false) :
             type(t), precision(p), qualifier(q), primarySize(ps), secondarySize(ss), array(a), layoutQualifier(TLayoutQualifier::create()), arraySize(0),
             interfaceBlock(0), structure(0)
     {
@@ -169,12 +169,12 @@
     TLayoutQualifier getLayoutQualifier() const { return layoutQualifier; }
     void setLayoutQualifier(TLayoutQualifier lq) { layoutQualifier = lq; }
 
-    char getNominalSize() const { return primarySize; }
-    char getSecondarySize() const { return secondarySize; }
-    char getCols() const { ASSERT(isMatrix()); return primarySize; }
-    char getRows() const { ASSERT(isMatrix()); return secondarySize; }
-    void setPrimarySize(char ps) { primarySize = ps; }
-    void setSecondarySize(char ss) { secondarySize = ss; }
+    int getNominalSize() const { return primarySize; }
+    int getSecondarySize() const { return secondarySize; }
+    int getCols() const { ASSERT(isMatrix()); return primarySize; }
+    int getRows() const { ASSERT(isMatrix()); return secondarySize; }
+    void setPrimarySize(int ps) { primarySize = ps; }
+    void setSecondarySize(int ss) { secondarySize = ss; }
 
     // Full size of single instance of type
     size_t getObjectSize() const;
@@ -258,18 +258,18 @@
         return structure ? structure->containsArrays() : false;
     }
 
-private:
+protected:
     TString buildMangledName() const;
     size_t getStructSize() const;
     void computeDeepestStructNesting();
 
-    TBasicType type;
-    TPrecision precision;
-    TQualifier qualifier;
+    TBasicType type      : 6;
+    TPrecision precision : 4;
+    TQualifier qualifier : 7;
+    unsigned int array   : 1;
     TLayoutQualifier layoutQualifier;
-    char primarySize; // size of vector or cols matrix
-    char secondarySize; // rows of a matrix
-    bool array;
+    int primarySize; // size of vector or cols matrix
+    int secondarySize; // rows of a matrix
     int arraySize;
 
     // 0 unless this is an interface block, or interface block member variable
@@ -296,8 +296,8 @@
     TLayoutQualifier layoutQualifier;
     TQualifier qualifier;
     TPrecision precision;
-    char primarySize;          // size of vector or cols of matrix
-    char secondarySize;        // rows of matrix
+    int primarySize;          // size of vector or cols of matrix
+    int secondarySize;        // rows of matrix
     bool array;
     int arraySize;
     TType* userDef;
@@ -317,12 +317,12 @@
         line = ln;
     }
 
-    void setAggregate(char size)
+    void setAggregate(int size)
     {
         primarySize = size;
     }
 
-    void setMatrix(char c, char r)
+    void setMatrix(int c, int r)
     {
         ASSERT(c > 1 && r > 1 && c <= 4 && r <= 4);
         primarySize = c;
@@ -355,19 +355,19 @@
         return primarySize > 1 && secondarySize == 1;
     }
 
-    char getCols() const
+    int getCols() const
     {
         ASSERT(isMatrix());
         return primarySize;
     }
 
-    char getRows() const
+    int getRows() const
     {
         ASSERT(isMatrix());
         return secondarySize;
     }
 
-    char getNominalSize() const
+    int getNominalSize() const
     {
         return primarySize;
     }
diff --git a/src/compiler/intermediate.h b/src/compiler/intermediate.h
index fa5256a..17571bd 100644
--- a/src/compiler/intermediate.h
+++ b/src/compiler/intermediate.h
@@ -266,10 +266,10 @@
     TBasicType getBasicType() const { return type.getBasicType(); }
     TQualifier getQualifier() const { return type.getQualifier(); }
     TPrecision getPrecision() const { return type.getPrecision(); }
-    char getCols() const { return type.getCols(); }
-    char getRows() const { return type.getRows(); }
-    char getNominalSize() const { return type.getNominalSize(); }
-    char getSecondarySize() const { return type.getSecondarySize(); }
+    int getCols() const { return type.getCols(); }
+    int getRows() const { return type.getRows(); }
+    int getNominalSize() const { return type.getNominalSize(); }
+    int getSecondarySize() const { return type.getSecondarySize(); }
     
     bool isInterfaceBlock() const { return type.isInterfaceBlock(); }
     bool isMatrix() const { return type.isMatrix(); }