ir_constant_visitor: Use 'union ir_constant_data' in expression handler
[mesa.git] / ast_type.cpp
index d2e047e2c43940b8c0f576da410747d7e2521238..cb0852bb77331484e97b1ee52ef996d91d54c97d 100644 (file)
 void
 ast_type_specifier::print(void) const
 {
-   switch (type_specifier) {
-   case ast_void: printf("void "); break;
-   case ast_float: printf("float "); break;
-   case ast_int: printf("int "); break;
-   case ast_uint: printf("uint "); break;
-   case ast_bool: printf("bool "); break;
-   case ast_vec2: printf("vec2 "); break;
-   case ast_vec3: printf("vec3 "); break;
-   case ast_vec4: printf("vec4 "); break;
-   case ast_bvec2: printf("bvec2 "); break;
-   case ast_bvec3: printf("bvec3 "); break;
-   case ast_bvec4: printf("bvec4 "); break;
-   case ast_ivec2: printf("ivec2 "); break;
-   case ast_ivec3: printf("ivec3 "); break;
-   case ast_ivec4: printf("ivec4 "); break;
-   case ast_uvec2: printf("uvec2 "); break;
-   case ast_uvec3: printf("uvec3 "); break;
-   case ast_uvec4: printf("uvec4 "); break;
-   case ast_mat2: printf("mat2 "); break;
-   case ast_mat2x3: printf("mat2x3 "); break;
-   case ast_mat2x4: printf("mat2x4 "); break;
-   case ast_mat3x2: printf("mat3x2 "); break;
-   case ast_mat3: printf("mat3 "); break;
-   case ast_mat3x4: printf("mat3x4 "); break;
-   case ast_mat4x2: printf("mat4x2 "); break;
-   case ast_mat4x3: printf("mat4x3 "); break;
-   case ast_mat4: printf("mat4 "); break;
-   case ast_sampler1d: printf("sampler1d "); break;
-   case ast_sampler2d: printf("sampler2d "); break;
-   case ast_sampler3d: printf("sampler3d "); break;
-   case ast_samplercube: printf("samplercube "); break;
-   case ast_sampler1dshadow: printf("sampler1dshadow "); break;
-   case ast_sampler2dshadow: printf("sampler2dshadow "); break;
-   case ast_samplercubeshadow: printf("samplercubeshadow "); break;
-   case ast_sampler1darray: printf("sampler1darray "); break;
-   case ast_sampler2darray: printf("sampler2darray "); break;
-   case ast_sampler1darrayshadow: printf("sampler1darrayshadow "); break;
-   case ast_sampler2darrayshadow: printf("sampler2darrayshadow "); break;
-   case ast_isampler1d: printf("isampler1d "); break;
-   case ast_isampler2d: printf("isampler2d "); break;
-   case ast_isampler3d: printf("isampler3d "); break;
-   case ast_isamplercube: printf("isamplercube "); break;
-   case ast_isampler1darray: printf("isampler1darray "); break;
-   case ast_isampler2darray: printf("isampler2darray "); break;
-   case ast_usampler1d: printf("usampler1d "); break;
-   case ast_usampler2d: printf("usampler2d "); break;
-   case ast_usampler3d: printf("usampler3d "); break;
-   case ast_usamplercube: printf("usamplercube "); break;
-   case ast_usampler1darray: printf("usampler1darray "); break;
-   case ast_usampler2darray: printf("usampler2darray "); break;
-
-   case ast_struct:
+   if (type_specifier == ast_struct) {
       structure->print();
-      break;
-
-   case ast_type_name: printf("%s ", type_name); break;
+   } else {
+      printf("%s ", type_name);
    }
 
    if (is_array) {
@@ -98,6 +46,65 @@ ast_type_specifier::print(void) const
 }
 
 ast_type_specifier::ast_type_specifier(int specifier)
+      : type_specifier(ast_types(specifier)), type_name(NULL), structure(NULL),
+       is_array(false), array_size(NULL), precision(ast_precision_high)
 {
-   type_specifier = ast_types(specifier);
+   static const char *const names[] = {
+      "void",
+      "float",
+      "int",
+      "uint",
+      "bool",
+      "vec2",
+      "vec3",
+      "vec4",
+      "bvec2",
+      "bvec3",
+      "bvec4",
+      "ivec2",
+      "ivec3",
+      "ivec4",
+      "uvec2",
+      "uvec3",
+      "uvec4",
+      "mat2",
+      "mat2x3",
+      "mat2x4",
+      "mat3x2",
+      "mat3",
+      "mat3x4",
+      "mat4x2",
+      "mat4x3",
+      "mat4",
+      "sampler1D",
+      "sampler2D",
+      "sampler2DRect",
+      "sampler3D",
+      "samplerCube",
+      "sampler1DShadow",
+      "sampler2DShadow",
+      "sampler2DRectShadow",
+      "samplerCubeShadow",
+      "sampler1DArray",
+      "sampler2DArray",
+      "sampler1DArrayShadow",
+      "sampler2DArrayShadow",
+      "isampler1D",
+      "isampler2D",
+      "isampler3D",
+      "isamplerCube",
+      "isampler1DArray",
+      "isampler2DArray",
+      "usampler1D",
+      "usampler2D",
+      "usampler3D",
+      "usamplerCube",
+      "usampler1DArray",
+      "usampler2DArray",
+
+      NULL, /* ast_struct */
+      NULL  /* ast_type_name */
+   };
+
+   type_name = names[specifier];
 }