1*98ca6839Srillig /* $NetBSD: lsym_rbrace.c,v 1.8 2025/01/04 21:54:26 rillig Exp $ */ 29ae26de1Srillig 39ae26de1Srillig /* 415606711Srillig * Tests for the token lsym_rbrace, which represents a '}' in these contexts: 515606711Srillig * 615606711Srillig * In an initializer, '}' ends an inner group of initializers, usually to 715606711Srillig * initialize a nested struct, union or array. 815606711Srillig * 915606711Srillig * In a function body, '}' ends a block. 1015606711Srillig * 1115606711Srillig * In an expression like '(type){...}', '}' ends a compound literal, which is 1215606711Srillig * typically used in an assignment to a struct or array. 1315606711Srillig * 1415606711Srillig * In macro arguments, a '}' is an ordinary character, it does not need to be 1515606711Srillig * balanced. This is in contrast to '(' and ')', which must be balanced. 1615606711Srillig * 1715606711Srillig * TODO: try to split this token into lsym_rbrace_block and lsym_rbrace_init. 189ae26de1Srillig * 199ae26de1Srillig * See also: 209ae26de1Srillig * lsym_lbrace.c 219ae26de1Srillig */ 229ae26de1Srillig 2315606711Srillig /* Brace level in an initializer */ 2447306038Srillig //indent input 2515606711Srillig void 2615606711Srillig function(void) 2715606711Srillig { 2815606711Srillig struct person p = { 2915606711Srillig .name = "Name", 3015606711Srillig .age = {{{35}}}, /* C11 6.7.9 allows this. */ 3115606711Srillig }; 3215606711Srillig } 3347306038Srillig //indent end 349ae26de1Srillig 3547306038Srillig //indent run-equals-input 3615606711Srillig 3715606711Srillig 3815606711Srillig /* Begin of a block of statements */ 3947306038Srillig //indent input 4015606711Srillig void function(void) {{{ body(); }}} 4147306038Srillig //indent end 4215606711Srillig 4347306038Srillig //indent run 4415606711Srillig void 4515606711Srillig function(void) 460bee435aSrillig { 470bee435aSrillig { 480bee435aSrillig { 4915606711Srillig body(); 5015606711Srillig } 5115606711Srillig } 5215606711Srillig } 5347306038Srillig //indent end 5415606711Srillig 5515606711Srillig 5615606711Srillig /* Compound literal */ 5747306038Srillig //indent input 5815606711Srillig struct point 5915606711Srillig origin(void) 6015606711Srillig { 6115606711Srillig return (struct point){ 6215606711Srillig .x = 0, 6315606711Srillig .y = 0, 6415606711Srillig }; 6515606711Srillig } 6647306038Srillig //indent end 6715606711Srillig 682c177151Srillig //indent run-equals-input 6941e7f68dSrillig 7041e7f68dSrillig 7141e7f68dSrillig //indent input 7241e7f68dSrillig { 7341e7f68dSrillig int numbers[][] = { 7441e7f68dSrillig {11}, 7541e7f68dSrillig {21}, 7641e7f68dSrillig {31}, 7741e7f68dSrillig }; 7841e7f68dSrillig int numbers[][] = {{11}, 7941e7f68dSrillig {21}, 8041e7f68dSrillig {31}, 8141e7f68dSrillig }; 8241e7f68dSrillig } 8341e7f68dSrillig //indent end 8441e7f68dSrillig 8541e7f68dSrillig //indent run -di0 8641e7f68dSrillig { 8741e7f68dSrillig int numbers[][] = { 8841e7f68dSrillig {11}, 8941e7f68dSrillig {21}, 9041e7f68dSrillig {31}, 9141e7f68dSrillig }; 9241e7f68dSrillig int numbers[][] = {{11}, 9341e7f68dSrillig {21}, 9441e7f68dSrillig {31}, 9541e7f68dSrillig }; 9641e7f68dSrillig } 9741e7f68dSrillig //indent end 98