summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/Parse/ParseStmt.cpp18
-rw-r--r--clang/Parse/Parser.cpp16
-rw-r--r--clang/include/clang/Parse/Parser.h2
3 files changed, 21 insertions, 15 deletions
diff --git a/clang/Parse/ParseStmt.cpp b/clang/Parse/ParseStmt.cpp
index 5e05f9a27d2..6836f10c584 100644
--- a/clang/Parse/ParseStmt.cpp
+++ b/clang/Parse/ParseStmt.cpp
@@ -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);
+} \ No newline at end of file
diff --git a/clang/Parse/Parser.cpp b/clang/Parse/Parser.cpp
index 8040eb8ebc4..a2ba86e9035 100644
--- a/clang/Parse/Parser.cpp
+++ b/clang/Parse/Parser.cpp
@@ -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
diff --git a/clang/include/clang/Parse/Parser.h b/clang/include/clang/Parse/Parser.h
index b7476a77b60..7339d6ca504 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -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);
OpenPOWER on IntegriCloud