diff -r 3e21d98d0a71 -r aad38592bdde absyntax_utils/search_varfb_instance_type.cc --- a/absyntax_utils/search_varfb_instance_type.cc Sat Jul 28 17:38:57 2012 +0200 +++ b/absyntax_utils/search_varfb_instance_type.cc Tue Aug 14 19:40:01 2012 +0200 @@ -301,6 +301,34 @@ */ } +/* var1_list ':' structure_type_name */ +void *search_varfb_instance_type_c::visit(structured_var_declaration_c *symbol) { + this->is_complex = true; + if (NULL != current_structelement_name) ERROR; + + /* make sure that we have decomposed all structure elements of the variable name */ + symbol_c *var_name = decompose_var_instance_name->next_part(); + if (NULL == var_name) { + /* this is it... ! + * No need to look any further... + * Note also that, unlike for the struct types, a function block may + * not be defined based on another (i.e. no inheritance is allowed), + * so this function block is already the most base type. + * We simply return it. + */ + return (void *)symbol; + } + + /* reset current_type_id because of new structure element part */ + this->current_typeid = NULL; + + /* look for the var_name in the structure declaration */ + current_structelement_name = var_name; + + /* recursively find out the data type of current_structelement_name... */ + return symbol->structure_type_name->accept(*this); +} + /* structure_type_name ASSIGN structure_initialization */ /* structure_initialization may be NULL ! */ // SYM_REF2(initialized_structure_c, structure_type_name, structure_initialization)