Home | History | Annotate | Line # | Download | only in indent
lsym_lparen_or_lbracket.c revision 1.5
      1  1.5  rillig /* $NetBSD: lsym_lparen_or_lbracket.c,v 1.5 2022/04/23 17:25:58 rillig Exp $ */
      2  1.1  rillig 
      3  1.1  rillig /*
      4  1.1  rillig  * Tests for the token lsym_lparen_or_lbracket, which represents a '(' or '['
      5  1.1  rillig  * in these contexts:
      6  1.1  rillig  *
      7  1.1  rillig  * In a type name, '(' constructs a function type.
      8  1.1  rillig  *
      9  1.1  rillig  * In an expression, '(' starts an inner expression to override the usual
     10  1.1  rillig  * operator precedence.
     11  1.1  rillig  *
     12  1.1  rillig  * In an expression, an identifier followed by '(' starts a function call
     13  1.1  rillig  * expression.
     14  1.1  rillig  *
     15  1.1  rillig  * In a 'sizeof' expression, '(' is required if the argument is a type name.
     16  1.1  rillig  *
     17  1.1  rillig  * After one of the keywords 'for', 'if', 'switch' or 'while', the controlling
     18  1.5  rillig  * expression must be enclosed in '(' and ')'; see lsym_for.c, lsym_if.c,
     19  1.5  rillig  * lsym_switch.c, lsym_while.c.
     20  1.1  rillig  *
     21  1.5  rillig  * In an expression, '(' followed by a type name starts a cast expression or
     22  1.5  rillig  * a compound literal.
     23  1.5  rillig  *
     24  1.5  rillig  * In a declaration, '[' derives an array type.
     25  1.5  rillig  *
     26  1.5  rillig  * In an expression, '[' starts an array subscript.
     27  1.5  rillig  */
     28  1.5  rillig 
     29  1.5  rillig /* The '(' in a type name derives a function type. */
     30  1.5  rillig #indent input
     31  1.5  rillig typedef void signal_handler(int);
     32  1.5  rillig void (*signal(void (*)(int)))(int);
     33  1.5  rillig #indent end
     34  1.5  rillig 
     35  1.5  rillig #indent run
     36  1.5  rillig typedef void signal_handler(int);
     37  1.5  rillig void		(*signal(void (*)(int)))(int);
     38  1.5  rillig #indent end
     39  1.5  rillig 
     40  1.5  rillig 
     41  1.5  rillig /*
     42  1.5  rillig  * The '(' in an expression overrides operator precedence.  In multi-line
     43  1.5  rillig  * expressions, the continuation lines are aligned on the parentheses.
     44  1.1  rillig  */
     45  1.5  rillig #indent input
     46  1.5  rillig int nested = (
     47  1.5  rillig 	(
     48  1.5  rillig 		(
     49  1.5  rillig 			(
     50  1.5  rillig 				1 + 4
     51  1.5  rillig 			)
     52  1.5  rillig 		)
     53  1.5  rillig 	)
     54  1.5  rillig );
     55  1.5  rillig #indent end
     56  1.5  rillig 
     57  1.5  rillig #indent run
     58  1.5  rillig int		nested = (
     59  1.5  rillig 			  (
     60  1.5  rillig 			   (
     61  1.5  rillig 			    (
     62  1.5  rillig 			     1 + 4
     63  1.5  rillig 			     )
     64  1.5  rillig 			    )
     65  1.5  rillig 			   )
     66  1.5  rillig );
     67  1.5  rillig #indent end
     68  1.5  rillig 
     69  1.5  rillig 
     70  1.5  rillig /* The '(' in a function call expression starts the argument list. */
     71  1.5  rillig #indent input
     72  1.5  rillig int var = macro_call ( arg1,  arg2  ,arg3);
     73  1.5  rillig #indent end
     74  1.5  rillig 
     75  1.5  rillig #indent run
     76  1.5  rillig int		var = macro_call(arg1, arg2, arg3);
     77  1.5  rillig #indent end
     78  1.5  rillig 
     79  1.5  rillig 
     80  1.5  rillig /*
     81  1.5  rillig  * The '(' in a sizeof expression is required for type names and optional for
     82  1.5  rillig  * expressions.
     83  1.5  rillig  */
     84  1.5  rillig #indent input
     85  1.5  rillig size_t sizeof_typename = sizeof ( int );
     86  1.5  rillig size_t sizeof_expr = sizeof ( 12345 ) ;
     87  1.5  rillig #indent end
     88  1.5  rillig 
     89  1.5  rillig #indent run
     90  1.5  rillig size_t		sizeof_typename = sizeof(int);
     91  1.5  rillig size_t		sizeof_expr = sizeof(12345);
     92  1.5  rillig #indent end
     93  1.5  rillig 
     94  1.5  rillig 
     95  1.5  rillig /* The '[' in a type name derives an array type. */
     96  1.5  rillig #indent input
     97  1.5  rillig int array_of_numbers[100];
     98  1.5  rillig #indent end
     99  1.5  rillig 
    100  1.5  rillig #indent run
    101  1.5  rillig int		array_of_numbers[100];
    102  1.5  rillig #indent end
    103  1.5  rillig 
    104  1.5  rillig 
    105  1.5  rillig /* The '[' in an expression accesses an array element. */
    106  1.5  rillig #indent input
    107  1.5  rillig int second_prime = &primes[1];
    108  1.5  rillig #indent end
    109  1.5  rillig 
    110  1.5  rillig #indent run
    111  1.5  rillig int		second_prime = &primes[1];
    112  1.5  rillig #indent end
    113  1.1  rillig 
    114  1.3  rillig 
    115  1.1  rillig #indent input
    116  1.3  rillig void
    117  1.3  rillig function(void)
    118  1.3  rillig {
    119  1.3  rillig 	/* Type casts */
    120  1.3  rillig 	a = (int)b;
    121  1.3  rillig 	a = (struct tag)b;
    122  1.3  rillig 	/* TODO: The '(int)' is not a type cast, it is a prototype list. */
    123  1.3  rillig 	a = (int (*)(int))fn;
    124  1.3  rillig 
    125  1.3  rillig 	/* Not type casts */
    126  1.3  rillig 	a = sizeof(int) * 2;
    127  1.3  rillig 	a = sizeof(5) * 2;
    128  1.3  rillig 	a = offsetof(struct stat, st_mtime);
    129  1.3  rillig 
    130  1.3  rillig 	/* Grouping subexpressions */
    131  1.3  rillig 	a = ((((b + c)))) * d;
    132  1.3  rillig }
    133  1.1  rillig #indent end
    134  1.1  rillig 
    135  1.1  rillig #indent run-equals-input
    136  1.2  rillig 
    137  1.2  rillig /* See t_errors.sh, test case 'compound_literal'. */
    138