Home | History | Annotate | Line # | Download | only in indent
      1  1.5  rillig /* $NetBSD: lsym_colon.c,v 1.5 2022/04/24 09:04:12 rillig Exp $ */
      2  1.1  rillig 
      3  1.1  rillig /*
      4  1.1  rillig  * Tests for the token lsym_colon, which represents a ':' in these contexts:
      5  1.1  rillig  *
      6  1.1  rillig  * After a label that is the target of a 'goto' statement.
      7  1.1  rillig  *
      8  1.1  rillig  * In a 'switch' statement, after a 'case' label or a 'default' label.
      9  1.1  rillig  *
     10  1.1  rillig  * As part of the conditional operator '?:'.
     11  1.1  rillig  *
     12  1.1  rillig  * In the declaration of a struct member that is a bit-field.
     13  1.2  rillig  *
     14  1.3  rillig  * Since C11, in the _Generic selection to separate the type from its
     15  1.3  rillig  * corresponding expression.
     16  1.3  rillig  *
     17  1.2  rillig  * See also:
     18  1.2  rillig  *	label.c
     19  1.3  rillig  *	lsym_case_label.c	for the C11 _Generic expression
     20  1.2  rillig  *	lsym_question.c
     21  1.1  rillig  */
     22  1.1  rillig 
     23  1.2  rillig /*
     24  1.2  rillig  * The ':' marks a label that can be used in a 'goto' statement.
     25  1.2  rillig  */
     26  1.5  rillig //indent input
     27  1.2  rillig void endless(void)
     28  1.2  rillig {
     29  1.2  rillig label1:
     30  1.2  rillig goto label2;
     31  1.2  rillig 
     32  1.2  rillig     if (true)if (true)if (true)if (true)label2 :goto label1;
     33  1.2  rillig }
     34  1.5  rillig //indent end
     35  1.2  rillig 
     36  1.5  rillig //indent run
     37  1.2  rillig void
     38  1.2  rillig endless(void)
     39  1.2  rillig {
     40  1.2  rillig label1:
     41  1.2  rillig 	goto label2;
     42  1.2  rillig 
     43  1.2  rillig 	if (true)
     44  1.2  rillig 		if (true)
     45  1.2  rillig 			if (true)
     46  1.2  rillig 				if (true)
     47  1.2  rillig 			label2:		goto label1;
     48  1.2  rillig }
     49  1.5  rillig //indent end
     50  1.2  rillig 
     51  1.2  rillig 
     52  1.2  rillig /*
     53  1.2  rillig  * The ':' is used in a 'switch' statement, after a 'case' label or a
     54  1.2  rillig  * 'default' label.
     55  1.2  rillig  */
     56  1.5  rillig //indent input
     57  1.2  rillig void
     58  1.2  rillig example(void)
     59  1.2  rillig {
     60  1.2  rillig 	switch (expr) {
     61  1.2  rillig 	case 'x':
     62  1.2  rillig 		return;
     63  1.2  rillig 	default:
     64  1.2  rillig 		return;
     65  1.2  rillig 	}
     66  1.2  rillig }
     67  1.5  rillig //indent end
     68  1.1  rillig 
     69  1.5  rillig //indent run-equals-input
     70  1.2  rillig 
     71  1.2  rillig 
     72  1.2  rillig /*
     73  1.2  rillig  * The ':' is used as part of the conditional operator '?:'.
     74  1.2  rillig  */
     75  1.5  rillig //indent input
     76  1.2  rillig int constant_expression = true?4:12345;
     77  1.5  rillig //indent end
     78  1.2  rillig 
     79  1.5  rillig //indent run
     80  1.2  rillig int		constant_expression = true ? 4 : 12345;
     81  1.5  rillig //indent end
     82  1.2  rillig 
     83  1.2  rillig 
     84  1.2  rillig /*
     85  1.2  rillig  * The ':' is used in the declaration of a struct member that is a bit-field.
     86  1.2  rillig  */
     87  1.5  rillig //indent input
     88  1.2  rillig struct bit_field {
     89  1.2  rillig 	bool flag:1;
     90  1.2  rillig 	int maybe_signed : 4;
     91  1.2  rillig 	signed int definitely_signed:3;
     92  1.2  rillig 	signed int : 0;/* padding */
     93  1.2  rillig 	unsigned int definitely_unsigned:3;
     94  1.2  rillig 	unsigned int:0;/* padding */
     95  1.2  rillig };
     96  1.5  rillig //indent end
     97  1.2  rillig 
     98  1.5  rillig //indent run
     99  1.2  rillig struct bit_field {
    100  1.2  rillig 	bool		flag:1;
    101  1.2  rillig 	int		maybe_signed:4;
    102  1.2  rillig 	signed int	definitely_signed:3;
    103  1.2  rillig /* $ XXX: Placing the colon directly at the type looks inconsistent. */
    104  1.2  rillig 	signed int:	0;	/* padding */
    105  1.2  rillig 	unsigned int	definitely_unsigned:3;
    106  1.2  rillig /* $ XXX: Placing the colon directly at the type looks inconsistent. */
    107  1.2  rillig 	unsigned int:	0;	/* padding */
    108  1.2  rillig };
    109  1.5  rillig //indent end
    110