Refactored parsing of main function body for reuse by objective-c methods.

llvm-svn: 43898
This commit is contained in:
Fariborz Jahanian 2007-11-08 19:01:26 +00:00
parent 19ca5c7021
commit 8e632940fc
3 changed files with 21 additions and 15 deletions

View File

@ -1030,3 +1030,21 @@ void Parser::ParseAsmOperandsOpt() {
ConsumeToken();
}
}
Parser::DeclTy *Parser::ParseFunctionStatementBody(DeclTy *Decl,
SourceLocation L, SourceLocation R) {
// Do not enter a scope for the brace, as the arguments are in the same scope
// (the function body) as the body itself. Instead, just read the statement
// list and put it into a CompoundStmt for safe keeping.
StmtResult FnBody = ParseCompoundStatementBody();
// If the function body could not be parsed, make a bogus compoundstmt.
if (FnBody.isInvalid)
FnBody = Actions.ActOnCompoundStmt(L, R, 0, 0, false);
// Leave the function body scope.
ExitScope();
// TODO: Pass argument information.
return Actions.ActOnFunctionDefBody(Decl, FnBody.Val);
}

View File

@ -462,21 +462,7 @@ Parser::DeclTy *Parser::ParseFunctionDefinition(Declarator &D) {
// specified Declarator for the function.
DeclTy *Res = Actions.ActOnStartOfFunctionDef(CurScope, D);
// Do not enter a scope for the brace, as the arguments are in the same scope
// (the function body) as the body itself. Instead, just read the statement
// list and put it into a CompoundStmt for safe keeping.
StmtResult FnBody = ParseCompoundStatementBody();
// If the function body could not be parsed, make a bogus compoundstmt.
if (FnBody.isInvalid)
FnBody = Actions.ActOnCompoundStmt(BraceLoc, BraceLoc, 0, 0, false);
// Leave the function body scope.
ExitScope();
// TODO: Pass argument information.
return Actions.ActOnFunctionDefBody(Res, FnBody.Val);
return ParseFunctionStatementBody(Res, BraceLoc, BraceLoc);
}
/// ParseKNRParamDeclarations - Parse 'declaration-list[opt]' which provides

View File

@ -397,6 +397,8 @@ private:
DeclTy *ParseDeclaration(unsigned Context);
DeclTy *ParseSimpleDeclaration(unsigned Context);
DeclTy *ParseInitDeclaratorListAfterFirstDeclarator(Declarator &D);
DeclTy *ParseFunctionStatementBody(DeclTy *Decl,
SourceLocation L, SourceLocation R);
void ParseDeclarationSpecifiers(DeclSpec &DS);
void ParseSpecifierQualifierList(DeclSpec &DS);