diff options
author | Francois Pichet <pichet2000@gmail.com> | 2010-11-21 06:08:52 +0000 |
---|---|---|
committer | Francois Pichet <pichet2000@gmail.com> | 2010-11-21 06:08:52 +0000 |
commit | 87c2e121cf0522fc266efe2922b58091cd2e0182 (patch) | |
tree | 0def875d14aa76bd01d54b4ebb9a41db1007c6a7 /lib/AST/DeclBase.cpp | |
parent | a4c2475961184a4bad6f6f087eeb1038bb784cad (diff) |
Major anonymous union/struct redesign.
A new AST node is introduced:
def IndirectField : DDecl<Value>;
IndirectFields are injected into the anonymous's parent scope and chain back to
the original field. Name lookup for anonymous entities now result in an
IndirectFieldDecl instead of a FieldDecl.
There is no functionality change, the code generated should be the same.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@119919 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/DeclBase.cpp')
-rw-r--r-- | lib/AST/DeclBase.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/AST/DeclBase.cpp b/lib/AST/DeclBase.cpp index 5ba6623b20..7d8a92530e 100644 --- a/lib/AST/DeclBase.cpp +++ b/lib/AST/DeclBase.cpp @@ -249,6 +249,9 @@ unsigned Decl::getIdentifierNamespaceForKind(Kind DeclKind) { case ObjCProperty: return IDNS_Ordinary; + case IndirectField: + return IDNS_Ordinary | IDNS_Member; + case ObjCCompatibleAlias: case ObjCInterface: return IDNS_Ordinary | IDNS_Type; @@ -524,8 +527,6 @@ bool DeclContext::isTransparentContext() const { return !cast<EnumDecl>(this)->isScoped(); else if (DeclKind == Decl::LinkageSpec) return true; - else if (DeclKind >= Decl::firstRecord && DeclKind <= Decl::lastRecord) - return cast<RecordDecl>(this)->isAnonymousStructOrUnion(); return false; } |