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