void FreezeScript::AnalyzeInitVisitor::visitEnum(const EnumPtr& v) { if(v->isLocal()) { return; } string scoped = v->scoped(); TypeList l = _oldUnit->lookupTypeNoBuiltin(scoped, false); if(!l.empty()) { EnumPtr e = EnumPtr::dynamicCast(l.front()); if(!e) { typeChange(l.front(), scoped, "enum"); } else { return; } } _out.newline(); _out.newline(); _out << "<!-- enum " << scoped << " -->"; _out << se("init") << attr("type", scoped); _out << ee; }
void Slice::ChecksumVisitor::visitEnum(const EnumPtr& p) { if (p->isLocal()) { return; } ostringstream ostr; ostr << "enum " << p->name() << endl; EnumeratorList enums = p->getEnumerators(); for (EnumeratorList::iterator q = enums.begin(); q != enums.end(); ++q) { ostr << (*q)->name() << endl; } updateMap(p->scoped(), ostr.str()); }
void FreezeScript::AnalyzeTransformVisitor::visitEnum(const EnumPtr& v) { if(v->isLocal()) { return; } string scoped = v->scoped(); if(ignoreType(scoped)) { return; } TypeList l = _newUnit->lookupTypeNoBuiltin(scoped, false); if(l.empty()) { _missingTypes.push_back(scoped); return; } EnumPtr newEnum = EnumPtr::dynamicCast(l.front()); if(!newEnum) { if(!_ignoreTypeChanges) { typeChange(scoped, v, l.front()); } return; } map<string, int> m; { Slice::EnumeratorList enumerators = newEnum->getEnumerators(); int i = 0; for(Slice::EnumeratorList::iterator p = enumerators.begin(); p != enumerators.end(); ++p, ++i) { m.insert(map<string, int>::value_type((*p)->name(), i)); } } _out.newline(); _out.newline(); _out << "<!-- enum " << scoped << " -->"; _out << se("transform") << attr("type", scoped); Slice::EnumeratorList enumerators = v->getEnumerators(); int i = 0; for(Slice::EnumeratorList::iterator p = enumerators.begin(); p != enumerators.end(); ++p, ++i) { map<string, int>::const_iterator q = m.find((*p)->name()); if(q == m.end()) { _out.newline(); _out << "<!-- NOTICE: enumerator `" << (*p)->name() << "' has been removed -->"; } else if(q->second != i) { _out.newline(); _out << "<!-- NOTICE: enumerator `" << (*p)->name() << "' has changed position -->"; } } _out << ee; }