diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2007-11-13 23:21:38 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2007-11-13 23:21:38 +0000 |
commit | 6de88a873a4cbe06d72602eef57d68006730a80b (patch) | |
tree | 0c7eb3ed51998ee1e7d25f2d19053a10b6bb28bd | |
parent | 71c0a951d08dc7a2a057df8c15f22b36f6aa47c7 (diff) |
Type encoding for structs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44087 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | AST/ASTContext.cpp | 12 | ||||
-rw-r--r-- | test/Sema/metadata-test-2.m | 15 |
2 files changed, 26 insertions, 1 deletions
diff --git a/AST/ASTContext.cpp b/AST/ASTContext.cpp index 132224cbd7..b844adf431 100644 --- a/AST/ASTContext.cpp +++ b/AST/ASTContext.cpp @@ -1050,8 +1050,18 @@ void ASTContext::getObjcEncodingForType(QualType T, std::string& S) const S += ']'; } else if (T->getAsFunctionType()) { S += '?'; + } else if (const RecordType *RTy = T->getAsRecordType()) { + RecordDecl *RDecl= RTy->getDecl(); + S += '{'; + S += RDecl->getName(); + S += '='; + for (int i = 0; i < RDecl->getNumMembers(); i++) { + FieldDecl *field = RDecl->getMember(i); + getObjcEncodingForType(field->getType(), S); + } + S += '}'; } else - assert(0 && "@encode for type not implemented!"); + assert(0 && "@encode for type not implemented!"); } void ASTContext::getObjcEncodingForTypeQualifier(Decl::ObjcDeclQualifier QT, diff --git a/test/Sema/metadata-test-2.m b/test/Sema/metadata-test-2.m new file mode 100644 index 0000000000..dbaf035fd8 --- /dev/null +++ b/test/Sema/metadata-test-2.m @@ -0,0 +1,15 @@ +// RUN: clang -rewrite-test %s + +typedef struct _NSPoint { + float x; + float y; +} NSPoint; + +@interface Intf +- (void) MyMeth : (NSPoint) Arg1; +@end + +@implementation Intf +- (void) MyMeth : (NSPoint) Arg1{} +@end + |