mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-04 22:28:27 +00:00
Add support to emit debug info for c++ style namespaces.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90805 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -227,6 +227,7 @@ bool DIDescriptor::isScope() const {
|
||||
case dwarf::DW_TAG_compile_unit:
|
||||
case dwarf::DW_TAG_lexical_block:
|
||||
case dwarf::DW_TAG_subprogram:
|
||||
case dwarf::DW_TAG_namespace:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@@ -242,6 +243,14 @@ bool DIDescriptor::isCompileUnit() const {
|
||||
return Tag == dwarf::DW_TAG_compile_unit;
|
||||
}
|
||||
|
||||
/// isNameSpace - Return true if the specified tag is DW_TAG_namespace.
|
||||
bool DIDescriptor::isNameSpace() const {
|
||||
assert (!isNull() && "Invalid descriptor!");
|
||||
unsigned Tag = getTag();
|
||||
|
||||
return Tag == dwarf::DW_TAG_namespace;
|
||||
}
|
||||
|
||||
/// isLexicalBlock - Return true if the specified tag is DW_TAG_lexical_block.
|
||||
bool DIDescriptor::isLexicalBlock() const {
|
||||
assert (!isNull() && "Invalid descriptor!");
|
||||
@@ -438,6 +447,8 @@ StringRef DIScope::getFilename() const {
|
||||
return DISubprogram(DbgNode).getFilename();
|
||||
else if (isCompileUnit())
|
||||
return DICompileUnit(DbgNode).getFilename();
|
||||
else if (isNameSpace())
|
||||
return DINameSpace(DbgNode).getFilename();
|
||||
else
|
||||
assert (0 && "Invalid DIScope!");
|
||||
return StringRef();
|
||||
@@ -450,6 +461,8 @@ StringRef DIScope::getDirectory() const {
|
||||
return DISubprogram(DbgNode).getDirectory();
|
||||
else if (isCompileUnit())
|
||||
return DICompileUnit(DbgNode).getDirectory();
|
||||
else if (isNameSpace())
|
||||
return DINameSpace(DbgNode).getDirectory();
|
||||
else
|
||||
assert (0 && "Invalid DIScope!");
|
||||
return StringRef();
|
||||
@@ -996,6 +1009,21 @@ DILexicalBlock DIFactory::CreateLexicalBlock(DIDescriptor Context) {
|
||||
return DILexicalBlock(MDNode::get(VMContext, &Elts[0], 2));
|
||||
}
|
||||
|
||||
/// CreateNameSpace - This creates new descriptor for a namespace
|
||||
/// with the specified parent context.
|
||||
DINameSpace DIFactory::CreateNameSpace(DIDescriptor Context, StringRef Name,
|
||||
DICompileUnit CompileUnit,
|
||||
unsigned LineNo) {
|
||||
Value *Elts[] = {
|
||||
GetTagConstant(dwarf::DW_TAG_namespace),
|
||||
Context.getNode(),
|
||||
MDString::get(VMContext, Name),
|
||||
CompileUnit.getNode(),
|
||||
ConstantInt::get(Type::getInt32Ty(VMContext), LineNo)
|
||||
};
|
||||
return DINameSpace(MDNode::get(VMContext, &Elts[0], 5));
|
||||
}
|
||||
|
||||
/// CreateLocation - Creates a debug info location.
|
||||
DILocation DIFactory::CreateLocation(unsigned LineNo, unsigned ColumnNo,
|
||||
DIScope S, DILocation OrigLoc) {
|
||||
|
Reference in New Issue
Block a user