Home | History | Annotate | Download | only in glsl
      1 /*
      2  * Copyright  2010 Intel Corporation
      3  *
      4  * Permission is hereby granted, free of charge, to any person obtaining a
      5  * copy of this software and associated documentation files (the "Software"),
      6  * to deal in the Software without restriction, including without limitation
      7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
      8  * and/or sell copies of the Software, and to permit persons to whom the
      9  * Software is furnished to do so, subject to the following conditions:
     10  *
     11  * The above copyright notice and this permission notice (including the next
     12  * paragraph) shall be included in all copies or substantial portions of the
     13  * Software.
     14  *
     15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
     20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
     21  * DEALINGS IN THE SOFTWARE.
     22  */
     23 #include <cstdio>
     24 #include <cassert>
     25 #include "ast.h"
     26 
     27 const char *
     28 ast_expression::operator_string(enum ast_operators op)
     29 {
     30    static const char *const operators[] = {
     31       "=",
     32       "+",
     33       "-",
     34       "+",
     35       "-",
     36       "*",
     37       "/",
     38       "%",
     39       "<<",
     40       ">>",
     41       "<",
     42       ">",
     43       "<=",
     44       ">=",
     45       "==",
     46       "!=",
     47       "&",
     48       "^",
     49       "|",
     50       "~",
     51       "&&",
     52       "^^",
     53       "||",
     54       "!",
     55 
     56       "*=",
     57       "/=",
     58       "%=",
     59       "+=",
     60       "-=",
     61       "<<=",
     62       ">>=",
     63       "&=",
     64       "^=",
     65       "|=",
     66 
     67       "?:",
     68 
     69       "++",
     70       "--",
     71       "++",
     72       "--",
     73       ".",
     74    };
     75 
     76    assert((unsigned int)op < sizeof(operators) / sizeof(operators[0]));
     77 
     78    return operators[op];
     79 }
     80 
     81 
     82 ast_expression_bin::ast_expression_bin(int oper, ast_expression *ex0,
     83 				       ast_expression *ex1) :
     84    ast_expression(oper, ex0, ex1, NULL)
     85 {
     86    assert((oper >= ast_plus) && (oper <= ast_logic_not));
     87 }
     88 
     89 
     90 void
     91 ast_expression_bin::print(void) const
     92 {
     93    subexpressions[0]->print();
     94    printf("%s ", operator_string(oper));
     95    subexpressions[1]->print();
     96 }
     97