Home | History | Annotate | Line # | Download | only in indent
      1  1.9  rillig /* $NetBSD: lsym_for.c,v 1.9 2023/06/26 20:23:40 rillig Exp $ */
      2  1.1  rillig 
      3  1.1  rillig /*
      4  1.1  rillig  * Tests for the token lsym_for, which represents the keyword 'for' that
      5  1.1  rillig  * starts a 'for' loop.
      6  1.4  rillig  *
      7  1.4  rillig  * Most 'for' loops have 3 expressions in their head.  Each of these
      8  1.4  rillig  * expressions is optional though.
      9  1.4  rillig  *
     10  1.4  rillig  * When all 3 expressions are omitted, the 'for' loop is often called a
     11  1.4  rillig  * 'forever' loop.
     12  1.1  rillig  */
     13  1.1  rillig 
     14  1.3  rillig //indent input
     15  1.4  rillig void
     16  1.4  rillig example(void)
     17  1.4  rillig {
     18  1.4  rillig 	for (;;)
     19  1.4  rillig 		break;
     20  1.4  rillig 	for (var = value;;)
     21  1.4  rillig 		break;
     22  1.4  rillig 	for (; cond;)
     23  1.4  rillig 		break;
     24  1.4  rillig 	for (;; i++)
     25  1.4  rillig 		break;
     26  1.4  rillig }
     27  1.4  rillig //indent end
     28  1.4  rillig 
     29  1.4  rillig //indent run-equals-input
     30  1.4  rillig 
     31  1.4  rillig 
     32  1.4  rillig //indent input
     33  1.4  rillig void
     34  1.4  rillig function(void)
     35  1.4  rillig {
     36  1.4  rillig 	for (int i = 0; i < 6; i++)
     37  1.4  rillig 		print_char("hello\n"[i]);
     38  1.4  rillig 	forever {
     39  1.4  rillig 		stmt();
     40  1.4  rillig 	}
     41  1.4  rillig }
     42  1.4  rillig //indent end
     43  1.4  rillig 
     44  1.4  rillig //indent run-equals-input
     45  1.4  rillig 
     46  1.4  rillig 
     47  1.4  rillig /*
     48  1.4  rillig  * Indent can cope with various syntax errors, which may be caused by
     49  1.4  rillig  * syntactic macros like 'forever' or 'foreach'.
     50  1.4  rillig  */
     51  1.4  rillig //indent input
     52  1.4  rillig #define forever for (;;)
     53  1.4  rillig #define foreach(list, it) for (it = list.first; it != NULL; it = it->next)
     54  1.4  rillig 
     55  1.4  rillig void
     56  1.4  rillig function(void)
     57  1.4  rillig {
     58  1.4  rillig 	forever
     59  1.4  rillig 		stmt();
     60  1.4  rillig 
     61  1.4  rillig 	forever {
     62  1.4  rillig 		stmt();
     63  1.4  rillig 	}
     64  1.4  rillig 
     65  1.4  rillig /* $ No space after 'foreach' since it looks like a function name. */
     66  1.4  rillig 	foreach(list, it)
     67  1.4  rillig 		println(it->data);
     68  1.4  rillig 
     69  1.4  rillig /* $ No space after 'foreach' since it looks like a function name. */
     70  1.4  rillig 	foreach(list, it) {
     71  1.4  rillig 		println(it->data);
     72  1.4  rillig 	}
     73  1.4  rillig }
     74  1.4  rillig //indent end
     75  1.4  rillig 
     76  1.4  rillig //indent run-equals-input
     77  1.4  rillig 
     78  1.4  rillig 
     79  1.4  rillig /*
     80  1.4  rillig  * Another variant of a 'for' loop, seen in sys/arch/arm/apple/apple_intc.c.
     81  1.4  rillig  */
     82  1.4  rillig //indent input
     83  1.4  rillig {
     84  1.4  rillig 	for (CPU_INFO_FOREACH(cii, ci)) {
     85  1.4  rillig 	}
     86  1.4  rillig }
     87  1.3  rillig //indent end
     88  1.1  rillig 
     89  1.3  rillig //indent run-equals-input
     90  1.5  rillig 
     91  1.5  rillig 
     92  1.6  rillig /* Ensure that the '*' after 'list_item' is a unary operator. */
     93  1.5  rillig //indent input
     94  1.5  rillig {
     95  1.5  rillig 	for (const list_item *i = first; i != NULL; i = i->next) {
     96  1.5  rillig 	}
     97  1.6  rillig 	for (list_item **i = first; i != NULL; i = i->next) {
     98  1.6  rillig 	}
     99  1.6  rillig 	for (list_item *const *i = first; i != NULL; i = i->next) {
    100  1.6  rillig 	}
    101  1.6  rillig 	for (const char *const *i = first; i != NULL; i = i->next) {
    102  1.6  rillig 	}
    103  1.5  rillig }
    104  1.5  rillig //indent end
    105  1.5  rillig 
    106  1.9  rillig //indent run-equals-input
    107