1 1.5 rillig # $NetBSD: directive-for-break.mk,v 1.5 2023/06/01 20:56:35 rillig Exp $ 2 1.1 sjg # 3 1.2 rillig # Tests for .break in .for loops, which immediately terminates processing of 4 1.2 rillig # the surrounding .for loop. 5 1.1 sjg 6 1.1 sjg 7 1.2 rillig # .break terminates the loop early. 8 1.2 rillig # This is usually done within a conditional. 9 1.2 rillig .for i in 1 2 3 4 5 6 7 8 10 1.2 rillig . if $i == 3 11 1.2 rillig I= $i 12 1.2 rillig . break 13 1.2 rillig I= unreached 14 1.2 rillig . endif 15 1.2 rillig .endfor 16 1.2 rillig .if $I != "3" 17 1.2 rillig . error 18 1.1 sjg .endif 19 1.2 rillig 20 1.2 rillig 21 1.2 rillig # The .break only breaks out of the immediately surrounding .for loop, any 22 1.2 rillig # other .for loops are continued normally. 23 1.2 rillig .for outer in o1 o2 o3 24 1.2 rillig . for inner in i1 i2 i3 25 1.2 rillig . if ${outer} == o2 && ${inner} == i2 26 1.2 rillig . break 27 1.2 rillig . endif 28 1.2 rillig COMBINED+= ${outer}-${inner} 29 1.2 rillig . endfor 30 1.1 sjg .endfor 31 1.2 rillig # Only o2-i2 and o2-i3 are missing. 32 1.2 rillig .if ${COMBINED} != "o1-i1 o1-i2 o1-i3 o2-i1 o3-i1 o3-i2 o3-i3" 33 1.2 rillig . error 34 1.2 rillig .endif 35 1.2 rillig 36 1.1 sjg 37 1.2 rillig # A .break outside the context of a .for loop is an error. 38 1.1 sjg .if $I == 0 39 1.2 rillig # No parse error, even though the .break occurs outside a .for loop, since 40 1.2 rillig # lines from inactive branches are only parsed as far as necessary to see 41 1.2 rillig # whether they belong to an .if/.elif/.else/.endif chain. 42 1.2 rillig . break 43 1.1 sjg .else 44 1.2 rillig # expect+1: break outside of for loop 45 1.2 rillig . break 46 1.1 sjg .endif 47 1.3 rillig 48 1.3 rillig 49 1.3 rillig # Since cond.c 1.335 from 2022-09-02 and before cond.c 1.338 from 2022-09-23, 50 1.3 rillig # the following paragraph generated the wrong error message '4294967294 open 51 1.3 rillig # conditionals'. 52 1.3 rillig .if 1 53 1.3 rillig . if 2 54 1.3 rillig . for var in value 55 1.3 rillig . if 3 56 1.3 rillig . break 57 1.3 rillig . endif 58 1.3 rillig . endfor 59 1.3 rillig . endif 60 1.3 rillig .endif 61 1.4 rillig 62 1.4 rillig 63 1.4 rillig .for i in 1 64 1.4 rillig # expect+1: The .break directive does not take arguments 65 1.4 rillig . break 1 66 1.4 rillig .endfor 67