1 /* $NetBSD: lsym_comma.c,v 1.3 2021/11/28 15:26:22 rillig Exp $ */ 2 /* $FreeBSD$ */ 3 4 /* 5 * Tests for the token lsym_comma, which represents a ',' in these contexts: 6 * 7 * In an expression, the binary operator ',' evaluates its left operand before 8 * its right operand, inserting a sequence point. 9 * 10 * In a declaration, a ',' separates the declarators. 11 * 12 * In a parameter list of a function type, a ',' separates the parameter 13 * declarations. 14 * 15 * In a traditional function definition, a ',' separates the parameter names. 16 * 17 * In a prototype function definition, a ',' separates the parameter 18 * declarations. 19 * 20 * In a function call expression, a ',' separates the arguments. 21 * 22 * In a macro definition, a ',' separates the parameter names. 23 * 24 * In a macro invocation, a ',' separates the arguments. 25 * 26 * In an initializer list, a ',' separates the initializer expressions. 27 */ 28 29 /* 30 * The ',' is a binary operator with very low precedence. 31 */ 32 #indent input 33 int 34 comma_expression(void) 35 { 36 return 1, 3; 37 return a = b, c = d; 38 } 39 #indent end 40 41 #indent run-equals-input 42 43 44 /* 45 * In a declaration, a ',' separates the declarators. 46 */ 47 #indent input 48 int decl, old_style(), prototype(const char *, double *); 49 int a, b, c; 50 #indent end 51 52 #indent run-equals-input -di0 53 54 55 /* 56 * In a parameter list of a function type, a ',' separates the parameter 57 * declarations. 58 */ 59 #indent input 60 double dbl_reduce(double init, const double *s, const double *e, double (*merge)(double, double)); 61 double dbl_reduce(double, const double *, const double *, double (*)(double, double)); 62 void debug_printf(const char *, ...); 63 #indent end 64 65 #indent run-equals-input -di0 66 67 68 /* 69 * In a traditional function definition, a ',' separates the parameter names. 70 */ 71 #indent input 72 double 73 trad_dbl_reduce(init, s, e, merge) 74 double init; 75 double *s, *e; 76 double (*merge)() 77 { 78 double x = init; 79 while (s < e) 80 x = merge(x, *s++); 81 return x; 82 } 83 #indent end 84 85 #indent run-equals-input -di0 86 87 88 /* 89 * In a prototype function definition, a ',' separates the parameter 90 * declarations. 91 */ 92 #indent input 93 void 94 dbl_reduce(double init, const double *s, const double *e, double (*merge)(double, double)) 95 { 96 double x = init; 97 while (s < e) 98 x = merge(x, *s++); 99 return x; 100 } 101 #indent end 102 103 #indent run-equals-input -di0 104 105 106 /* 107 * In a function call expression, a ',' separates the arguments. 108 */ 109 #indent input 110 void 111 function(void) 112 { 113 function_call(arg1, arg2); 114 (*indirect_function_call)(arg1, arg2); 115 } 116 #indent end 117 118 #indent run-equals-input -di0 119 120 121 /* 122 * In a macro definition, a ',' separates the parameter names. 123 */ 124 #indent input 125 #define no_space(a,b) a ## b 126 #define normal_space(a, b) a ## b 127 #define wide_space(a , b) a ## b 128 #indent end 129 130 /* 131 * Indent does not touch preprocessor directives, except for the spacing 132 * between the '#' and the directive. 133 */ 134 #indent run-equals-input 135 136 137 /* 138 * In a macro invocation, a ',' separates the arguments. 139 */ 140 #indent input 141 void 142 function(void) 143 { 144 macro_invocation(arg1, arg2); 145 empty_arguments(,,,); 146 } 147 #indent end 148 149 #indent run-equals-input -di0 150 151 152 /* 153 * In an initializer list, a ',' separates the initializer expressions. 154 * 155 * If a ',' starts a line, indent doesn't put a space before it. 156 */ 157 #indent input 158 int arr[] = {1, 2, 3}; 159 int arr[] = { 160 1, 161 2, 162 3, /* there may be a trailing comma */ 163 }; 164 #indent end 165 166 #indent run-equals-input -di0 167 168 169 /* 170 * If a ',' starts a line, indent doesn't put a space before it. This style is 171 * uncommon and looks unbalanced since the '1' is not aligned to the other 172 * numbers. 173 */ 174 #indent input 175 int arr[] = { 176 1 177 ,2 178 ,3 179 }; 180 #indent end 181 182 #indent run-equals-input -di0 183