ObjectiveC migrator: More work towards

insertion of ObjC audit pragmas.

llvm-svn: 188733
This commit is contained in:
Fariborz Jahanian 2013-08-20 00:07:23 +00:00
parent f9486598b5
commit d38ad47cfa
4 changed files with 17 additions and 6 deletions

View File

@ -288,7 +288,8 @@ public:
/// \returns true if there was a failure, false on success. /// \returns true if there was a failure, false on success.
static bool getRawToken(SourceLocation Loc, Token &Result, static bool getRawToken(SourceLocation Loc, Token &Result,
const SourceManager &SM, const SourceManager &SM,
const LangOptions &LangOpts); const LangOptions &LangOpts,
bool IgnoreWhiteSpace = false);
/// \brief Given a location any where in a source buffer, find the location /// \brief Given a location any where in a source buffer, find the location
/// that corresponds to the beginning of the token in which the original /// that corresponds to the beginning of the token in which the original

View File

@ -1001,8 +1001,9 @@ public:
/// \brief Relex the token at the specified location. /// \brief Relex the token at the specified location.
/// \returns true if there was a failure, false on success. /// \returns true if there was a failure, false on success.
bool getRawToken(SourceLocation Loc, Token &Result) { bool getRawToken(SourceLocation Loc, Token &Result,
return Lexer::getRawToken(Loc, Result, SourceMgr, LangOpts); bool IgnoreWhiteSpace = false) {
return Lexer::getRawToken(Loc, Result, SourceMgr, LangOpts, IgnoreWhiteSpace);
} }
/// getSpellingOfSingleCharacterNumericConstant - Tok is a numeric constant /// getSpellingOfSingleCharacterNumericConstant - Tok is a numeric constant

View File

@ -815,7 +815,15 @@ void ObjCMigrateASTConsumer::migrateCFFunctions(
edit::Commit commit(*Editor); edit::Commit commit(*Editor);
commit.insertBefore(FirstFD->getLocStart(), PragmaString); commit.insertBefore(FirstFD->getLocStart(), PragmaString);
PragmaString = "\nCF_IMPLICIT_BRIDGING_DISABLED\n"; PragmaString = "\nCF_IMPLICIT_BRIDGING_DISABLED\n";
commit.insertAfterToken(LastFD->getLocEnd(), PragmaString); SourceLocation EndLoc = LastFD->getLocEnd();
// get location just past end of function location.
EndLoc = PP.getLocForEndOfToken(EndLoc);
Token Tok;
// get locaiton of token that comes after end of function.
bool Failed = PP.getRawToken(EndLoc, Tok, /*IgnoreWhiteSpace=*/true);
if (!Failed)
EndLoc = Tok.getLocation();
commit.insertAfterToken(EndLoc, PragmaString);
Editor->commit(commit); Editor->commit(commit);
CFFunctionIBCandidates.clear(); CFFunctionIBCandidates.clear();

View File

@ -430,7 +430,8 @@ unsigned Lexer::MeasureTokenLength(SourceLocation Loc,
/// \returns true if there was a failure, false on success. /// \returns true if there was a failure, false on success.
bool Lexer::getRawToken(SourceLocation Loc, Token &Result, bool Lexer::getRawToken(SourceLocation Loc, Token &Result,
const SourceManager &SM, const SourceManager &SM,
const LangOptions &LangOpts) { const LangOptions &LangOpts,
bool IgnoreWhiteSpace) {
// TODO: this could be special cased for common tokens like identifiers, ')', // TODO: this could be special cased for common tokens like identifiers, ')',
// etc to make this faster, if it mattered. Just look at StrData[0] to handle // etc to make this faster, if it mattered. Just look at StrData[0] to handle
// all obviously single-char tokens. This could use // all obviously single-char tokens. This could use
@ -448,7 +449,7 @@ bool Lexer::getRawToken(SourceLocation Loc, Token &Result,
const char *StrData = Buffer.data()+LocInfo.second; const char *StrData = Buffer.data()+LocInfo.second;
if (isWhitespace(StrData[0])) if (!IgnoreWhiteSpace && isWhitespace(StrData[0]))
return true; return true;
// Create a lexer starting at the beginning of this token. // Create a lexer starting at the beginning of this token.