ccb@201: /* ccb@201: * (c) 2003 Mario de Sousa ccb@201: * ccb@201: * Offered to the public under the terms of the GNU General Public License ccb@201: * as published by the Free Software Foundation; either version 2 of the ccb@201: * License, or (at your option) any later version. ccb@201: * ccb@201: * This program is distributed in the hope that it will be useful, but ccb@201: * WITHOUT ANY WARRANTY; without even the implied warranty of ccb@201: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General ccb@201: * Public License for more details. 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: /* ccb@201: * An IEC 61131-3 IL and ST 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: ccb@202: search_varfb_instance_type_c::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: };