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: 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@202: #include "absyntax_utils.hh" ccb@201: ccb@201: symbol_c *search_il_operand_type_c::get_type(symbol_c *il_operand) { ccb@201: symbol_c *res; ccb@201: ccb@201: /* We first assume that it is a constant... */ ccb@201: res = search_constant_type.get_type(il_operand); ccb@201: if (res != NULL) return res; ccb@201: ccb@201: /* Nope, now we assume it is a variable, and determine its type... */ ccb@201: res = search_varfb_instance_type.get_type(il_operand); ccb@201: if (NULL != res) return res; ccb@201: ccb@201: /* not found */ ccb@201: return NULL; ccb@201: }