ccb@201: /* msousa@265: * matiec - a compiler for the programming languages defined in IEC 61131-3 ccb@201: * msousa@265: * Copyright (C) 2003-2011 Mario de Sousa (msousa@fe.up.pt) Edouard@279: * Copyright (C) 2007-2011 Laurent Bessard and Edouard Tisserant ccb@201: * msousa@265: * This program is free software: you can redistribute it and/or modify msousa@265: * it under the terms of the GNU General Public License as published by msousa@265: * the Free Software Foundation, either version 3 of the License, or msousa@265: * (at your option) any later version. msousa@265: * msousa@265: * This program is distributed in the hope that it will be useful, msousa@265: * but WITHOUT ANY WARRANTY; without even the implied warranty of msousa@265: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the msousa@265: * GNU General Public License for more details. msousa@265: * msousa@265: * You should have received a copy of the GNU General Public License msousa@265: * along with this program. If not, see . msousa@265: * ccb@201: * ccb@201: * This code is made available on the understanding that it will not be ccb@201: * used in safety-critical situations without a full and competent review. ccb@201: */ ccb@201: ccb@201: /* msousa@265: * An IEC 61131-3 compiler. ccb@201: * ccb@201: * Based on the ccb@201: * FINAL DRAFT - IEC 61131-3, 2nd Ed. (2001-12-10) ccb@201: * ccb@201: */ ccb@201: ccb@201: /* Returns the data type of an il_operand. ccb@201: * ccb@201: * Note that the il_operand may be a variable, in which case ccb@201: * we return the type of the variable instance. ccb@201: * The il_operand may also be a constant, in which case ccb@201: * we return the data type of that constant. ccb@201: * ccb@201: * The variable instance may be a member of a structured variable, ccb@201: * or an element in an array, or any combination of the two. ccb@201: * ccb@201: * The class constructor must be given the search scope ccb@201: * (function, function block or program within which ccb@201: * the possible il_operand variable instance was declared). ccb@201: */ ccb@201: ccb@201: class search_il_operand_type_c { ccb@201: ccb@201: private: Edouard@294: search_varfb_instance_type_c search_varfb_instance_type; ccb@201: search_constant_type_c search_constant_type; ccb@201: ccb@201: public: ccb@201: search_il_operand_type_c(symbol_c *search_scope): search_varfb_instance_type(search_scope) {} ccb@201: ccb@201: public: ccb@201: symbol_c *get_type(symbol_c *il_operand); ccb@201: };