lsym_rbrace.c revision 1.7
11.7Srillig/* $NetBSD: lsym_rbrace.c,v 1.7 2023/06/08 06:47:14 rillig Exp $ */ 21.1Srillig 31.1Srillig/* 41.3Srillig * Tests for the token lsym_rbrace, which represents a '}' in these contexts: 51.3Srillig * 61.3Srillig * In an initializer, '}' ends an inner group of initializers, usually to 71.3Srillig * initialize a nested struct, union or array. 81.3Srillig * 91.3Srillig * In a function body, '}' ends a block. 101.3Srillig * 111.3Srillig * In an expression like '(type){...}', '}' ends a compound literal, which is 121.3Srillig * typically used in an assignment to a struct or array. 131.3Srillig * 141.3Srillig * In macro arguments, a '}' is an ordinary character, it does not need to be 151.3Srillig * balanced. This is in contrast to '(' and ')', which must be balanced. 161.3Srillig * 171.3Srillig * TODO: try to split this token into lsym_rbrace_block and lsym_rbrace_init. 181.1Srillig * 191.1Srillig * See also: 201.1Srillig * lsym_lbrace.c 211.1Srillig */ 221.1Srillig 231.3Srillig/* Brace level in an initializer */ 241.4Srillig//indent input 251.3Srilligvoid 261.3Srilligfunction(void) 271.3Srillig{ 281.3Srillig struct person p = { 291.3Srillig .name = "Name", 301.3Srillig .age = {{{35}}}, /* C11 6.7.9 allows this. */ 311.3Srillig }; 321.3Srillig} 331.4Srillig//indent end 341.1Srillig 351.4Srillig//indent run-equals-input 361.3Srillig 371.3Srillig 381.3Srillig/* Begin of a block of statements */ 391.4Srillig//indent input 401.3Srilligvoid function(void) {{{ body(); }}} 411.4Srillig//indent end 421.3Srillig 431.4Srillig//indent run 441.3Srilligvoid 451.3Srilligfunction(void) 461.5Srillig{ 471.5Srillig { 481.5Srillig { 491.3Srillig body(); 501.5Srillig } 511.5Srillig } 521.3Srillig} 531.4Srillig//indent end 541.3Srillig 551.3Srillig 561.3Srillig/* Compound literal */ 571.4Srillig//indent input 581.3Srilligstruct point 591.3Srilligorigin(void) 601.3Srillig{ 611.3Srillig return (struct point){ 621.3Srillig .x = 0, 631.3Srillig .y = 0, 641.3Srillig }; 651.3Srillig} 661.4Srillig//indent end 671.3Srillig 681.6Srillig//indent run-equals-input 691.7Srillig 701.7Srillig 711.7Srillig//indent input 721.7Srillig{ 731.7Srilligint numbers[][] = { 741.7Srillig{11}, 751.7Srillig{21}, 761.7Srillig{31}, 771.7Srillig}; 781.7Srilligint numbers[][] = {{11}, 791.7Srillig{21}, 801.7Srillig{31}, 811.7Srillig}; 821.7Srillig} 831.7Srillig//indent end 841.7Srillig 851.7Srillig//indent run -di0 861.7Srillig{ 871.7Srillig int numbers[][] = { 881.7Srillig {11}, 891.7Srillig {21}, 901.7Srillig {31}, 911.7Srillig }; 921.7Srillig int numbers[][] = {{11}, 931.7Srillig // $ FIXME: Must be indented. 941.7Srillig {21}, 951.7Srillig {31}, 961.7Srillig }; 971.7Srillig} 981.7Srillig//indent end 99