diff -r fde2d08ebaee -r 96d8b6e006f0 absyntax_utils/function_param_iterator.hh --- a/absyntax_utils/function_param_iterator.hh Wed Sep 02 13:39:05 2009 +0200 +++ b/absyntax_utils/function_param_iterator.hh Wed Sep 02 14:05:27 2009 +0200 @@ -69,17 +69,23 @@ private: - /* a pointer to the function_block_declaration_c - * or function_declaration_c currently being analysed. - */ + /* a pointer to the function_block_declaration_c + * or function_declaration_c currently being analysed. + */ symbol_c *f_decl; int next_param, param_count; + /* used when called to search() for a parameter by name */ + identifier_c *search_param_name; + /* used when called to iterate() for a parameter */ identifier_c *current_param_name; symbol_c *current_param_type; symbol_c *current_param_default_value; param_direction_t current_param_direction; - bool en_declared; - bool eno_declared; + /* Which operation of the class was called... + * Search a parameter, or iterate to the next parameter. + */ + typedef enum {iterate_op, search_op} operation_t; + operation_t current_operation; private: void* handle_param_list(list_c *list); @@ -92,22 +98,13 @@ void reset(void); /* initialise the iterator object. - * We must be given a reference to the function declaration + * We must be given a reference to one of the following + * - function_declaration_c + * - function_block_declaration_c + * - program_declaration_c * that will be analysed... */ - function_param_iterator_c(function_declaration_c *f_decl); - - /* initialise the iterator object. - * We must be given a reference to the function block declaration - * that will be analysed... - */ - function_param_iterator_c(function_block_declaration_c *fb_decl); - - /* initialise the iterator object. - * We must be given a reference to the program declaration - * that will be analysed... - */ - function_param_iterator_c(program_declaration_c *p_decl); + function_param_iterator_c(symbol_c *pou_decl); /* Skip to the next parameter. After object creation, * the object references on parameter _before_ the first, so @@ -118,9 +115,13 @@ */ identifier_c *next(void); - identifier_c *declare_en_param(void); - - identifier_c *declare_eno_param(void); + /* Search for the parameter named ... */ + /* The seach() function does not in any way affect the internal state related + * to the iterate() function. + * It will, however, affect the internal state necessary to correctly + * return the param_type() and default_value() of the found parameter. + */ + identifier_c *search(symbol_c *param_name); /* Returns the currently referenced parameter's default value, * or NULL if none is specified in the function declrataion itself.