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