188349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick/* 288349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * Copyright © 2010 Intel Corporation 388349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * 488349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * Permission is hereby granted, free of charge, to any person obtaining a 588349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * copy of this software and associated documentation files (the "Software"), 688349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * to deal in the Software without restriction, including without limitation 788349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * the rights to use, copy, modify, merge, publish, distribute, sublicense, 888349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * and/or sell copies of the Software, and to permit persons to whom the 988349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * Software is furnished to do so, subject to the following conditions: 1088349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * 1188349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * The above copyright notice and this permission notice (including the next 1288349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * paragraph) shall be included in all copies or substantial portions of the 1388349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * Software. 1488349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * 1588349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1688349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1788349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1888349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1988349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 2088349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 2188349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick * DEALINGS IN THE SOFTWARE. 2288349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick */ 23497baf4e4a6a0a2f247c7bfb9bf69a2b93c2c19fIan Romanick#include <assert.h> 2488349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick#include "ast.h" 2588349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick 2688349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanickconst char * 2788349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanickast_expression::operator_string(enum ast_operators op) 2888349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick{ 2988349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick static const char *const operators[] = { 3088349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "=", 3188349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "+", 3288349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "-", 3388349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "+", 3488349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "-", 3588349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "*", 3688349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "/", 3788349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "%", 3888349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "<<", 3988349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick ">>", 4088349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "<", 4188349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick ">", 4288349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "<=", 4388349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick ">=", 4488349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "==", 4588349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "!=", 4688349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "&", 4788349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "^", 4888349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "|", 4988349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "~", 5088349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "&&", 5188349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "^^", 522f9ca7dce2adea10d7947e98690b729cce947938Eric Anholt "||", 5388349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "!", 5488349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick 5588349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "*=", 5688349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "/=", 5788349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "%=", 5888349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "+=", 5988349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "-=", 6088349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "<<=", 6188349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick ">>=", 6288349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "&=", 6388349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "^=", 6488349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "|=", 6588349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick 6688349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "?:", 672f9ca7dce2adea10d7947e98690b729cce947938Eric Anholt 6888349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "++", 6988349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "--", 7088349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "++", 7188349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick "--", 7288349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick ".", 7388349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick }; 7488349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick 752f9ca7dce2adea10d7947e98690b729cce947938Eric Anholt assert((unsigned int)op < sizeof(operators) / sizeof(operators[0])); 762f9ca7dce2adea10d7947e98690b729cce947938Eric Anholt 7788349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick return operators[op]; 7888349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick} 7988349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick 8088349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick 8188349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanickast_expression_bin::ast_expression_bin(int oper, ast_expression *ex0, 8288349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick ast_expression *ex1) : 8388349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick ast_expression(oper, ex0, ex1, NULL) 8488349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick{ 8588349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick assert((oper >= ast_plus) && (oper <= ast_logic_not)); 8688349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick} 8788349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick 8888349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick 8988349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanickvoid 9088349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanickast_expression_bin::print(void) const 9188349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick{ 9288349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick subexpressions[0]->print(); 9388349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick printf("%s ", operator_string(oper)); 9488349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick subexpressions[1]->print(); 9588349b22caa0ab0b44188dbb9e002549aadb0590Ian Romanick} 96