11591693c7b415e9869157c711fe11263c95d74eDavid Li/*
21591693c7b415e9869157c711fe11263c95d74eDavid Li * Copyright © 2010 Intel Corporation
31591693c7b415e9869157c711fe11263c95d74eDavid Li *
41591693c7b415e9869157c711fe11263c95d74eDavid Li * Permission is hereby granted, free of charge, to any person obtaining a
51591693c7b415e9869157c711fe11263c95d74eDavid Li * copy of this software and associated documentation files (the "Software"),
61591693c7b415e9869157c711fe11263c95d74eDavid Li * to deal in the Software without restriction, including without limitation
71591693c7b415e9869157c711fe11263c95d74eDavid Li * the rights to use, copy, modify, merge, publish, distribute, sublicense,
81591693c7b415e9869157c711fe11263c95d74eDavid Li * and/or sell copies of the Software, and to permit persons to whom the
91591693c7b415e9869157c711fe11263c95d74eDavid Li * Software is furnished to do so, subject to the following conditions:
101591693c7b415e9869157c711fe11263c95d74eDavid Li *
111591693c7b415e9869157c711fe11263c95d74eDavid Li * The above copyright notice and this permission notice (including the next
121591693c7b415e9869157c711fe11263c95d74eDavid Li * paragraph) shall be included in all copies or substantial portions of the
131591693c7b415e9869157c711fe11263c95d74eDavid Li * Software.
141591693c7b415e9869157c711fe11263c95d74eDavid Li *
151591693c7b415e9869157c711fe11263c95d74eDavid Li * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
161591693c7b415e9869157c711fe11263c95d74eDavid Li * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
171591693c7b415e9869157c711fe11263c95d74eDavid Li * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
181591693c7b415e9869157c711fe11263c95d74eDavid Li * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
191591693c7b415e9869157c711fe11263c95d74eDavid Li * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
201591693c7b415e9869157c711fe11263c95d74eDavid Li * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
211591693c7b415e9869157c711fe11263c95d74eDavid Li * DEALINGS IN THE SOFTWARE.
221591693c7b415e9869157c711fe11263c95d74eDavid Li */
231591693c7b415e9869157c711fe11263c95d74eDavid Li
241591693c7b415e9869157c711fe11263c95d74eDavid Li#include <cstdio>
251591693c7b415e9869157c711fe11263c95d74eDavid Li#include "ast.h"
261591693c7b415e9869157c711fe11263c95d74eDavid Liextern "C" {
271591693c7b415e9869157c711fe11263c95d74eDavid Li#include "program/symbol_table.h"
281591693c7b415e9869157c711fe11263c95d74eDavid Li}
291591693c7b415e9869157c711fe11263c95d74eDavid Li
301591693c7b415e9869157c711fe11263c95d74eDavid Livoid
311591693c7b415e9869157c711fe11263c95d74eDavid Liast_type_specifier::print(void) const
321591693c7b415e9869157c711fe11263c95d74eDavid Li{
331591693c7b415e9869157c711fe11263c95d74eDavid Li   if (type_specifier == ast_struct) {
341591693c7b415e9869157c711fe11263c95d74eDavid Li      structure->print();
351591693c7b415e9869157c711fe11263c95d74eDavid Li   } else {
361591693c7b415e9869157c711fe11263c95d74eDavid Li      printf("%s ", type_name);
371591693c7b415e9869157c711fe11263c95d74eDavid Li   }
381591693c7b415e9869157c711fe11263c95d74eDavid Li
391591693c7b415e9869157c711fe11263c95d74eDavid Li   if (is_array) {
401591693c7b415e9869157c711fe11263c95d74eDavid Li      printf("[ ");
411591693c7b415e9869157c711fe11263c95d74eDavid Li
421591693c7b415e9869157c711fe11263c95d74eDavid Li      if (array_size) {
431591693c7b415e9869157c711fe11263c95d74eDavid Li	 array_size->print();
441591693c7b415e9869157c711fe11263c95d74eDavid Li      }
451591693c7b415e9869157c711fe11263c95d74eDavid Li
461591693c7b415e9869157c711fe11263c95d74eDavid Li      printf("] ");
471591693c7b415e9869157c711fe11263c95d74eDavid Li   }
481591693c7b415e9869157c711fe11263c95d74eDavid Li}
491591693c7b415e9869157c711fe11263c95d74eDavid Li
501591693c7b415e9869157c711fe11263c95d74eDavid Liast_type_specifier::ast_type_specifier(int specifier)
511591693c7b415e9869157c711fe11263c95d74eDavid Li      : type_specifier(ast_types(specifier)), type_name(NULL), structure(NULL),
521591693c7b415e9869157c711fe11263c95d74eDavid Li	is_array(false), array_size(NULL), precision(ast_precision_high)
531591693c7b415e9869157c711fe11263c95d74eDavid Li{
541591693c7b415e9869157c711fe11263c95d74eDavid Li   static const char *const names[] = {
551591693c7b415e9869157c711fe11263c95d74eDavid Li      "void",
561591693c7b415e9869157c711fe11263c95d74eDavid Li      "float",
571591693c7b415e9869157c711fe11263c95d74eDavid Li      "int",
581591693c7b415e9869157c711fe11263c95d74eDavid Li      "uint",
591591693c7b415e9869157c711fe11263c95d74eDavid Li      "bool",
601591693c7b415e9869157c711fe11263c95d74eDavid Li      "vec2",
611591693c7b415e9869157c711fe11263c95d74eDavid Li      "vec3",
621591693c7b415e9869157c711fe11263c95d74eDavid Li      "vec4",
631591693c7b415e9869157c711fe11263c95d74eDavid Li      "bvec2",
641591693c7b415e9869157c711fe11263c95d74eDavid Li      "bvec3",
651591693c7b415e9869157c711fe11263c95d74eDavid Li      "bvec4",
661591693c7b415e9869157c711fe11263c95d74eDavid Li      "ivec2",
671591693c7b415e9869157c711fe11263c95d74eDavid Li      "ivec3",
681591693c7b415e9869157c711fe11263c95d74eDavid Li      "ivec4",
691591693c7b415e9869157c711fe11263c95d74eDavid Li      "uvec2",
701591693c7b415e9869157c711fe11263c95d74eDavid Li      "uvec3",
711591693c7b415e9869157c711fe11263c95d74eDavid Li      "uvec4",
721591693c7b415e9869157c711fe11263c95d74eDavid Li      "mat2",
731591693c7b415e9869157c711fe11263c95d74eDavid Li      "mat2x3",
741591693c7b415e9869157c711fe11263c95d74eDavid Li      "mat2x4",
751591693c7b415e9869157c711fe11263c95d74eDavid Li      "mat3x2",
761591693c7b415e9869157c711fe11263c95d74eDavid Li      "mat3",
771591693c7b415e9869157c711fe11263c95d74eDavid Li      "mat3x4",
781591693c7b415e9869157c711fe11263c95d74eDavid Li      "mat4x2",
791591693c7b415e9869157c711fe11263c95d74eDavid Li      "mat4x3",
801591693c7b415e9869157c711fe11263c95d74eDavid Li      "mat4",
811591693c7b415e9869157c711fe11263c95d74eDavid Li      "sampler1D",
821591693c7b415e9869157c711fe11263c95d74eDavid Li      "sampler2D",
831591693c7b415e9869157c711fe11263c95d74eDavid Li      "sampler2DRect",
841591693c7b415e9869157c711fe11263c95d74eDavid Li      "sampler3D",
851591693c7b415e9869157c711fe11263c95d74eDavid Li      "samplerCube",
861591693c7b415e9869157c711fe11263c95d74eDavid Li      "sampler1DShadow",
871591693c7b415e9869157c711fe11263c95d74eDavid Li      "sampler2DShadow",
881591693c7b415e9869157c711fe11263c95d74eDavid Li      "sampler2DRectShadow",
891591693c7b415e9869157c711fe11263c95d74eDavid Li      "samplerCubeShadow",
901591693c7b415e9869157c711fe11263c95d74eDavid Li      "sampler1DArray",
911591693c7b415e9869157c711fe11263c95d74eDavid Li      "sampler2DArray",
921591693c7b415e9869157c711fe11263c95d74eDavid Li      "sampler1DArrayShadow",
931591693c7b415e9869157c711fe11263c95d74eDavid Li      "sampler2DArrayShadow",
941591693c7b415e9869157c711fe11263c95d74eDavid Li      "isampler1D",
951591693c7b415e9869157c711fe11263c95d74eDavid Li      "isampler2D",
961591693c7b415e9869157c711fe11263c95d74eDavid Li      "isampler3D",
971591693c7b415e9869157c711fe11263c95d74eDavid Li      "isamplerCube",
981591693c7b415e9869157c711fe11263c95d74eDavid Li      "isampler1DArray",
991591693c7b415e9869157c711fe11263c95d74eDavid Li      "isampler2DArray",
1001591693c7b415e9869157c711fe11263c95d74eDavid Li      "usampler1D",
1011591693c7b415e9869157c711fe11263c95d74eDavid Li      "usampler2D",
1021591693c7b415e9869157c711fe11263c95d74eDavid Li      "usampler3D",
1031591693c7b415e9869157c711fe11263c95d74eDavid Li      "usamplerCube",
1041591693c7b415e9869157c711fe11263c95d74eDavid Li      "usampler1DArray",
1051591693c7b415e9869157c711fe11263c95d74eDavid Li      "usampler2DArray",
1061591693c7b415e9869157c711fe11263c95d74eDavid Li
1071591693c7b415e9869157c711fe11263c95d74eDavid Li      NULL, /* ast_struct */
1081591693c7b415e9869157c711fe11263c95d74eDavid Li      NULL  /* ast_type_name */
1091591693c7b415e9869157c711fe11263c95d74eDavid Li   };
1101591693c7b415e9869157c711fe11263c95d74eDavid Li
1111591693c7b415e9869157c711fe11263c95d74eDavid Li   type_name = names[specifier];
1121591693c7b415e9869157c711fe11263c95d74eDavid Li}
1131591693c7b415e9869157c711fe11263c95d74eDavid Li
1141591693c7b415e9869157c711fe11263c95d74eDavid Libool
1151591693c7b415e9869157c711fe11263c95d74eDavid Liast_fully_specified_type::has_qualifiers() const
1161591693c7b415e9869157c711fe11263c95d74eDavid Li{
1171591693c7b415e9869157c711fe11263c95d74eDavid Li   return this->qualifier.flags.i != 0;
1181591693c7b415e9869157c711fe11263c95d74eDavid Li}
119