Home | History | Annotate | Line # | Download | only in unit-tests
      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