예제 #1
0
파일: Scope.cpp 프로젝트: halsten/beaverdbg
Symbol *Scope::lookat(Identifier *id) const
{
    if (! _hash || ! id)
        return 0;

    const unsigned h = id->hashCode() % _hashSize;
    Symbol *symbol = _hash[h];
    for (; symbol; symbol = symbol->_next) {
        Name *identity = symbol->identity();
        if (! identity) {
            continue;
        } else if (NameId *nameId = identity->asNameId()) {
            if (nameId->identifier()->isEqualTo(id))
                break;
        } else if (TemplateNameId *t = identity->asTemplateNameId()) {
            if (t->identifier()->isEqualTo(id))
                break;
        } else if (DestructorNameId *d = identity->asDestructorNameId()) {
            if (d->identifier()->isEqualTo(id))
                break;
        } else if (identity->isQualifiedNameId()) {
            assert(0);
        }
    }
    return symbol;
}