Fixed a rewrite bug in class synthesis (which I first thought was a rewrite API bug).

llvm-svn: 44335
This commit is contained in:
Fariborz Jahanian 2007-11-26 20:59:57 +00:00
parent e01743a3a3
commit 96502afb6f
1 changed files with 6 additions and 4 deletions

View File

@ -1318,8 +1318,6 @@ void RewriteTest::SynthesizeObjcInternalStruct(ObjcInterfaceDecl *CDecl,
// If no ivars and no root or if its root, directly or indirectly,
// have no ivars (thus not synthesized) then no need to synthesize this class.
if (NumIvars <= 0 && (!RCDecl || !ObjcSynthesizedStructs.count(RCDecl))) {
//FIXME: This does not replace @interface class-name with the
//Result text. Could be a bug in ReplaceText API.
endBuf += Lexer::MeasureTokenLength(LocEnd, *SM);
Rewrite.ReplaceText(LocStart, endBuf-startBuf,
Result.c_str(), Result.size());
@ -1756,8 +1754,12 @@ void RewriteTest::RewriteObjcClassMetaData(ObjcImplementationDecl *IDecl,
int NumIvars = IDecl->getImplDeclNumIvars() > 0
? IDecl->getImplDeclNumIvars()
: (CDecl ? CDecl->getNumInstanceVariables() : 0);
SynthesizeObjcInternalStruct(CDecl, Result);
// Explictly declared @interface's are already synthesized.
if (CDecl->ImplicitInterfaceDecl()) {
// FIXME: Implementation of a class with no @interface (legacy) doese not
// produce correct synthesis as yet.
SynthesizeObjcInternalStruct(CDecl, Result);
}
if (NumIvars > 0) {
static bool objc_ivar = false;