Added a new memberfor Parser, to be used soon

for doing delayed parsing of c++ method defined in
objc class implementations.

llvm-svn: 159792
This commit is contained in:
Fariborz Jahanian 2012-07-06 00:42:20 +00:00
parent 6b45660f14
commit 97920394c0
2 changed files with 22 additions and 0 deletions

View File

@ -1045,6 +1045,7 @@ private:
ParsingDeclSpec *DS = 0);
bool isDeclarationAfterDeclarator();
bool isStartOfFunctionDefinition(const ParsingDeclarator &Declarator);
bool isStartOfDelayParsedFunctionDefinition(const ParsingDeclarator &Declarator);
DeclGroupPtrTy ParseDeclarationOrFunctionDefinition(
ParsedAttributesWithRange &attrs,
ParsingDeclSpec *DS = 0,

View File

@ -797,6 +797,27 @@ bool Parser::isStartOfFunctionDefinition(const ParsingDeclarator &Declarator) {
Tok.is(tok::kw_try); // X() try { ... }
}
/// \brief Determine whether the current token, if it occurs after a
/// a function declarator, indicates the start of a function definition
/// inside an objective-C class implementation and thus can be delay parsed.
bool Parser::isStartOfDelayParsedFunctionDefinition(
const ParsingDeclarator &Declarator) {
if (!CurParsedObjCImpl ||
!Declarator.isFunctionDeclarator())
return false;
if (Tok.is(tok::l_brace)) // int X() {}
return true;
// Handle K&R C argument lists: int X(f) int f; {}
if (!getLangOpts().CPlusPlus &&
Declarator.getFunctionTypeInfo().isKNRPrototype())
return isDeclarationSpecifier();
return getLangOpts().CPlusPlus &&
(Tok.is(tok::colon) || // X() : Base() {} (used for ctors)
Tok.is(tok::kw_try)); // X() try { ... }
}
/// ParseDeclarationOrFunctionDefinition - Parse either a function-definition or
/// a declaration. We can't tell which we have until we read up to the
/// compound-statement in function-definition. TemplateParams, if