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