aboutsummaryrefslogblamecommitdiff
path: root/contrib/bmake/unit-tests/directive-for-break.mk
blob: d9290d38c215b21ab24742a857a267f58de2d6b7 (plain) (tree)
1
                                                                        


























































                                                                             





                                                        
# $NetBSD: directive-for-break.mk,v 1.5 2023/06/01 20:56:35 rillig Exp $
#
# Tests for .break in .for loops, which immediately terminates processing of
# the surrounding .for loop.


# .break terminates the loop early.
# This is usually done within a conditional.
.for i in 1 2 3 4 5 6 7 8
.  if $i == 3
I=	$i
.    break
I=	unreached
.  endif
.endfor
.if $I != "3"
.  error
.endif


# The .break only breaks out of the immediately surrounding .for loop, any
# other .for loops are continued normally.
.for outer in o1 o2 o3
.  for inner in i1 i2 i3
.    if ${outer} == o2 && ${inner} == i2
.      break
.    endif
COMBINED+=	${outer}-${inner}
.  endfor
.endfor
# Only o2-i2 and o2-i3 are missing.
.if ${COMBINED} != "o1-i1 o1-i2 o1-i3 o2-i1 o3-i1 o3-i2 o3-i3"
.  error
.endif


# A .break outside the context of a .for loop is an error.
.if $I == 0
# No parse error, even though the .break occurs outside a .for loop, since
# lines from inactive branches are only parsed as far as necessary to see
# whether they belong to an .if/.elif/.else/.endif chain.
.  break
.else
# expect+1: break outside of for loop
.  break
.endif


# Since cond.c 1.335 from 2022-09-02 and before cond.c 1.338 from 2022-09-23,
# the following paragraph generated the wrong error message '4294967294 open
# conditionals'.
.if 1
.  if 2
.    for var in value
.      if 3
.        break
.      endif
.    endfor
.  endif
.endif


.for i in 1
# expect+1: The .break directive does not take arguments
.  break 1
.endfor