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