/* $NetBSD: lsym_lbrace.c,v 1.10 2023/06/16 23:19:01 rillig Exp $ */ /* * 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 /* Compound literal */ //indent input struct point origin(void) { return (struct point){ .x = 0, .y = 0, }, actual_return_value; } //indent end //indent run-equals-input /* Ensure that the comma is not interpreted as separator for declarators. */ //indent run-equals-input -bc //indent input { const char *hello = (const char[]){ 'h', 'e', 'l', 'l', 'o', }, *world = (const char[]){ 'w', 'o', 'r', 'l', 'd', }; } //indent end //indent run-equals-input -ldi0 //indent run-equals-input -ldi0 -bc //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