mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-14 16:33:28 +00:00
Add a way to grab a particular attribute out of a DIE.
Use it when we're looking for a string in particular. Update comments as well. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187844 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
028f3478a5
commit
b7669139e6
@ -122,6 +122,18 @@ DIE *DIE::getCompileUnit() {
|
||||
llvm_unreachable("We should not have orphaned DIEs.");
|
||||
}
|
||||
|
||||
DIEValue *DIE::findAttribute(unsigned Attribute) {
|
||||
const SmallVectorImpl<DIEValue *> &Values = getValues();
|
||||
const DIEAbbrev &Abbrevs = getAbbrev();
|
||||
|
||||
// Iterate through all the attributes until we find the one we're
|
||||
// looking for, if we can't find it return NULL.
|
||||
for (size_t i = 0; i < Values.size(); ++i)
|
||||
if (Abbrevs.getData()[i].getAttribute() == Attribute)
|
||||
return Values[i];
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
void DIE::print(raw_ostream &O, unsigned IndentCount) const {
|
||||
const std::string Indent(IndentCount, ' ');
|
||||
|
@ -175,6 +175,10 @@ namespace llvm {
|
||||
Child->Parent = this;
|
||||
}
|
||||
|
||||
/// findAttribute - Find a value in the DIE with the attribute given, returns NULL
|
||||
/// if no such attribute exists.
|
||||
DIEValue *findAttribute(unsigned Attribute);
|
||||
|
||||
#ifndef NDEBUG
|
||||
void print(raw_ostream &O, unsigned IndentCount = 0) const;
|
||||
void dump();
|
||||
|
@ -966,21 +966,13 @@ void DwarfDebug::collectDeadVariables() {
|
||||
typedef ArrayRef<uint8_t> HashValue;
|
||||
|
||||
/// \brief Grabs the string in whichever attribute is passed in and returns
|
||||
/// a reference to it.
|
||||
/// a reference to it. Returns "" if the attribute doesn't exist.
|
||||
static StringRef getDIEStringAttr(DIE *Die, unsigned Attr) {
|
||||
const SmallVectorImpl<DIEValue *> &Values = Die->getValues();
|
||||
const DIEAbbrev &Abbrevs = Die->getAbbrev();
|
||||
DIEValue *V = Die->findAttribute(Attr);
|
||||
|
||||
if (DIEString *S = dyn_cast_or_null<DIEString>(V))
|
||||
return S->getString();
|
||||
|
||||
// Iterate through all the attributes until we find the one we're
|
||||
// looking for, if we can't find it return an empty string.
|
||||
for (size_t i = 0; i < Values.size(); ++i) {
|
||||
if (Abbrevs.getData()[i].getAttribute() == Attr) {
|
||||
DIEValue *V = Values[i];
|
||||
assert(isa<DIEString>(V) && "String requested. Not a string.");
|
||||
DIEString *S = cast<DIEString>(V);
|
||||
return S->getString();
|
||||
}
|
||||
}
|
||||
return StringRef("");
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user