diff options
author | Anders Carlsson <andersca@mac.com> | 2009-04-02 16:24:45 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-04-02 16:24:45 +0000 |
commit | 4eca1099417d991ebf5b4db345c8468414074ee2 (patch) | |
tree | bbc290c67f21a79f50b90fee90b06779f9e522c4 /clang/lib/CodeGen/Mangle.cpp | |
parent | f2125a02db5d37ac558d3f1a3a548f3fe4e03ac2 (diff) | |
download | bcm5719-llvm-4eca1099417d991ebf5b4db345c8468414074ee2.tar.gz bcm5719-llvm-4eca1099417d991ebf5b4db345c8468414074ee2.zip |
Implement mangling of declarations inside functions.
llvm-svn: 68321
Diffstat (limited to 'clang/lib/CodeGen/Mangle.cpp')
-rw-r--r-- | clang/lib/CodeGen/Mangle.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/Mangle.cpp b/clang/lib/CodeGen/Mangle.cpp index 6e62fcfc2e6..3e685e6b172 100644 --- a/clang/lib/CodeGen/Mangle.cpp +++ b/clang/lib/CodeGen/Mangle.cpp @@ -42,6 +42,7 @@ namespace { void mangleName(const NamedDecl *ND); void mangleUnqualifiedName(const NamedDecl *ND); void mangleSourceName(const IdentifierInfo *II); + void mangleLocalName(const NamedDecl *ND); void mangleNestedName(const NamedDecl *ND); void manglePrefix(const DeclContext *DC); void mangleOperatorName(OverloadedOperatorKind OO, unsigned Arity); @@ -149,9 +150,10 @@ void CXXNameMangler::mangleName(const NamedDecl *ND) { else if (isStdNamespace(ND->getDeclContext())) { Out << "St"; mangleUnqualifiedName(ND); - } else { + } else if (isa<FunctionDecl>(ND->getDeclContext())) + mangleLocalName(ND); + else mangleNestedName(ND); - } } void CXXNameMangler::mangleUnqualifiedName(const NamedDecl *ND) { @@ -226,6 +228,16 @@ void CXXNameMangler::mangleNestedName(const NamedDecl *ND) { Out << 'E'; } +void CXXNameMangler::mangleLocalName(const NamedDecl *ND) { + // <local-name> := Z <function encoding> E <entity name> [<discriminator>] + // := Z <function encoding> E s [<discriminator>] + // <discriminator> := _ <non-negative number> + Out << 'Z'; + mangleFunctionEncoding(cast<FunctionDecl>(ND->getDeclContext())); + Out << 'E'; + mangleSourceName(ND->getIdentifier()); +} + void CXXNameMangler::manglePrefix(const DeclContext *DC) { // <prefix> ::= <prefix> <unqualified-name> // ::= <template-prefix> <template-args> |