/*
* Tests for the token lsym_lbrace, which represents a '{' in these contexts:
*
* In an initializer, '{' starts an inner group of initializers, usually to
* initialize a nested struct, union or array.
*
* In a function body, '{' starts a block.
*
* In an expression, '(type){' starts a compound literal that is typically
* used in an assignment to a struct or array.
*
* In macro arguments, a '{' is an ordinary character, it does not need to be
* balanced. This is in contrast to '(', which must be balanced with ')'.
*
* TODO: try to split this token into lsym_lbrace_block and lsym_lbrace_init.
*/
/* Brace level in an initializer */
//indent input
void
function(void)
{
struct person p = {
.name = "Name",
.age = {{{35}}}, /* C11 6.7.9 allows this. */
};
}
//indent end
//indent run-equals-input
/* Begin of a block of statements */
//indent input
void function(void) {{{ body(); }}}
//indent end
//indent run
void
function(void)
{
{
{
body();
}
}
}
//indent end
//indent input
{
if (cond rparen {
}
switch (expr rparen {
}
}
//indent end
//indent run
{
if (cond rparen {
}
switch (expr rparen {
}
}
// exit 1
// error: Standard Input:2: Unbalanced parentheses
// error: Standard Input:4: Unbalanced parentheses
//indent end
/*
* The -bl option does not force initializer braces on separate lines.
*/
//indent input
struct {int member;} var = {1};
//indent end
//indent run -bl
struct
{
int member;
} var = {1};
//indent end
/*
* A comment in a single-line function definition is not a declaration comment
* and thus not in column 25.
*/
//indent input
void function(void); /* comment */
void function(void) { /* comment */ }
//indent end
//indent run -di0
void function(void); /* comment */
void
function(void)
{ /* comment */
}
//indent end
//indent run -di0 -nfbs
void function(void); /* comment */
void
function(void) { /* comment */
}
//indent end