aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/clang/Parse/Parser.h12
-rw-r--r--lib/Parse/ParseInit.cpp12
2 files changed, 15 insertions, 9 deletions
diff --git a/include/clang/Parse/Parser.h b/include/clang/Parse/Parser.h
index 8aa949ec2f..bffe66023e 100644
--- a/include/clang/Parse/Parser.h
+++ b/include/clang/Parse/Parser.h
@@ -479,7 +479,17 @@ private:
//===--------------------------------------------------------------------===//
// C99 6.7.8: Initialization.
- ExprResult ParseInitializer();
+
+ /// ParseInitializer
+ /// initializer: [C99 6.7.8]
+ /// assignment-expression
+ /// '{' ...
+ ExprResult ParseInitializer() {
+ if (Tok.isNot(tok::l_brace))
+ return ParseAssignmentExpression();
+ return ParseBraceInitializer();
+ }
+ ExprResult ParseBraceInitializer();
ExprResult ParseInitializerWithPotentialDesignator(InitListDesignations &D,
unsigned InitNum);
diff --git a/lib/Parse/ParseInit.cpp b/lib/Parse/ParseInit.cpp
index 5f2dc6d8e5..84e3166473 100644
--- a/lib/Parse/ParseInit.cpp
+++ b/lib/Parse/ParseInit.cpp
@@ -169,9 +169,10 @@ ParseInitializerWithPotentialDesignator(InitListDesignations &Designations,
}
-/// ParseInitializer
+/// ParseBraceInitializer - Called when parsing an initializer that has a
+/// leading open brace.
+///
/// initializer: [C99 6.7.8]
-/// assignment-expression
/// '{' initializer-list '}'
/// '{' initializer-list ',' '}'
/// [GNU] '{' '}'
@@ -180,12 +181,7 @@ ParseInitializerWithPotentialDesignator(InitListDesignations &Designations,
/// designation[opt] initializer
/// initializer-list ',' designation[opt] initializer
///
-Parser::ExprResult Parser::ParseInitializer() {
- // TODO: Split this up into ParseInitializer + ParseBraceInitializer, make
- // ParseInitializer inline so that the non-brace case is short-cut.
- if (Tok.isNot(tok::l_brace))
- return ParseAssignmentExpression();
-
+Parser::ExprResult Parser::ParseBraceInitializer() {
SourceLocation LBraceLoc = ConsumeBrace();
// We support empty initializers, but tell the user that they aren't using