Pull this out for a bit of readability.

llvm-svn: 191999
This commit is contained in:
Eric Christopher 2013-10-04 23:35:30 +00:00
parent fac5612ab0
commit fc917c6208
1 changed files with 18 additions and 15 deletions

View File

@ -226,24 +226,27 @@ template <typename T> class DIRef {
explicit DIRef(const Value *V);
public:
T resolve(const DITypeIdentifierMap &Map) const {
if (!Val)
return T();
if (const MDNode *MD = dyn_cast<MDNode>(Val))
return T(MD);
const MDString *MS = cast<MDString>(Val);
// Find the corresponding MDNode.
DITypeIdentifierMap::const_iterator Iter = Map.find(MS);
assert(Iter != Map.end() && "Identifier not in the type map?");
assert(DIDescriptor(Iter->second).isType() &&
"MDNode in DITypeIdentifierMap should be a DIType.");
return T(Iter->second);
}
T resolve(const DITypeIdentifierMap &Map) const;
operator Value *() const { return const_cast<Value *>(Val); }
};
template <typename T>
T DIRef<T>::resolve(const DITypeIdentifierMap &Map) const {
if (!Val)
return T();
if (const MDNode *MD = dyn_cast<MDNode>(Val))
return T(MD);
const MDString *MS = cast<MDString>(Val);
// Find the corresponding MDNode.
DITypeIdentifierMap::const_iterator Iter = Map.find(MS);
assert(Iter != Map.end() && "Identifier not in the type map?");
assert(DIDescriptor(Iter->second).isType() &&
"MDNode in DITypeIdentifierMap should be a DIType.");
return T(Iter->second);
}
/// Specialize getFieldAs to handle fields that are references to DIScopes.
template <> DIScopeRef DIDescriptor::getFieldAs<DIScopeRef>(unsigned Elt) const;
/// Specialize DIRef constructor for DIScopeRef.