diff options
author | Chris Lattner <sabre@nondot.org> | 2008-07-26 01:53:50 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-07-26 01:53:50 +0000 |
commit | ae4da6150bb837311a2f0f958b01a2989066ba90 (patch) | |
tree | cb1c8b4c5f85fbef9f31e2b2a4942f56f68ff8c6 /lib | |
parent | 3bd934a624660db940612ca3c5dfd7128ede79e5 (diff) |
make DeclSpec manage its own protocol qualifier list memory instead of having
clients allocate the memory and it delete it.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54087 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Parse/ParseDecl.cpp | 14 | ||||
-rw-r--r-- | lib/Sema/SemaType.cpp | 22 |
2 files changed, 15 insertions, 21 deletions
diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 98c2d897d5..5ed1a61769 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -435,12 +435,11 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS) { ParseObjCProtocolReferences(ProtocolRefs, EndProtoLoc); // FIXME: New'ing this here seems wrong, why not have the action do it? - llvm::SmallVector<DeclTy *, 8> *ProtocolDecl = - new llvm::SmallVector<DeclTy *, 8>; - DS.setProtocolQualifiers(ProtocolDecl); + llvm::SmallVector<DeclTy *, 8> ProtocolDecl; Actions.FindProtocolDeclaration(Loc, &ProtocolRefs[0], ProtocolRefs.size(), - *ProtocolDecl); + ProtocolDecl); + DS.setProtocolQualifiers(&ProtocolDecl[0], ProtocolDecl.size()); DS.SetRangeEnd(EndProtoLoc); @@ -576,12 +575,11 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS) { SourceLocation EndProtoLoc; llvm::SmallVector<IdentifierLocPair, 8> ProtocolRefs; ParseObjCProtocolReferences(ProtocolRefs, EndProtoLoc); - llvm::SmallVector<DeclTy *, 8> *ProtocolDecl = - new llvm::SmallVector<DeclTy *, 8>; - DS.setProtocolQualifiers(ProtocolDecl); + llvm::SmallVector<DeclTy *, 8> ProtocolDecl; Actions.FindProtocolDeclaration(Loc, &ProtocolRefs[0], ProtocolRefs.size(), - *ProtocolDecl); + ProtocolDecl); + DS.setProtocolQualifiers(&ProtocolDecl[0], ProtocolDecl.size()); DS.SetRangeEnd(EndProtoLoc); Diag(Loc, diag::warn_objc_protocol_qualifier_missing_id, diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp index 85a457bd56..7acb4587a0 100644 --- a/lib/Sema/SemaType.cpp +++ b/lib/Sema/SemaType.cpp @@ -44,9 +44,8 @@ QualType Sema::ConvertDeclSpecToType(const DeclSpec &DS) { break; case DeclSpec::TST_unspecified: // "<proto1,proto2>" is an objc qualified ID with a missing id. - if (llvm::SmallVector<Action::DeclTy *, 8> *PQ=DS.getProtocolQualifiers()) { - Action::DeclTy **PPDecl = &(*PQ)[0]; - Result = Context.getObjCQualifiedIdType((ObjCProtocolDecl**)(PPDecl), + if (DeclSpec::ProtocolQualifierListTy PQ = DS.getProtocolQualifiers()) { + Result = Context.getObjCQualifiedIdType((ObjCProtocolDecl**)PQ, DS.getNumProtocolQualifiers()); break; } @@ -122,28 +121,25 @@ QualType Sema::ConvertDeclSpecToType(const DeclSpec &DS) { assert(DS.getTypeSpecWidth() == 0 && DS.getTypeSpecComplex() == 0 && DS.getTypeSpecSign() == 0 && "Can't handle qualifiers on typedef names yet!"); + DeclSpec::ProtocolQualifierListTy PQ = DS.getProtocolQualifiers(); // FIXME: Adding a TST_objcInterface clause doesn't seem ideal, so // we have this "hack" for now... if (ObjCInterfaceDecl *ObjCIntDecl = dyn_cast<ObjCInterfaceDecl>(D)) { - if (DS.getProtocolQualifiers() == 0) { + if (PQ == 0) { Result = Context.getObjCInterfaceType(ObjCIntDecl); break; } - Action::DeclTy **PPDecl = &(*DS.getProtocolQualifiers())[0]; Result = Context.getObjCQualifiedInterfaceType(ObjCIntDecl, - reinterpret_cast<ObjCProtocolDecl**>(PPDecl), + (ObjCProtocolDecl**)PQ, DS.getNumProtocolQualifiers()); break; } else if (TypedefDecl *typeDecl = dyn_cast<TypedefDecl>(D)) { - if (Context.getObjCIdType() == Context.getTypedefType(typeDecl) - && DS.getProtocolQualifiers()) { - // id<protocol-list> - Action::DeclTy **PPDecl = &(*DS.getProtocolQualifiers())[0]; - Result = Context.getObjCQualifiedIdType( - reinterpret_cast<ObjCProtocolDecl**>(PPDecl), - DS.getNumProtocolQualifiers()); + if (Context.getObjCIdType() == Context.getTypedefType(typeDecl) && PQ) { + // id<protocol-list> + Result = Context.getObjCQualifiedIdType((ObjCProtocolDecl**)PQ, + DS.getNumProtocolQualifiers()); break; } } |