From: Chris Lattner Date: Sun, 26 Oct 2008 22:38:55 +0000 (+0000) Subject: inline the decision logic that chooses between an assign expr and brace X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0eec2b58678f71af6b5fcf4c439290c0d640546b;p=clang inline the decision logic that chooses between an assign expr and brace initializer, avoiding an extra level of calls for silly things like 'int x = 4'. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58206 91177308-0d34-0410-b5e6-96231b3b80d8 --- 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