void SymbolTable::add(const DefinedAtom &atom) { assert(atom.scope() != DefinedAtom::scopeTranslationUnit); if ( !atom.name().empty() ) { this->addByName(atom); } else { this->addByContent(atom); } }
bool SymbolTable::add(const DefinedAtom &atom) { if (!atom.name().empty() && atom.scope() != DefinedAtom::scopeTranslationUnit) { // Named atoms cannot be merged by content. assert(atom.merge() != DefinedAtom::mergeByContent); // Track named atoms that are not scoped to file (static). return addByName(atom); } if (atom.merge() == DefinedAtom::mergeByContent) { // Named atoms cannot be merged by content. assert(atom.name().empty()); // Currently only read-only constants can be merged. if (atom.permissions() == DefinedAtom::permR__) return addByContent(atom); // TODO: support mergeByContent of data atoms by comparing content & fixups. } return false; }