#include "parser.h" #include "../utils/debug.h" parser::declarator_t* parser::lookup_name( parser::logical_namespace_t& namespac, name_t& name) { assert( &namespac); debug0 << "lookup_name, looking for `" << name << "' in namespace " << typeid( namespac).name() << "\n"; for ( parser::logical_namespace_t::items_t::iterator it=namespac.items.begin(); it != namespac.items.end(); ++it) { debug0 << "lookup_name, name=" << name << ", looking at item " << **it << "\n"; if ( declarator_names_t* declnames = dynamic_cast< declarator_names_t*>( *it)) { debug0 << "found declnames: " << *declnames << "\n"; for ( declarator_names_t::items_t::iterator it=declnames->items.begin(); it!=declnames->items.end(); ++it) { debug0 << "item in declnames is " << typeid( **it).name() << "\n"; if ( declarator_name_t* declname=dynamic_cast< declarator_name_t*>( (*it)->declarator)) { debug0 << "found declname, name=" << *declname->name << "\n"; if ( *declname->name == name) { debug0 << "found decl of " << name << ": " << (*it)->Output2StringCompleteDeclOnly() << "\n"; return declname; } } } } } if ( namespac.parent) return lookup_name( *namespac.parent, name); return NULL; }