ClassScopePtr VariableTable::findParent(AnalysisResultConstPtr ar, const string &name, const Symbol *&sym) const { sym = nullptr; for (ClassScopePtr parent = m_blockScope.getParentScope(ar); parent && !parent->isRedeclaring(); parent = parent->getParentScope(ar)) { sym = parent->getVariables()->getSymbol(name); assert(!sym || sym->isPresent()); if (sym) return parent; } return ClassScopePtr(); }
ClassScopePtr StaticClassName::resolveClass() { m_present = false; m_unknown = true; if (m_class) return ClassScopePtr(); BlockScopeRawPtr scope = originalScope(this); if (m_self) { if (ClassScopePtr self = scope->getContainingClass()) { m_className = self->getName(); m_origClassName = self->getOriginalName(); m_present = true; m_unknown = false; return self; } } else if (m_parent) { if (ClassScopePtr self = scope->getContainingClass()) { if (!self->getOriginalParent().empty()) { m_className = Util::toLower(self->getOriginalParent()); m_origClassName = self->getOriginalParent(); m_present = true; } } else { m_parent = false; } } ClassScopePtr cls = scope->getContainingProgram()->findClass(m_className); if (cls) { m_unknown = false; if (cls->isVolatile()) { ClassScopeRawPtr c = scope->getContainingFile()->resolveClass(cls); if (!c) { c = scope->getContainingClass(); if (c && c->getName() != m_className) c.reset(); } m_present = c.get() != 0; if (cls->isRedeclaring()) { cls = c; if (!m_present) m_redeclared = true; } } else { m_present = true; } } return cls; }
ClassScopePtr FileScope::getClass(const char *name) { StringToClassScopePtrVecMap::const_iterator iter = m_classes.find(name); if (iter == m_classes.end()) return ClassScopePtr(); return iter->second.back(); }
ClassScopePtr FileScope::getClass(const char *name) { auto iter = m_classes.find(name); if (iter == m_classes.end()) return ClassScopePtr(); return iter->second.back(); }