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