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