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